2-dimensionales Array an Funktion übergeben
2-dimensionales Array an Funktion übergeben
Ich packe es gerade nicht, ein 2-dimensionales char-Array an eine Funktion zu übergeben und dann den Inhalt auszugeben. Wie muss die Funktion deklariert und aufgerufen werden? Am besten würde mir ein kleines Beispiel helfen. Ich habe gerade schon x Varianten durch, mit eckigen Klammern, ohne eckigen Klammern, mit Angabe einer Dimension, mit Angaber beider Dimensionen, auch ohne Dimension. Mit &-Operator und ohne. Nichts funktioniert.
Re: 2-dimensionales Array an Funktion übergeben
C kennt keine Wertübergabe von Arrays. Auch wenn's so aussieht:Orioner hat geschrieben: ↑Mi Aug 26, 2020 2:38 pmIch packe es gerade nicht, ein 2-dimensionales char-Array an eine Funktion zu übergeben und dann den Inhalt auszugeben. Wie muss die Funktion deklariert und aufgerufen werden? Am besten würde mir ein kleines Beispiel helfen. Ich habe gerade schon x Varianten durch, mit eckigen Klammern, ohne eckigen Klammern, mit Angabe einer Dimension, mit Angaber beider Dimensionen, auch ohne Dimension. Mit &-Operator und ohne. Nichts funktioniert.
Code: Alles auswählen
void tstarr(int arr[][4])
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
printf("arr[%d, %d] = %d\n", i, j, arr[i][j]);
}
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: 2-dimensionales Array an Funktion übergeben
Danke schonmal für dein Beispiel. Ich weiß, dass Arrays immer per Reference und niemals per Value übergeben werden. Mein Problem ist die Syntax. Die korrekte Deklaration der Methode und ihre Verwendung sehe ich schon sehr gut an deinem Beispiel. Was ich noch brauche wären Beispiele für eine passende Vorwärtsdeklaration und für den Funktionsaufruf.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: 2-dimensionales Array an Funktion übergeben
Du kannst ein [] auch immer als Pointer verstehen:
Das ganze geht also auch als void tstarr(int ** arr) durch.
Das ganze geht also auch als void tstarr(int ** arr) durch.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: 2-dimensionales Array an Funktion übergeben
Und wie rufe ich die Funktion auf?
Re: 2-dimensionales Array an Funktion übergeben
indem Du ihr das übergibst, was sie als Parameter erwartet: ein Array aus 4 Integer-Vektoren mit je 4 Elementen.
Wie würdest Du das machen?
Wie würdest Du das machen?
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: 2-dimensionales Array an Funktion übergeben
Ich habe mehrere Varianten probiert:
Nichts hat funktioniert.
Code: Alles auswählen
int main() {
tstarr(arr);
}
int main() {
tstarr(arr[]);
}
int main() {
tstarr(arr[][]);
}
int main() {
tstarr(arr[0]);
}
int main() {
tstarr(arr[][0]);
}
Re: 2-dimensionales Array an Funktion übergeben
die erste ist die richtige. Wenn das nicht funktioniert, ist mit deinem Array was faul.
Zeig' deinen gesamten Code.
Zeig' deinen gesamten Code.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
Re: 2-dimensionales Array an Funktion übergeben
Mit folgender Notation hat es letztendlich funktioniert. Das war eine schwere Geburt. Danke an die Helfer.
Code: Alles auswählen
//Vorwärtsdeklaration:
void test_a(char[][6]);
//Deklaration des Arrays:
char test3[][6] = { "Test3" }; // Mir scheint, dass hier gewschweifte Klammern notwendigt sind. Warum?
//Funktionsaufruf:
test_a(test3);
//Funktion und Benutzung:
void test_a(char test3[][6]) {
printf("%s\n", test3);
}
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: 2-dimensionales Array an Funktion übergeben
Ähh... das funktioniert, aber es ist trotzdem falsch. Oder wenigstens nicht korrekt. ^^Orioner hat geschrieben: ↑Mi Aug 26, 2020 9:29 pmMit folgender Notation hat es letztendlich funktioniert. Das war eine schwere Geburt. Danke an die Helfer.
Code: Alles auswählen
//Vorwärtsdeklaration: void test_a(char[][6]); //Deklaration des Arrays: char test3[][6] = { "Test3" }; // Mir scheint, dass hier gewschweifte Klammern notwendigt sind. Warum? //Funktionsaufruf: test_a(test3); //Funktion und Benutzung: void test_a(char test3[][6]) { printf("%s\n", test3); }
%s gibt Strings aus, also den Zeiger auf den ersten Buchstaben eines Textes: (char const *). Genau das passiert in Deinem Code, wei Dein Array passend aufgebaut ist.
Übergeben müsstest Du aber test3[0].
Code: Alles auswählen
//Deklaration des Arrays:
char global[][6] = { "Test3" };
//Funktionsaufruf:
test_a(global);
//Funktion und Benutzung:
void test_a(char local[][6]) {
printf("%s\n", local[0]);
}
Dein Array ist übrigens ein Array unbekannter Größe mit 6 chars. Längere Strings, wie beispielsweise "Hello World" passen da nicht rein.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.