| 
 
| 1.C语言构造类型有哪些? 构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义
 的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是
 一个基本数据类型或又是一个构造类型。
 在C语言中,构造类型有以下几种:
 
 数组类型
 结构体类型
 2、结构体的作用:
 结构体是一种构造类型,使用非常频繁。
 当我们需要把不同类型的数据构成一个整体时,便会用到结构体了。
 
 3、结构体类型的定义:
 注意:在函数里面或者外面都可以定义(影响作用域为全局类型或者局部类型)。
 举例:
 struct Person
 {
 int age;
 double height;
 char *name;
 };   //此时只是定义了一个类型,并不分配存储空间
 
 1)结构体变量的定义:
 举例:
 struct Person per;
 struct Person是变量的类型,per是变量的名称。
 
 2) 给成员变量复值
 1、 struct Person per = {22,1.75,"haha"};
 2、 struct Person per = {.height = 1.75,.name = "haha",.age = 22};
 3、 struct Person per;
 per = {22,1.75,"haha"};  //错误
 per.name = "haha";  per.age = 22;  //正确
 
 3)结构体类型的其余定义方式
 1、 定义结构体类型的同时, 定义一个结构体变量
 struct Student { ... } stu;       // 结构体定义就相当于int,这样就相当于int stu;
 stu.name = "Jack"; stu.age = 20; stu.height = 1.70;
 或者
 struct Student { ... } stu = {20, "Jack", 1.7f};  // 可以直接赋值,相当于int s = 5;
 这样定义的结构体类型还可以继续使用:struct Student stu2;
 2、 如果只需要定义一个变量,那么结构体名可以省略,直接定义一个结构体变量
 struct { ... } stu = {20, "Jack", 1.7f};
 这种情况就不能再定义其它同类型的变量了,只能定义一个 。
 
 
 4)结构体的嵌套
 举例:
 struct Date
 {
 int year;
 int month;
 int day;
 };
 struct Student
 {
 int no;  //学号
 struct Date birthday;  //生日
 struct Date inrollmentDate;  //入学日期
 };
 
 5) 结构体数组
 举例:
 struct Student
 {
 int age;
 char* name;
 } a[2] = { {22, "Jack"}, {23, "Julia"} };
 
 也可以定义结构体类型和定义数组分开:
 struct Student
 {
 ...
 };
 struct Student a[2] = { { }, { } };  // 定义一个struct Student类型的数组
 struct Student b[2] =  { { }, { } };;
 注意:struct Student就是一个类型,它们是一个整体。
 
 6) 结构体指针
 举例:
 struct Student
 {
 ...
 };
 struct Student *s;         // 定义一个struct Student类型的指针
 struct Student stu = {...};  // 定义同种类型的结构体变量
 s = &stu;              // 指针指向同种类型的变量
 
 使用结构体指针访问成员,两种方式:
 (*s).age;  // 相当于 stu.age ,括号不可以省略
 s -> age;  // -> 成员访问符,通常使用这种方式
 
 7)结构体的作用域
 1.局部变量
 a. 定义:在函数(代码块)内部定义的变量(包含行参)
 b. 作用域:从定义变量的那一行开始,一直到代码块结束
 c. 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收。
 
 2.全局变量
 a. 定义:在函数外部定义的变量
 b. 作用域:从定义变量的那一行开始,一直到文件结尾
 c. 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁。
 
 | 
 |