学习是有境界的,下面以C语言中的结构型为例简单分析。
第一种境界:理解了。
结构型是自定义数据类型,与C语言中基本的数据类型如int的作用相同,用于定义变量。(变量是内存中存储单元的标识,C语言中通过变量使用计算机的内存。)
结构型只是通过对已有数据类型的组合产生的新的类型。定义一个结构型的变量,实际上是定义了多个基本的变量,但这些变量属于一个集体。
结构型可以做参数,也可以有结构型指针变量,但是因为结构型变量仅是一个代表,包括了多个变量,使用时(输入输出、参与多种运算时)必须具体到成员变量。
在定义结构型时可以包含指向自身的指针类型。构成链表的多个结构型变量在逻辑上就有了先后顺序,并且可以用循环处理了。
第二种境界:比较了。
结构型与数组相似。
数组是大家比较熟悉的数据类型,也用于定义变量。
数组也是通过对已有数据类型的组合产生的新的类型。定义一个数组变量,实际上也是定义了多个变量,这些变量属于数组这个集体。数组元素的类型相同,而结构型成员变量的类型可以任意。
数组做参数时会退化为指针类型。两个数组变量之间不能相互赋值,而两个结构型变量之间却可以,即使结构型的成员变量有数组。数组在使用时也必须具体到数组元素。
结构型中可以有数组,数组的类型可以为结构型。
第三种境界:思考了。
数组变量之间为何不能相互赋值,而两个结构型变量之间却可以?
数组变量之间相互赋值在技术上没有任何问题,因为两个结构型变量之间就可以相互赋值。数组间不能相互赋值是在设计C语言时基于某种考量而故意为之的。问题变成了,C语言中为何这样设计呢?
这样做有什么好处呢?
效率高。数组做参数时退化为指针类型,原本要传递的大量数据现在只需传递几个字节的数据就可以了,既高效又省空间。
另外,即使同样为整型数组,但长度可能不同,要保证两个数组相互赋值时不出错也太累了。
数组与结构型本质上不同。
数组算作数据结构,所属元素在逻辑上有次序关系,可以用循环依次处理各个元素。
结构型只是多个数据的包装,所属成员仅表示同属一个集合,没有次序关系。