Meine Frage ist, wie genau sizeof()
verhält, wenn übergeben Argument ist ein
dynamisches Array
variabler Länge Array.Verhalten der sizeof auf Arrays mit variabler Länge (nur C)
Nehmen wir ein Beispiel betrachten:
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
In diesem Beispiel ist es offensichtlich, dass Rückgabewert kein Kompilierung konstant ist. Die Größe hängt vom Laufzeitwert num_of_chars
ab.
Ein Zitat aus C99-Standard (6.5.3.4):
sizeof
Der Operator liefert die Größe (in Bytes) den Operanden, der eine Expression oder der geklammerten Name eines Typs sein kann. Die Größe wird aus dem Operanden des Operanden ermittelt. Das Ergebnis ist eine ganze Zahl. Wenn der Typ des Operanden ein Array-Typ variabler Länge ist, wird der Operand ausgewertet; Andernfalls wird der Operand nicht ausgewertet und das Ergebnis ist eine Ganzzahlkonstante.
Was kann ich verstehen, von [.... der Operand ausgewertet wird ....], dass, wenn das für sizeof()
gebene Argument ist eine
dynamischer Array
variabler Länge Array, sizeof()
‚verhält sich wie‘ ein Funktion und nicht als Operator.
Ist mein Verständnis richtig?
'sizeof()' ist immer noch ein Operator; Es generiert nur keine Kompilierzeitkonstante mehr, wenn das Argument ein Array variabler Länge ist. –
kompiliert Ihr Code? Ich bekomme ein 'Variable-Size-Objekt möglicherweise nicht initialisiert' Fehler –