您的位置:首页 > 编程语言 > C语言/C++

C++ 全局变量 局部变量 静态变量 及 extern

2015-07-18 01:04 267 查看
全局变量:

全局变量是在所有函数体的外部定义的,程序 的所有地方可以使用,

甚至在其他文件的代码中也可以使用(但要使用extern),

也就是说全局变量不受作用域的影响,总是可用的。

换句话说,就是全局变量的生命周期一直到程序的结束。

如果在一个文件中使用extern来声明另一个文件中存在的全局变量,那个这个文件就可以使用这个变量。

例:

//file1
#include <iostream>
using namespace std;
int globle;
int main()
{
globle = 111;
return 0;
}

//file2
extern int globle;
void func()
{
//...
}


局部变量:

局部变量也称为自动变量,它们出现在作用域内(或嵌套作用域),离开时自动销毁。

关键字auto,为默认,所以不用声明;

寄存器变量也是一种局部变量,关键字register告诉编译器,尽可能快地访问这个变量。

register变量只能在一个块中声明,不可能有全局的或静态的register变量。然而可以在函数中作为形参。

静态变量:

关键字static

通常,函数中的定义的局部变量在函数作用域结束时销毁。

当再次调用这个函数时,会重新创建该变量的存储空间,其值会重新初始化。

如果想让局部变量的值在程序的整个生命周期里仍然有效,就可以定义这个局部变量为静态,关键字static,

并给它一个初始值,初始值只在函数第一次调用时执行,函数调用之间变量的值保持不变。

问题:为什么不使用全局变量呢?

这里就要强调静态变量的优点了,

一,静态的局部变量,它在函数之外是不可用的。

#include <iostream>
using namespace std;

void func()
{
static int i = 0;//这里只是第一次调用时初始化一下,
cout << "i = " << ++i << endl;
}
int main()
{
for (int i = 0; i < 10; ++i)
func();
return 0;
}这里如果不使用static,则每次打印的值总是1,而不是不同的值;
二,静态的全局变量,在文件的外部也不可以使用,即它只在本文件的代码中有作用,

即使使用了extern,但连接器不会找到它的,只因为它被声明为static
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: