c语言联合

98 阅读1分钟

联合

联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

  • 联合的特点:
  • 联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

// 联合体也叫共用体
union Un
{
	char c;
	int i;
};

int main()
{
	union Un u;
	// 4个字节
	printf("%d \n", sizeof(u));

	// 三个内存地址相同 共用同一块空间
	printf("%p \n", &u);
	printf("%p \n", &(u.c));
	printf("%p \n", &(u.i));
	return 0;
}

//--------------------------------------------------------------


int my_da()
{
	union Un
	{
		char c;
		int i;
	}u;
	u.i = 1;
	return u.c;
}

int main()
{
	int ret = my_da();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

//----------------------------------------------------------
  • 联合大小的计算

  • 联合的大小至少是最大成员的大小。

  • 当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。


union U
{
	short c[5];// 2 10
	int i;// 4
}u;

int main()
{
	printf("%d", sizeof(u));// 12字节
	return 0;
}