《C语言初阶》 第七部分 结构体(基础篇)

大家好!这部分内容是《C语言初阶》中最后一个知识点,我会在这篇文章中让大家了解结构体的一些基本概念,在《进阶》时,我会更加详细的介绍结构体。好了,话不多说,直接开始。
在这里插入图片描述

1.结构体的声明

1.1 结构的基础知识

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

1.2 结构的声明

语法形式:

struct tag
{
 member-list; 
}variable-list;

struct 是结构体的关键字。tag是结构体标签。
member-list是成员列表。variable-list是变量列表。
我们举一个学生的例子:

struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}s1,s2;//分号不能丢

这里s1,s2都是结构体变量。等同于在main函数创建一样:
在这里插入图片描述
这两种创建变量的区别是什么呢?
上面的方式是全局的,在main里面是局部的。

1.3 结构成员的类型

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

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

这里比较简单,我们举个例子:

struct Stu
{
	char name[20];//名字
	int age;//年龄
};
int main()
{
	struct Stu s = {"zhangsan",18};
	return 0;
}

那我们在结构体里面再放一个结构体,该怎么初始化呢?

struct A
{
	int a;
	char b;
	double c;
};
struct Stu
{
	struct A d;
	char name[20];//名字
	int age;//年龄
};

int main()
{
	struct Stu s = { {10,'w',3.14},"zhangsan",18};
	return 0;
}

就再大括号里面再加一个括号就ok了,里面初始化另一个结构体里的成员变量。

2. 结构体成员的访问

1.结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
例如:
在这里插入图片描述
2.结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。那该如何访问成员。
例如:
在这里插入图片描述
这两种方式都可以。

3. 结构体传参

在这里插入图片描述
我们知道s里面有arr,f,ch,它们加起来是一块非常大的空间,我们传s过去,其实是传值调用。传值调用是一份临时拷贝,所以在函数调用时也会再次创建一个一样空间大小的tmp。这样,对电脑的消耗是非常大的。
那我们该怎么去改呢?
在这里插入图片描述
这样我们传地址过去就会节约许多。
小结:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,会导致性能的下降。
结构体传参的时候,要传结构体的地址。

总结:

到这里,我们《C语言初阶》的基本内容已经差不多结束了。很快就会讲解《C语言进阶》,这部分内容会更加深入,我会尽我所能给大家讲清楚。如果大家认为我有哪些不足之处或者知识上的错误都可以告诉我,我会在之后的文章中不断改正,也请大家多多包。如果大家觉得这篇文章有用的话,也希望大家可以给我关注点赞,你们的支持就是对我最大的鼓励,我们下一篇文章再见。
在这里插入图片描述

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学代码的咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值