首页 > 代码库 > 黑马程序员-关于结构体

黑马程序员-关于结构体

       ------- IOS培训、android培训、java培训、期待与您交流! ----------

 

 

 

1 结构体:
   作用:可以由多个不同类型的数据构成。
            //定义结构体类型,类型为person:此阶段不会分配存储空间
1 struct person  2    {  3      变量; // 称为结构体变量或属性  4    }  5            //根据结构体类型person,定义结构体变量,变量名为p(此阶段分配存储空间)  6    struct person p={ };  // 赋值的时候只能在定义结构体的时候同时赋值 
错误写法
                   struct person p; 
                              p={ };
    
2. 内存分析:
    对齐算法:结构体所占用内存空间的大小,一定是结构体中最大成员所占用存储空间的倍数。 
  
1   struct Student2 {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开始,也可以进行手工指定)  

 

 

黑马程序员-关于结构体