Heim  >  Artikel  >  Backend-Entwicklung  >  Warum schlägt eine bereichsbasierte for-Schleife fehl, wenn sie für ein Array verwendet wird, das an eine Nicht-Hauptfunktion in C übergeben wird?

Warum schlägt eine bereichsbasierte for-Schleife fehl, wenn sie für ein Array verwendet wird, das an eine Nicht-Hauptfunktion in C übergeben wird?

Linda Hamilton
Linda HamiltonOriginal
2024-10-25 02:15:29986Durchsuche

Why does a range-based for-loop fail when used on an array passed to a non-main function in C  ?

Bereichsbasierte For-Schleife für ein Array, das an eine Nicht-Hauptfunktion übergeben wird

Frage:

In einem C-Projekt schlägt die Kompilierung fehl, wenn versucht wird, eine bereichsbasierte for-Schleife für ein Array zu verwenden, das an eine Nicht-Hauptfunktion übergeben wird. Der Code gibt einen Fehler aus, der darauf hinweist, dass kein passender Funktionsaufruf für begin(int*&) gefunden werden kann, während versucht wird, auf die bereichsbasierte for-Schleife in der Nicht-Hauptfunktion zuzugreifen.

Antwort:

Wenn Sie ein Array an eine Nicht-Hauptfunktion übergeben, zerfällt das Array in einen Zeiger und verliert wichtige Informationen über seine Größe. So aktivieren Sie eine bereichsbasierte for-Schleife innerhalb der Nicht-Hauptfunktion:

  1. Array-Referenz verwenden: Übergeben Sie das Array als Referenz anstelle eines Zeigers. Dadurch bleiben die Größeninformationen erhalten:

    <code class="cpp">void foo(int (&&bar)[3]);</code>
  2. Generischer Ansatz:Verwenden Sie eine Funktionsvorlage mit einem Vorlagenparameter, der die Array-Größe angibt. Dieser Ansatz ermöglicht die Übergabe unterschiedlicher Array-Größen:

    <code class="cpp">template <std::size_t array_size>
    void foo(int (&&bar)[array_size]);</code>

Durch die Beibehaltung der Größeninformationen kann die bereichsbasierte For-Schleife die Array-Elemente innerhalb der Nicht-Array-Elemente korrekt durchlaufen. Hauptfunktion.

Das obige ist der detaillierte Inhalt vonWarum schlägt eine bereichsbasierte for-Schleife fehl, wenn sie für ein Array verwendet wird, das an eine Nicht-Hauptfunktion in C ü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