C语言学习—联合体Union和关键字Typedef

C语言学习—联合体Union和关键字Typedef

前言

内容主要为联合体Union和关键字Typedef 的认知学习与简单应用

1 联合体Union

1.1 Union认知

Union常用于同一位置想要描述不同情况下的不同事件,特点是:

  • 联合体的空间大小取决内部最大的元素
  • 联合体内部元素地址相同,因此特点是数据易覆盖
#include <stdio.h>
//联合体学习

//结构体
struct Test1
{
    
    
	int idata;
	char cdata;
	double ddata;
};
//联合体
union Test2
{
    
    
	int idata;
	char cdata;
	double ddata;
};


int main()
{
    
    
	struct Test1 T1;
	union Test2 T2;
	printf("struct的大小为:%d\n",sizeof(T1));
	printf("union的大小为:%d",sizeof(T2));//联合体的空间大小取决内部最大的元素
	
	
	printf("idata:%p\n",&T1.idata);
	printf("cdata:%p\n",&T1.cdata);
	printf("ddata:%p\n",&T1.ddata);
	//联合体内部元素地址相同,因此特点是数据易覆盖 
	printf("idata:%p\n",&T2.idata);
	printf("cdata:%p\n",&T2.idata);
	printf("ddata:%p\n",&T2.idata);

	return 0;
}

1.2 Union应用

由上述特点,Union常与结构体一同使用。在结构体中使用联合体,常用于描述一个事件中的两种或多种子事件

#include <stdio.h>
//联合体学习

//联合体应用(结构体中使用联合体,常用于描述一个事件中的两种或多种子事件)
struct Test3
{
    
    
	char name[32];
	char  statu;
	union D
	{
    
    
		int class;
		char ZiWu[32];
	}mes;
};

int main()
{
    
    
	struct Test3 Data[2];
	for(int i=0;i<2;i++)
	{
    
    
		printf("请输入身份:s代表学生,t代表老师\n");
		scanf("%c",&Data[i].statu);
		
		if(Data[i].statu=='s')
		{
    
    
			printf("请输入该学生的班级:\n");
			scanf("%d",&Data[i].mes.class);
			printf("请输入该学生的名字:\n");
			scanf("%s",&Data[i].name);
		}
		else
		{
    
    
			printf("请输入该老师的职务:\n");
			scanf("%s",&Data[i].mes.ZiWu);
		    printf("请输入该老师的名字:\n");
			scanf("%s",&Data[i].name);
		}
		getchar();//吸收回车
		
	}
	
	for(int i=0;i<2;i++)
	{
    
    
		
		if(Data[i].statu=='s')
		{
    
    
			printf("%号人员身份为学生\n",i+1);
			printf("该学生的班级:%d\n",Data[i].mes.class);
			printf("该学生的名字:%s\n",Data[i].name);
		}
		else
		{
    
    
			printf("%号人员身份为老师\n",i+1);
			printf("该老师的职务:%s\n",Data[i].mes.ZiWu);
		    printf("该老师的名字:%s\n",Data[i].name);
		}
	}
	return 0;
}

2 关键字typedef

关键字typedef常用来指定某个数据类型为新的名字

#include <stdio.h>
//Typedef关键字学习

//结构体定义
struct Test
{
    
    
	int data;
	int data1;
};

//关键字定义
typedef struct Test Demo;


int main()
{
    
    
	Demo D;//关键字使用
	D.data=1;
	D.data1=2;
	printf("data=%d,data1=%d\n",D.data,D.data1);
}

猜你喜欢

转载自blog.csdn.net/ONERYJHHH/article/details/125831291
今日推荐