Warum die Übergabe eines Arrays an eine Funktion seinen sizeof()-Wert ändert
In der C-Programmierung kann die Übergabe eines Arrays an eine Funktion dazu führen unerwartetes Verhalten bezüglich seiner Größe beim Abrufen mit sizeof(). Diese Besonderheit ergibt sich aus dem Konzept des Array-Zerfalls.
Array-Zerfall erklärt
Wenn ein Array an eine Funktion übergeben wird, wird es implizit konvertiert oder „zerfällt“. ein Zeiger auf sein erstes Element. Diese Konvertierung verbirgt effektiv die wahre Größe des Arrays, da sizeof() jetzt auf den Zeiger und nicht auf das ursprüngliche Array wirkt.
Beispiel mit Code
Bedenken Sie den folgenden Codeausschnitt :
#include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf("%d\n", arrSize); // 2 (incorrect) } int main(int argc, const char * argv[]) { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct) test(point); return 0; }
In diesem Beispiel werden zwei Aufrufe von sizeof() durchgeführt. Der erste Aufruf innerhalb der main()-Funktion gibt die Größe des Array-Punkts korrekt als 3 zurück. Der zweite Aufruf innerhalb der test()-Funktion gibt jedoch fälschlicherweise 2 zurück. Diese Ergebnisinkongruenz tritt auf, weil der Array-Punkt in einen Zeiger umgewandelt wurde, wenn es wurde an die Funktion übergeben.
Array-Zerfall überwinden
Um die wahre Größe eines Arrays bei der Übergabe an eine Funktion beizubehalten, muss man explizit an übergeben zusätzlicher Parameter zur Funktion, der die Größe angibt.
void test(int arr[], size_t elems) { /* ... */ } int main(int argc, const char * argv[]) { int point[3] = {50, 30, 12}; /* ... */ test(point, sizeof(point)/sizeof(point[0])); /* ... */ }
Durch die Übergabe der Größe als separaten Parameter kann die Funktion die wahre Größe des Arrays genau bestimmen und entsprechende Vorgänge ausführen.
Hinweis:
Der Trick sizeof(point)/sizeof(point[0]) zum Ermitteln der Array-Größe funktioniert möglicherweise nicht immer für dynamisch zugewiesene Arrays Arrays.
Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof()' unterschiedliche Werte für Arrays innerhalb und außerhalb einer Funktion in C zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!