Hallo RBr000
ich muß eine C Methode zum multiplizieren von zwei 2x2
Matrizen schreiben, aber ich bekomme beim kompilieren immer
einen parse error.
Ist klar.
Ist bestimmt nur ne Kleinigkeit, aber ich komme nicht auf den
Fehler.
))
Wenn ein Guru einen Fortgeschrittenen testen würde,
nähme er exakt diese Fragestellung.
int[][] mult(int a[2][2], int b[2][2]){
Die Deklaration einer Funktion, die ein
Array von int[2][2] liefert, ist streng-
genommen:
int mult(int a[2][2], int b[2][2]) [2][2]
{
}
ABER(!)
C/C++ erlaubt die Rückgabe eines Feldes ‚per value‘ nicht!
Die heiligen Weisen von C/C++ empfahlen mir seinerzeit
drei Lösungen:
- Einpacken des Arrays in eine ‚struct‘ (C/C++)
- Rückgabe des Arrays als Referenz (C++)
- Rückgabe eines Zeigers auf ein 2x2-Arrays (C/C++)
int ergebnis[2][2];
Das ist o.k., da Du ja vorhattest, das
Array ‚per value‘ zurückzugeben.
for(int zeile=0;zeilereturn ergebnis;
Hier ist eben das Problem. Wie gesagt, erlauben
C/C++ keine ‚per value‘-Arrayrückgabe. Ausserdem
kann man ein Array als formalen Parameter (a und b)
auch nicht ‚per value‘ an die Funktion übergeben.
der Ausdruck mult(int a[2][2], int b[2][2])
bedeutet bereits, dass die Arrays ‚per reference‘
(Also nur die Feldadressen!) übergeben werden.
Der schnellste ‚hack‘ für Deine Zwecke besteht darin,
das Ergebnis-Array als formalen Parameter aufzuführen
(und nicht als lokale Variable).
int mult(int a[2][2], int b[2][2], int ergebnis[2][2])
wie von ‚wortfuchs‘ vorgeschlagen.
Wenn Du gerne das Array per value zurückgeben
möchtest, musst Du es in eine Struktur packen:
strcut ARR2X2 {
int f[2][2];
};
und dann kannst Du sowas wie
ARR2X2 mult(ARR2X2 a, ARR2X2 b)
{
ARR2X2 ergebnis;
...
return ergebnis
}
machen.
Grüße
CMБ