Поскольку a является постоянным указателем, указывающим на целое число a [0], не должен ли размерof (a) составлять 4 байта, а почему он равен 20 байтов?
Формулировкаэто важно.Как указано в комментариях, a
не является указателем, это массив.
a
преобразуется в указатель на свой первый элемент в Большинство случаи но не все .Одним из таких исключений является случай, когда это операнд оператора sizeof
.Таким образом, sizeof
будет похож на sizeof(int[5])
(а не sizeof(int*)
, как вы ожидали), который возвращает 5 * sizeof(int)
.Результат, как вы можете видеть, скорее всего будет 20
, так как sizeof(int)
равен 4. В большинстве систем
Примечание: Полагаю, вы имели в виду printf("%d", sizeof(a));
вместо использования трех спецификаторов формата.И вы должны использовать %zu
там, поскольку sizeof
возвращает size_t
, а не int
.