Moje pytanie brzmi, jak dokładnie zachowuje się sizeof()
, gdy przekazany argument jest tablicą o zmiennej długości
z dynamiczną tablicą
.Zachowanie sizeof na tablicach o zmiennej długości (tylko C)
Rozważmy przykład:
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
W tym przykładzie jest to oczywiste, że wartość zwracana nie jest stałą czasu kompilacji. Ponieważ rozmiar zależy od wartości czasu wykonywania num_of_chars
.
cytat z normą C99 (6.5.3.4)
Operator
sizeof
otrzymuje się wielkość (w bajtach) jej argumentu operacji, który może być ekspresja lub nawiasach nazwa typu. Rozmiar jest określany na podstawie argumentu operandu . Wynikiem jest liczba całkowita. Jeśli typ operandu jest zmiennym typem zmiennej długości , operand jest oceniany; w przeciwnym razie argument nie zostanie oceniony, a wynik będzie stałą całkowitą.
Co mogę zrozumieć z [.... operand jest oceniana ....] jest to, że gdy argument przekazany do sizeof()
jest
dynamiczna tablica
zmiennej długości tablicą, sizeof()
„zachowuje się jak” a funkcja, a nie jako operator.
Czy moje zrozumienie jest właściwe?
'sizeof()' jest nadal operatorem; po prostu nie generuje stałej kompilacji, gdy argumentem jest tablica o zmiennej długości. –
Czy Twój kod się kompiluje? Dostaję "obiekt o zmiennej wielkości może nie być zainicjalizowany" błąd –