Ü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>
Dieser Prototyp generiert einen Fehler von g:
error: expected ‘,’ or ‘...’ before ‘*’ token
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>
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>
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!