PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arrays an Funktionen übergeben



Poseidonius
17-03-2005, 12:56
Hallo zusammen,

ich möchte verschiedene multidimensionale Arrays an eine Funktion übergeben. Ich habe also zum Beispiel die Matrix


double A [2][2]

und möchte diese der Funktion


void tralla(double **A)

übergeben. Dabei dachte ich, ich könnte den Aufruf wie folgt aussehen lassen


tralla(& A);

Das geht so einfach aber nicht. Da ich keine Lust habe die Matrizen zu zerlegen und in Einzelteilen zu übergeben, hoffe ich auf eure Tipps.

Danke

Joghurt
17-03-2005, 14:06
tralla(A)Jedoch muss tralla irgendwie wissen, welche Dimension die Matrix hat. Woher soll es sonst wissen, dass A[0] und A[1] richtige double* sind, A[2] jedoch nicht mehr.
Edit:Die Funktion selbst sollte auch mit
double tralla(double M[][])definiert sein.

peschmae
17-03-2005, 15:08
Allerdings musst du dann noch die Grösse des Arrays übergeben und dann mit Pointern arbeiten. Nicht sehr nett leider (ausser eine Dimension des Arrays ist schon zur Compile-time bekannt, dann kannst du das natürlich im Methodenkopf hinschreiben).

MfG Peschmä

locus vivendi
17-03-2005, 16:25
Nunja, abgesehen davon das es mehrdimensionale Arrays in C und C++ (streng betrachtet) nicht gibt, kannst du ein Array als Referenz übergeben. Natürlich nur in C++. Das sieht dann ungefähr so aus:
void somefunction(int (&ref_array)[99]);

Wenn deine Arrays unterschiedliche Größen haben kannst du das recht einfach mit Hilfe eines Templates lösen. Allerdings schließe ich mich den Vorpostern an: Das Arrays "normal" als Pointer zu übergeben und die Dimensionen explizit dazu halte ich für vorteilhafter.

panzi
17-03-2005, 19:26
Nunja, abgesehen davon das es mehrdimensionale Arrays in C und C++ (streng betrachtet) nicht gibt, kannst du ein Array als Referenz übergeben. Natürlich nur in C++. Das sieht dann ungefähr so aus:
void somefunction(int (&ref_array)[99]);

Wenn deine Arrays unterschiedliche Größen haben kannst du das recht einfach mit Hilfe eines Templates lösen. Allerdings schließe ich mich den Vorpostern an: Das Arrays "normal" als Pointer zu übergeben und die Dimensionen explizit dazu halte ich für vorteilhafter.
Die Idee mit dem Template find ich aber trotzdem cool! ;)

locus vivendi
17-03-2005, 20:28
Die Idee mit dem Template find ich aber trotzdem cool!
Ich auch. Die Idee ist allerdings nicht meine, ich hab sie vielmehr vor einiger Zeit mal irgendwo aufgeschnappt.