Рассмотрим следующий код:разница Синтаксис между указателем на целочисленный массив и указатель на Int
int y = 20;
int *pointer_of_y = y; //Intentionally missed &
printf("%p\n",pointer_of_y);
printf("%p\n",&y);
printf("%d\n",*pointer_of_y);
Выход:
0x14 //Value of 20 in hex
0x7fff56747af8 //Address of Y Variable
Segmentation fault: 11 //Value at pointer: Due to missing &
Приведенный выше код не выполняется, потому что я пропустил & в указателе инициализация.
Давайте рассмотрим тот же код, если он инициализирован как массив.
int x[]= {10,20,30,40};
int *pointer_of_x = x;
printf("%p\n",pointer_of_x);
printf("%p\n",&x);
printf("%d\n",*pointer_of_x);
Выход:
0x7fff5b5eaad0 //Pointer value
0x7fff5b5eaad0 //Address of x
10 //Value at address pointed
Как второй пример работы, даже если я пропустил & в указатель инициализации. Почему создание массива имеет значение?
Я бы удалить «* имя *», поскольку название не имеет значения в данном контексте. – alk
@alk Я думаю, что это релевантно, но более точным будет * идентификатор * –
@FelixPalmen: В C имена или идентификаторы предназначены только для синтаксического анализатора. «* Выражение, оценивающее массив *». – alk