Ansi C: имя массива хранится как переменная-указатель?

Скажем, я определяю массив:

int a[5];

А также

a = &a[0];

это адрес начала массива.

Мой вопрос, делает ли a храниться где-то в памяти, как переменная указателя? Если это так, когда я пытаюсь напечатать адрес a (&a), почему я получаю такое же значение, как a?

1 ответ

Когда вы объявляете массив, единственное хранилище, которое откладывается, - это сами элементы массива; для указателя на первый элемент не выделяется память.

Когда компилятор видит выражение массива, которое не является операндом sizeof или же & операторы или не является строковым литералом, используемым для инициализации другого массива в объявлении, он преобразует это выражение массива в выражение указателя, а значение выражения указателя будет адресом первого элемента в массиве.

Другие вопросы по тегам