20、结构体

发布于:2024-12-07 ⋅ 阅读:(29) ⋅ 点赞:(0)

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);