ユニオン連合体について

1111 ワード

最近、union連合体に関する問題に遭遇したいくつかの基礎知識を補完し、ここで簡単な記録をします.
 
#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;
}

 
テストでは、次のことがわかります.
  • unionタイプデータは低位位置合わせである.
  • unionのデータは1つのメモリを共有しています.
  • unionサイズは、中の最も空間を占めるデータのサイズです.
  • データの1つを変更すると、すべてのデータの値が変更されます.

  • また、データも初期化することが望ましい.方法は2つある.1つは、その中で最も空間を占めるデータ型を直接初期化することであり、もう1つは直接memset(&uT 2,0 x 00,sizeof(uT 2);