《C Prime Plus》14.1~14.6学习笔记

171 阅读2分钟

结构

在学完第12章时,我买了本大话数据结构,想着要好好学数据结构,然而,看到正式的内容后,第一个将线性表之后,我蒙圈了,虽说使用C语言实现的,但是一大块代码,一堆关键字structunion啥的完全看不懂。直到今天才算知道,原来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);

这样是打印出了第二个元素的标题成员。

结构的嵌套

跟函数一样,结构也是可以互相嵌套的。嵌套在结构里的结构,可以看做是上级结构的一个成员,用.来访问。不过要注意,声明这种嵌套了结构的结构,在声明阶段就要写清楚成员结构的成员情况。

小结

感觉前面那么多篇章的学习,就是为结构这一章做铺垫。学完结构这一章,数据结构应该就能看懂了。