2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки





Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: C/С++ массивы, указатели
Сообщение06.09.2016, 02:36 
Аватара пользователя


07/02/12
772
Питер
Сейчас все благоразумные среды живут в Flat-режиме, включая мобильные. Потому конверсия указателя в Int(64) и обратно впринципе на практике работает. По стандарту же сравнивать указатели на больше/меньше, а тем более, конвертировать в числа, можно только в рамках одного массива. На практике это была проблема во времена 640K DOS (часто решалась ad-hoc-ами, знающими реальную адресацию), и еще большей проблемой во времена первых 16-ти разрядных OS в защищенном режиме (вроде Win3.x), где с представлением о линейной адресации было туго.

 Профиль  
                  
 
 Re: C/С++ массивы, указатели
Сообщение01.01.2017, 04:09 


01/01/17
5
bayah в сообщении #1148896 писал(а):
Есть массив:
int a[2] = {0,1};

Почему нижеприведенные строчки указывают на один и тот же адрес?
cout<<a<<endl;
cout<<&a<<endl;

В первой строчке происходит вызов оператора
Код:
basic_ostream& operator<<( const void* value );
и массив распадается до указателя на первый элемент.
Во второй строчке явно берётся адрес массива == адрес первого элемента.

 Профиль  
                  
 
 Re: C/С++ массивы, указатели
Сообщение01.01.2017, 06:16 


01/01/17
5
Я не совсем аккуратно написал.
В первом случае происходит сначала array-to-pointer conversion, что даёт int*, после чего происходит pointer conversion и int* превращается в void*.
Во втором случае &a даёт нам указатель на массив int(*)[2], после чего происходит pointer conversion и этот указатель превращается в void*.

Кстати, то, что указатели преобразуются в числовое значение не "напрямую", а проходя через void*, даёт, мне кажется, гарантии того, что числовые значения будут совпадать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3

Модераторы: Toucan, maxal, Karan, PAV, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group