结构
在学完第12章时,我买了本大话数据结构,想着要好好学数据结构,然而,看到正式的内容后,第一个将线性表之后,我蒙圈了,虽说使用C语言实现的,但是一大块代码,一堆关键字struct,union啥的完全看不懂。直到今天才算知道,原来C语言是有结构这个概念,而且数据结构就是基于这个概念而建立的。
结构的声明
结构是多种数据类型的集合,书中开篇用图书管理程序举了个例:
struct book{
char name[20];
char author[20];
float value;
}
学到这里,我就联想到了Python中的类(当然,类和结构是不同的两个东西),一个数据对象包含了各种属性,上面这个名为book的结构,具有三个成员,分别是书名、作者、价格,前两个是字符串,第三个是浮点数。
而struct book相当于类型名,每个独特的结构都有专属的类型名,声明一个这种类型的结构如下:
struct book C_Prime_Plus;
这里,C_Prime_Plus就是结构变量的名字了。
初始化结构
和声明阶段不同的是,初始化阶段,成员间用逗号,分割,而不是声明时的分号;。初始化时直接赋值相应的数据到成员中。
初始化器:结构的初始化方法有两个,初始化器是结构独有的,而且很方便:
struct book C_Prime_Plus = {.name="C_Prime_Plus",
.author="Prata,.value=54.0};
不使用初始化器,就需要严格按照声明时的成员顺序一一初始化,使用初始化器就不需要按照顺序,即写即用。
访问结构成员
在程序中,访问结构的成员依然使用.,如下:
puts(C_Prime_Plus.name);
然后打印出了书名。
结构数组
结构是变量,那么多个结构也可以组成一个数组,声明如下:
struct book library[10];
这样就声明了一个包含十个结构的数组。
访问结构数组里的元素的成员,方法是结构名使用数组名+方括号,然后接.+成员。
puts(library[1].title);
这样是打印出了第二个元素的标题成员。
结构的嵌套
跟函数一样,结构也是可以互相嵌套的。嵌套在结构里的结构,可以看做是上级结构的一个成员,用.来访问。不过要注意,声明这种嵌套了结构的结构,在声明阶段就要写清楚成员结构的成员情况。
小结
感觉前面那么多篇章的学习,就是为结构这一章做铺垫。学完结构这一章,数据结构应该就能看懂了。