变量的分类

本文介绍了程序设计中的变量分类,包括块变量、局部变量、静态局部变量、全局变量等,并详细阐述了它们的作用域与生命周期。此外,还讲解了程序在内存中的区域划分以及修饰变量的关键字。

1.变量的分类:

    1.1块变量

       语句块(程序块):指使用大括号{}括起来的一组语句
       在一个语句块内部的变量,叫做块变量
       if(...)
       {
          int i;//块变量
       }
   (1)生命周期:
    从定义开始,一直到程序块结束
   (2)作用域(访问范围):只有在语句块的内部访问

   1.2 局部变量

   在函数内部定义的变量叫做局部变量,局部如果没有进行初始化的话,那么这个变量的值是一个随机数
   void fn(void)
   {
       int a;
   }
   (1) 生命周期:从定义开始,一直到函数结束
   (2)作用域:从定义开始之后的整个函数内部可以访问

   1.3静态局部变量

      使用关键字static 修饰的局部变量
      void fn (void)
      {
       static int a;
      }
      (1)生命周期:整个程序
      (2)作用域:和普通局部变量一样
      (3)作用:一般可以用于计数,只要程序不结束,可以实现不停的累加
      扩展:
         static 关键字还可以修饰全局变量和函数,表示这个变量和函数只能在当前文件中使用

  1.4全局变量

    定义在整个程序内部的变量,一般都定义在程序的开头位置,或者头文件,全局变量会被自动初始化为0;
    (1)生命周期:定义开始,一直到整个程序结束
    (2)作用域:  定义开始,在整个程序内部都可以访问
  例子:
    使用全局变量模拟一下栈的基本操作:入栈,出栈,栈是否为空,是否满
 全局变量的缺点:
   (1)维护起来比较困难,
   (2)排错困难;
   (3)代码复用困难;

 1.5不同范围内的同名变量

  如果全局变量、局部变量以及块变量同名,那么在块变量范围内,块变量优先;
  在局部变量范围内,局部变量优先,最后才轮到全局变量——》局部优先法则
 练习:编写一个程序实现动态显示系统时间
  time(0)  sleep()

 2.程序在内存区域中的划分:

  (1)程序段: 用来存放程序的代码,程序段是只读的
  (2)数据段:用来存放的已经初始化的全局变量和静态局部变量
  (3)BSS段:用来存放没有进行初始化的全局变量,自动初始化为0
  (4)堆区: 用来进行动态内存的分配(malloc/ calloc/realloc/free)
  (5) 栈区:操作系统自动进行内存的分配和回收,一般存放局部变量

3.修饰变量的关键字

  3.1 auto:自动变量(一般省略,默认就是)

     一般的局部变量(除static)都是自动变量,一般省略,默认情况下都是自动变量
     signed 一般都省略,默认就是

  3.2 static  

      修饰局部变量:静态局部变量,表示这个变量的生命周期为整个程序,一般用于计数,
      修饰全局变量:变量只能在本文件中使用,
      修饰函数:   表示这个函数只能在本文件中使用

  3.3 register:寄存器

      修饰的变量叫寄存器变量,告诉编译器,这个变量我会频繁使用,请保存在寄存器中,因为读取寄存器中数据的速度比内存快;
  使用限制:
  (1)必须能被CPU的寄存器接受,
  (2)不能对寄存器中的变量取地址,
  (3)有些系统并不会把这种变量放在寄存器中,主要取决于编译器

  3.4  volatile 易变的

       修饰变量,用来表示这个变量的数据可能会发生改变

  3.5  const 常量,只读的;

  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值