小甲鱼 P51 共用体

小甲鱼 P51 共用体

共用体(联合体,联合类型)

定义方式:

共用体的所有成员共享同一个内存地址!!

不能同时打印共用体三者的值!!

#include <stdio.h>
#include <string.h>

//共用体,共用同一个内存地址 
union Test
{
	int i;
	double pi;
	char str[6];
};

int main(void)
{
	union Test test;
	
	test.i = 520;
	test.pi = 3.14;
	strcpy(test.str, "FishC");
	
	printf("add od test.i: %p\n", &test.i);
	printf("add od test.pi: %p\n", &test.pi);
	printf("add od test.str: %p\n", &test.str);
	
	//只有最后一个成员str的值打印才正确,因为3个成员都是引用同一个内存地址
	//对它们三个赋值,会导致互相的覆盖
	//第二个成员打印3.13,好像差不多正确,实际打印错误
	//double占8个字节,第三个char是占6个字符,所以并没有完全覆盖8个字节的double pi 
	printf("test.i: %d\n", test.i);
	printf("test.pi: %.2f\n", test.pi);
	printf("test.str: %s\n", test.str);
	
	return 0;
}

修改一下代码:

(每一刻只能使用其中一个成员,而不能同时使用它们 )

#include <stdio.h>
#include <string.h>

//共用体,共用同一个内存地址 
union Test
{
	int i;
	double pi;
	char str[10];
};

int main(void)
{
	union Test test;
	
	test.i = 520;
	test.pi = 3.14;
	strcpy(test.str, "FishC.com");
	
	printf("add od test.i: %p\n", &test.i);
	printf("add od test.pi: %p\n", &test.pi);
	printf("add od test.str: %p\n", &test.str);
	
	//只有最后一个成员str的值打印才正确,因为3个成员都是引用同一个内存地址
	//对它们三个赋值,会互相的覆盖
	//打印第一个和第二个成员会打印错误 
	//double占8个字节,第三个char是占10个字符,所以完全覆盖double pi 
	//每一刻只能使用其中一个成员,而不能同时使用它们 
	printf("test.i: %d\n", test.i);
	printf("test.pi: %.2f\n", test.pi);
	printf("test.str: %s\n", test.str);
	
	printf("size of test: %d\n", sizeof(test));
	
	return 0;
}

结果:

定义共用体类型变量

定义共用体跟定义结构体的语法相似,你可以先声明一个共用体类型,再定义共用体变量:

union date

{

int i;

char ch;

float f;

};

union data a, b, c; 

也可以在声明的同时定义共用体变量:

union date

{

int i;

char ch;

float f;

}a, b, c;

初始化共用体

共用体,同一时间只能存放一个成员值,所以不要试图同时初始化多个成员

猜你喜欢

转载自blog.csdn.net/xiaodingqq/article/details/82949438