1.结构
如果你想表达的数据比较复杂,它不是一个值(如日期、时间)。希望用一个整体表达结合在一起的数据。
一个结构就是一个复合的数据类型,在里面可以有很多各种类型的成员,然后我们用一个变量来表达那么多的数据。
2.声明结构类型
第一种形式最常见。x,y 表示结构里的成员,将来每一个 point 里都会有这两个成员。上面声明结构,下面定义变量。
初学者最常见的错误:漏了分号。
和本地变量一样,在函数内部声明的结构类型只能在函数内部使用。
所以通常在函数外部声明结构类型,这样就可以被多个函数所使用。
结构类型和结构变量是两件事情。
3.结构的初始化
对于结构,用大括号赋值。和数组初始化差不多,没给值的填 0 。
4.结构成员
结构和数组有点像。
数组用 [ ] 运算符和下标访问其成员,结构用 . 运算符和名字访问其成员。
数组里头有很多单元,结构里头有很多成员。数组里头必须是相同类型,结构成员可以是不同类型。
5.结构运算
要访问整个结构,直接用结构变量名字。
对于整个结构,可以做赋值、取地址,也可以传递给函数参数。
6.结构作为函数参数
int numberOfDays(struct date d);
整个结构可以作为参数的值传入函数,也可以返回一个结构。
这时候是在函数内新建一个结构变量,并复制调用者的结构的值。在函数里头,作为参数它是一个新的结构变量。
7.结构指针作为参数
和数组不同,结构变量的名字并不是结构变量的地址,必须使用 & 运算符。
struct date *pDate = &today;
传指针更有效率,在函数内建立一个结构变量既费空间又费时间。
用 -> 表示指针所指的结构变量中的成员。
struct date *p = &myday; p->month = 12;
如果需要保护传入的结构不被函数修改,const struct date *d;
函数返回传入的指针是一种套路,将来可以串在其他函数调用中。