static
static修饰变量&修饰函数
在介绍static之前,先看下static修饰全局变量和局部变量的题。
#include<iostream>
using namespace std;
static int m;
void fun1()
{
static int n = 0;
n++;
printf("n = %d\n",n);
}
void fun2()
{
m = 0;
m++;
printf("m = %d\n",m);
}
int main()
{
int i;
for(i = 0; i < 10; i++)
{
fun1();
}
for(i = 0; i < 10; i++)
{
fun2();
}
system("pause");
return 0;
}
运行结果:
从运行结果可以看出,被static修饰的变量存储属性会发生改变,但被static修饰的全局变量和局部变量又有什么不同。这里先介绍下,变量的存储位置。
变量的存储位置
变量的缺省存储类型取决于它的申明位置。
1. 凡是在任何代码块之外的声明的变量总是存储于静态内存中。不属于堆栈内存,这类变量称为静态变量。静态变量在函数运行之前创建。
2. 在代码块内部声明的变量的缺省存储类型是自动的,存储于堆栈中。
注: 对于在代码块内部声明的变量,如果给他加上static关键字,可以使他的存储类型由自动转变为静态。具有静态存储类型的变量在整个程序执行过程中一直存在。而不仅仅是它所在的代码块执行的时候存在。