pointer 2 dimensionales array
-
Was soll deine Funktion jetzt genau machen? Das ist mir in diesem Thread nicht ganz klar geworden...
Falls es nur darum geht, ein 2D-Array mit Nullen zu füllen, kannst du Folgendes tun. Ich würde es zuerst mal mit
operator[]versuchen, das ist einleuchtender. Wenn du das wirklich verstanden hast, kannst du immer noch direkte Zeigerarithmetik verwenden.// (1): statisches Array mit Initialisierungsliste int Array[w][h] = {}; // (2): statisches Array mit For-Schleife int Array[w][h]; for (unsigned int x = 0; x < w; ++x) { for (unsigned int y = 0; y < h; ++y) { Array[x][y] = 0; } } // (3): dynamisches Array int** Array = new int*[w]; for (unsigned int x = 0; x < w; ++x) { Array[x] = new int[h]; for (unsigned int y = 0; y < h; ++y) { Array[x][y] = 0; } } // beim dynamischen Array wieder in umgekehrter Reihenfolge delete[] anwenden.
-
hallo nexus, danke fuer die antwort!
das ist mir alles klar, ich habe das problem mit den pointern..
nohcmals genaue aufgabnestllung:arry der groeße [10][10] diese wird in main definiert, in main wird ein pointer gemacht der auf die diversen zeilen zeigt. also p[0] = adresse erste zeiel ... p[9] = adresse letzt zeile
dieser pointer wird an ne funktion uebergeben. diese fuellt das array mit lauter nullen, außer in der diagonale, da sind es einsen! [0][0],[1][1] usw....
dazu folgende bestimmungen:
2 for schleifen
eine zuweisungszeile
in der fkt darf nur der parameter + 2 pointer der for schleifen verwendet werden.hoert sich nicht so schwer an, ist es aber ^^
-
Sowas?
void identity(int *p){ for(int y = 0; y < 10; y++) for(int x = 0; x < 10; x++) p[y*10+x] = x == y; }
-
nein noch ein mal, es duerfen nur pointer verwendet werden!
und das array wir in main initialisiert mitterls:int square[10][10];und uebergeben wird ein array von pointern (oder weiß jemand eine besser idee, zb nur einen pointer uebergeben?)
danke...
-
AbsoluterBeginner schrieb:
nein noch ein mal, es duerfen nur pointer verwendet werden!
Ich denke, du meinst nicht Zeiger selber, sondern Zeigerarithmetik. Zudem ist
Array[i]äquivalent mit*(Array+i), aber du darfst natürlich gerne den komplizierteren Weg einschlagen. Wenn du wirklich der Ansicht bist, man dürfe denoperator[]nicht verwenden (was eine ziemlich blöde Aufgabenstellung wäre), würde ich ihn trotzdem zuerst benutzen und anschliessend seine Vorkommen nach obiger Regel durchoperator*undoperator+ersetzen.AbsoluterBeginner schrieb:
und uebergeben wird ein array von pointern (oder weiß jemand eine besser idee, zb nur einen pointer uebergeben?)
Arrays können nicht übergeben werden, es sind immer nur Zeiger.
-
Sowas?
void identity(int *p){ for(int *y = p; y-p < 100; y++) *y = !((y-p)%11); }entweder mit identity(&square[0][0]) aufrufen oder entsprechend anpassen.
-
als hinweis ist gestanden an soll pointer aritmetik veerwenden (nicht nur um zu prüfen ob ein element in der diagonalen ist)
was meinst du denn damit?@fellhuhn, danke, aber ich habe es nicht geschafft das 2dim array mit einem pointer zu uebergeben, aber ich denke auch ich soll ein 1dim array mit den adressen der zeilen uebergeben...
aber dien code sieht schon mal gut aus (da eben pointer verwendet werden)
aber ich glaube du hast es schon zu kompakt gemacht
ich verstehe die zuweisung nicht ganz, waere es nicht auch einfacher mit 2 forschleifen?
so sollte ich es naemlich loesen...danke euch!!
-
Also, ganz ehrlich, wenn gefordert ist, dass eine zweidimensionale Matrix übergeben werden soll, dann würde ich das auch ganz stumpf so machen. Ich würde das dann irgendwie so machen (nicht getestet):
const size_t dim = 10; typedef int ElementType; typedef ElementType MatrixType[dim][dim]; void identity(MatrixType mat) { for(ElementType (*row)[dim] = mat; row != (mat + dim); ++row) { for(ElementType *col = *row; col != (*row + dim); ++col) { if(row - mat == col - *row) { *col = 1; } else { *col = 0; } } } } //Test: MatrixType matrix; identity(matrix); //vielleicht noch ausgeben
-
Hier habe ich das mal ein wenig näher beschrieben, was du für möglichkeiten hast:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-212469-and-highlight-is-array+2+dimensionales.html
-
hallo, nochmals vielen dank an alle, heute war abgabe und ich habe es nicht geschafft, was solls

will das problem aber trotzdem verstehen und habe mit hierzu ein weiteres programm gebastelt.
da es aber nichts mit diesem thread zu tun hat habe ich einen neun aufgemacht, wenn wer lust hat zu helfen keine scheu
hier der link: http://www.c-plusplus.net/forum/viewtopic-var-p-is-1607316.html#1607316
danke euch!