sizeof()-Anomalie bei der Übergabe von Arrays an Funktionen in C
In C verhält sich der sizeof()-Operator anders, wenn es um Arrays geht an Funktionen übergeben werden, als wenn sie in der Hauptfunktion verwendet werden. Diese Diskrepanz kann für Anfänger verwirrend sein.
Richtige Array-Übergabe
Um ein Array ordnungsgemäß an eine Funktion zu übergeben, ist es wichtig, es als Referenz zu übergeben Syntax:
int length_of_array(int (&arr)[N]);
Wobei:
Verwenden von Sizeof() in Funktionen
Bei Verwendung von sizeof() innerhalb der Funktion gilt Folgendes:
sizeof(arr) == N * sizeof(int);
Erklärung:
Problem mit falscher Array-Übergabe
Im bereitgestellten Codeausschnitt übergibt die Funktion length_of_array() versehentlich das Array per Zeiger , etwa so:
int length_of_array(int some_list[]);
Diese falsche Übergabemethode führt zu Folgendem Problem:
Problemumgehung mithilfe von Vorlagen
Um diese Einschränkung zu überwinden, kann man einen vorlagenbasierten Ansatz wie diesen verwenden:
template<size_t N> int length_of_array(int (&arr)[N]) { std::cout << N << std::endl; // Will output the correct array size return N; }
Wichtiger Punkt:
Der wesentliche Unterschied zwischen den beiden Methoden besteht in der Übergabe von Arrays als Referenz und nicht in der Weitergabe Zeiger. Ersteres behält das Wissen über die Größe des Arrays bei, letzteres jedoch nicht.
Das obige ist der detaillierte Inhalt vonWarum verhält sich sizeof() anders, wenn Arrays an Funktionen in C übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!