- 枚举:枚举值的类型一定是int,没有其他类型。从0开始,依次递增。
- 有一个小套路:
enum COLOR {red, green, blue, purple, numCOLORS}; // 因为枚举值是从0开始依次递增,所以最后一个值是和前面的个数相等的。比如前面有4个值,而numCOLORS也是4. 于是就用 最后一个numCOLORS 来表示枚举里有多少个值。方便使用。
- 枚举也可以不从0开始,人为指定也可以(但一定是int)
enum color {red=1, blue, yellow=8, white}; //blue == 2, white == 9 // 当然这个时候就不能使用上面的小套路了
- 结构体:整个结构体可以作为函数参数的值传入函数。这时候是在函数内新建一个结构体变量,并复制调用者的结构体的值(与数组完全不同) int test(struct list L){} 也可以返回一个结构体。
- 结构体里面嵌套结构体很难理解,可以试着把结构体嵌套关系用一个图来表示便于理解。
- 没有直接的方式可以一次scanf一个结构体的,只能逐个给成员赋值。
#include <stdio.h> struct point { int x; int y; }; void getStruct (struct point) ; void output(struct point); void main () { struct point y = {0,0}; getStruct(y); output(y); } void getStruct(struct point p) { scanf("%d", &p.x); scanf("%d", &p.y); printf("%d, %d ", p.x, p.y); } void output(struct point p) { printf("%d, %d", p.x, p.y); //输出0,0 而不是用户输入的值。 }
结构体是创建了一个副本,所以函数调用者想使用修改后的结构体,有两个办法,一种是函数返回一个结构体给调用者,另一个是使用指针。传整个结构体开销太大,so,最好是用指针。