zoukankan      html  css  js  c++  java
  • 变量类型

    一、变量的作用域:
      1.局部变量
      2.全局变量
    二、变量的存储类型
      * 变量的存储类型就是指变量存储在什么地方。
        有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。
        变量的存储类型决定了变量何时创建、何时销毁以及它的值能保持多久,也就是决定了变量的生命周期。

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

      1.自动变量:
        1> 定义:自动变量是存储在堆栈中的。
        2> 哪些是自动变量:被关键字auto修饰的局部变量都是自动变量,但是极少使用这个关键字,基本上是废的,因为所有的局部变量在默认情况下都是自动变量。
        3> 生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自动变量所在的代码块(函数)执行完毕后,这些自动变量就会自行销毁。如果一个函数被重复调用,这些自动变量每次都会重新创建。
          1 void test(int a, int b) {
          2 int c = a + b;
          3
          4 auto int d;
          5 }
          第1行的变量a、b,第2行的变量c、第4行的变量d都是自动变量。
      2.静态变量:
        1> 定义:静态变量是存储在静态内存中的,也就是不属于堆栈。
        2> 哪些是静态变量:
          1.所有的全局变量都是静态变量
          2.被关键字static修饰的局部变量也是静态变量
        3> 生命周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束。
          1 #include <stdio.h>
          2
          3 int a;
          4
          5 void test() {
          6 static int b = 0;
          7 b++;
          8
          9 int c = 0;
          10 c++;
          11
          12 printf("b=%d, c=%d ", b, c);
          13 }
          14
          15 int main() {
          16 int i;
          17 // 连续调用3次test函数
          18 for (i = 0; i<3; i++) {
          19 test();
          20 }
          21
          22 return 0;
          23 }
          * 第3行的变量a、第6行的变量b都是静态变量,第9行的变量c、第16行的变量i是自动变量。
          * 因为第6行的变量b是静态变量,所以它只会被创建一次,而且生命周期会延续到程序结束。因为它只会创建一次,所以第6行代码只会执行一次,下次再调用test函数时,变量b的值不会被重新初始化为0。
          * 注意:虽然第6行的变量b是静态变量,但是只改变了它的存储类型(即生命周期),并没有改变它的作用域,变量b还是只能在test函数内部使用。
      3.寄存器变量:
        1> 定义:存储在硬件寄存器中的变量,称为寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,自动变量和静态变量都是放在内存中的)
        2> 哪些变量是寄存器变量:
          1.被关键字register修饰的自动变量都是寄存器变量
          2.只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
          3.寄存器变量只限于int、char和指针类型变量使用
        3> 生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。
        4> 使用注意:
          1.由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理
          2.为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不用内存
            1 int main() {
            2 register int a;
            3 return 0;
            4 }
          第2行的变量a是个寄存器变量。

  • 相关阅读:
    NOIP2012 借教室
    bzoj1816 扑克牌
    TYVJ1359 收入计划
    NOIP2015 跳石头
    易错点
    散列表
    数学模板
    12. 17 哈理工网络赛
    哈理工 网络赛
    三角形
  • 原文地址:https://www.cnblogs.com/tzktzk1/p/3329459.html
Copyright © 2011-2022 走看看