1、结构体
基本数据:整型 实型 字符型 --- 1个空间只能存放1个数据
数组:多个 同种类型的数据
结构体也是一种数据类型,是一种自定义的数据类型,需要开发者自己创造 。
结构体可以存放不同数据类型的数据。
比如:
获取班级最高分同学的姓名。 ---
字符串类型 float类型
{"小王",500}
{"xiaomei",700}
{"xiaoli",400}
比如:
统计图书馆中图书的信息
图书书名: 字符串
图书作者:字符串
图书价格:float
图书库存:int
{"C语言","谭浩强",34.5,20}
{"M4","xyd",40,100}
2、结构体类型定义
定义结构体类型:
struct 结构体名
{
成员类型 成员名;
成员类型 成员名;
....
};
例:
获取班级最高分同学的姓名。 ---
字符串类型 float类型
{"小王",500}
{"xiaomei",700}
{"xiaoli",400}
需要两个成员:
姓名:字符串类型
分数:float类型
struct student
{
char name[20];
float score;
};
结构体类型名: struct student ---- 类似与int 、char 不占空间,只规定了尺寸
3、结构体变量
结构体类型 变量名;
结构体变量使用: 节点体变量名.成员名
struct student
{
char name[20];
float score;
int a[5];
};
// 定义一个struct student 类型的变量
struct student a; // 开空间
struct student b; // 开空间
// 通过结构体变量操作里面的成员 : .语法
// a.name --- 可以做地址
scanf("%s",a.name);
// a.score ---- &a.score
scanf("%f",&a.score);
printf("%s %f\n",a.name,a.score);
// b.name --- 数组名
strcpy(b.name,"小明");
// b.score -- float
b.score = 56.7;
printf("%s %f\n",b.name,b.score);
// 定义第三方结构体变量,实现a和b结构体变量中的数据交换
struct student temp;
temp = a;
a = b;
b = temp;
printf("%s %f\n",a.name,a.score);
printf("%s %f\n",b.name,b.score);
4、结构体指针
是指针,指向的对象是结构体。
定义:
结构体类型 *指针名;
例子:
struct student
{
char name[20];
float score;
};
// 指针指向的空间 (定义变量 、 动态内存申请)
struct student *p;
struct student *q;
struct student a = {"lili",500}; // &a
// 指针p指向a
p = &a;
结构体指针操作指向空间的成员: ->
指针名->成员名
struct student
{
char name[20];
float score;
};
// 指针指向的空间 (定义变量 、 动态内存申请)
struct student *p;
struct student *q;
struct student a = {"lili",500}; // &a
// 指针p指向a
p = &a;
printf("%s %f\n",p->name,p->score);
// 让q指针和p指针同指向,指向a
q = p;
printf("%s %f\n",q->name,q->score);
5、结构体数组
数组 , 里面存放的是结构体
定义结构体数组:
结构体类型 数组名[元素个数];
struct student
{
char name[20];
float score;
};
// 定义一个数组存储3位同学的信息
struct student arr[3];
scanf("%s",arr[0].name);
scanf("%f",&(arr[0].score));
scanf("%s",arr[1].name);
scanf("%f",&(arr[1].score));
scanf("%s",arr[2].name);
scanf("%f",&(arr[2].score));
printf("%s %f\n",arr[0].name,arr[0].score);
printf("%s %f\n",arr[1].name,arr[1].score);
printf("%s %f\n",arr[2].name,arr[2].score);