按存储区域分:
1、全局变量、静态全局变量、静态局部变量存储在内存的全局数据区。
2、局部变量存储在内存的栈区。
按作用域分:
1、全局变量在整个工程文件内有效。
2、静态全局变量只在定义它的文件内有效。
3、静态局部变量只在定义它的函数内有效,且程序仅分配一次内存,函数返回后,该变量不会消失。
4、局部变量只在定义它的函数内有效,且函数返回后失效。
静态变量(全局和局部)和全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。
静态局部变量和局部变量在存储位置上不同,使得其存在的时限也不同,导致对两者操作的运行结果也不同。
代码示例:
#include <iostream> using namespace std; int n = 1; void func(); int main() { static int a; int b = -10; cout << "main1: a=" << a << " b=" << b << " n=" << n << endl; b += 4; func(); cout << "main2: a=" << a << " b=" << b << " n=" << n << endl; n += 10; func(); cout << "main3: a=" << a << " b=" << b << " n=" << n << endl; } void func(void) { static int a = 2; int b = 5; a += 2; b += 5; n += 12; cout << "func: a=" << a << " b=" << b << " n=" << n << endl; }
运行结果如下: