C语言结构体(struct)类型的各种用法

您所在的位置:网站首页 please的各种用法 C语言结构体(struct)类型的各种用法

C语言结构体(struct)类型的各种用法

2023-09-08 02:32| 来源: 网络整理| 查看: 265

文章目录 一、基本概念二、结构体定义的三种方式(声明后有不能忘了;号)三、访问结构体成员四、结构体数组五、结构体的嵌套

一、基本概念

在C语言中,可以定义结构体类型,将多个相关的类型的变量包装成为一个整体使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。

二、结构体定义的三种方式(声明后有不能忘了;号)

1、标准定义方式

#include //结构体类型的声明与定义分开 struct student { int age; //年龄 float score; //分数 char sex; //性别 }; //结构体类型声明结束 int main () { //结构体类型变量的定义 struct student a={23, 98, 'f'}; printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex ); return 0; }

2、声明结构体时定义变量(不环保)

#include //在结构体的声明时直接定义变量 struct student { int age; //年龄 float score; //分数 char sex; //性别 } a={23, 87,'n'}; //声明结构体时直接定义变量a,并赋初值 int main() { //在main函数中直接调用定义好的结构体变量a printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex ); }

3、无类型名的结构体(此法最差,只能用一次)

#include //直接定义结构体变量,没有结构体类型名 struct { int age; float score; char sex; } t={23, 98, 'f'}; int main () { printf("年龄:%d 分数:%f 性别:%c\n", t.age, t.score, t.sex); return 0; }

4、用typedef给自定义的结构体加一个名字(typedef 已有类型 新类型名)

#include //在结构体的声明时直接定义变量 typedef struct student { int age; //年龄 float score; //分数 char sex; //性别 }; //声明结构体时直接定义变量a,并赋初值 int main() { //定义结构体变量 student a={23, 87,'n'}; //此时就可以直接用student这个类型名了 //在main函数中直接调用定义好的结构体变量a printf("年龄:%d 分数:%.2f 性别:%c\n", a.age, a.score, a.sex ); } 三、访问结构体成员

用结构成员运算符点“ . ”就可以了:结构体变量名.成员名; 注意,点其结合性是自左至右的,它在所有的运算符中优先级是最高的。 1、一维数组 比如声明了一个结构体student,定义了一个变量stu:

struct student { char name[10]; //相当于一个字符串,即char型数组 int num; //int型数据,编号 int age; //年龄 float score[3]; //3门课的分数 char sex; //性别 } stu;

在这个结构体中,如果要访问第二门课的分数,则需要这样访问:

//输入: scanf("%f", &stu.score[1]); //取的是第二门课成绩的地址 //输出: printf("%f", stu.score[1]) //输出的是第二门课成绩

2、二维数组(同理) 比如声明了一个结构体student,定义了一个变量stu:

struct student { char name[10]; //相当于一个字符串,即char型数组 int num; //int型数据,编号 int age; //年龄 float score[3][2]; //3门课的分数,都有两次测验 char sex; //性别 } stu; //输入: scanf("%f", &stu.score[1][1]); //取的是第二门课第二次测验成绩的地址 //输出: printf("%f", stu.score[1][1]) //输出的是第二门课第二次测验的成绩

3、其他更高维数组的用法都是一样的道理,以此类推。

四、结构体数组

比如声明了一个结构体student,定义了一个结构体变量数组stu[3]:

struct student { char name[10]; //相当于一个字符串,即char型数组 int num; //int型数据,编号 int age; //年龄 float score[3][2]; //3门课的分数,都有两次测验 char sex; //性别 } stu[3];

这里的stu就是一个结构体数组,包含了3个student类型的结构体变量。 接下来我们试着访问第3个结构体变量的第1门课第2次测验的成绩:

//输入: scanf("%f", &stu[2].score[0][1]); //取的是第三个结构体变量第一门课第二次测验成绩的地址 //输出: printf("%f", stu[2].score[0][1]) //输出的是第三个结构体变量第一门课第二次测验的成绩 五、结构体的嵌套

比如声明了一个结构体student,里面包含了一个结构体GoodStudent,里面声明了好学生的名字和成绩,同时定义了一个结构体变量数组stu[3]:

struct student { int num; //int型数据,编号 int age; //年龄 char sex; //性别 struct GoodStudent { char name[10]; //相当于一个字符串,即char型数组 float score[3][2]; //3门课的分数,都有两次测验 } } stu[3];

此时要访问结构体GoodStudent好学生中的成绩,仍然是用“ . ”成员访问符来访问。

比如要访问第2个结构体变量的好学生的第2门课第1次测验的成绩:

//输入: scanf("%f", &stu[1].GoodStudent.score[1][0]); //取的是第2个结构体变量的好学生的第2门课第1次测验的成绩的地址 //输出: printf("%f", stu[1].GoodStudent.score[1][0]) //输出的是第2个结构体变量的好学生的第2门课第1次测验的成绩成绩


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3