在大学C语言的学习中对于结构体的学习其实是片面的,但是参与工作后,发现大学里面学习得比较浅显片面的内容反而是我们工作经常使用的,结构体就是这样。接下来针对结构体的难点突破写一些内容,并以此来记录自己的工作历程。
1.结构体的定义:
我们都知道结构体定义时需要使用关键词struct,但是很多人不是很清楚结构体定义的方式到底有哪几种,现在进行一个总结:
还是使用最普遍使用的例子:
图1
从图1可以看到,定义了一个结构体,且结构体名为Stu,此时这个结构体是一个数据框架,当我们有很多的数据都需要使用这个框架时,我们就可以使用结构体去定义很多个结构体变量。
图2
如图2所示,定义了两个结构体变量,stu1、stu2,这两个结构体变量中间包含的内容就是框架里的内容,此时第一个问题点来了,定义结构体变量有没有其他方式?答案是有的。
图3
可以看到上面的第二种定义方式是直接在结构体后面跟着结构体变量名,这种定义方式与图2所展示的定义方式一致,同时这种方式定义后,如果还需要定义新的结构体变量,用图2中的方式再次定义即可。
上面两种定义方式都是带有结构体名的,是否可以不用结构体名定义结构体变量,答案也是可以。
图4
图4中的定义方式就没有用结构体名,那么这种方式和前面两种定义方式的区别是什么呢?区别在于:如果利用图4中的定义方式,就不能再定义新的与stu5、stu6相同的结构体变量了。
2.结构体成员的获取和赋值
按照道理来说第二部分应该说明一下结构体变量占用的内存空间,但是由于编译器在编译的时候,会导致结构体变量成员的存储不是连续的,中间会存在所谓的“缝隙”,缝隙导致结构体变量所占的内存空间与理论上不同;同时工作中其实我们在乎的不会是一个结构体变量的内存空间,所以这里直接进入结构体成员的获取和赋值。
图5
结构体变量的赋值是利用“.”完成的,其实可以类比数组(数组使用[ ]),像上图这种对成员进行单个赋值是常用的,同时在定义的时候,注意只有在结构体变量定义的时候才能整体赋值。
图6
如图6所示,定义的时候可以整体赋值。
获取成员的取值时同赋值
图7
以上就是关于结构体的定义和成员赋值与获取的知识,接下来会继续更新typedef的使用以及更多知识,点点手指点个赞吧!