ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

共用体

共用体は複数の変数が同じメモリーを共有するもの。

union test {
    int i;
    char c;
}:

int main()
{
    test a;

    a.i = 100;
}

この共用体testの場合、iとcは同じメモリーを使用する。
また、サイズが異なる型の場合は最も大きい種類の分だけメモリーを使用する。この場合int型の4バイトが使用され、cは残り3バイトは使用されない。
共用体はある型のメモリーを別の型で参照したい場合に便利。

#include <iostream>
using namespace std;

union test {
    int i;
    char c[4];
};

int main()
{
    test a;
    a.i = 0x41424344;
    cout << a.c[0] << ' ' << a.c[1] << ' ' << a.c[2] << ' ' << a.c[3];
}

実行結果
D C B A

このようにint型の領域をバイト単位でアクセスしたいときなどに使える。
というか、こういう使い方とメモリーを節約することくらいしか、今のところ使い道を思いつかない。