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

目录
  • 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 <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运行结果

总结:

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

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

(0)

相关推荐

  • C语言自定义类型详解(结构体、枚举、联合体和位段)

    目录 前言 一.结构体 1.结构体类型的声明 2.结构体的自引用 3.结构体变量的定义和初始化 4.结构体内存对齐 5.结构体传参 二.位段 1.位段的定义 2.位段的内存分配 3.位段的应用 三.枚举 1.枚举类型的定义 2.枚举的优点 3.枚举的使用 四.联合体(共用体) 1.联合体的定义 2.联合体的特点 3.联合体的大小计算 总结 前言 一.结构体 1.结构体类型的声明 当我们想要描述一个复杂变量--学生,可以这样声明. ✒️代码展示: struct Stu { char name[20

  • C语言使用四种方法初始化结构体

    什么是结构体 在实际问题中,一组数据往往有很多种不同的数据类型.例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄,char型的性别,float型的成绩.又例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格.在这些情况下,使用简单的基本数据类型甚至是数组都是很困难的.而结构体(类似Pascal中的"记录"),则可以有效的解决这个问题.结构体本质上还是一种数据类型,但它可以包括若干个"成员&quo

  • C语言结构体定义的方法汇总

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据结构.结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问. 结构体与数组的比较 (1) 都由多个元素组成 (2) 各个元素在内存中的存储空间是连续的 (3) 数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同 结

  • C语言结构体的具体使用方法

    目录 初识C语言结构体 1.为什么要有结构体 2.结构体的定义 2.1结构体类型的定义 2.2定义结构体普通变量及访问 2.3定义结构体指针变量及访问 初识C语言结构体 1.为什么要有结构体 (1)之前int.char等类型描述的结构体非常单一,只可描述一种类型. (2)数组也是描述同一类型的集合,只可描述一种类型. (3)而结构体使得C语言可以描述复杂类型,比如学生类型( 包含学生的名字.年龄.性别.电话号等信息). 结构体和数组的区别: ·结构体:用来描述相同/不同数据元素类型的集合. ·数

  • C语言自定义数据类型的结构体、枚举和联合详解

    结构体基础知识 首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解决,所以就出现了最重要的自定义数据类型,结构体. 首先我们创建一个书的结构体类型来认识一下 struct Book { char name[20]; char author[20]; int price; }; 首先是struct是结构体关键字,用来告诉编译器你这里声明的是一个结构体类型而不是其他的东西,然后是Boo

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

    目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组

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

    目录 1.1: 结构体用来干嘛? 1.2:结构体变量的基本定义格式 1.3:结构体变量的定义 1.4结构体变量的三种引用方法 2.结构体变量的使用(直接使用结构体变量) 2.1输出结果 3.使用结构体指针操作,返回总成绩最低的学生信息 3.1运行结果 总结: 1.1: 结构体用来干嘛? 生活中我们会遇到很多的表格,就比如你的学习成绩表,有姓名 ,学号,各科的成绩,总的成绩等等,这是一些不同的数据类型,我们要是在c语言中想同时使用这些不同的数据怎么办呢? 可以使用结构体变量,结构体变量在c语言中是

  • 详解C语言结构体,枚举,联合体的使用

    目录 一.匿名结构体 二.结构体的自引用 1.声明时不要自己引用自己 2.结构体重命名时不能使用重命名 三.结构体内存对齐规则 1.结构体内存计算 2.结构体嵌套 3.通过调整结构体成员顺序,压缩内存 四.存在内存对齐的原因 五.修改默认对齐数 六.结构体传参 七.位段 1.位段在内存中的存储 2.位段的跨平台问题 八.枚举 1.枚举的定义 2.枚举的优点 九.联合体(共用体) 1.联合体大小的计算 2.使用联合体判断计算机的大小端字节序 一.匿名结构体 struct { char name[2

  • 详解C语言结构体中的char数组如何赋值

    目录 前景提示 一.char数组类型的处理 1.结构体初始化 2.结构体内数据赋值(简单法) 二.char数组指针类型的处理 1.结构体初始化 2.结构体内数据赋值 3.结构体内输出数据 三.全部代码 1.char数组 2.char数组指针 总结 前景提示 定义一个结构体,结构体中有两个变量,其中一个是char类型的数组,那么,怎么向这个数组中插入数据,打印数据呢? typedef struct SequenceList { // 数组的元素 char element[20]; // 数组的长度

  • 详解C语言结构体中的函数指针

    结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.所以,标准C中的结构体是不允许包含成员函数的,当然C++中的结构体对此进行了扩展.那么,我们在C语言的结构体中,只能通过定义函数指针的方式,用函数指针指向相应函数,以此达到调用函数的目的. 函数指针 函数类型 (*指针变量名)(形参列表):第一个括号一定不能少. "函数类型"说明函数的返回类型,由于"()"的优先级高于"*",所以指针变量名外的括号必不可少.  注意指针函数与函数指针表示

  • 详解C语言#define预处理宏定义

    目录 #define介绍: #define宏定义无参的一般形式为:#define  标识符 常量 #define宏定义有参的一般形式为:#define  标识符(参数表) 表达式 #运算符: ##运算符: 可变宏...和__VA_ARGS__: 开发项目中常用的宏定义: #define介绍: C语言里可以用#define定义一个标识符来表示一个常量.特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了,也不做类型定义.预编译又叫预处理.预编译就是编译前的处理.这个操作是在

  • C语言结构体指针引用详解

    目录 指向结构体变量的指针 指向结构体数组的指针 结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针. 前面讲过,&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址.如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员. 那么,这个指针变量定义成

  • go语言结构体指针操作示例详解

    目录 指针 go指针操作 不能操作不合法指向 new函数 指针做函数的参数 数组指针 结构体指针变量 结构体成员普通变量 结构体成员指针变量 结构体比较和赋值 结构体作为函数参数 指针 指针是代表某个内存地址的值.内存地址储存另一个变量的值. 指针(地址),一旦定义了不可改变,指针指向的值可以改变 go指针操作 1.默认值nil,没有NULL常量 2.操作符“&”取变量地址,“*“通过指针(地址)访问目标对象(指向值) 3.不支持指针运算,不支持“->”(箭头)运算符,直接用“.”访问目标成

  • 详解C语言中结构体的使用

    目录 结构体的声明 结构体成员的类型 结构体成员的访问 结构体的声明 结构体的定义:结构体是一些值的集合,这些值称为成员变量,结构体的每个成员可以是不同类型的变量. 举例: //定义结构体类型 struct tag//struct结构体关键字 tag结构体标签 struct tag结构体类型 { //成员变量 char name[20]; short age; char telphone[12]; char sex[5]; }s1,s2,s3;//s1,s2,s3是三个全局结构体变量 int m

  • 详解C语言中结构体(struct)的用法

    目录 粉丝问答 三种结构体类型变量说明 1. 先定义结构,再定义结构变量 2. 定义结构体类型的同时说明变量 3. 直接说明结构变量 结构体成员表示方法 结构体指针做参数 结构体初始化 定义变量的同时初始化 先定义在初始化 常用初始化 typedef与struct 前置声明 结构体对齐 粉丝问答 有个粉丝在群里问了这样一个问题,问题在图中已经标出,如下图. DQuestsion 头文件的结构体的定义为: typedef struct{ u8 bmRequestType; u8 bRequest;

随机推荐