Ansi C: имя массива хранится как переменная-указатель?
Скажем, я определяю массив:
int a[5];
А также
a = &a[0];
это адрес начала массива.
Мой вопрос, делает ли a
храниться где-то в памяти, как переменная указателя? Если это так, когда я пытаюсь напечатать адрес a
(&a
), почему я получаю такое же значение, как a
?
1 ответ
Когда вы объявляете массив, единственное хранилище, которое откладывается, - это сами элементы массива; для указателя на первый элемент не выделяется память.
Когда компилятор видит выражение массива, которое не является операндом sizeof
или же &
операторы или не является строковым литералом, используемым для инициализации другого массива в объявлении, он преобразует это выражение массива в выражение указателя, а значение выражения указателя будет адресом первого элемента в массиве.