Мой вопрос в том, как именно sizeof()
ведет себя, когда переданный аргумент представляет собой массив переменной длины .
Рассмотрим пример:
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
В этом примере очевидно, что возвращаемое значение не является постоянной времени компиляции. Поскольку размер зависит от значения времени выполнения num_of_chars
.
Цитата из стандарта C99 (6.5.3.4):
Оператор
sizeof
дает размер (в байтах) своего операнда, который может быть выражение или имя в скобках типа. Размер определяется из тип операнда. Результат - целое число. Если тип операнда является тип массива переменной длины, операнд оценивается; в противном случае операнд не оценивается, а результат представляет собой целочисленную константу.
То, что я могу понять из [.... операнда оценивается....], заключается в том, что когда аргумент, переданный для sizeof()
, представляет собой массив переменной длины динамического массива, sizeof()
'ведет себя как функция, а не как оператор.
Насколько я понимаю?