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 aberfoo[ 0 ]->bar
schreibst, würdest du zweimal dereferenzieren.cheers, Swordfish