2 dim Arrays/ Matrizen(EIn bel.Element ansprechen



  • Hallo an allen ,ich habe folgende Frage!
    Wenn ich ein 2 dim-Array bzw. MAtrix,z.B
    ---x---Zeilen
    a b c d |
    e f g h |
    i j k l y Spalten
    m n o p |

    und will mit ZEIGERn das Element ( k ) ansprechen,dann mache ich das folgendermassen: ?? ?

    int a[4][4];
    int *zgr=a;

    (zgr Y2+ 2) ??

    oder anders,Koennte mir es jemand erklaeren (allgemein) wie man in solchen Faellen vorgeht??

    Danke kilomat



  • int a[4][4];

    x = a[2][2];
    a[2][2] = y;

    oder

    int b[4*4]; // eq. b[16]

    x = a[x + y*4];



  • Danke fuer die Antwort ,aber ich glaube das ist mit Arrays ,was du mir gezeigt hast ich will aber mit Zeigerarithmetik ,wenn es geht

    Der Matrix war:
    ---X Zeilen--- mal ---Y Spalten

    a b c d
    e f g h
    i j k l

    Danke



  • Du kannst auch sowas machen (ungefähr?) =

    x = *(a + 4);



  • DAs hier *(a+4) ist gleich a[4]!!
    Ich bin mir nicht so sicher aberich glaube korrekt waere es:

    (a + ANzahlReihen2 +2) //fuer a[4][4]

    Warum ich so eine Bezeichenung brauche(oder warum benutze nicht direkt Arrays Bezeichnung(einfacher) liegt es daran dass mit Pixeln arbeitewn muss(Bildverarbeitung)) und ich muss genau die Operationen durchfuehren(Bild ist als Struktur definiert und nicht als 2-dim Array!!



  • Da block der Compiler.

    Entweder du sprichst das Ganze so an
    x = a[3][2];

    dann muss deine Matrix so deklariert werden

    int a[4][4];

    oder du sprichst das Ganze so an

    l = a[x *4 + y];

    wobei die 4 die Breite des Ganzen ist. Dann muss die Deklaration so aussehen :

    int a [16];

    Mehr ist eigentlich auch nicht nötig. (und afaik auch nicht möglich)
    Der Unterschied ist eigentlich der innere Aufbau.
    Entweder du hast einen Speicherbereich, der 16 Ints groß ist, oder 4 Bereiche mit jeweils 4 Int Größe und dazu noch einmal einen mit 4 Pointern auf diese.

    Speichermäßig kleiner ist also die untere Variante kleiner, vom Programmieraufwand die obere.

    btw: in deinem Rechner ist alles pseudo-2-Dimensional angelegt.
    Die Speicherbereiche folgen sequentiell aufeinander..


Anmelden zum Antworten