Насколько я понимаю, массивы были просто постоянными указателями на последовательность значений, и когда вы объявили массив в C, вы объявляли указатель и выделяли пространство для последовательности, на которую он указывает.
Но это меня смущает: следующий код:
char y[20];
char *z = y;
printf("y size is %lu\n", sizeof(y));
printf("y is %p\n", y);
printf("z size is %lu\n", sizeof(z));
printf("z is %p\n", z);
при компиляции с Apple GCC дает следующий результат:
y size is 20
y is 0x7fff5fbff930
z size is 8
z is 0x7fff5fbff930
(моя машина 64 бит, указатели имеют длину 8 байтов).
Если 'y' является константным указателем, то почему он имеет размер 20, например, последовательность значений, на которые он указывает? Является ли имя переменной "y" заменено адресом памяти во время компиляции всякий раз, когда это подходит? Являются ли массивы тогда своего рода синтаксическим сахаром в C, который только что переводится в материал указателя при компиляции?