Mathias K. schrieb:
beantworte mal ganz schnell die Frage:
Wie soll der Compiler ausrechnen, der weivielte int, vom Beginn des
Arrays aus gerechnet, denn array1[x][x] sein soll, wenn alles was er hat
die Startadresse des Arrays ist.
Auch ein 2D Array muss im Speicher abgebildet werden, indem die Elemente
alle hintereinander liegen
2D Array (konzeptionell) 3 Spalten, 2 Zeilen
0 1 2
+---+---+---+
0 | a | b | c |
+---+---+---+
1 | d | e | f |
+---+---+---+
dasselbe Array im Speicher
+---+---+---+---+---+---+
| a | b | c | d | e | f |
+---+---+---+---+---+---+
um zu berechnen, dass das Element in Zeile 1, Spalte 0 (also 'd') das 4.
Element ab Beginn des Arrays ist, muss der Compiler die Anzahl Spalten
pro Zeile kennen (in diesem Fall sind es 3 Spalten).
Adresse des Elements = Startadresse +
gewünschte_Zeile * Anzahl_Spalten +
gewünschte_Spalte
Die Anzahl der Spalten muss bekannt sein, sonst kann man die Position
nicht ausrechnen.
Du gibst ihm aber nur einen Pointer. Das reicht für den 1D Fall, aber
nicht für 2D. Auch ein Compiler kann nicht zaubern.
1 | ... caffeine(int array1[2][2], int array2[2][2])
|
2 | {
|
3 | ...
|
4 | }
|
und für den Returnwert musst du dir sowieso was anderes ausdenken.
Arrays kann man nicht als Ganzes zuweisen und daher kann man sie auch
nicht als ganzes aus einer Funktion heraus als Returnwert übergeben.
Denn dazu müsste ein Array zuweisbar sein
coffee = func( ... )
was sie aber nicht sind.