结构体
什么是结构体
结构体是C语言中的一种数据类型,它有如下特点
- 结构体是一种构造数据类型
- 把不同类型的数据组合成一个整体来自定义数据类型
结构体的定义方式与结构体变量的声明
//有名结构体
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中的类,和具体类的实例
- 类型:不分配内存;变量:分配内存
- 类型:不能赋值、存取、运算等操作,变量可以
结构体可嵌套,但防止递归嵌套
结构体成员名可与程序中变量名相同,不会造成混淆
结构体变量的初始化
//像创建类一样,先创建结构体,再声明具体实例变量
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;