Pointer auf mehrdimensionale Arrays

Gast #2059933
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
#2059960
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];
#2060048
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];
  ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren