2016-03-10 3 views
1
int* p; 
printf("%d", sizeof(p)); 

Ответ будет 4 байта! Я использую CКогда размер указателя равен 2 байтам, а не 4 в C?

Как объявить указатель размера (2 байт)? Это зависит от компилятора? Насколько я знаю, C и ansi C одинаковы .. будет ли это отличаться в ansi C?

+2

Это зависит от платформы. – Gopi

+2

Правильный способ печати в современном C - 'printf ("% zu \ n ", sizeof (int *));', тип возвращаемого значения 'sizeof' не является' int'. – unwind

+1

Реальный вопрос: почему вам (кажется, вам) нужен указатель размера 2 байта? – LPs

ответ

2

Стандарт C намеренно не определяет размеры указателей.

Это равно позволяет варьировать размеры указателей для разных типов: sizeof(type1*) не обязательно совпадает с sizeof(type2*)!

Это позволяет C ориентировать самые обычные на самые экзотические архитектуры.

Наконец, ваше поведение программы не определено : вы должны использовать %zu как форматере для sizeof возвращения. (Обратите внимание, что sizeof(p)является определен, несмотря на p время неиницализированном - это потому, что sizeof(p) оцениваются в компиляция времени.)

2

Возможно, вы используете компилятор Turbo C?

Размер указателя и int 2 байта в компиляторе Turbo C на 32-битной машине Windows. Таким образом, размер указателя является специфичным для компилятора. Но, как правило, большинство компиляторов реализованы для поддержки 4-байтовой переменной указателя в 32-битной и 8-байтовой указательной переменной в 64-битной машине.

Смежные вопросы