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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
romedal
54 / 54 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
#1

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

03.11.2012, 22:27. Просмотров 520. Ответов 8
Метки нет (Все метки)

Здравствуйте. Подскажите, пожалуйста, почему в данном случае разница адресов равна 1, ведь под тип double выделяется 8 байт, поэтому как-бы разность смежных адресов должна давать 8 ?

C++
1
2
double g[] = {1,2,3,4,5,6,7,8};
vout<<&g[5] - &g[4]<<endl;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2012, 22:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разница адресов (C++):

C++ диапазон адресов памяти - C++
Доброго времени суток! Как вывести на эран диапазон адресов памяти для данного приложения в формате от..до? И еще хотелсь бы узнать...

Структура: база сотрудников и их адресов - C++
Очень нужно написать задачу!Пожалуйста помогите) Ввести массив записей, который содержит фамилии сотрудников и адреса. Записи упорядочить...

Список IP-адресов в локальной сети - C++
Как, зная адрес и маску подсети, с помощью Windows API получить список IP всех хостов? Пингование всех возможных адресов не годится.

Создать массив адресов функций - C++
Помогите пожалуйста создать массив адресов функций. Не могу понять как записать это //вид функции bool MyFunc() { ... } ...

Возврат адресов элементов массива - C++
Здравствуйте. Подскажите пожалуйста, почему массив srr выдает адреса, а массив crr какую-то белиберду... int main() { char crr =...

Поменять значения адресов двух указателей - C++
Добрый день. Суть программы - поменять первую строку массива с той, в которой встретиться наибольшее значение элемента. Но это не суть...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
03.11.2012, 22:42 #2
делится на sizeof. если те же адреса вычитать приведя их к char* результат будет равен восьми.
1
romedal
54 / 54 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
03.11.2012, 23:24  [ТС] #3
Зкачем адресс переменной типа double приводить к char* ?
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
03.11.2012, 23:26 #4
незачем конечно. я просто к тому, что результат операции вычитания зависит от типа указателя.
1
romedal
54 / 54 / 1
Регистрация: 18.03.2010
Сообщений: 345
Записей в блоге: 1
04.11.2012, 00:01  [ТС] #5
Цитата Сообщение от CEBEP Посмотреть сообщение
незачем конечно. я просто к тому, что результат операции вычитания зависит от типа указателя.
До меня дошло, спасибо )))
0
v.a.l.i.d
413 / 378 / 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
0
Croessmah
Эксперт CЭксперт С++
13228 / 7500 / 845
Регистрация: 27.09.2012
Сообщений: 18,419
Записей в блоге: 3
Завершенные тесты: 1
04.11.2012, 11:40 #7
Цитата Сообщение от V.A.L.I.D Посмотреть сообщение
Действительно почему 1, если разница между адресами 8? 0012FF48 - 0012FF40 = 8
Выше же СЕВЕР написал, что делиться на размер типа на который указывает указатель.
То есть результатом вычитания в данном случае является не количество байт между адресами, куда указывают указатели, а количество элементов данного типа
2
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
04.11.2012, 11:48 #8
Адресная арифметика в C и в C++ устроена так, что выражение
&g[5] - &g[4] вычисляется в количестве элементов данного типа.
2
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
04.11.2012, 12:33 #9
Ты же принимаешь за данное, что *( &g[ 4 ] + 1 ) возвращает значение 5-го элемента, так почему разница между адресами 4-го и 5-го должна быть равна чему-то иному?
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 12:33
Привет! Вот еще темы с ответами:

Реализовать перебор всех возможных IP-адресов (С++) - C++
Реализовать перебор всех возможных IP-адресов, начиная с 0.0.0.0, заканчивая 255.255.255.0. (проще говоря перебор всех возможных комбинаций...

Ping по списку адресов с применением system - C++
Здравствуйте. Возникла необходимость написать консольную программу, которая проверяет Ping-ом список адресов из файла и записывает...

Static_assert для сравнения адресов объектов - C++
Привет. Бывают такие случаи, когда вроде и понимаешь, но всё-равно что-то не получается... Почему в одном случае static_assert...

Можно ли обойтись без разыменования адресов на элементы - C++
Вот куски кода (полный код тут): // Double Bitset 85 bitset&lt;ULONG_MAX&gt; *first = new bitset&lt;ULONG_MAX&gt;(); 86 bitset&lt;ULONG_MAX&gt;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.11.2012, 12:33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru