Когда имя массива или имя функции «конвертируется» в указатель? (в С)
1) Заблуждение:
Всякий раз, когда массив объявлен на языке C, указатель на первый элемент массивасозданный (имя массива) неявно.(Это? Я нене думаю!)
Первые две строчкиэтот страница (хотя я не уверен в правильности информации) заявляет то же самое.
Как мы видели, когда мы объявляем массив, для ячеек массива выделяется непрерывный блок памяти, и ячейка указателя (соответствующего типа) также выделяется и инициализируется так, чтобы указывать на первую ячейку массива.
Но когда я вывожу адрес, содержащийсяв этот указатель и адресиз этот указатель, они оказываются одинаковыми. Итак, я думаю, что указатель несозданный в конце концов.
2) Я взял это изэтот вопрос.
В большинстве случаев имена массивов преобразуются в указатели.Может ли кто-нибудь дать подробное объяснениеКОГДА компилятор решаетперерабатывать имя массива в указатель, иЗАЧЕМ?
PS: Пожалуйста, объясните то же самое сфункции, Также вэтот ссылка, пример был приведен, говоря, что для функцииint square(int,int)
, любой из,,,square
&square
*square
**square
ссылается на тот же указатель функции. Вы можете объяснить?
Изменить: фрагмент кода
int fruits[10];
printf("Address IN constant pointer is %p\n", fruits);
printf("Address OF constant pointer is %p\n", &fruits);
Выход :
Address IN constant pointer is 0xbff99ca8
Address OF constant pointer is 0xbff99ca8