Heim >Backend-Entwicklung >C++ >Warum gibt „sizeof' unterschiedliche Array-Größen innerhalb und außerhalb einer C-Funktion an?
Warum die Berechnung der Array-Größe innerhalb einer Funktion in C unterschiedlich ist
Bei der Übergabe eines Arrays an eine Funktion zerfällt C das Array automatisch in einen Zeiger zu seinem ersten Element. Dieser Zeiger trägt die Adresse des ersten Array-Elements, aber nicht seine Größe.
Betrachten Sie dieses Beispiel:
#include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); // Incorrect printf("%d\n", arrSize); } int main() { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); // Correct printf("%d\n", arrSize); // Prints 3 test(point); return 0; }
In main gibt sizeof(point) korrekt die Größe des gesamten Arrays an ( 12 Byte). Allerdings ergibt sizeof(arr) im Test 4 Bytes (die Größe eines ganzzahligen Zeigers), was zu einer falschen Berechnung der Array-Größe führt (ein Element fehlt).
Um dieses Problem zu beheben, muss die Array-Größe explizit angegeben werden als separater Parameter übergeben:
void test(int arr[], size_t elems) { int arrSize = elems; /* ... */ } int main() { int point[3] = {50, 30, 12}; /* ... */ test(point, sizeof(point) / sizeof(point[0])); /* ... */ }
Beachten Sie, dass sizeof(point)/sizeof(point[0]) für stapelzugewiesene Arrays funktioniert, aber nicht für dynamisch zugewiesene Arrays, da dies der Fall ist beruht auf dem zugrunde liegenden Zerfallsmechanismus.
Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof' unterschiedliche Array-Größen innerhalb und außerhalb einer C-Funktion an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!