
静态变量是在全局数据区域中分配的内存,包括稍后将提到的静态局部变量. 对于完整的程序,在内存中的分配如下:
代码区
全局数据区域
堆区
堆栈区域
由通用程序中的new生成的动态数据存储在堆区域中,而函数内部的自动变量存储在堆栈区域中. 自动变量通常在函数退出时释放空间,并且静态数据(甚至函数内部的静态局部变量)也存储在全局数据区域中. 全局数据区域中的数据不会释放空间,因为该函数将退出. 细心的读者可能会发现示例1中的代码将会
static int n; //定义静态全局变量
更改
int n; //定义全局变量
程序正常运行.
的确c 类 static 函数,定义全局变量可以共享文件中的变量,但是定义静态全局变量也具有以下好处:
静态全局变量不能被其他文件使用;

具有相同名称的变量可以在其他文件中定义而没有冲突;
您可以将上面的示例代码更改为以下内容:
//示例2 // File1
#include
void fn();
static int n; //定义静态全局变量
void main()
{n = 20;
cout << n << endl;
fn();
}
// File2

#include
extern int n;
void fn()
{n ++;
cout << n << endl;
}
编译并运行示例2,您会发现上面的代码可以单独编译,但是运行时会出错. 尝试
static int n; //定义静态全局变量
更改
int n; //定义全局变量
再次编译并运行程序,并仔细了解全局变量和静态全局变量之间的区别.
2. 静态局部变量

在局部变量之前,添加关键字static,然后将该变量定义为静态局部变量.
我们首先给出一个静态局部变量的示例,如下所示:
//示例3
#include
void fn();
void main()
{fn();
fn();
fn();
}
void fn()
{static int n = 10;

cout << n << endl;
n ++;
}
通常,在函数体中定义一个变量,并且只要程序运行到该语句,它将为该局部变量分配堆栈内存. 但是,当程序退出函数主体时,系统将回收堆栈内存,并且局部变量将因此无效.
但是有时我们需要在两个调用之间保存变量的值. 通常的想法是定义一个全局变量来实现这一目标. 但是通过这种方式,变量不再属于函数本身,不再由函数单独控制,这给程序的维护带来了不便.
静态局部变量可以解决此问题. 静态局部变量存储在全局数据区域中,而不是存储在堆栈中,并且每个值都保留到下一次调用,直到下次分配新值为止.
静态局部变量具有以下特征:
此变量在全局数据区域中分配内存;
当程序执行到对象的声明时,静态局部变量第一次被初始化,也就是说,后续的函数调用不再被初始化;
静态局部变量通常在声明中初始化. 如果未显式初始化它们,则程序将自动将它们初始化为0;
它始终驻留在全局数据区域中,直到程序执行结束. 但是它的范围是局部范围c 类 static 函数,并且它的范围在定义它的函数或语句块结束时结束;
3. 静态函数
在函数的返回类型之前添加static关键字,并且该函数被定义为静态函数. 静态函数不同于普通函数. 它仅在声明它的文件中可见,而不能被其他文件使用.
静态函数的示例:
//示例4
#include
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-148786-1.html
就无可奈何