1. 局部变量:定义在函数内部的变量,包括形参,它又可分为两部分:
2. 全局变量:定义在函数外部的变量 ,尽量少用 //很危险
3. static:静态关键字。可以用来修饰全局变量,局部变量(不能修饰形参)和函数。(static可以改变变量或者函数的生命周期,内存区域,默认值,链接属性)
内存:
代码段:存放程序的代码;
全局(静态)变量区:存放全局变量和静态变量;
栈:存放局部变量,系统自行管理该内存,内存区域大小,Windows默认1MB。
堆:动态内存区域,内存区域大,需要由程序自行管理内存,使用后一定要释放,否则会出现内存泄漏。
重点:
生命周期 | 作用域 | 默认值 | 内存区域 | 链接属性 | |
普通局部变量 | 函数进入时创建 函数退出时死亡 | 函数内 | 随机值 | 栈 | 无 |
静态局部变量 | 函数进入时创建 程序退出时死亡 | 函数内 | 0 | 全局(静态)变量区 | 无 |
普通全局变量 | 程序进入时创建 程序退出时死亡 | 整个文件内 | 0 | 全局(静态)变量区 | 外部 |
静态全局变量 | 程序进入时创建 程序退出时死亡 | 整个文件内 | 0 | 全局(静态)变量区 | 内部 |
动态内存 | 调用创建函数时生 调用释放函数时死 | 只要找到指向它的指针 | 随机值 | 堆 | 无 |
普通函数 | 无 | 整个文件内 | 无 | 代码段 | 外部 |
静态函数 | 无 | 整个文件内 | 无 | 代码段 | 内部 |
我们可以看代码来理解这个表格
#include<stdio.h>
int a;//全局变量 程序运行开始程序结束死亡 整个文件内 0 全局(静态)变量区 外部
static int b;//全局变量 程序运行开始程序结束死亡 整个文件内 0 全局(静态)变量区 内部
const int c = 10;//全局变量 程序运行开始程序结束死亡 整个文件内 10 全局(静态)变量区 内部
int main()
{
int d;//局部变量 函数进入创建函数退出死亡 函数内 随机值 栈 无
static int e;//局部变量(静态) 函数进入创建程序退出死亡 函数内 0 全局(静态)变量区 无
const int f = 20;//局部变量 函数进入创建函数退出死亡 函数内 20 栈 无
for (int i = 0; i < 10; i++)//局部变量 块开始产生,块结束时消亡函数进入创建函数退出死亡 块内可见
{
printf("%d\n", i);
}
}