pointer struct initialzuweisung



  • Hallo an alle !

    Kann mir jemand Erklären was der folgende Code macht ?

    [cpp]
    struct {
        char c;
        int i
    } *pStruct  = 0;
    [/cpp]
    

    Mich irritiert der Ausdruck

    [cpp] *pStruct  = 0; [/cpp]
    


  • Definiere eine Variable "pStruct", welche vom Typ "Zeiger auf anonyme Struktur mit den Membern char c und int i" ist, und initialisiere "pStruct" mit 0 (NULL).

    Ausgeschrieben (bis auf die Tatsache, dass der Name _anonymousStruct nicht existiert):

    struct _anonymousStruct {
       char c;
       int i;
    };
    
    struct _anonymousStruct * pStruct;
    
    pStruct = 0;
    


  • Danke für die schnelle und ausführliche Antwort!

    Also pStruct wird die Adresse 0x0 zugewiesen?!

    wenn ich allerdings mit

    printf("%p",&ps);
    

    die Adresse ausgeben lasse, bekomme ich nicht 00000000 sondern z.b. 0022FFFF. Das verstehe ich nicht ganz. Wieso ??



  • Benutzername200309 schrieb:

    wenn ich allerdings mit

    printf("%p",&ps);
    

    die Adresse ausgeben lasse, bekomme ich nicht 00000000 sondern z.b. 0022FFFF. Das verstehe ich nicht ganz. Wieso ??

    was du da ausgibst, ist die adresse der pointer-variablen, nicht das, worauf sie zeigt. lass einfach das & weg.
    🙂



  • 🙂 Danke!

    Zum Verständnis:

    struct {
        char c;
        int i
    } *pStruct  = 3;                /* Zeige auf 0x3 */
    
    int *pInt = 3;                  /* Zeige auch auf 0x3 */
    
    printf("pInt %p",pInt);         /* Ausgabe: pInt 00000003 */
    printf("pStruct %p",pStruct);   /* Ausgabe: pStruct 00000003 */
    

    Meine Frage hier. Zeigen pStruct und pInt auf die gleiche Adresse (00000003)?
    Die Zuweisung

    *pInt = 2;
    

    führt logischerweise zum Fehler. Was passiert hier genau ?



  • Benutzername200309 schrieb:

    Meine Frage hier. Zeigen pStruct und pInt auf die gleiche Adresse (00000003)?

    das tun sie.

    Benutzername200309 schrieb:

    Die Zuweisung

    *pInt = 2;
    

    führt logischerweise zum Fehler. Was passiert hier genau ?

    da fehlt ein cast: int *pInt = (int*)2;
    🙂



  • +fricky schrieb:

    Benutzername200309 schrieb:

    Die Zuweisung

    *pInt = 2;
    

    führt logischerweise zum Fehler. Was passiert hier genau ?

    da fehlt ein cast: int *pInt = (int*)2;

    ach so, falls ich dich falsch verstanden habe: bei *pint = 2; versuchst du eine 2 dahin zu schreiben, worauf 'pInt' zeigt. das kann zum absturz führen, falls sich an der adresse kein beschreibbarer speicher befindet (ist unter windoofs jedenfalls so).
    🙂



  • gut, habe keine Fragen mehr 🙂 danke!


Log in to reply