Выбор ответа 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] в…
Варианты ответа
- 40: десять
intпо 4 байта, размер берётся из объявления - 8: параметр на самом деле имеет тип
int*, а не массивправильный ответ - 10:
sizeofмассива-параметра возвращает число элементов - Зависит от фактического массива, переданного при вызове
Разбор
Параметр-массив переписывается компилятором в указатель на первый элемент, число 10 игнорируется. sizeof(int*) на 64-битной Linux равен 8, GCC даже предупреждает -Wsizeof-array-argument.
- 40 вернул бы
sizeofнастоящего массиваint a[10]в месте его объявления. - Число элементов и размер фактического аргумента внутрь функции не передаются. Для этого есть
std::spanили ссылкаint (&arr)[10].
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Указатели и ссылки»
- Удалить узлы списка с заданными значениями
- Кольцевой буфер для логов
- Повернуть матрицу, хранящуюся одним буфером
- Откуда берутся висячие ссылки
- Сопоставьте объявление и его смысл
- nullptr против NULL в перегрузке
- Указатель «за последним»
- Что выведет: арифметика указателей и ссылки