Heim > Backend-Entwicklung > C++ > Warum gibt „sizeof()' einen unterschiedlichen Wert für C-Arrays innerhalb und außerhalb von Funktionen zurück?

Warum gibt „sizeof()' einen unterschiedlichen Wert für C-Arrays innerhalb und außerhalb von Funktionen zurück?

Barbara Streisand
Freigeben: 2024-12-21 16:47:09
Original
869 Leute haben es durchsucht

Why Does `sizeof()` Return a Different Value for C Arrays Inside and Outside Functions?

C-Arrays irreführende Sizeof() innerhalb einer Funktion

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) {}
Nach dem Login kopieren

In der Funktion main() kann die Arraygröße übergeben werden unter Verwendung von:

test(point, sizeof(point) / sizeof(point[0]));
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage