Beim Umgang mit C-Arrays ist es entscheidend, deren Verhalten bei der Übergabe an Funktionen zu verstehen. Diese Frage beleuchtet die überraschenden Unterschiede zwischen sizeof()-Werten von Arrays innerhalb und außerhalb von Funktionen.
Problem:
Im gegebenen C-Programm gibt es einen Array-Punkt von Größe 3 wird deklariert und ihre Größe wird mithilfe von sizeof(point)/sizeof(point[0]) korrekt ermittelt. Wenn jedoch dasselbe Array an die Funktion test() übergeben wird, gibt sizeof(arr) den falschen Wert 2 zurück.
Grund:
Wenn ein Array vorhanden ist Wenn es an eine Funktion in C übergeben wird, zerfällt es in einen Zeiger auf sein erstes Element. Folglich misst sizeof() für den Funktionsparameter die Größe des Zeigers und nicht das Array selbst. Dies führt zu einem fehlerhaften Ergebnis in der Funktion test().
Lösung:
Um dieses Problem zu beheben, sollte die Größe des Arrays als separater Parameter übergeben werden zur Funktion:
void test(int arr[], size_t elems) {}
In der Funktion main() kann die Arraygröße übergeben werden unter Verwendung von:
test(point, sizeof(point) / sizeof(point[0]));
Hinweis:
Es ist wichtig zu beachten, dass die Berechnung von sizeof(point)/sizeof(point[0]) nicht für die dynamische Zuordnung gilt Arrays, die nicht auf dem Stapel zugeordnet sind.
Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof()' einen unterschiedlichen Wert für C-Arrays innerhalb und außerhalb von Funktionen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!