1 结构体:

   作用:可以由多个不同类型的数据构成。

(此阶段不会分配存储空间

1 struct person  
2    {  
3      变量; // 称为结构体变量或属性  
4    }  
5            //根据结构体类型person,定义结构体变量,变量名为p(此阶段分配存储空间)  
6    struct person p={ };  // 赋值的时候只能在定义结构体的时候同时赋值

错误写法

                   struct person p; 

                              p={ };

    

2. 内存分析:

一定是结构体中最大成员所占用存储空间的倍数。

  

1   struct Student
2 {
3   int age; // 4个字节
4   char *name; // 8个字节
5 }stu;

 

   结构体所占用的字节:16个字节(8的倍数);

   内存分配:定义结构体类型时不会分配内存空间,只有当赋值的时候才能分配存储空间。

 

3.结构体类型不能够重复定义

定义结构体变量的三种方式:(从类型和变量进行考虑)

 (1)先定义类型(相当于int、double等),再定义变量

1 struct student  
2 {  
3 int age;   
4 };  
5 struct student stu;

  (2) 定义类型的同时定义变量

1 struct student  
2 {  
3 int age;  
4 } stu;

(3) 定义类型的同时定义变量,但是省略类型名称

1 struct  
2 {  
3 int age;  
4 } stu;

4.作用域

  定义在函数内部:从定义那一行开始,到函数或代码块结束。(跟局部变量一样)

  定义在函数外部:从定义那一行开始,到程序结尾。(跟全局变量一样)

 

5.结构体数组(结构体中定义结构体):

    struct student stu[3] = {  { },{ },{ }  }  // 结构体数组中含有三个结构体

       数组修改方式:

            错误修改:stu[0]={ };

            正确修改:stu[0].age=10;

 

6.指向结构体的指针

     struct student  *p;

     p=&stu;

 

  有三种方法访问结构体属性:

   方法1:stu.age;

   方法2:(*p).age;//代表指针访问结构体中的age属性  

   方法3: p->age;//代表指针访问结构体中的age属性 (最常用)

 

7.结构体嵌套

  概念:在结构体中调用结构体。

1      struct names  
 2   {  
 3   int ages;  
 4   int years;  
 5   }name;  
 6     struct Student  
 7 {  
 8    name *stuname; // 嵌套结构体name  
 9    int banji;  
10 stu;


8.枚举

    关键词:enum    其余定义方法和结构体一样

   作用:固定变量的取值范围。

  注:枚举类型中定义的变量只能取枚举中的属性。

1 enum season  
2   {  
3   spring=1, // 如果不手工指定spring为1,则spring默认为0  
4   summer,  
5   };  
6   enum season s= spring;//s只能取spring或summer  (枚举值都是整形常量,从0开始,也可以进行手工指定)