Heim > Backend-Entwicklung > C++ > Warum gibt „sizeof()' unerwartete Ergebnisse für Array-Parameter in C-Funktionen zurück?

Warum gibt „sizeof()' unerwartete Ergebnisse für Array-Parameter in C-Funktionen zurück?

Susan Sarandon
Freigeben: 2024-11-11 07:31:02
Original
407 Leute haben es durchsucht

Why Does `sizeof()` Return Unexpected Results for Array Parameters in C   Functions?

Warum sizeof() für Array-Parameter in C-Funktionen nicht gleich funktioniert

In C zerfallen Arrays in Zeiger, wenn sie an sie übergeben werden Funktionen, wodurch die Verwendung von sizeof() zur Bestimmung der Array-Größe unzuverlässig wird. Um dies zu verstehen, analysieren wir die folgende Funktion:

int length_of_array(int some_list[])
{
    return sizeof(some_list) / sizeof(*some_list);
}
Nach dem Login kopieren

Problem mit dem Array-Parameter

Der Parameter some_list ist als Array deklariert, die Funktionssignatur jedoch schon entspricht effektiv int length_of_array(int* some_list). Dies liegt daran, dass Arrays in Funktionsparametern in Zeiger zerfallen.

Auswirkung auf sizeof()

Die Verwendung von sizeof(some_list) in diesem Kontext berechnet die Größe des Zeigers, was zu einem Ergebnis führt in einem Wert von 1. Die Division durch sizeof(*some_list) (die Größe einer Ganzzahl) ergibt 1.

Beispiel

Obwohl das Array num_list 15 Elemente enthält, gibt die Funktion length_of_array() im gegebenen Beispiel durchweg 1 zurück, wie in der Ausgabe zu sehen ist:

This is the output from direct coding in the
int main function:
15
This is the length of the array determined
by the length_of_array function:
1
Nach dem Login kopieren

Lösung mit Vorlage Funktionen

Um die Array-Größe in Funktionen zu bestimmen, kann man Vorlagenfunktionen verwenden und das Array als Referenz übergeben:

template<size_t N>
int length_of_array(int (&amp;arr)[N])
{
    return N;
}
Nach dem Login kopieren

In diesem Fall erfasst der Vorlagenparameter N die bekannte Größe des Arrays, sodass sizeof() den korrekten Wert zurückgeben kann.

Das obige ist der detaillierte Inhalt vonWarum gibt „sizeof()' unerwartete Ergebnisse für Array-Parameter in C-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