Forum: PC-Programmierung Pointer auf mehrdimensionale Arrays


von C-dummy (Gast)


Lesenswert?

Hallo,

als C-Autodidakt habe ich mit folgendem Problem zu kämpfen, vielleicht
kann mir jemand helfen.

Ich habe mehrere mehrdimensionale Arrays im Codebereich , die in
Abhängigkeit von einem Parameter ausgewählt werden sollen und die dann
immer gleich weiterverarbeitet werden.

Innerhalb einer Switch Answeisung möchte ich also einer Variablen das
gewünschte Array übergeben.

Also z.B. so :

const char abc0[2][2]={{1,2},{3,4}};
const char abc1[2][2]={{11,22},{33,44}};
const char abc2[2][2]={{1111,2222},{3333,4444}};

char * abc;

  ...
switch (x) {
   case 0 : abc = abc0;
            break;
   case 1 : abc = abc1;
            break;
  ....
 }

  ...
  ...

 xyz = abc[0][1];
  ...

Obiges geht nicht (ich weiss das), es soll nur zeigen was ich gerne 
haben
möchte. Mir fehlen jetzt eigentlich die korrekte Syntax der 
Deklarationen und der Zuweisungen.

Wäre nett wenn mir das jemand sagen könnte.

Vielen Dank.

Grüße

von Arc N. (arc)


Lesenswert?

1
// da abc1 in guter C-Tradition auf das erste Element (des ersten Arrays) zeigt, 
2
// hier also auf ein Array das zwei const chars beinhaltet
3
const char (*abc)[2];
4
abc = abc1;
5
// wenn der switch so einfach ist, könnte man auch gleich ein Array mit Zeigern
6
// anlegen und sowas machen
7
const char (*abcAll[3])[2] = { abc0, abc1, abc2 };
8
abc = abcAll[x];

von (prx) A. K. (prx)


Lesenswert?

Wem die C Typendeklaration ein Buch mit sieben Siegeln ist, der kann 
sich auf typedefs verlegen.

typedef const char row[2];
typedef row        array[2];

array abc0={{1,2},{3,4}};
array abc1={{11,22},{33,44}};
array abc2={{1111,2222},{3333,4444}};

col * abc;

und wer dann immer noch nicht durchblickt nimmt:

array * abc;
  ...
switch (x) {
   case 0 : abc = &abc0;
            break;
   case 1 : abc = &abc1;
            break;
  ....
 }

  ...
  ...

 xyz = (*abc)[0][1];
  ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.