黑马程序员 C语言------结构体 枚举学习

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 



结构体   枚举

1.局部变量:

 >定义. 在代码块内部定义的变量都是局部变量, 包括形参

 >作用域.从定义变量的那一行开始,一直到代码块结束

 >存放位置.存放在栈中

 >生命周期.执行到定义变量的那一行开始分配存储空间,代码块结束后就释放

 >特点:没有固定的初始化值

 

 2.全局变量:

 >定义.在函数外定义的变量

 >.作用域.从定义变量的那一行开始,一直到文件末尾

 >存放位置.静态区

 >生命周期.程序一启动就会分配存储空间,知道程序结束才会释放

 特点:默认初始化值是0

结构体基本概念

 变量类型 变量名;

     结构体变量类型 变量名;

     

     想定义结构体变量分为两部:

     1.定义结构体类型

     2.通过结构体类型定义结构体变量

     

     struct 结构体类型名称 

     {

         成员(属性)

     }

给结构体赋值要通过.的方式赋值

注意点

,只能在定义结构体变量的同时进行初始化,不能先定义结构体变量再初始化

结构体内存分析

1.定义结构体类型,

       定义结构体类型的时候不会为结构体类型分配存储空间

     struct Date

     {

     int year; // 

     int month; // 

     int day; // 

     };

      2.定义结构体变量

      只有在定义结构体变量的时候才会真正的分配存储空间

        结构变量存储值也数组也一样,也是从小到大的存,

        也就是说从第一个成员开始存放

   结构体变量的地址就是它第一个成员的地址

注意:结构体在分配存储空间的时候有一个补齐算法

  结构体所占存储空间的大小,必须是占用内存最大成员的字节数的倍数

结构体变量的定义方式:

  1.第一种方式:先定义结构体类型,再定义结构体变量

    1.定义结构体类型

    struct Student

    {

        int age;

        char *name;

    };

    2.通过结构体类型定义结构体变量

    struct Student stu;


    

 

    2.第二种定义方式:定义结构体类型的同时定义结构体变量

    struct Student

    {

        int age;

        char  *name;

    } stu;

    struct Student stu2;

 3.第三种方式:定义结构体类型的同时定义结构体变量,并且这个结构体类型没有名称 

 struct

    {

        int age;

        char *name;

    } stu;    

  缺点:不能复用

结构体类型的作用域:

在函数外定义的结构体类型的作用域是从定义的那一行开始一直到文件末尾

在代码块中定义的结构体类型的作用域和局部变量的作用域相同

结构体类型的作用域:

     > 1.定义在函数外面全局有效(从定义的那一行开始一直到文件末尾)

     > 2.定义在函数里面:局部有效(从定义的那一行开始一直到函数结束)

结构体指针

 变量类型 *变量名;

 struct Student *sp;

    sp = &stu;

    *sp == stu

    stu.age

    注意点:.的优先级要比*的优先级高, 所以要先用()提高*的优先级

    (*sp).age = 66;

当利用指针指向结构体变量后的几种访问方式

     1.变量名.成员  stu.age;

     2.(*指针变量名).成员;   (*sp).age;

     3.指针变量名 ->成员;     sp->age;

结构体嵌套定义:

定义结构体类型的时候,类型当中的成员还是一个结构体

如果结构体中的成员还是结构体的时候 可以通过.逐层访问

枚举

 枚举是一种基本数据类型

    当某一个变量只有固定的几个取值的时候可以定义枚举变量

    

    想定义枚举变量必须先定义枚举类型,定义枚举类型的作用是告诉系统枚举有哪些取值

      1.先定义枚举类型

   

     enum 枚举名称

     {

     取值

     }


  枚举的本质就是整型

枚举的取值默认情况是从0开始 依次递增

2.通过枚举类型定义枚举变量

   虽然表面上看上去只能给枚举变量赋值我们定义的几个固定的值,

    但是枚举变量的本质就是一个整型变量所以也可以赋值其它整型常量

例如:

  enum Season

    {

        kSeasonSpring,//春季  

        kSeasonSummer,//夏季  

        kSeasonAutumn,//秋季  

        kSeasonWinter//冬季  

   };

   enum Season = kSeasonSpring;//枚举变量


数据类型总结

1.基本数据类型

     整型:

     int  4个字节 %d

     short 2个字节 %hd

     long 8个字节 %ld

     long long 8个字节 %lld

     unsigned 4个字节 0和正数 0~2(32)-1;  %u

     signed 4个字节 正数负数和0 -2(31)~2(31)-1

     

     字符型:

     char 1个字节 %c

     存储细节: ASCII 0~127

     

     浮点型:

     float 4个字节 %f

     double 8个字节 %lf

     

     枚举类型:

     > 1.先定义枚举类型,再通过枚举类型定义枚举变量

     > 2.定义格式:  enum 枚举类型名称{取值};   enum 枚举类型名称 变量名称;

     > 3.枚举的本质就是整型

     

     2.构造类型

     数组:

     只能存放同一种类型的数据

     元素类型 变量名[元素个数];

     

     结构体:

     可以存放不同类型的数据

      *定义结构体类型   struct 结构体类型名称成员;};

      *通过结构体类型定义结构体变量  struct 结构体类型名称 变量名称;

     

     3.指针类型

      变量类型 *变量名称;

     指针类型的作用:

     1.定义的时候是什么类型将来就只能指向什么类型的数据(保存什么类型的变量地址)

     2.指针取值的时候会根据TA的类型取值(是什么类型就取多少个字节)


     4.空类型

     void

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---------------------- 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值