「C基础」变量类型

C 语言内存分配

1. 常量区:存放 常量字符串

2. 堆:存放 对象

3. 栈:存放 局部变量


变量有两种属性:1. 作用域      2. 存储类型

一、变量的作用域

C 语言根据 变量作用域的不同,将变量分为 局部变量 和 全局变量

  1. 局部变量

    定义:在函数 内部 定义的变量「形式参数也属于局部变量」
    作用域:只在定义它的函数内部有效,即只有在定义它的函数内部使用,其它函数不能使用它

  2. 全局变量

    定义:在 所有函数外部 定义的变量
    作用域:从定义变量的位置开始到源程序结束,即全局变量可以被在其 定义位置之后 的其它函数所共享

1  int a;    //全局变量
2  
3  int main ()
4  {
5      int b; //局部变量
6      return 0;
7

二、变量的存储类型「变量存储在什么地方

决定了变量何时创建、何时销毁以及它的值能保持多久,即 决定了变量的生命周期
用于存储变量的位置:普通内存、运行时堆栈、硬件寄存器
三种变量的存储类型:自动变量、静态变量、寄存器变量

1. 自动变量

    定义:存储在堆栈中,被关键字 auto修饰 的局部变量
                  极少使用这个关键字,基本上是废的,所有的局部变量在默认情况下都是自动变量
    生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建
                  当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁
                  如果一个函数被重复调用,这些自动变量每次都会重新创建
 

1 void test(int a, int b) //a, b 为自动变量
2 {
3      int c = a + b;     //c 也为自动变量
4      auto int d;        //d 也为自动变量
5 }    
2. 静态变量

    定义:存储在 静态内存中,不属于堆栈
                  被关键字 static 修饰的 局部变量「并不会改变作用域,只会改变生命周期
       被关键字 static 修饰的 全局变量「只能用于本文件」
       所有的 全局变量 都是 静态变量

    生命周期:在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束
 1 #include <stdio.h>
 2  
 3  int a; //静态变量
 4  
 5  void test() {
 6      static int b = 0; //静态变量:只能创建一次,执行一次,下次调用时不会被重新初始化为0
 7      b++; //只改变了它的存储类型「生命周期」,并没有改变它的作用域
 8           //变量 b 还是只能在 test 函数内部使用
 9      
10      int c = 0; //自动变量
11      c++;
12         
13      printf("b=%d, c=%d \n", b, c);
14  }
15  
16  int main() {
17      int i; //自动变量
18      for (i = 0; i<3; i++) {
19          test();
20      }
21      
22      return 0;
23  } 
输出结果为:b=1, c=1
      b=2, c=1
      b=3, c=1

3. 寄存器变量

    定义:存储在硬件寄存器中的变量,被关键字 register 修饰
       比存储在内存中的变量访问效率更高「默认情况下,自动变量和静态变量都是放在内存中」
       只有 自动变量 才可以是寄存器变量,全局变量 和 静态局部 变量 不行
       只限于 intchar 和 指针类型 变量使用
  生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值
       当函数结束时释放寄存器,变量消失
注意:
  • 计算机中寄存器数目有限,不能使用太多的寄存器变量
  • 如果寄存器使用饱和,程序将寄存器变量自动转换为自动变量处理
  • 为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存

三、static 和 extern 关键字

static 和 extern 可以修饰
  局部 变量 见本文
  全局 变量/函数 有两种:内部,外部

1. 对 函数 的作用 作者 李明杰

2. 对 变量 的作用 作者 李明杰

posted @ 2016-01-15 18:42  Liquor  阅读(204)  评论(0)    收藏  举报