Все указатели довольно часто имеют одинаковый размер, но технически возможно, что типы указателей могут иметь разные размеры.
Но затем я наткнулся на следующее утверждение:
Хотя указатели - это все одинакового размера, поскольку они просто хранят адрес памяти, мы должны знать, на что они указывают.
Я не уверен, какое из приведенных выше утверждений верно. Второе цитируемое утверждение выглядит так, как будто оно взято из заметок по C++ из компьютерных наук Университета штата Флорида.
Вот почему, по моему мнению, все указатели должны иметь одинаковый размер:
1) Скажем, так:
Код: Выделить всё
int i = 0;
void* ptr = &i;
Теперь я думаю, что здесь есть проблема, заключающаяся в том, что в правой части есть int*, имеющий размер 4 байта, а в левой части у нас есть void*, имеющий размер 2 байта. Таким образом, когда происходит неявное преобразование из int* в void*, произойдет некоторая потеря информации.
2) Все указатели содержат адреса. Поскольку для данной машины все адреса имеют одинаковый размер, вполне естественно (логично), что все указатели также должны иметь одинаковый размер.
Поэтому я думаю, что вторая цитата верна.
Мой первый вопрос: что говорит об этом стандарт C++?
Мой второй вопрос: если стандарт C++ допускает указатели разного размера, то есть ли для этого причина? Я имею в виду, что разрешение указателям иметь разный размер кажется мне немного неестественным (учитывая два момента, которые я объяснил выше). Итак, я почти уверен, что комитет по стандартизации, должно быть, уже подумал об этом (что указатели могут иметь разные размеры) и уже имел причину разрешить указателям иметь разные размеры. Обратите внимание, что я задаю этот (второй вопрос) только в том случае, если стандарт разрешает указателям иметь разный размер.
Подробнее здесь: https://stackoverflow.com/questions/718 ... -size-in-c
Мобильная версия