C语言——结构体

目录

导语:

思维导图:

1、结构体的声明

1.1 结构的基础知识 

1.2 结构的声明

1.3 结构成员的类型 

1.4 结构体变量的定义和初始化

2、结构成员访问

3.结构体传参

结语:

导语:

本篇文章讲解结构体的基础知识,对结构体有一个基本的认识,能看懂并会使用结构体。

思维导图:

C语言——结构体_第1张图片

1、结构体的声明

1.1 结构的基础知识 

结构是一些的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量

之前我们学过一种集合的概念——数组,数组就是一组相同元素的集合。而我们现在了解的是一些值的集合,结构的成员可以是不同类型。

那为什么会有结构这个东西呢?原因很简单,我们生活中有很多复杂对象(如图),用一个类型变量无法描述清楚,所以造出来结构来描述我们这些复杂对象。C语言——结构体_第2张图片

1.2 结构的声明

结构的语法声明:

struct Stu
{
	//结构成员
	char gender[10];
	int age;
	char name[20];
	float grade;
};

C语言——结构体_第3张图片

1.3 结构成员的类型 

结构的成员可以是标量、数组、指针,甚至是其他结构体。

这是一个类型,就和char、int、flaot一样,只是这里面可以包含各种类型,可以理解为结构体是“综合型选手”。

1.4 结构体变量的定义和初始化

结构体变量的定义:

struct Stu
{
	//结构成员
	char gender[10];
	int age;
	char name[20];
	float grade;
}s3,s4;//s3和s4也是结构体变量 -- 全局变量
int main()
{
	struct Stu s1,s2;//s1和s2是结构体变量 --局部变量
	return 0;
}

结构体变量的初始化:

struct Stu
{
	char gender[10];
	int age;
	char name[20];
	float grade;
}s3,s4;
struct P
{
	char address[50];
	struct Stu s5;//结构体嵌套
	int class;
};
int main()
{
	struct Stu s1 = { "男",22,"李华",98.2f };//初始化
	struct P s2 = { "武汉",{"女",21,"珍妮",78.4f},108 };//嵌套访问
	return 0;
}

2、结构成员访问

结构变量的成员是通过点操作符(.)访问的,点操作符接收两个操作数。
代码示例:

struct Stu
{
	char gender[10];
	int age;
	char name[20];
	float grade;
}s3,s4;
struct P
{
	char address[50];
	struct Stu s5;//结构体嵌套
	int class;
};
int main()
{
	struct Stu s1 = { "男",22,"李华",98.2f };//初始化
	struct P s2 = { "武汉",{"女",21,"珍妮",78.4f},108 };//嵌套访问
	printf("%s %d %s %.2f\n", s1.gender, s1.age, s1.name, s1.grade);
	printf("%s %s %d %s %.2f %d\n", s2.address,s2.s5.gender,s2.s5.age,s2.s5.name,s2.s5.grade,s2.class);//嵌套访问
	return 0;
}

另外,也可也通过指针访问变量的成员

struct Stu
{
	char gender[10];
	int age;
	char name[20];
	float grade;
}s3,s4;
void Print1(struct Stu s)
{
	//结构体变量.成员
	printf("%s %d %s %.2f\n", s.gender, s.age, s.name, s.grade);
}
void Print2(struct Stu* s)
{
	printf("%s %d %s %.2f\n", (* s).gender, (*s).age, (*s).name, (*s).grade);
	//结构体指针->成员
	printf("%s %d %s %.2f\n", s->gender, s->age, s->name, s->grade);
}
int main()
{
	struct Stu s1 = { "男",22,"李华",98.2f };//初始化
	Print1(s1);//传值调用
	Print2(&s1);//传址调用
	return 0;
}

3.结构体传参

刚才我们通过传值调用传址调用两种形式访问结构体成员,那么哪种方法更好呢?

在我看来,传址调用肯定是好一点的。

传值调用参数会压栈,重新开辟内存,对数据进行存储,另外在传递的时候也会消耗时间,如果结构体过大,那传参的压力比较大,会导致性能的下降;

传址的话,把地址传给函数,一个地址的字节为4个字节或8个字节,这时候传参的压力就会小一点。

结语:

  本次讲解的内容较为基础,所需掌握的是了解什么是结构体,如何访问结构体成员。要知道结构体也是一个类型(自己创建的),里面包含了各个类型,可以用来描述较复杂的对象。
  好了,本次分享就到这里,如果对大家有帮助的话,不妨点个赞支持一下,蟹蟹,再见!

你可能感兴趣的:(原创,C语言,c语言)