)
第十章 结构体与共用体第一节 结构体变量定义,引用,初始化1. 结构体概述数据类型: int, float, char, int a[10], float b[100]假设一个学生,叫Felaim, 26岁, 女, …要存储很多信息,在这种情况下我们就需要使用结构体结构体: 结构体也是一种数据类型,被叫做数据结构体类型,换句话说结构体就是把多种不同类新的数据类型组织到一起,目的是能够表达更加丰富的信息结构体定义的方法struct结构体名{//成员列表(可以多个)};//千万不要忘记大括号后面的分号2. 定义结构体类型变量的方法要定义一个结构体类型变量,把结构体名(前面加上struct)看成一个类型名,一共有三种方法:struct 结构体名 变量名列表struct student { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 }; struct student s1, s2;//定义两个结构体类型变量定义结构体类型的时候就定义了变量(使用比较少)struct student { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 }s1, s2;//变量位于大括号之后,;之前多个变量之间用,分隔直接定义结构类型变量,结构体变量名可以省略struct { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 }s1, s2;//变量位于大括号之后,;之前多个变量之间用,分隔说明使用结构体一般要定义结构体类型,定义某些变量为该类型变量,这是分两步走的结构体内还可以嵌套结构体结构体内的成员名,可以与程序中的变量名相同,彼此之间互不影响//结构体嵌套 struct date{ int year; int month; int day; }; struct student { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 struct date birthday; //生日,结构体类型变量 };3. 结构体类型变量的引用不能将结构体变量作为一个整体进行引用,比如s1, s2都是结构体变量,但是不能直接用,只能对结构体变量中的各个成员分别引用,引用的方式为: 结构体变量名.成员名 s1.num 16,这个.叫结构体成员运算符,该运算符优先级非常高和()平级,所以可以把s1.num看成一个整体如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级找到最低级的成员,只能对最低级赋值,例如:s1.birthday.month 11,使用了两次成员运算符成员变量就当成普通变量,可以像普通变量一样进行各种运算s1.age 25; s2.age 26; int agesum s1.age s2.age;//求年龄和 s1.age;//年龄自加1 s1;//这种写法不正确成员变量也是当成普通变量的,也是有地址的#include iostream #include cstring struct date { int year; int month; int day; }; struct student { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 struct date birthday; //生日,结构体类型变量 }; int main(int argc, char *argv[]) { struct student s1; s1.num 7; int *p s1.num; printf(s1.num: %d\n, *p); return 0; }4. 结构体变量的初始化#include iostream #include cstring struct date { int year; int month; int day; }; struct student { int num; //学号 char name[100]; //姓名 int sex; //性别,女:0, 男:1 int age; //年龄 char address[100]; //地址 struct date birthday; //生日,结构体类型变量 }; int main(int argc, char *argv[]) { // 初始化得按照顺序来赋值 struct student s3{1007, Felaim, 0, 18, CHINA, {2002, 11, 15}}; return 0; }