1.结构体类型的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量
结构的每个成员可以是不同类型的变量
1.2结构的声明
structtag
{
member-list;
}variable-list;
tag:自定义的结构体类名(可以根据实际情况命名)
member-list:成员变量的列表
variable-list:变量列表
为什么要出现结构体?
当前学习过的类型都是内置类型,比如char,int,short等,这些类型都是孤立的,单独用一种类型无法描述复杂的对象;比如要描述一个人:
人:名字+性别+年龄+电话+地址
人就是一个复杂对象,C语言引入了结构体来描述这种复杂对象
假设我们需要描述一个学生,我们需要创建一个学生类型,用学生类型创建一个学生变量,这个学生变量里存放学生的属性信息
这就是我们声明的一个结构体类型 ,当我们有了类型之后,就可以创建学生变量
这是一种创建方式,还有另外一种创建变量的方式
这里的s1,s2和s3,s4一样,都是结构体变量
区别在于:s3,s4是全局变量;s1,s2是局部变量
这种方式,在main函数中创建变量的时候不能省略struct关键字
我们用这种方式,在mian函数中创建变量的时候就可以省略struct关键字
1.3结构体成员的类型
结构的成员类型可以是标量、数组、指针,甚至是其他的结构体
2.结构体变量的定义和初始化
2.1定义变量
我们举个例子:
2.2结构体初始化
3.结构体成员访问
结构体变量访问成员
结构体变量的成员是通过点操作符(.)访问的,点操作符接受两个操作数
- 结构体变量 . 变量名
例如:
我们可以看到s有成员name和age;
那我们该如何访问s的成员?
struct S s; strcpy(s,name, "zhangsan");//使用.访问name成员 s.age = 20;//使用.访问age成员
结构体指针访问指针变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针
那该如何访问成员,如下
- 结构体指针->成员名
4.结构体传参
结构体传参分为 :
- 结构体传参(传结构体)
- 结构体地址传参(传地址)
这里我们建议使用传地址,传地址的效率更高
原因是:
函数传参的时候,参数是需要压栈的
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降
结论:
结构体传参的时候,尽量穿结构体的地址
5.结束
那么今天的学习就到这里咯,今天我们学习了结构体的知识
小杜跟各位小伙伴在一起成长,祝我们都能成为大牛!
//小杜的成长之路