C Zeiger Referenzieren

Gast #6057754
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 );
Gast #6057770
"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] );
Gast #6057773
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?
Gast #6057781
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 );
Gast #6057782
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.
Gast #6057943
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.