Heim > Backend-Entwicklung > C++ > Wie übergebe ich Referenzen auf zweidimensionale Arrays in C korrekt?

Wie übergebe ich Referenzen auf zweidimensionale Arrays in C korrekt?

Mary-Kate Olsen
Freigeben: 2024-11-07 04:59:02
Original
383 Leute haben es durchsucht

How to Correctly Pass References to Two-Dimensional Arrays in C  ?

Übergabe von Referenzen auf zweidimensionale Arrays in C

In C kann die Übergabe von Referenzen auf zweidimensionale Arrays an Funktionen schwierig sein. Betrachten Sie den folgenden Code:

<code class="cpp">const int board_width = 80;
const int board_height = 80;
void do_something(int[board_width][board_height]& array);  //function prototype</code>
Nach dem Login kopieren

Dieser Prototyp generiert einen Fehler von g:

error: expected ‘,’ or ‘...’ before ‘*’ token
Nach dem Login kopieren

Erklärung und Lösung des Fehlers

Dieser Fehler zeigt an dass an der Stelle, an der das Sternchen (*) steht, etwas fehlt. Die Deklaration der Referenz sollte stattdessen die folgende Syntax verwenden:

<code class="cpp">void do_something(int (&array)[board_width][board_height]);</code>
Nach dem Login kopieren

Durch das Hinzufügen von Klammern um das Array erstellen wir eine Referenz auf das gesamte zweidimensionale Array. Dadurch kann die Funktion do_something das Array direkt ändern.

Unterschiede zur Zeigerdeklaration

Beachten Sie, dass sich dies von der Deklaration des Parameters mit einem Zeigertyp unterscheidet:

<code class="cpp">void do_something(int array[board_width][board_height]);</code>
Nach dem Login kopieren

In diesem Fall wird nur ein Zeiger auf das erste Unterarray des zweidimensionalen Arrays übergeben, board_width wird ignoriert. Dies liegt daran, dass Arrays in C bei der Übergabe an Funktionen in Zeiger zerfallen. Da im Prototyp explizit eine Referenz angefordert wird, ist diese Deklaration falsch.

Größenberechnung

Bei Verwendung einer Referenz ergibt sizeof(array) innerhalb der Funktion sizeof (int[board_width][board_height]). Im Gegensatz dazu würde die Verwendung der zeigerbasierten Deklaration zu sizeof(int(*)[board_height]) führen, was der Größe eines Zeigers entspricht.

Das obige ist der detaillierte Inhalt vonWie übergebe ich Referenzen auf zweidimensionale Arrays in C korrekt?. 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