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

 更新时间:2021年12月28日 16:19:41   作者:女孩脸红了  
这篇文章主要为大家介绍了C语言结构体的定义和使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

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 <stdio.h>
/*结构体的使用*/
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 <stdio.h>
/*结构体的使用*/
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运行结果

总结:

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

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

相关文章

  • OpenCV 视频中火焰检测识别实践

    OpenCV 视频中火焰检测识别实践

    本文主要介绍了OpenCV 视频中火焰检测识别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C++ 实现读写锁的代码详解

    C++ 实现读写锁的代码详解

    C++读写锁是一种多线程同步机制,它允许多个线程同时读取共享数据,但只允许一个线程写入共享数据,这种锁可以提高程序的并发性和性能,本文给大家介绍了C++ 实现读写锁的代码,需要的朋友可以参考下
    2023-10-10
  • C++中explict关键字用法

    C++中explict关键字用法

    这篇文章主要介绍了C++中explict关键字用法的相关资料,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • C++深入刨析类与对象的使用

    C++深入刨析类与对象的使用

    类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型;变量就是可以变化的量,存储在内存中—个可以拥有在某个范围内的可变存储区域
    2022-05-05
  • VS2017中配置QT5.12.0的图文教程

    VS2017中配置QT5.12.0的图文教程

    本文主要介绍了VS2017中配置QT5.12.0的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言算法积累图的遍历邻接表简单路径

    C语言算法积累图的遍历邻接表简单路径

    这篇文章主要为大家介绍了C语言算法积累图的遍历邻接表简单路径实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • C++操作.json文件的超详细新手教程

    C++操作.json文件的超详细新手教程

    最近因为项目原因需要解析JSON格式数据,所以这篇文章主要给大家介绍了关于C++操作.json文件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • C语言实现最全自动售货机

    C语言实现最全自动售货机

    这篇文章主要为大家详细介绍了C语言实现最全自动售货机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C语言 位段的详细介绍

    C语言 位段的详细介绍

    这篇文章主要介绍了C语言 位段的详细介绍的相关资料,学习C语言基础的朋友,可以参考本文,需要的朋友可以参考下
    2016-11-11
  • C++实现并查集

    C++实现并查集

    这篇文章主要为大家详细介绍了C++实现并查集,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07

最新评论