2-dimensionales Array an Funktion übergeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

2-dimensionales Array an Funktion übergeben

Beitrag von Orioner » Mi Aug 26, 2020 2:38 pm

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.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von mfro » Mi Aug 26, 2020 3:16 pm

Orioner hat geschrieben:
Mi Aug 26, 2020 2:38 pm
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.
C kennt keine Wertübergabe von Arrays. Auch wenn's so aussieht:

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]);
}
Was hier übergeben wird, ist tatsächlich die Startadresse des Arrays, nicht der Inhalt. Bei mehrdimensionalen Arrays kann man (wie hier gezeigt) lediglich die erste Array-Dimension offen lassen (man kann sie aber auch angeben)
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Orioner » Mi Aug 26, 2020 4:43 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Xin » Mi Aug 26, 2020 5:02 pm

Du kannst ein [] auch immer als Pointer verstehen:

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.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Orioner » Mi Aug 26, 2020 5:10 pm

Und wie rufe ich die Funktion auf?

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von mfro » Mi Aug 26, 2020 5:16 pm

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?
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Orioner » Mi Aug 26, 2020 5:30 pm

Ich habe mehrere Varianten probiert:

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]);
}
Nichts hat funktioniert.

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von mfro » Mi Aug 26, 2020 6:46 pm

die erste ist die richtige. Wenn das nicht funktioniert, ist mit deinem Array was faul.

Zeig' deinen gesamten Code.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Orioner » Mi Aug 26, 2020 9:29 pm

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);
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: 2-dimensionales Array an Funktion übergeben

Beitrag von Xin » Do Aug 27, 2020 8:29 am

Orioner hat geschrieben:
Mi Aug 26, 2020 9:29 pm
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);
}
Ähh... das funktioniert, aber es ist trotzdem falsch. Oder wenigstens nicht korrekt. ^^

%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]);
}
Die geschweiften Klammern sind erforderlich, weil Du ein Array von Strings anlegst, welches du mit einem Array füllen müsst: Also geschweifte Klammern. In Deinem Array ist nur ein String drin.

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.

Antworten