Heim > Backend-Entwicklung > C++ > Warum funktioniert die Übergabe eines 2D-Arrays im C-Stil an eine Funktion, die „int' erwartet, in C nicht?

Warum funktioniert die Übergabe eines 2D-Arrays im C-Stil an eine Funktion, die „int' erwartet, in C nicht?

Linda Hamilton
Freigeben: 2024-12-21 03:07:13
Original
1065 Leute haben es durchsucht

Why Doesn't Passing a C-Style 2D Array to a Function Expecting `int` Work in C  ?

Warum die Übergabe eines mehrdimensionalen Arrays im C-Stil an eine Funktion, die ein Array von int* übernimmt, in C fehlschlägt

Problem:

In C führt die Übergabe eines mehrdimensionalen Arrays im C-Stil an eine Funktion, die ein Array von int* erwartet, zu einem Compiler Fehler.

Grund:

Ein mehrdimensionales Array wie int4 kann nicht direkt in einen Zeiger vom Typ int konvertiert werden*, was int arr bedeutet [] stellt in der Funktion dar Erklärung.

Beispiel:

#include<stdio.h>
void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Error in C++
}
Nach dem Login kopieren

C meldet einen Fehler:

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

Lösung:

In C und C ist die Übergabe eines mehrdimensionalen Arrays als int** nicht gültig. Um dies effektiv zu erreichen, muss das Array mit der folgenden Technik in einen Zeiger umgewandelt werden:

  • Initialisieren Sie das Array auf einen anderen Wert (z. B. {1}), um zu überprüfen, ob C das Array nicht übersehen hat vorübergehender Fehler.
  • Ändern Sie die printf-Anweisung, um korrekt auf Elemente zuzugreifen ((arr i) j) oder arri.
  • Verwenden Sie die im Stack Overflow-Thread „Konvertieren mehrdimensionaler Arrays in Zeiger in c“ vorgestellte Problemumgehung.

Hinweis:

Das Ignorieren von Compiler-Warnungen oder das Versäumnis, die ordnungsgemäße Konvertierung zu implementieren, kann dazu führen, dass dies der Fall ist Dies führt zu undefiniertem Verhalten und unvorhersehbaren Ergebnissen.

Das obige ist der detaillierte Inhalt vonWarum funktioniert die Übergabe eines 2D-Arrays im C-Stil an eine Funktion, die „int' erwartet, in C nicht?. 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