C语言入门 —— 结构

结构是一个或多个变量的集合,这些变量可能是不同的类型,为了处理的方便而将这些变量组织在一个名字下。

1、结构的基本知识

点是最基本的对象,假定用x与y坐标表示,且x、y的坐标都是整数。我们可以定义结构如下,

我们可以使用如下方式来声明和赋值,

结构中也可以嵌套结构,比如:

获取值或者赋值可以通过如下,

2、 结构与函数

结构的合法操作只有几种:作为一个整体复制和赋值,通过&运算符取地址,访问其成员。复制和赋值包括了向函数传参以及获取函数返回值。结构之间不能比较。可以用一个常量成员值列表初始化结构,自动结构也可以通过赋值进行初始化。

下面举例结构和函数结合使用三种方式,一是分别传递各个结构成员,二是传递整个结构,三是传递指向结构的指针。

声明相关变量、结构、方法。

返回结构体

传递整个结构

如果传递的结构很大,使用指针方式的效率通常比复制整个结构的效率要高。

pp定义为一个指向struct point类型对象的指针。*pp就是获取结构,而(*pp).x(*pp).y则是结构成员,圆括号不能省略。C语言为我们提供了一种更简便的写法,就是pp->xpp->y

3、 结构数组

类似普通变脸声明数组一样,

原本两个相关的变量我们可以放在结构中作为一个整体声明,

当然可以分开声明,

在声明时候对其赋值,

计算结构数组或者说计算数组的方法,

表示了这个结构总长度32, 单个长度16,总共有 元素2
为什么单个元素长16呢?int类型长度为8*char指针长度为8(64位系统)。也就得出了总长度/单个元素长度=数组元素个数

4、 指向结构的指针

5、 自引用结构

结构可以自引用,所以我们可以用来做很多数据结构,比如:链表、二叉树等。

注意:一个包含其自身实例的结构是非法的,所以必须使用指针方式才行struct tnode *left

6、 表查找

7、 类型定义typedef

C语言提供了一个称为typedef的功能,它用来建立新的数据类型名称,例如:

上面定义类Length类型,它的基础类型是int。可以与基础类型一样声明。

8、 联合

联合就是一个结构,它的所有成员相对于基地址的偏移量都是为0。
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。
当一个联合被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大 的变量长度。

默认赋值

指定赋值