Dies passiert auch, wenn Sie versuchen, auf eine Instanz zuzugreifen, wenn Sie einen Zeiger haben, und umgekehrt:
struct foo
{
int x, y, z;
};
struct foo a, *b = &a;
b.x = 12;
Wie in einem Kommentar ausgeführt, kann dies unerträglich gemacht werden, wenn jemand einen typedef
Zeiger verwendet, dh das *
in einem typedef wie folgt einschließt:
typedef struct foo* Foo;
Denn dann erhalten Sie Code, der aussieht, als würde er sich mit Instanzen befassen , obwohl es sich tatsächlich um Zeiger handelt:
Foo a_foo = get_a_brand_new_foo();
a_foo->field = FANTASTIC_VALUE;
Beachten Sie, wie das Obige aussieht, als ob es geschrieben werden sollte a_foo.field
, aber das würde fehlschlagen, da Foo
es ein Zeiger auf struct ist. Ich empfehle dringend gegen typedef
: ed Zeiger in C. Zeiger sind wichtig, verstecken Sie Ihre Sternchen nicht. Lass sie leuchten.