Forum: Mikrocontroller und Digitale Elektronik C Zeiger Referenzieren


von Peter K. (Gast)


Lesenswert?

Guten Abend,

folgendes Problem oder eher folgende Frage..
Ich habe eine Struktur die wie folgt aussieht..
1
char *pMsg[] = { "123" , "1234" , "12345" };
2
3
typedef struct
4
{
5
     void*   pMessage;
6
     uint8_t uiType;
7
}sTest_t;
8
9
sTest_t sTest[] =
10
{
11
     { &pMsg[0] , 0 }
12
};
Wie komme ich jetzt auf den zweiten Index von "pMsg" sprich auf die 
Zeichenkette "1234"?
1
printf( "%s" , (char**)sTest.pMessage );

von Vorhautsurfer23 (Gast)


Lesenswert?

"sTest" hat nur einen Zeiger irgendwo hin (void). Die Information, dass 
es ein Array aus Zeichenketten ist, die ist verloren gegangen. Diese 
Information ist nur dem originalen *pMsg zugeordnet.

Ich würde einen Zeiger auf einen Zeiger verwenden.
1
char * pMsg[] = { "123" , "1234" , "12345" };
2
3
typedef struct
4
{
5
     void ** pMessage;
6
     uint8_t uiType;
7
}sTest_t;
8
9
sTest_t sTest = { (void**)pMsg , 0 };
10
11
printf( "%s" , sTest.pMessage[0] );

von Peter K. (Gast)


Lesenswert?

Okay.
Was aber wenn ich anstatt dem Array dort eine Adresse von Z.B einer 
uint8 Variable hinterlegen möchte?
Geht dann ein Zeiger auf Zeiger auch?

von Vorhautsurfer23 (Gast)


Lesenswert?

Dann eicht ein einfacher Zeiger, den du anschließend interpretieren 
musst.

Wenn ich dich richtig verstanden habe:
1
int addr = 0x12345678;
2
3
typedef struct
4
{
5
     int pMessage;
6
     uint8_t uiType;
7
}sTest_t;
8
9
sTest_t sTest = { addr, 0 };
10
11
printf( "%d" , *(int*)sTest.pMessage );

von Peter K. (Gast)


Lesenswert?

Ja okay..
Wenn ich jetzt das aber Universal halten möchte und mal die Adresse 
eines Zeiger Arrays und mal einer normalen Variablen angeben möchte, 
geht es mit einem Zeiger auf Zeiger nicht habe ich das richtig 
verstanden?
Zeiger auf Zeiger nur für Zeiger Arrays.
Zeiger für normale Variablen.

von Vorhautsurfer23 (Gast)


Lesenswert?

Du musst schon irgendwo eine Information hinterlegen, um was es sich 
handelt.

von DPA (Gast)


Lesenswert?

Ich glaub er sucht nach ((char**)sTest.pMessage)[index]

von Dirk B. (dirkb2)


Lesenswert?

printf( "%s" , ((char**)sTest.pMessage)[1] );

von Rolf M. (rmagnus)


Lesenswert?

Vorhautsurfer23 schrieb:
> Du musst schon irgendwo eine Information hinterlegen, um was es sich
> handelt.

Es drängt sich die Vermutung auf, dass das in "uiType" drin steht.
Sowas ist eigentlich der typische Anwendungsfall für unions.

von Peter K. (Gast)


Lesenswert?

Rolf M. schrieb:
> Vorhautsurfer23 schrieb:
> Du musst schon irgendwo eine Information hinterlegen, um was es sich
> handelt.
>
> Es drängt sich die Vermutung auf, dass das in "uiType" drin steht.
> Sowas ist eigentlich der typische Anwendungsfall für unions.

Meinst Du etwa den Zeiger auf Zeiger und den normalen Zeiger in einen 
Union packen?

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.