Форум программистов, компьютерный форум CyberForum.ru

Разница адресов - C++

Восстановить пароль Регистрация
 
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
03.11.2012, 22:27     Разница адресов #1
Здравствуйте. Подскажите, пожалуйста, почему в данном случае разница адресов равна 1, ведь под тип double выделяется 8 байт, поэтому как-бы разность смежных адресов должна давать 8 ?

C++
1
2
double g[] = {1,2,3,4,5,6,7,8};
vout<<&g[5] - &g[4]<<endl;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
03.11.2012, 22:42     Разница адресов #2
делится на sizeof. если те же адреса вычитать приведя их к char* результат будет равен восьми.
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
03.11.2012, 23:24  [ТС]     Разница адресов #3
Зкачем адресс переменной типа double приводить к char* ?
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
03.11.2012, 23:26     Разница адресов #4
незачем конечно. я просто к тому, что результат операции вычитания зависит от типа указателя.
romedal
 Аватар для romedal
53 / 53 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
04.11.2012, 00:01  [ТС]     Разница адресов #5
Цитата Сообщение от CEBEP Посмотреть сообщение
незачем конечно. я просто к тому, что результат операции вычитания зависит от типа указателя.
До меня дошло, спасибо )))
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
04.11.2012, 11:12     Разница адресов #6
Мне вот что-то непонятно. Объясните поподробней
Вот что у меня программа выдает:
C++
1
2
3
    cout << &g[4] << endl;   // 0012FF40
    cout << &g[5] << endl;   // 0012FF48
    cout << &g[5] - &g[4];   // 1
Действительно почему 1, если разница между адресами 8? 0012FF48 - 0012FF40 = 8
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,899
Записей в блоге: 2
Завершенные тесты: 1
04.11.2012, 11:40     Разница адресов #7
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
Действительно почему 1, если разница между адресами 8? 0012FF48 - 0012FF40 = 8
Выше же СЕВЕР написал, что делиться на размер типа на который указывает указатель.
То есть результатом вычитания в данном случае является не количество байт между адресами, куда указывают указатели, а количество элементов данного типа
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,308
04.11.2012, 11:48     Разница адресов #8
Адресная арифметика в C и в C++ устроена так, что выражение
&g[5] - &g[4] вычисляется в количестве элементов данного типа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 12:33     Разница адресов
Еще ссылки по теме:

C++ Поменять значения адресов двух указателей
Ping по списку адресов с применением system C++
C++ C++ диапазон адресов памяти

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
04.11.2012, 12:33     Разница адресов #9
Ты же принимаешь за данное, что *( &g[ 4 ] + 1 ) возвращает значение 5-го элемента, так почему разница между адресами 4-го и 5-го должна быть равна чему-то иному?
Yandex
Объявления
04.11.2012, 12:33     Разница адресов
Ответ Создать тему
Опции темы

Текущее время: 06:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru