Array-Größendiskrepanz bei Übergabe an Funktion
Der sizeof()-Operator meldet einen ungenauen Wert für ein Array, wenn er an eine Funktion übergeben wird. Betrachten 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 point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct) test(point); return 0; }
Beim Aufruf von main() gibt der Operator sizeof() die Größe des Arrays genau an, aber innerhalb der Funktion test() unterschätzt er die Größe um ein Element . Diese Ungleichheit entsteht, weil ein Array, wenn es an eine Funktion in C übergeben wird, in einen Zeiger zerfällt, der auf das erste Element des Arrays verweist. Folglich berechnet sizeof(arr) die Größe des Zeigers und nicht die Größe des zugrunde liegenden Arrays.
Um dieses Problem zu beheben, sollte die Größe des Arrays explizit als separater Parameter an die Funktion übergeben werden:
void test(int arr[], size_t elems) { // ... } int main() { int point[3] = {50, 30, 12}; // ... test(point, sizeof(point) / sizeof(point[0])); // ... }
Alternativ kann für dynamisch zugewiesene Arrays (hier nicht gezeigt) die Standard-C-Bibliotheksfunktion stdlib.h verwendet werden, um die Arrays genau abzurufen Größe.
Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof' eine falsche Array-Größe zurück, wenn ein Array an eine C-Funktion übergeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!