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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 04:59:02318Durchsuche

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>

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!

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