Zugriff auf Strukturelemente
Nach oben zu Strukturen - Index
Auf Struktur- und Variantenelemente kann über die folgenden beiden Auswahloperatoren zugegriffen werden:
- . (Punkt)
- -> (Pfeil nach rechts)
Ist beispielsweise das Objekt s vom Strukturtyp S, und sptr ein Zeiger auf S. Wenn m nun ein Element-Bezeichner vom Typ M ist, der in S deklariert ist, dann sind die Ausdrücke s.m und sptr->m vom Typ M. Beide stellen das Elementobjekt m in S dar. Der Ausdruck sptr->m steht für (*sptr).m.
Der Operator . ist der direkte und der Operator -> ist der indirekte (oder Zeiger-) Zugang zu Strukturelementen. Ein Beispiel:
struct mystruct
{
int i;
char str[21];
double d;
} s, *sptr = &s;
.
.
.
s.i = 3; // dem Element i von mystruct s einen Wert zuweisen
sptr -> d = 1.23; // dem Element d von mystruct s einen Wert zuweisen
Der Ausdruck s.m ist unter der Bedingung ein L-Wert, dass s ein L-Wert und m kein Array ist. Der Ausdruck sptr->m ist nur dann ein L-Wert, wenn m kein Array ist.
Wenn die Struktur B ein Feld enthält, das vom Typ Struktur A ist, dann gibt es zwei verschiedene Möglichkeiten, auf die Elemente von A zuzugreifen:
struct A {
int j;
double x;
};
struct B {
int i;
struct A a;
double d;
} s, *sptr;
.
.
.
s.i = 3; // dem Element i von B einen Wert zuweisen
s.a.j = 2; // dem Element j von A einen Wert zuweisen
sptr->d = 1.23; // dem Element d von B einen Wert zuweisen
sptr->a.x = 3.14 // dem Element x von A einen Wert zuweisen
Jede Strukturdeklaration führt einen eigenen Strukturtyp ein. So sind durch die Definitionen
struct A {
int i,j;
double d;
} a, a1;
struct B {
int i,j;
double d;
} b;
beide Objekte a und a1 Strukturen vom Typ A, aber die Typen der Objekte a und b sind verschieden. Strukturen können einander nur dann zugewiesen werden, wenn Quelle und Ziel denselben Typ haben:
a = a1; // OK: derselbe Typ, deshalb Elementweise Zuordnung
a = b; // UNGÜLTIG verschiedene Typen
a.i = b.i; a.j = b.j; a.d = b.d /* aber Sie können die Elemente einzeln zuweisen */