Выбор ответа Middle Указатели и ссылки спрашивают часто обновлено

sizeof массива-параметра

Вопрос

Чему равно sizeof(arr) внутри void f(int arr[10]) на 64-битной Linux?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 8: параметр на самом деле имеет тип int, а не массив. Параметр-массив переписывается компилятором в указатель на первый элемент, число 10 игнорируется. sizeof(int) на 64-битной Linux равен 8, GCC даже предупреждает -Wsizeof-array-argument. - 40 вернул бы sizeof настоящего массива int a[10] в…

Варианты ответа

  1. 40: десять int по 4 байта, размер берётся из объявления
  2. 8: параметр на самом деле имеет тип int*, а не массивправильный ответ
  3. 10: sizeof массива-параметра возвращает число элементов
  4. Зависит от фактического массива, переданного при вызове

Разбор

Параметр-массив переписывается компилятором в указатель на первый элемент, число 10 игнорируется. sizeof(int*) на 64-битной Linux равен 8, GCC даже предупреждает -Wsizeof-array-argument.

  • 40 вернул бы sizeof настоящего массива int a[10] в месте его объявления.
  • Число элементов и размер фактического аргумента внутрь функции не передаются. Для этого есть std::span или ссылка int (&arr)[10].

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме