構造体メンバーのアクセス

提供: RAD Studio
移動先: 案内検索

構造体:インデックス への移動

構造体と共用体のメンバーには,以下の 2 つの選択演算子を用いてアクセスします。

  • . (ピリオド)
  • ->(右矢印)

たとえば,オブジェクト s は構造型 S,sptr は S を指すポインタであるとします。そして,m はデータ型 S で宣言されたデータ型 M のメンバー識別子であるとすると,式 s.m と sptr->m のデータ型は M で,両方とも S 内のメンバーオブジェクト m を表しています。式 sptr->m は,(*sptr). m の便利な同意語です。

演算子 . は,直接メンバー選択子と呼ばれています。また,演算子 ->: は,間接メンバー選択子(あるいはポインタメンバー選択子)と呼ばれます。次に例を示します。



 struct mystruct
 {
    int i;
    char str[21];
    double d;
 } s, *sptr = &s;
     .
     .
     .
 s.i = 3;            // 構造体 s のメンバー i に代入
 sptr -> d = 1.23   // 構造体 s のメンバー d に代入



式 s.m は,s が左辺値で,かつ m が配列型でない場合は,左辺値になります。式 sptr->d は,d が配列型でない場合,左辺値になります。

構造体 B のあるフィールドの型が構造体 A 型である場合,構造体 A のメンバーには,メンバー選択子を 2 つ組み合わせることによってアクセスできます。



 struct A {
    int j;
    double x;
 };
 struct B {
    int i;
    struct A a;
    double d;
 } s, *sptr;
     .
     .
     .
 s.i = 3;            // 構造体 B のメンバー i に代入
 s.a.j = 2;          // 構造体 A のメンバー j に代入
 sptr->d = 1.23;     // 構造体 B のメンバー d に代入
 sptr->a.x = 3.14  // 構造体 A のメンバー x に代入



各構造体宣言ごとに,ユニークな構造体型が 1 つ導入されます。



 struct A {
    int i,j;
    double d;
 } a, a1;
 struct B {
    int i,j;
    double d;
 } b;



上のオブジェクト a と a1 はどちらも構造体 A 型ですが,a と b は別の構造体型です。構造体は,ソースとディスティネーションが同一のデータ型の場合にのみ,代入することができます。



 a = a1;   // OK: 同一の型,各メンバーごとに代入される
 a = b;    // NG: 異なる型
 a.i = b.i; a.j = b.j; a.d = b.d /* メンバーごとになら代入できる */