Eher das zweite. Und man muss sich der Dimensionen sehr sicher sein. Ansonsten eine struct bauen mit erster Dimension, zweiter Dimension, float zahlen[dim1*dim2], float *zeilen[dim1]. Und dann Zeiger auf diese struct uebergeben.
Ciao Lutz
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Mehrdimensionale Felder uebergibt man immer so, dass eine Dimension unspezifiziert bleibt, alle anderen muessen explizit angegeben werden. Wenn man vorher noch nicht weiss wie das Feld definiert ist, muss man mit einem Doppelpointer arbeiten und die Dimensionen uebergeben.
void function(int array[3][]){}
/\* am besten man uebergibt auch noch die andere dimension als
bekannt ist. Dass man immer alle dimensionen ausser einer
angeben muss ist logisch, da man sonst nicht auf beliebige
Elemente zugreifen koennte, dazu muss man sich die
Repraesentation von Feldern im Speicher ins Gedaechtnis
zurueckrufen\*/
Felder gibt man normalerweise nicht zurueck, denn wenn sie in der Funktion erzeugt wurden, so sind sie aussen nicht mehr gueltig (man kann allerdings einen Pointer auf ein in der Funktion mit new erzeugtes Feld zurueckgeben). Wenn das Feld nicht auf dem Heap sein soll, so erzeugt man es am besten ausserhalb, und uebergibt es, damit die Funktion es fuellen kann.