2016-11-17 7 views
-1

Это программа, которая была задана вопрос в интервью предсказать результатПриращения двойного указателя в C

main() 
    { 
    char **p = 0; 
    printf("%d\n", ++p); 
    } 

Может ли вы, пожалуйста, дайте мне знать, почему ответ-здесь?

+0

Надеюсь, вы критиковали код за то, что он не включает явный тип возвращаемого значения 'int' (требуется C99 или C11) или для исключения« return 0; »(в основном для C89, поскольку в противном случае возвращаемое значение из программы неопределенна, но вы можете опустить ее с конца 'main()' в C99 или C11, и результат будет таким, как если бы вы написали 'return 0;', хотя ИМО все же лучше всего включить его. –

ответ

0

Размер char - один байт, но размер указателя (в 32-битном коде) равен четырем байтам. Двойной указатель означает, что вы направляете в четыре байта количествах, таким образом

p ++ 

Перемещает указатель четыре байта (на предположительно следующий char *), таким образом, выход printf является 4.

1

char занимает 1 байт, но указатель на этот символ занимает 4 байта (int32). Итак, p на самом деле является указателем на int. Когда вы увеличиваете указатель, он перемещается вперед на количество байтов базового типа данных. Итак, p перемещается вперед на 4 байта.

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