枚举
枚举是C语言中的一种基本数据类型,其实就是声明一组常数,当一个变量有几个固定的值可以选取时就可以使用枚举来声明,比如
enum Season {spring, summer, autumn, winter}; //可以用下面的方法来使用 enum Season {spring, summer, autumn, winter} s; //可以省略枚举的名称 enum {spring, summer, autumn, winter} s; s = spring; //等价于 s = 0
其实枚举中的元素 spring, summer, autumn, winter 在C语言的编译器中会作为从0开始的整型处理,那spring = 0, summer = 1, autumn = 2, winter = 3,但是如果你在定义的时候
enum Season {spring, summer = 2, autumn, winter};
那 spring = 0, summer就等于 2 了,autumn = 3,winter = 4,从你赋值的开始自增。
结构体
结构体也是C语言中的数据类型,我们使用结构体来表示一个物体的整体,这其中可以包含不同类型的多个数据,这些不同类型的数据我们称为“成员”。
//结构体的定义 struct 结构体名{ 类型名1 成员名1; 类型名2 成员名2; …… 类型名n 成员名n; }; //比如 struct People { char *name; // 姓名 int age; // 年龄 float height; // 身高 }; struct People one; //我们也可以同时声明变量 struct People1 { char *name; // 姓名 int age; // 年龄 float height; // 身高 } two; //结构体也可以包含别的结构体 struct People2 { char *name; // 姓名 int age; // 年龄 float height; // 身高 struct People three; struct People1 four; }; struct People2 five; //结构体的初始化 struct People six = {"fxd", 16, 1.75}; //使用的时候可以打点调用 five.three.age = 18; //也可以直接将结构体的值赋给别的结构体 struct People seven = six; //定义结构体的数组 struct People eight[5]; struct People3 { char *name; // 姓名 int age; // 年龄 float height; // 身高 } nine[5]; struct { char *name; // 姓名 int age; // 年龄 float height; // 身高 } ten[5] = {{"fxd", 16, 1.75},{"fxd", 16, 1.75}};
结构体作为函数的形参
struct People { char *name; // 姓名 int age; // 年龄 float height; // 身高 }; void swap(struct People peo){ printf("修改前的形参:%d \n", peo.age); // 修改实参中的age peo.age = 10; printf("修改后的形参:%d \n", peo.age); } int main(int argc, const char * argv[]) { struct People peo1; peo1.age = 30; printf("修改前的实参:%d \n", peo1.age); // 调用test函数 test(peo1); printf("修改后的实参:%d \n", peo1.age); return 0; }
运行我们发现将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。
指向结构体的指针
int main(int argc, const char * argv[]) { // 定义一个结构体类型 struct People { char *name; // 姓名 int age; // 年龄 float height; // 身高 }; // 定义一个结构体变量 struct People peo = {"fxd", 18, 1.75}; // 定义一个指向结构体的指针变量 struct People *p; // 指向结构体变量stu p = &peo; /* 这时候可以用3种方式访问结构体的成员 */ // 方式1:结构体变量名.成员名 printf("name=%s, age = %d \n", peo.name, peo.age); // 方式2:(*指针变量名).成员名 printf("name=%s, age = %d \n", (*p).name, (*p).age); // 方式3:指针变量名->成员名 printf("name=%s, age = %d \n", p->name, p->age); return 0; }