黑马程序员--IOS学习笔记(变量类型、结构体、枚举)

---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------

一、变量类型

    1. 变量的作用域

       c语言根据变量作用域的不同,把变量分为全局变量和局部变量。

       全局变量:定义在所有函数外部称之为全局变量,在定义的位置开始一直到源程序结束有效。

       局部变量:定义在函数内部的变量称之为局部变量,只在所定义的函数内部有效,函数结束变量也随之销毁。

    int a; // 全局变量

    int main ()

   {

    int b; // 局部变量

    return 0;

   }

    2. 变量的存储类型

       变量的存储类型就是指变量存储在什么地方。有三个地方可以用于变量的存储,普通内存、运行时堆栈、硬件寄存器。

       变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。

       C语言根据变量的存储类型的不同,可以把变量分为:自动变量、静态变量、寄存器变量。

       * 自动变量

          用auto修饰的局部变量,存储在堆栈中,所有的变量默认都是自动变量,从声明位置到相对应的代码块结束为其声明周期,函数多次调用,此变     量就多次被新建、销毁。

       * 静态变量

          静态变量是存储在静态内存中的,也就是不属于堆栈。所有的全局变量和被static修饰的局部变量都是静态变量,从程序运行前被创建直到程序       结束才被销毁,只被创建一次。

       * 寄存器变量       

         存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存    中的),被register修饰的自动变量都是寄存器变量,只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行,寄存器变量只限int、char和    指针类型变量使用,因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存        器,变量消失。

         由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理。为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存。

二、结构体

   1. 结构体的一般定义形式为:

       struct 结构体名{        //  struct 是关键字,结构体类型的标志
     
                   类型名1 成员名1;
     
                   类型名2 成员名2;
     
                    ……
     
                   类型名n 成员名n;   
     
 };

         定义一个学生
        

      struct Student {

             char *name;// 姓名

             int age;// 年龄 

             float height;// 身高

};

    2. 结构体变量的定义

      1> 先定义结构体类型,再定义变量

   struct Student 

    {

         char *name;

         int age;

     };

   structStudent stu;

      2> 定义结构体类型的同时在定义变量

   struct Student 

     {

        char *name;

        int age;

     } stu;

      3> 直接定义结构体类型变量,省略类型名

   struct

     {

        char *name;

        int age;

     } stu;

    3. 结构体的注意点

      1> 不允许对结构体本身递归定义

   struct Student 

     {

        int age;

        struct Student stu;

     };

      2> 结构体内可以包含别的结构体

   struct Date {

     int year;

     int month;

     int day;

   };


   struct Student {

     char *name;

     structDate birthday;

   };

      3> 定义结构体类型,只是说明了该类型的组成情况,并没有给它分配存储空间,就像系统不为int类型本身分配空间一样,只有当定义属于结构体类型的变量时,系统才会分配存储空间给该变量。

   struct Student {

     char *name;

     int age;

   };

   struct Student stu;

      4> 结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列

      如下面的Student结构体:   一个Student变量共占用内存:2+2+4 = 8字节

   struct Student {

        char *name;// 姓名

       int age; // 年龄

       float height; // 身高

    };

   4. 结构体数组

   struct {

       char *name;

       int age;

   } stu[2] = { {"CT",20}, {"AA",34} };

   

    5. 结构体作为函数参数

        将结构体变量作为函数参数进行传递时,其实传递的是全部成员的值,也就是将实参中成员的值一一赋值给对应的形参成员。因此,形参的改变不会影响到实参。

    6. 指向结构体的指针

      * 每个结构体变量都有自己的存储空间和地址,因此指针也可以指向结构体变量

      * 结构体指针变量的定义形式:struct结构体名称 *指针变量名

      * 有了指向结构体的指针,那么就有3种访问结构体成员的方式

        结构体变量名.成员名

        (*指针变量名).成员名

三、枚举

      枚举是C语言中的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。

     枚举的一般形式enum 枚举名 {枚举元素1,枚举元素2,……};

                             enum Season {spring, summer, autumn, winter}; 

     枚举变量的定义

         前面只是定义了枚举类型,接下来就可以利用定义好的枚举类型定义变量。

         跟结构体一样,有3种方式定义枚举变量。

* 先定义枚举类型,再定义枚举变量

      enum Season {spring, summer, autumn, winter};

      enum Season s;

* 定义枚举类型的同时定义枚举变量 

      enum Season {spring, summer, autumn, winter} s;

* 省略枚举名称,直接定义枚举变量

      enum {spring, summer, autumn, winter} s;

上面三种方式定义的都是枚举变量s

---------------------- <a href="http://www.itheima.com"target="blank">iOS开发</a>、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值