Mehrdimensionales Array an Funktion übergeben
-
Hallo zusammen,
ich habe eine Frage, über die ich mir schon drei vier Tage den Kopf zerbreche. Nun hoffe ich, daß mir hier jemand weiterhelfen kann. Und zwar möchte ich ein zweidimensionales Array an eine Funktion weiterleiten und dort mit den einzelnen Elementen arbeiten. Mein Code funktioniert zwar nicht, aber zur Verdeutlichung habe ich Ihn trotzdem mal angehängt:
float points[2][2]={{0.0, 1.0}, {0.5, 1.5}}; void ergebnis (float a); int main() { ergebnis (points); return 0; } void ergebnis (float a) { printf ("%f\n", a[0][0] ); printf ("%f\n", a[0][1] ); }
Wäre super, falls mir jemand helfen könnte.
Tausend Dank schonmal,
Tscherno
-
Vom Umstand abgesehen, dass globale Variablen ein No-No sind, Dein 2-dim Array ist ein Pointer auf den Pointer, also:
void ergebnis (const float **a) { printf ("%f\n", a[0][0] ); printf ("%f\n", a[0][1] ); }
Da Du die werte nicht veraenderst (bzw. willst), ein const pointer.
-
Hi, danke für die schnelle Antwort. Das hatte ich auch schon probiert, allerdings gibt mir mein DevCpp-Compiler folgende Fehlermeldung aus:
[Warning] passing arg 1 of `ergebnis' from incompatible pointer type
Außerdem bekomme ich einen Speicherzugriffsfehler, wenn ich auf das Element a[0][0] zugreifen will.
Die globale Variable brauche ich im Übrigen im Zusammenhang mit dem "Restprogramm". Das kann ich da nicht anders lösen
-
MBCS-CITP schrieb:
Vom Umstand abgesehen, dass globale Variablen ein No-No sind, Dein 2-dim Array ist ein Pointer auf den Pointer, also:
void ergebnis (const float **a) { printf ("%f\n", a[0][0] ); printf ("%f\n", a[0][1] ); }
Da Du die werte nicht veraenderst (bzw. willst), ein const pointer.
Tjo... Satz mit X: War wohl nix. Oder doch: Falsch
(Achtung das ist spaßig gemeint, nicht böse)
Schau mal in die FAQ da steht wie das geht. Die eine Dimension muss bekannt sein. Oder du übergibst nur ein float*, dann musst du eben die Position mit x * size_x + y berechnen. Etwa so (btw- hier ist cpp Forum!):
void print (float* a) { int x = 1, y = 0, size_x = 2; cout << a[x * size_x + y]; } int main() { float points[2][2]={{0.0, 1.0}, {0.5, 1.5}}; ergebniss(points[0]); }
Gruß
-
Ha, super! Mit der Pointervariante kann ich was anfangen! Danke!
btw: ich dachte, ich wäre hier: C/C++ Forum :: ANSI C::
-
Tscherno_Bill schrieb:
Die globale Variable brauche ich im Übrigen im Zusammenhang mit dem "Restprogramm". Das kann ich da nicht anders lösen
Man kann es immer anders lösen! Die Frage ist nur, ob es was bringt.
Ich verstehe nur nicht, warum du dein Arry an die Funktion ergebnis() übergibst, wenn sie doch eh global ist...
-
Das ist allerdings eine berechtigte Frage... mhhh... da muß ich nochmal schauen :p