ユニオン連合体について
1111 ワード
最近、union連合体に関する問題に遭遇したいくつかの基礎知識を補完し、ここで簡単な記録をします.
テストでは、次のことがわかります. unionタイプデータは低位位置合わせである. unionのデータは1つのメモリを共有しています. unionサイズは、中の最も空間を占めるデータのサイズです. データの1つを変更すると、すべてのデータの値が変更されます.
また、データも初期化することが望ましい.方法は2つある.1つは、その中で最も空間を占めるデータ型を直接初期化することであり、もう1つは直接memset(&uT 2,0 x 00,sizeof(uT 2);
#include <stdio.h>
union uTest {
int nIntVal;
char chCharVal;
double dwDoubleVal;
};
typedef uTest UTEST;
union uTest2 {
int nVal;
char caVal[2];
};
int main()
{
UTEST uTemp;
uTest2 uT2;
int nSize = sizeof(uTemp);
int nSize2 = sizeof(uT2);
uT2.nVal = 1055;
//uT2.caVal: [1]4 [0]31 4*256 + 31 = 1055 = nVal
uT2.caVal[1] = 1;
//uT2.nVal: 287 1*256 + 31 = 287
uTemp.nIntVal = 1024;
//chCharVal: 0
// : union
uTemp.chCharVal = 20;
//nIntVal:1044 nIntVal 8 00H 14H(20) 1024
return 0;
}
テストでは、次のことがわかります.
また、データも初期化することが望ましい.方法は2つある.1つは、その中で最も空間を占めるデータ型を直接初期化することであり、もう1つは直接memset(&uT 2,0 x 00,sizeof(uT 2);