Heim >Backend-Entwicklung >C++ >Warum gibt „sizeof()' unerwartete Ergebnisse für Array-Parameter in C-Funktionen zurück?
Warum sizeof() für Array-Parameter in C-Funktionen nicht gleich funktioniert
In C zerfallen Arrays in Zeiger, wenn sie an sie übergeben werden Funktionen, wodurch die Verwendung von sizeof() zur Bestimmung der Array-Größe unzuverlässig wird. Um dies zu verstehen, analysieren wir die folgende Funktion:
int length_of_array(int some_list[]) { return sizeof(some_list) / sizeof(*some_list); }
Problem mit dem Array-Parameter
Der Parameter some_list ist als Array deklariert, die Funktionssignatur jedoch schon entspricht effektiv int length_of_array(int* some_list). Dies liegt daran, dass Arrays in Funktionsparametern in Zeiger zerfallen.
Auswirkung auf sizeof()
Die Verwendung von sizeof(some_list) in diesem Kontext berechnet die Größe des Zeigers, was zu einem Ergebnis führt in einem Wert von 1. Die Division durch sizeof(*some_list) (die Größe einer Ganzzahl) ergibt 1.
Beispiel
Obwohl das Array num_list 15 Elemente enthält, gibt die Funktion length_of_array() im gegebenen Beispiel durchweg 1 zurück, wie in der Ausgabe zu sehen ist:
This is the output from direct coding in the int main function: 15 This is the length of the array determined by the length_of_array function: 1
Lösung mit Vorlage Funktionen
Um die Array-Größe in Funktionen zu bestimmen, kann man Vorlagenfunktionen verwenden und das Array als Referenz übergeben:
template<size_t N> int length_of_array(int (&arr)[N]) { return N; }
In diesem Fall erfasst der Vorlagenparameter N die bekannte Größe des Arrays, sodass sizeof() den korrekten Wert zurückgeben kann.
Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof()' unerwartete Ergebnisse für Array-Parameter in C-Funktionen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!