1.静态存储方式和动态存储方式

    • 静态存储方式:在程序运行期间,系统对变量分配固定的存储空间。
    • 动态存储方式:在程序运行期间,系统对变量动态地分配内存
    • 动态存储方式更有效率,静态存储方式更具可靠性

    2.用户内存空间
    批注 2020-08-09 101549.png

    3.自动变量(auto variable)

    • 函数中的局部变量
    • 编译系统动态分配内存
    • 主要是函数的形参和函数中定义的变量
    • 函数调用时自动分配空间,结束调用时自动释放
    • 例: auto int b = 3; //关键字auto可以省略

    4.静态变量

    • 用static声明静态局部变量和静态外部变量

      • 用static声明静态局部变量

        • 用途:希望函数中的局部变量的值在函数调用结束后不消失而保留原值,一般用于函数下一次调用
        • 例: static int c=3;
        • 存储单元在程序整个运行期间都不释放
        • 只赋一次初值,并且在函数编译时进行
        • 对其他函数不可见。
      • 用static声明静态外部变量

        • 用途:希望某些外部变量只限于本文件引用,而不能被其他文件引用。
        • 多人合作的程序模块中,各人可使用相同名称的全局变量而不会相互影响。
        • 无论是否加static,全局变量都是静态存储
        • 例:
          1. //文件file1.c中的内容为:
          2. static int a; //静态外部变量定义
          3. void main(void)
          4. {……}
          5. //文件file2.c中的内容为:
          6. extern int a; //外部全局变量说明
          7. int func (int n )
          8. { int i, y=1;
          9. for (i=1; i<=n; i++)
          10. y*=a; //引用文件外定义的全局变量
          11. return y;
          12. }

    5.寄存器变量(register)

    • 一般变量:使用时才由内存进入CPU。
    • 寄存器变量:直接放入寄存器,有利于频繁读写的变量。
    • 程序中定义寄存器变量对编译系统只是建议性(而不是强制性)的。
    • 当今的优化编译系统能够识别使用频繁的变量,自动地将这些变量放在寄存器中。

    6.外部变量(extern)

    • 在一个文件内声明全局变量:
      • 提前引用声明:在全局变量的定义点之前要引用该全局变量,则应该在引用之前用关键字extern。
    • 在多文件的程序中声明外部变量:
      • 外部变量声明:多个文件都要用到同一外部变量,在一个文件中定义,在其他文件中用extern进行声明。

    128ff300a18b87d605f25679100828381e30fdbd_WPS图片.jpg