Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2015, 20:40   #11
Ka2R
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не исключено что здесь сработали какие-то настройки компилятора по выравниванию переменных. Отсюда и 4 байта - 32-битка.
Это не суть. Настроено там действительно 4 байта для инта, что можно увидеть как раз через sizeof.
Вопрос остается. Как найти разность адресов?
Ka2R вне форума Ответить с цитированием
Старый 05.03.2015, 21:15   #12
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Как найти разность адресов?
Вычесть один из другого
p51x вне форума Ответить с цитированием
Старый 05.03.2015, 21:24   #13
Ka2R
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вычесть один из другого
Так как же будет выглядеть операция? На &a-&b компилятор ругается. Какого типа получится ответ?
Ka2R вне форума Ответить с цитированием
Старый 05.03.2015, 21:44   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это не суть.
Суть. Еще какая.
Код:
char a='1';
int c=3;

int main()
{
    printf("%p-%p",&a,&c); getchar();
    return 0;
}
Ответ:
Цитата:
00402000-00402004

Process returned 0 (0x0) execution time : 9.532 s
Press any key to continue.
На скрине видно как символ выравнивается нулями до 4 байт:
Безымянный.jpg
Напиши аналог на ассемблере и посмотри как будет компилировать он для сравнения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.03.2015, 22:23   #15
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Сообщение от Ka2R Посмотреть сообщение
Так как же будет выглядеть операция? На &a-&b компилятор ругается. Какого типа получится ответ?
Код:
#include <iostream>

using namespace std;

char a='1';
int c=3;

int main()
{
   cout << reinterpret_cast<uint8_t *>(&a)-reinterpret_cast<uint8_t *>(&c) << endl; 
   
   return 0;
}
p51x вне форума Ответить с цитированием
Старый 06.03.2015, 08:45   #16
Ka2R
Пользователь
 
Регистрация: 19.10.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
#include <iostream>

using namespace std;

char a='1';
int c=3;

int main()
{
   cout << reinterpret_cast<uint8_t *>(&a)-reinterpret_cast<uint8_t *>(&c) << endl; 
   
   return 0;
}
Спасибо большое!
Но это все-таки с++, чем можно было бы заменить reinterpret_cast в Си?. То есть надо привести не к целому, а к указателю на целое?
Ka2R вне форума Ответить с цитированием
Старый 06.03.2015, 10:22   #17
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Как вариант
Код:
int n,a;
char b;
char *pa=(char*)&a,*pb=&b;

n=pa-pb;

printf("%i", n);
Но запомните, разность вычисляется в единицах длины указателей, т.е. если бы указатели имели тип int*, разность была бы в intах, то есть ее нужно было лы умножать на sizeof(int), чтобы получить размер в байтах
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 06.03.2015, 10:31   #18
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Цитата:
Сообщение от Ka2R Посмотреть сообщение
Но это все-таки с++, чем можно было бы заменить reinterpret_cast в Си?.
Простым приведением типов.

Цитата:
Сообщение от Ka2R Посмотреть сообщение
То есть надо привести не к целому, а к указателю на целое?
У вас, что такое &a по типу? А приводит надо к одному типу, все-таки это язык со строгой типизацией.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смещение pastuhdima Помощь студентам 0 19.11.2011 00:37
Смещение Зод Win Api 1 26.08.2011 13:40
Смещение компонента Volt Общие вопросы Delphi 9 20.01.2010 00:36
Смещение ячеек Zulius Microsoft Office Excel 3 26.11.2009 12:30
Смещение в WinHex bmw Софт 4 22.03.2009 02:16