Это программа, которая была задана вопрос в интервью предсказать результатПриращения двойного указателя в C
main()
{
char **p = 0;
printf("%d\n", ++p);
}
Может ли вы, пожалуйста, дайте мне знать, почему ответ-здесь?
Это программа, которая была задана вопрос в интервью предсказать результатПриращения двойного указателя в C
main()
{
char **p = 0;
printf("%d\n", ++p);
}
Может ли вы, пожалуйста, дайте мне знать, почему ответ-здесь?
Размер char
- один байт, но размер указателя (в 32-битном коде) равен четырем байтам. Двойной указатель означает, что вы направляете в четыре байта количествах, таким образом
p ++
Перемещает указатель четыре байта (на предположительно следующий char *
), таким образом, выход printf
является 4.
char занимает 1 байт, но указатель на этот символ занимает 4 байта (int32). Итак, p
на самом деле является указателем на int. Когда вы увеличиваете указатель, он перемещается вперед на количество байтов базового типа данных. Итак, p
перемещается вперед на 4 байта.
Надеюсь, вы критиковали код за то, что он не включает явный тип возвращаемого значения 'int' (требуется C99 или C11) или для исключения« return 0; »(в основном для C89, поскольку в противном случае возвращаемое значение из программы неопределенна, но вы можете опустить ее с конца 'main()' в C99 или C11, и результат будет таким, как если бы вы написали 'return 0;', хотя ИМО все же лучше всего включить его. –