详解C语言结构体的定义和使用 您所在的位置:网站首页 结构体定义和使用 详解C语言结构体的定义和使用

详解C语言结构体的定义和使用

#详解C语言结构体的定义和使用| 来源: 网络整理| 查看: 265

目录1.1:结构体用来干嘛?1.2:结构体变量的基本定义格式1.3:结构体变量的定义1.4结构体变量的三种引用方法2.结构体变量的使用(直接使用结构体变量)2.1输出结果3.使用结构体指针操作,返回总成绩最低的学生信息3.1运行结果总结:

1.1: 结构体用来干嘛?

生活中我们会遇到很多的表格,就比如你的学习成绩表,有姓名 ,学号,各科的成绩,总的成绩等等,这是一些不同的数据类型,我们要是在c语言中想同时使用这些不同的数据怎么办呢? 可以使用结构体变量,结构体变量在c语言中是一种构造类型的数据,顾名思义,它跟基本的如int这种原子类型的变量不同.可以把他看作这些基本变量的集合.

1.2:结构体变量的基本定义格式 struct 结构体名 { ; ; ; };

注意:struct 是关键字是结构体类型的说明标识符,不能省略,结构体名可以省略,我们在使用 typedef struct 时就省略了就不写结构体名

1.3:结构体变量的定义

(我们也可以在创建结构体的时候声明变量这里不再赘述,提一下我对结构体变量的理解:首先结构体就是一个各种基本数据类型的集合,而就结构体变量就像我们定义一个集合s={1,2,3,4},s就相当于一个结构体变量,结构体变量包含结构体中的各个成员变量,我们可以对成员变量进行引用,操作....)

struct 结构体名 a, b; //定义了两个结构体变量 strcut 结构体名 S[4]; //定义一个结构体变量数组,有四个元素 strcut 结构体名* p = &a; //定义一个结构体指针,指向结构体变量a

1.4结构体变量的三种引用方法 结构体变量.成员名 (*结构体指针).成员名 结构体指针->成员名 //使用指针的时候推荐使用这一种,因为在数据结构中,很多这种引用方式

2.结构体变量的使用(直接使用结构体变量) #include /*结构体的使用*/ int main() { struct job_exam //定义一个job_exam的结构体 { unsigned num; //学号 char name[10]; //姓名 char gread_class[10]; //班级 int EngLish; //英语成绩 int Chinese; //语文成绩 int Match; //数学成绩 int Sum_Exam; //总成绩 }; struct job_exam Most_Exam_Student; //结构体变量用来存放成绩最高的同学的信息 struct job_exam SomeStudent_news[4] = { {1901,"陇军","3-2班",100,100,78},{1902,"李华","3-2班",99,99,88}, {1903,"李明","3-2班",99,98,90},{1903,"李光","3-2班",99,98,80}}; //结构体数组用来输入4名同学的信息 for (int i = 0; i < 4; i++) //依次计算每一位同学的总成绩 { SomeStudent_news[i].Sum_Exam = SomeStudent_news[i].EngLish + SomeStudent_news[i].Chinese + SomeStudent_news[i].Match; } Most_Exam_Student = SomeStudent_news[0]; //假使第一个学生的成绩最高 if (Most_Exam_Student.Sum_Exam < SomeStudent_news[1].Sum_Exam) { Most_Exam_Student = SomeStudent_news[1]; } else if (Most_Exam_Student.Sum_Exam < SomeStudent_news[2].Sum_Exam) { Most_Exam_Student = SomeStudent_news[2]; } else { Most_Exam_Student = SomeStudent_news[3]; } printf("总成绩最高学生的信息为:\n"); printf(" 编号 姓名 班级 英语 语文 数学 总成绩\n"); printf("%6u %7s %7s %6d %6d %6d %6d",Most_Exam_Student.num,Most_Exam_Student.name,Most_Exam_Student.gread_class,Most_Exam_Student.EngLish,Most_Exam_Student.Chinese,Most_Exam_Student.Match,Most_Exam_Student.Sum_Exam); }

2.1输出结果

当用结构体变量作为函数参数进行整体传送时,要将全部成员逐个进行传送,当成员中有数组时,会使传送的时间和空间开销都很大严重降低程序的效率,所以我们一般在使用时不直接传送结构体变量,而是传送结构体变量的地址,减少时间课空间的开销

3.使用结构体指针操作,返回总成绩最低的学生信息 #include /*结构体的使用*/ int Find_Sumexam(struct job_exam* pa); //函数声明 struct job_exam //定义一个全局job_exam的结构体 { unsigned num; //学号 char name[10]; //姓名 char gread_class[10]; //班级 int EngLish; //英语成绩 int Chinese; //语文成绩 int Match; //数学成绩 int Sum_Exam; //总成绩 }; struct job_exam SomeStudent_news[4] = { {1901,"陇军","3-2班",100,100,78},{1902,"李华","3-2班",99,99,88}, //结构体数组用来输入4名同学的信息 {1903,"李明","3-2班",99,98,90},{1903,"李光","3-2班",99,98,80} }; int main() { struct job_exam Most_Exam_Student; //结构体变量用来存放成绩最高的同学的信息 for (int i = 0; i < 4; i++) //依次计算每一位同学的总成绩 { SomeStudent_news[i].Sum_Exam = SomeStudent_news[i].EngLish + SomeStudent_news[i].Chinese + SomeStudent_news[i].Match; } Find_Sumexam(&Most_Exam_Student); //函数调用 printf("总成绩最低学生的信息为:\n"); printf(" 编号 姓名 班级 英语 语文 数学 总成绩\n"); printf("%6u %7s %7s %6d %6d %6d %6d",Most_Exam_Student.num,Most_Exam_Student.name,Most_Exam_Student.gread_class,Most_Exam_Student.EngLish,Most_Exam_Student.Chinese,Most_Exam_Student.Match,Most_Exam_Student.Sum_Exam); } int Find_Sumexam(struct job_exam* pa) //定义一个返回最高学生信息的函数 { *pa = SomeStudent_news[0]; //假使第一个学生的总成绩最高 for (int i = 1; i < 4; i++) { if (pa->Sum_Exam > SomeStudent_news[i].Sum_Exam) { *pa = SomeStudent_news[i]; //这样的化只需要找到最高一个学生的地址返回他的信息就可以了 } } return 0; }

3.1运行结果

总结:

结构体没有什么神奇的就是,一个集合里面包含了各种数据类型,我们想用什么加个.就可以拿出来用,本质和基本的数据类型没有什么区别,欢迎大家来评论区指出有问题的地方

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

您可能感兴趣的文章:C语言的结构体你了解吗C语言中结构体实例解析C语言位段(位域)机制结构体的特殊实现及解析C语言复数的加减及输出结构体C语言结构体数组的定义和使用详解C语言结构体指针引用详解C语言结构体的全方面解读深入浅出理解C语言初识结构体


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有