zweidimensionales Array an eine Funtkion Übergeben!
-
Will ja nich meckern aber darauf kommt der Compiler gar nich mehr klar
-
@Reaser: nur für den Fall, daß du noch immer nicht weisst wie es geht:
int function( int ** array) { // algo } int main(){ int array[5][5]; ... funktion(array); ... return 0; }
array ist ein Zeiger auf einen Zeiger auf Datentyp int und wenn du diesen an eine Funktion übergibst, dann arbeitest du in der funktion mit array[x][y] auf dem Original
-
@ Freshman : So habe ich mir das auch gedacht, aber er bekommt es nich compiliert. Fehlermeldung : passing int (*)[5] as argument 1 of funktion(int **)
-
http://www.c-plusplus.net/forum/viewtopic.php?t=58906
nicht gelesen?freshman schrieb:
int function( int ** array) { // algo } int main(){ int array[5][5]; ... funktion(array); ... return 0; }
sieht ja nett aus, funktioniert nur leider nicht.
HumeSikkins schrieb:
// 2-dimensionales Array int arr[][2] = {{1,2},{1,2}}; int (*p)[2] = arr; // p ist Pointer auf Array von int p[0][0] = 42;
-
sorry, ich nehme alles zurück! ha, ist mir ja noch nie aufgefallen! Denn wenn man das array dynamisch allokiert, dann geht's wunderbar. Tut mir leid, daß ich so eine **** verbreite
-
Also sieht das am Ende im Endeffekt so aus oder wie ???
Code
int funktion (int *p) {
.
.
}int main () {
int Array[][5];
int *p=Array;
Array[0][0]=42; // zum Beispiel
funktion (&p);
return 0;
}
-
also ich checke jetzt auch nix mehr ????
wenn ich dem FAQ-Eintrag nach gehe undint array[][5];
implementiere, kriege ich error C2133: 'array' : unknown size
ich muß dazu sagen: M$ VS6.0
was aber auf jeden Fall funktioniert ist folgendes:void func(int array[][5]); int main(){ int array[5][5]; func(array); return 0; } void func(int array[][5]){ //... }
-
Leute, ich könnte schwören, daß ich das schon hundert mal so gemacht habe, wie ich in meinem ersten post beschrieben habe (...int function( int ** array)...)und ich würde es nie im Leben glauben, daß es nicht funktioniert, hätte ich es gerade nicht selber gesehen; zwar habe ich dann immer die Dimensionen mitgegeben, um nicht über den Speicherbereich hinaus zu schreiben (tut hier ja nix zur Sache), aber das hat doch immer funktioniert. Ich plane es einfach nicht!
-
Hallo,
wo ist denn jetzt euer Problem?void gunc(int (*p)[2], int firstDim) { } int main() { int arr[6][2]; gunc(arr, 6); }
Wie ich schon im FAQ-Beitrag schrieb: Alle Dimensionen bis auf die am weitesten Links stehende müssen angegeben werden.
Das ist ja auch nur logisch: Der Compiler muss ja die Größe kennen um Index-Offsets berechnen zu können:void gunc(int* p) { p[3]; // OK. Elementtype ist int -> p[3] = Addiere sizeof(int) * 3 zu p } void gunc(int (*p)[2], int firstDim) { p[3] // OK. Elementtyp ist int[2] -> p[3] = Addiere sizeof(int[2]) * 3 zu p } // Angenommen das würde gehen: void gunc(int (*p)[]) { p[3]; // Huh? Wie weit soll ich gehen? }
Über ein Template kann man beliebige 2-Dim-Arrays an gunc übergeben:
template <int n> void gunc(int (*p)[n], int firstDim) { }
-
es funktioniert auch:
void function(int arr[][5], int firstDim); int main(){ int array[5][5]; function(array, 5);
@HumeSikkins: hast gewonnen!
-
Jo nachdem ganzen hin und her ersmal Danke ans Forum und an die Mitglieder !
Reasar