Обычно делают так:
sizeof
Но ведь,
Ответ
Если name_array объявлен именно как массив, то объект name_array - не указатель на первый элемент. name_array - это именно массив. Значение типа массив, однако, может неявно приводиться к указателю на свой первый элемент. И в языке С массив действительно сам по себе неявно приводится к указателю на свой первый элемент во всех контекстах, за исключением четырех
Операнд оператора sizeof
Операнд унарного оператора &
Строковый литерал-инициализатор для символьного массива
Операнд оператора _Alignof
Ваш случай - как раз один из тех, в которых массив остается массивом. Поэтому sizeof возвращает размер массива, а не размер указателя.
Ваше замечание про "Нигде же не хранится его размер" не совсем понятно. "Классический" sizeof является выражением (константой) времени компиляции. Размер любого типа, разумеется, известен компилятору на стадии компиляции. sizeof же примененный к VLA вычисляется во время выполнения, но размер VLA как раз таки действительно хранится во время выполнения.
Комментариев нет:
Отправить комментарий