1、结构体和共用体的定义
结构体关键字为struct,共用体关键字为union
/*** 定义一个person的结构体,要';'结束*/struct person{ char name[20]; //姓名 char sex[10]; //性别 int age; //年龄 float height; //身高 float weight; //体重 };
/*** 定义一个people共用体*/union people{ char name[20]; int age;};
2、结构体和共用体的声明
结构体和共用体的三种声明是一致的:
void mian(){ //结构体的声明
//一般声明 struct person p1; union people pe1; //直接声明 struct person{ char name[20]; int age; }p2; union people{ char name[20]; int age; }pe2; //匿名声明,此方式该结构体只能声明一次 struct{ char name[20]; int age; }p3; union{ char name[20]; int age; }pe3;
}
3、结构体和结构体变量的使用
3.1、对结构体成员的使用
/*** 定义一个结构体,并声明结构体对象p1*/struct person{ char name[20]; int age; }p1;
void main(){ //初始化结构体 p1 = {"zack", 20};
//访问结构体成员的三种方法 //1、结构体变量名.成员名 p1.name printf("%s", p1.name);
//2、指针变量名->成员名 //3、(*指针变量名).成员名}
4、结构体变量的初始化
前面已经了解了如何赋值,然后弄一个稍微复杂一点的结构体赋值:
/*** 定义一个生日的结构体*/struct birthday{ int year; int month; int day;};
/*** 定义一个person结构体,以结构体birthday作为成员变量*/struct person{ char name[20]; int age; struct birthday date;}p;
void main(){ //初始化person,如果成员变量为结构体,使用{}赋值 p = {"zack", 20, {1999, 12, 1}};}
5、结构体数组定义及初始化
/*** 定义结构体并声明数组*/struct person{ char name[20]; int age;}p[2];
void main(){ //初始化结构体数组 p = {{"zack", 20}, {"Rudy", 19}};}
6、结构体和函数
结构体可以作为函数参数
/*** 定义一个结构体*/struct person{ char name[20]; int age;};
/* 声明一个函数 */void demo(struct person p);void main(){ //初始化结构体 struct person p = {"zack", 20}; //将结构体作为参数传入demo函数 demo(p);}
/*** 定义一个函数,接收结构体,并把结构体信息输出*/void demo(struct person p){ printf("姓名:%s\n", name); printf("年龄:%d", age);}
7、结构体和共用体的区别
结构体在创建时,按照结构体成员变量占的内存分配。而共用体则按照共用体中,所占内存最大的变量分配内存。所以,共用体变量只能单个使用,而结构体可以所有变量一起使用。