Как компилятор интерпретирует, когда оператор sizeof () выполняется над массивом в C - PullRequest
0 голосов
/ 06 октября 2018

Скажем, у меня есть код:

int a[5];
printf("%d %d %d",sizeof(a));

Вывод:

20

Поскольку a является постоянным указателем, указывающим на целое число a [0], mustnРазве размер (а) не будет 4 байта, а почему это 20 байтов?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Это массив, поэтому есть 5 элементов в виде 0,1,2,3,4, поэтому один элемент равен 4 байта, тогда 5 элементов должны быть 20 байтов.Вы можете получить sizeOf как

printf("%d", sizeof(a));

0 голосов
/ 06 октября 2018

Поскольку 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...