小编上一篇关于最长连续子序列的文章里面对结构体语焉不详,试图浑水摸鱼被扣了鸡腿~~~今天就来好好的说一下C语言中的结构体!!!
非常常用且非常重要的结构体!!!下面就可以跟随小编的三问三答来了解啦!!!
第一问:结构体是什么样子的呢???
答:struct就是结构的意思,结构体的标准模样长这样:
struct tag {
member-list
member-list
member-list
...
} variable-list ;
但是一般的结构体可能长得有一点小小的差别~tag、member-list、variable-list这 3 部分至少要出现 2 个即可
例如:只有member list和variable list,只有member list和tag:
只有member list和variable list
只有member list和tag
值得注意的是在上面的两种声明中,第一个和第二声明被编译器当作两个完全不同的类型,即使他们的成员列表是一样的,如果令 t3=&s1,则是非法的。
结构体的声明还可以采用typedef来创建:
Simple2
结构体除了有这些样子,还可以嵌套哦!!!
结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而通常这种指针的应用是为了实现一些更高级的数据结构如链表和树等。
复杂的结构体长这样~~~
除了结构体Comlex包含结构体Simple,还可能A包含B,B又包含A哦!!这样的结构体长这样:
不完全性声明后,再指向包含物的指针!
声明就相当于是把结构体的架子打好了~~初始化的时候呢,结构体和其他类型变量一样,再定义时指定初始值
初始化~~
还可以通过大括号的方式按顺序赋值,如果不愿意的话,也可以使用.成员名的方式按自己喜欢的顺序赋值~~
大括号的方式按顺序赋值
.成员名的方式
第二问:为什么要用结构体呢???
答:现实生活中的数据类型复杂多变,需要将不同的数据类型组合成一个整体,用到struct定义自己的结构变量。
第三问:如何使用结构体呢???
答:如何使用是最关键的一步了~~请看!
定义好结构体后可以通过 结构体+.运算符+成员 的方式修改/访问其中的值。
结构体变量是变量类型的整合,但是在结构体变量的大小中需要注意调整顺序压缩变量空隙~~记住short 偶数开始,int/float 4倍数开始, long/double8倍数开始,结构体总长度为最宽变量类型的整数倍~~~
结构体的赋值,存放,指针 都只要将结构体看作普通的数据类型即可
如何使用指针访问结构体中的成员呢??
很简单,有两种方法:
第一种:
struct person *sp = &no (sp是no的首地址)
解引用指针获得结构体变量:(*sp)=no
.运算符获取成员(*sp).property
第二种:
使用 sp->propety 即可获得成员的值啦!!!
(部分图片来自https://www.runoob.com/cprogramming/c-structures.html和https://www.bilibili.com/video/BV1GJ411i7Dc?p=2)