结构体与共用体

结构体

什么是结构体

结构体是C语言中的一种数据类型,它有如下特点

  1. 结构体是一种构造数据类型
  2. 把不同类型的数据组合成一个整体来自定义数据类型

结构体的定义方式与结构体变量的声明

//有名结构体 
struct Student{
	int num;
	char name[30];
} s1;

//匿名结构体 
struct Staff{
	char name[30];
	int sllary;
};
//使用define
#define ds struct DefineStruct
ds{
	int i;
};

//使用typedef
typedef struct date{
	int year;
	int month;
	int day;
} Date;


结构体类型与结构体变量

结构体类型与结构体变量概念不同,相当于java中的类,和具体类的实例

  1. 类型:不分配内存;变量:分配内存
  2. 类型:不能赋值、存取、运算等操作,变量可以
    结构体可嵌套,但防止递归嵌套
    结构体成员名可与程序中变量名相同,不会造成混淆

结构体变量的初始化

//像创建类一样,先创建结构体,再声明具体实例变量 
struct person
{
	int num;
	char name[20];
};
struct person pf={18,'pf'};
//有点类似于c#中类的初始化器的概念,主要是为了让代码更加简洁 
struct animal{
	int weight;
	char name[20];
} lion={3,'xinba'}; 
//匿名类+初始化器的形式,再度简化了代码
struct {
	int height;
	char name[20];
} cat{2,"tom"};

结构体变量的引用

这个知识点比较重要,在2017年的真题当中就有涉及,总共有3种引用方式:

struct person
{
	int num;
	int height;
	int age;
};
struct person pf={18,171,200},
*p=&pf;
  pf.num=20;				//结构体变量名.成员名
  p->height=180;			//结构体指针名->成员名
  (*p).age=300;				//(*结构体指针名).成员名
 printf("num=%d,weight=%d,age=%d",pf.num,p->height,(*p).age);

共用体

共用体的定义:共用体也叫联合体,与结构体类似,也是一种构造数据类型,但却有着不同的行为方式。一般至少由一种数据类型构成,所有成员引用的是内存中相同的位置

定义方式如下,我的理解就是把一堆不一样的类型拼在一起,然后对于这个共用体可以放置成员内的所有类型,如例子中的int,char,float(不恰当的比方就是low一点的泛型)。然后存放变量的时候每次只能存放一种类型的,并且共用体union的内存大小取自成员中占用内存最大的那种类型。

union data{
	int i;
	char ch;
	float f;
}a,b;

union data2{
	int i;
	char ch;
};
union data2 x,y,z,*p,d[3];

union{
	int i;
	char ch;
}u,v,w;

原文地址:https://www.cnblogs.com/falcon-fei/p/11060182.html