结构体
多种数据类型构成的整体
结构体定义
一般形式:
struct 结构体名
{
成员列表;
};
例:定义一个结构体类型,它包含num,name等成员
struct student
{
int num;
char name[20];
float socer;
int age;
};
**注意最后的;**
**定义结构体类型变量**
1.利用已经定义过的结构体类型定义变量
例:struct student student1,student2;
graph LR
student-->结构体类型名
graph LR
student1,student2-->结构体变量名
2.声明类型的同时定义
struct student
{
int num;
char name[20];
float socer;
int age;
}student1,student2;
3.在结构体中定义结构体变量
struct date
{
int dat;
int month;
int year;
}
struct student
{
int num;
char name[20];
float socer;
int age;
struct date birthday;
}student1,student2;
**birthday是struct date 类型**
结构体变量的引用
1.不能将结构体作为整体引用
**引用方式**
结构体变量名.成员名
如:student1.num = 15;
多级时:
如:student1.birthday.year = 1995;
结构体变量的初始化
struct student
{
int num;
char name[20];
float socer;
int age;
}a={10010,"liming",85,13};
printf("%d %c %f %d",a.num,a.name,a.socer);
**注意**
1."="
2.结构体变量中是","不是";"
结构体数组
与定义结构体变量相似,只需要把相应的结构体变量变成数组。
struct student
{
int num;
char name[20];
float socer;
int age;
}stu[3];
代表的就是:
stu[0]->10010,lihua,85,15
stu[1]->10011,xiaoming,80,10
stu[2]->10012,xiaomin,75,16
结构体数组应用
#include <stdio.h>
struct person
{
char name[20];
int count;
};
int main()
{
struct person leader[3]={{"a",0},{"b",0},{"c",0}};
int i,j;
char leader_name[20];
for(i=0;i<5;i++)
{
scanf("%s",leader_name);
for(j=0;j<3;j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++;
}
for(i=0;i<3;i++)
printf("%s = %d",leader[i].name,leader[i].count);
}
结构体指针(指向结构体数据类型的指针)
1.(*p).num 等价于 p->num 等价于 student.num
其中 -> 称为指向运算符
p -> num 得到p指向结构体变量成员num的值
p -> num++ 得到p指向结构体变量成员num的值,用完该值后使他加一
++p -> num 得到p指向结构体变量成员num的值加一,然后再使用它
共用体
union date //可省略date
{
int count;
char ch;
float f;
}a,b,c;
abc三个变量公用一段内存.所以在一个时刻只能使用一个变量