第十三章-变量类型

  1. 局部变量
    • 定义:在函数(代码块)内部定义的变量(包括函数的形参)
    • 作用域:从定义变量的那一行开始,一直到代码块结束
    • 生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
    • 没有固定的初始值
  2. 全局变量
    • 定义:在函数外面定义的变量
    • 作用域:从定义变量的那一行开始,一直到文件结尾(能被后面的所有函数共享)(可以跨文件使用的)
    • 生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
    • 默认的初始值就是0
#include <stdio.h>
//全局变量
int age;
void test(){
	//局部变量
    int age;
    age = 10;
}

int main(){
    printf("%d\n", age);// 0
    //局部变量
    int age = 20; 
    printf("%d\n", age);// 20
    test();
    printf("%d\n", age);// 20
    return 0;
}

变量的存储方式

  1. 变量有两种不同的存储方式:
    • 静态存储方式:程序运行期间由系统分配固定的存储空间
    • 动态存储方式:程序运行期间根据需要进行动态的分配存储空间
  2. 内存中供用户使用的存储空间分为3大块:
    • 程序区
    • 静态存储区
    • 动态存储区(也叫栈区)
  3. 数据分布存放在静态存储区和动态存储区中.
  4. 静态存储区放以下类型的变量
    • 全局变量全部存放在静态存储区中.程序一开始就会分配固定的存储单元,知道程序结束释放
    • static 修饰的局部变量
  5. 动态存储区存放以下数据:(函数结束,内存释放)
    • 函数的形式参数.在调用函数时给形参分配存储空间
    • 函数中定义的没有用关键字static声明的变量,即自动变量
    • 函数调用时的现场保护和返回地址等

变量的存储类型

自动变量(auto变量)

静态变量

寄存器变量

变量总结

  1. 从作用域分:
    • 局部变量:
      • 自动变量,即动态局部变量(离开函数,值就消失)
      • 静态局部变量(离开函数,值仍保留)
      • 寄存器变量(离开函数,值就消失)
    • 全局变量
      • 静态外部变量(satic修饰的外部变量,只限于本文件使用)
      • 外部变量(允许其他文件使用)
  2. 按存储方式分:
    • 动态存储:
      • 自动变量(本函数内有效)
      • 寄存器变量(本函数内有效)
      • 形式参数(本函数内有效)
    • 静态存储:
      • 静态局部变量(本函数内有效)
      • 静态外部变量(本文件内有效)
      • 外部变量(用extern或者不修饰,其他文件可用)
  3. 按存储类别(存放位置)分:
    • 内存中静态存储区域:
      • 静态局部变量
      • 静态全局变量
      • 外部变量(非静态全局变量)
    • 内存中动态存储区域:自动变量和形式参数
    • CPU中的寄存器:寄存器变量
Table of Contents