struct关键字可以使你定义一个结构体类型
个人认为就是把一些不同类型组合到了一起以满足不同的需要
比如,你想储存一个学生的信息
它包含,名字,年龄等
那么每储存一个学生就需要将其信息进行依次声明
非常麻烦繁琐
所以就想,为什么指令可以封装成函数
数据就不可以封装呢
答案是可以
将你所需要的数据类型封装成一个结构体类型
那么这个结构体类型就包含了所有你声明在结构体中的类型
如:
运行是没有问题的
但是现在有一个问题
如何使用结构体?
首先,stu是一个类型,它并不是变量
所以我们应当声明一个结构体变量
如:
或
直接在结构体下方声明
那么我们得到的结构体变量A就是一个全局变量(作用域不在任何一对花括号之间,并且结构体名(stu)可有可无)
(PS:如果没用结构体名,那么无法进行结构体变量再创建,所以此方法不推荐)
而第一种声明我们得到的是局部变量
当然,我们也可以写成
这样也是全局变量
解决了声明问题
接下来就是如何使用了
如果是直接引用(不使用指针)
则直接用'.'(选择运算符)
如:
如果是间接引用(使用结构体指针)
首先声明指针
如:
然后再指向引用对象
此时引用方法为
(PS:加括号是因为运算优先级不一样'.'号比'*'号高)
非常繁琐,所以还有一种简单的间接引用方法
这种运算也被称为成员指针运算
那么此时,结构体类型的使用就和一般类型的使用基本一致了
因为结构体类型也是一个类型
所以可以进行结构体嵌套调用
也就是说,在一个结构体中可以调用另一个结构体类型
如:
问:为什么不是p->c->a
答:当p->c时为指针,当c.a时为直接调用
(当然,结构体还有诸多可包含的类型如函数指针,结构体指针,用法类似,在此不再赘述)
union(共用体)
它使多个类型共用一块内存
使用哪种类型进行存储数据就可以选择哪种类型进行数据存储
但是,如果更改它的类型时会内部数据变成垃圾值,需要重新赋值
除非特殊需要,一般不使用
(PS:其使用方法与结构体类似)
小结:
创建一个结构体数组,并用指针向其内部赋值
|