Zugriff auf Strukturelemente

Aus RAD Studio
Wechseln zu: Navigation, Suche

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 */