Zeiger auf Strukturen



  • Hallo,

    nehmen wir mal an ich deklariere folgende Struktur:

    struct muh {
       int i;
    };
    

    Um darauf zuzugreifen kann ich sie wie folgt erzeugen:

    int main()
    {
       struct muh a1[3];
    
       ...
    }
    

    Wenn ich nun in Unterfunktionen mit den Bestandteilen der Struktur arbeiten will übergebe ich der Performance willen einen Zeiger auf die Struktur, also bspw.:

    void func(struct muh *a)
    {
    ....
    }
    

    Nun könnte ich innerhalb von 'func' mit a->i auf die Int-Variable in der Struktur zugreifen, da ich aber 3 Exemplare der Struktur 'muh' habe müsste der Zugriff doch sinngemäß per:

    a[0]->i = 55;
    

    erfolgen, was aber nicht funktioniert. Stattdessen greife ich mit

    a.i = 55;
    

    innerhalb der Funktion func darauf zu. Das obwohl ich mit einem Zeiger arbeite. Wieso ist das so?



  • wieso das so ist, da fragmal den/die erfinder von C

    struct muh {
       char muuh[64];
    };
    
    void muuuh( struct muh* m, int n )
    {
    	int i=0;
    	while( i<n )
    		puts(m[i++].muuh);
    }
    //... main...
    struct muh m[5];
    
    	strcpy(m[0].muuh, "muh");
    	strcpy(m[1].muuh, "muuh");
    	strcpy(m[2].muuh, "muuuh");
    	strcpy(m[3].muuh, "muuuuh");
    	strcpy(m[4].muuh, "MUUUUUH");// große Kuh 
    	muuuh(m,sizeof(m)/sizeof(m[0]));
    //...
    


  • RainerBrandt schrieb:

    Wieso ist das so?

    foo[ 0 ] bedeutet nichts anderes als *( foo + 0 ) , foo[ 1 ] analog *( foo + 1 ) . Wenn du jetzt aber foo[ 0 ]->bar schreibst, würdest du zweimal dereferenzieren.

    cheers, Swordfish


Anmelden zum Antworten