sehe vor lauter pointer den wald nicht mehr

OP #3258745
Lesenswert?
• ▲
▼
hallo zusammen.

ich habe:
1
const char *ListeA[] = {
2
   "Text 1A",
3
   "Text 2A",
4
   "Text 3A"
5
};
6
const char *ListeB[] = {
7
   "Text 1B",
8
   "Text 2B"
9
};
10
const char *ListeC[] = {
11
   "Text 1C",
12
   "Text 2C",
13
   "Text 3C",
14
   "Text 4C"
15
};
16

17
const char *(*AlleListen[]) = {ListeA, ListeB, ListeC};
18

19
void DisplayText(char *text) {...}


jetzt habe ich aber probleme, um innerhalb von funktionen auf diese 
arrays zuzugreifen.
1
void funktion1(char* ListeX[]) {...}
2
// hier ListeX = {ListeA, ListeB, ListeC}
3
// hier möchte ich auf die einzelnen texte von ListeX zugreifen können
4
// z.b. DisplayText(ListeX[i]);
5

6
void funktion2(char* ListeX[]) {...}
7
// hier ListeX = AlleListen
8
// hier möchte ich auf die einzelnen texte von ListeX zugreifen können
9
// z.b. DisplayText(ListeX[i][j]);

ich bin froh um jegliche hilfe, oder fehler bei der deklaration etc. 
danke
OP #3258754
Lesenswert?
• ▲
▼
danke für die formatierung

>> Das kann schon mal nicht stimmen.
ja eben, ich stehe irgendwie auf dem schlauch. auch mit 'char 
*(*AlleListen[])' ging's nicht. nun, wie soll ich das machen mit 
typedefst?

und wie ginge es, wenn ich funktion2 auch nur eine eindimensinales array 
übergeben möchte aber nur 'AlleListen[]' habe, z.b. AlleListen[2] 
übergeben mlchte?

danke!
#3258767
Lesenswert?
• ▲
▼
Der ganze Ansatz kann so nicht funktionieren, weil du in AlleListen 
keine Möglichkeit mehr hast, die tatsächlichen Längen der einzelnen 
Teilarrays festzustellen. Du brauchst also eine Zwischenstruktur, mit 
der du diese Information ergänzen kannst.
1
#include "stdafx.h"
2

3
const char* ListeA[]= {
4
   "Text 1A",
5
   "Text 2A",
6
   "Text 3A"
7
};
8

9
const char* ListeB[] = {
10
   "Text 1B",
11
   "Text 2B"
12
};
13

14
const char* ListeC[] = {
15
   "Text 1C",
16
   "Text 2C",
17
   "Text 3C",
18
   "Text 4C"
19
};
20

21
#define ARRAY_LEN(x) (sizeof(x)/sizeof(*x))
22

23
struct TextSubList {
24
  int          nrElements;
25
  const char** Elements;
26
};
27

28
struct TextSubList AlleListen[] = {
29
  { ARRAY_LEN(ListeA), ListeA },
30
  { ARRAY_LEN(ListeB), ListeB },
31
  { ARRAY_LEN(ListeC), ListeC }
32
};
33

34
void DisplayText(const char *text)
35
{
36
  printf( "%s\n", text );
37
}
38

39
void function1( struct TextSubList* EineGruppe )
40
{
41
  int i;
42

43
  for( i = 0; i < EineGruppe->nrElements; i++ )
44
    DisplayText( EineGruppe->Elements[i] );
45
}
46

47
void function2( int nrGruppen, struct TextSubList* AllGruppen )
48
{
49
  int i;
50

51
  for( i = 0; i < nrGruppen; i++ ) {
52
    printf( "******\n" );
53
    function1( &AllGruppen[i] );
54
  }
55
}
56

57
int main()
58
{
59
  function2( ARRAY_LEN( AlleListen ), AlleListen );
60
}
Gast #3259851
Lesenswert?
• ▲
▼
Mein Rat:

Laß lieber die Finger auf solche Konstrukte wie Zeiger auf Zeiger auf 
sonstwas.

Denk dir lieber eine ganz andere Strategie aus. C hat keine 
mehrdimensinalen Felder, das sollte man sich ganz dick hinter die Ohren 
schreiben und beherzigen. Jeder Versuch, sich mit sowas wie 
MyBlabla[x][y}[z] zu behelfen, läuft auf etwas hinaus, daß der naive 
Programmierer SO nie beabsichtigt hatte.

Mein Vorschlag: Arbeite mit einer Art Handle und laß dir den zugehörigen 
Text von einem Unterprogramm liefern. Mehr Code als für das mehrfache 
Dereferenzieren braucht das auch bloß nicht.
Ich hab das bei meinen Geräten etwa so gemacht:

#define  txt_KlappeAuf  1
#define  txt_KlappeZu   2
#define  txt_FensterAuf 3
.. usw.

char* GetText (int handle, int language)
{...
}


W.S.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.