浅谈对结构体的理解
本文是学习过程中的思考与总结,存在许多不妥之处,若有幸被大牛指点出纰漏,必当及时更正,感激不尽!
一、什么是结构体?
二、结构体数组与结构体指针
三、结构体指针作为函数参数
四、typedef的用法
一、什么是结构体?
可以把结构体当作自定义的数据类型,它相当于一个容器,里面容纳了许多的基本数据类型(int ,float ,char ,double…诸如此类)。姑且把结构体所容纳的变量叫做成员变量。
1 |
|
注意:结构体大括号后面的;不能丢,否则不是完整的语句。
既然结构体是一种数据类型,那么就可以用它来定义变量。
1 |
|
上述代码中,stu1与stu2便是由stu数据类型定义的变量(类比于int类型定义stu1与stu2)。
需要注意的是:结构体是创建变量的模板(没东西的容器),不占用内存;结构体变量才包含了真实的数据,需要内存来存储。
二、结构体数组与结构体指针
类比着讲更容易理解。
拿int类型举例,int可以定义整型数组,类比来看,结构体数据类型,同样可以定义数组。
1 |
|
从代码中可以发现,stu类型数组j包含了五组stu内部的成员变量(name,num,age,group,score)。
结构体数组的使用很简单j[0].score;
表示的意思就是stu类型的j数组中第一组score。
当一个指针变量指向结构体时,我们就称它为结构体指针。
注意:结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&
1 |
|
通过结构体指针可获得结构体中的成员,(*pstu).score
或者pstu->score
。
三、结构体变量作为函数参数
结构体变量名代表的是整个容器,里面所有成员作为一个集合在一起。而不是同数组一样被编译器转换成指针,用结构体变量传参会极大影响程序的效率。最好的方法就是使用指针,这时由实参传向形参的只是一个地址。
1 |
|
输出结果99.5
。
四、typedef的用法
typedef相当于起外号的工具,在定义结构体变量时非常方便!
1 |
|
如果没有typedef
,我们定义结构体变量时,struct stu student1;
还要如上操作。
但有了typedef
,我们给struct stu
起了一个外号Stu
。如此一来,在定义结构体类型变量时,只需Stu student1;
即可。