Heim > Backend-Entwicklung > C++ > Warum kann ich in C ein mehrdimensionales Array nicht als Array von Zeigern an eine Funktion übergeben?

Warum kann ich in C ein mehrdimensionales Array nicht als Array von Zeigern an eine Funktion übergeben?

Patricia Arquette
Freigeben: 2024-12-15 15:03:22
Original
803 Leute haben es durchsucht

Why Can't I Pass a Multidimensional Array to a Function as an Array of Pointers in C  ?

Verstehen der Unfähigkeit, mehrdimensionale Arrays an Funktionen zu übergeben

Betrachten Sie den folgenden Codeausschnitt:

#include <stdio.h>
void print(int *arr[], int s1, int s2) {
    int i, j;
    for(i = 0; i < s1; i++)
        for(j = 0; j < s2; j++)
            printf("%d, ", *((arr + i) + j));
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}
Nach dem Login kopieren

Dieser Code zielt darauf ab, ein mehrdimensionales Array a an eine Funktion print zu übergeben, die ein Array von int-Zeigern int *arr[] akzeptiert. In C generiert dieser Code jedoch den folgenden Fehler:

cannot convert `int (*)[4]' to `int**' for argument `1' to
`void print(int**, int, int)'
Nach dem Login kopieren

Erklärung:

Der Kern dieses Problems liegt in den inkompatiblen Datentypen. Ein mehrdimensionales Array im C-Stil wie a kann nicht direkt in einen Zeiger auf ein Array von Zeigern int *arr[] konvertiert werden. In C ist der Datentyp von a int[4][4], was ein zweidimensionales Array von Ganzzahlen darstellt. Andererseits ist int *arr[] ein Zeiger auf ein Array von Ganzzahlen, wobei jedes Element ein Zeiger auf eine Ganzzahl ist.

Lösung:

Zu Um dieses Problem zu beheben und ein mehrdimensionales Array an eine Funktion zu übergeben, die ein Array von int-Zeigern übernimmt, können Sie den Code ändern, um das mehrdimensionale Array explizit in ein Array von Zeigern umzuwandeln. Dies kann erreicht werden, indem eine Technik wie die in der akzeptierten Antwort auf die Frage „Konvertieren mehrdimensionaler Arrays in Zeiger in C“ beschriebene verwendet wird.

Zusätzliche Hinweise:

  • Der im ersten Beispiel dargestellte Code zeigt aufgrund eines zusätzlichen Fehlers im Druckcode unerwartetes Verhalten in C.
  • Die Initialisierung ist von entscheidender Bedeutung Das Array a mit Werten ungleich Null, um die Auswirkungen des Fehlers bei der Array-Übergabe zu beobachten.
  • Der Fehler bei der Array-Übergabe wird in C aufgrund des Druckfehlers maskiert.
  • C-Fehlermeldungen werden angezeigt ein klarer Hinweis auf das Konvertierungsproblem, während C-Compiler möglicherweise Warnungen ausgeben, die fälschlicherweise ignoriert werden können.

Das obige ist der detaillierte Inhalt vonWarum kann ich in C ein mehrdimensionales Array nicht als Array von Zeigern an eine Funktion übergeben?. 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