Heim >Backend-Entwicklung >C++ >Wie bestimmen Sie die Größe eines Arrays, das an eine C-Funktion übergeben wird?

Wie bestimmen Sie die Größe eines Arrays, das an eine C-Funktion übergeben wird?

DDD
DDDOriginal
2024-11-08 14:38:02839Durchsuche

How Do You Determine the Size of an Array Passed to a C   Function?

Bestimmen der Array-Größe bei der Übergabe an Funktionen in C

Im Gegensatz zur Hauptfunktion, wo sizeof() direkt die Größe eines Arrays zurückgibt , die Übergabe eines Arrays an eine Funktion muss aufgrund des Array-Zerfalls in Zeiger berücksichtigt werden.

Array-Zerfall an Zeiger

Bei der Übergabe als Argument zerfallen Arrays in Zeiger auf ihr erstes Element. Das bedeutet, dass der Ausdruck sizeof(some_list) innerhalb einer Funktion die Größe des Zeigers und nicht die Größe des gesamten Arrays angibt.

Sizeof Ratio Problem

Using Der Ausdruck (sizeof(some_list)/sizeof(*some_list)) zur Berechnung der Array-Größe funktioniert nicht denn:

  • sizeof(some_list) gibt die Größe des Zeigers zurück, die normalerweise 4 Byte beträgt (für 32-Bit-Systeme).
  • sizeof(*some_list) gibt die Größe von zurück das einzelne Array-Element, das bei Ganzzahlen typischerweise 4 Bytes beträgt.

Dieses Verhältnis ergibt immer 1, unabhängig von der Array-Größe. Daher gibt die Funktion length_of_array immer 1 zurück.

Alternative Methode mit Vorlagen

Um die Größe eines Arrays bei Übergabe an eine Funktion genau zu bestimmen, verwenden Sie eine Vorlage:

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

Dieser Ansatz verwendet einen Vorlagenparameter N, um die Größe des Arrays anzugeben, die dann von zurückgegeben wird Funktion.

Das obige ist der detaillierte Inhalt vonWie bestimmen Sie die Größe eines Arrays, das an eine C-Funktion übergeben wird?. 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