構造体の代入

構造体は整数ではないため、構造体を算術演算子や比較演算子の項として操作することはできません。構造体を整数のように計算することはできませんが、唯一、代入は許されています。同じ構造体の変数に対して、構造体の値を代入するとメンバ全体が複製されます。

Sample06

#include <stdio.h>

int main(void)
{
    struct Point { int x, y; } pt1, pt2;

    pt1.x = 10;
    pt1.y = 20;

    pt2 = pt1;

    printf("pt1.x=%d, pt1.y=%d\n", pt1.x, pt1.y);
    printf("pt2.x=%d, pt2.y=%d\n", pt2.x, pt2.y);

    return 0;
}

実行結果

Sample06の実行結果

Sample06は、Point構造体の変数pt1とpt2を宣言し、pt1の x メンバと y メンバに値を代入しています。その後、pt1変数をpt2変数に代入しています。これらの変数は、同じ構造体なので問題ありません。pt1変数のメンバの値が、そのままpt2変数に複製されます。実行結果を見れば、pt1変数とpt2変数のメンバの値が同じであることが確認できます。

構造体の代入は、メンバの値をそっくり複製することです。よって、pt2にpt1を代入しても、pt1とpt2変数は、異なる実体(記憶領域)を持ちます。pt2変数の x メンバや y メンバの値を変更しても、pt1には影響しません。構造体の代入は、メンバ値を複製するだけでpt2変数がpt1変数と同じ実体になるわけではありません。