Heim >Backend-Entwicklung >C++ >Wie kann ich die Größe eines an eine C-Funktion übergebenen Arrays zuverlässig bestimmen?

Wie kann ich die Größe eines an eine C-Funktion übergebenen Arrays zuverlässig bestimmen?

Susan Sarandon
Susan SarandonOriginal
2024-12-30 02:53:28806Durchsuche

How Can I Reliably Determine the Size of an Array Passed to a C   Function?

Bestimmen der Array-Größe in einer übergebenen Funktion

Das Problem tritt in C auf, wo die Bestimmung der Größe eines an eine Funktion übergebenen Arrays ein Problem darstellt Herausforderung, da sizeof die Länge des Arrays nicht genau erfassen kann.

Eine beliebte Lösung schlägt vor, die Schleife zu beenden, wenn das Array-Element array[i] erreicht NULL. Dieser Ansatz kann jedoch zu Fehlern führen, da array[i] manchmal zufällige Müllwerte am Ende des Arrays enthält.

Vorlagenbasierte Lösung mit Array-Referenzen

C bietet eine zuverlässigere Lösung durch Vorlagen und Array-Referenzen:

template <typename T, int N>
void func(T (&a)[N]) {
    for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}

Diese vorlagenbasierte Funktion benötigt ein Array a vom Typ T mit einer festen Größe von N. Durch die Verwendung des Referenzoperators & wird das ursprüngliche Array an a gebunden und ermöglicht so den Zugriff auf die Elemente des Arrays, ohne die Größe explizit zu übergeben.

Um diese Funktion zu verwenden, deklarieren Sie einfach ein Array und übergeben es als Referenz:

int x[10];
func(x);

Es ist wichtig zu beachten, dass diese Lösung nur für Arrays gilt, nicht für Zeiger. Für zeigerbasierte Arrays ist die Verwendung des Standard Template Library (STL)-Containers std::vector eine bessere Option, der Größen- und Elementzugriffsfunktionen bietet.

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe eines an eine C-Funktion übergebenen Arrays zuverlässig bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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