全局变量和静态局部变量有什么区别?
存储的地方是一样的,不同之处在于它们的作用域不同:
全局变量基本上在程序的任何地方都能被看到
而静态局部变量只能在其指定的范围内被使用
比如
int i ; // 全局变量
class C
{
public:
static int i_C; // 静态局部变量
}
void main()
{
i = 1; // 合法
i_C = 1; // 错误
C::i_C = 1; // 合法
C cc;
cc.i_C = 2; // 合法
}
2、
全局变量具有外部连接性,即同一工程中其它文件中的也可引用。
而静态变量不具有外部连接性,即同一工程中其它文件中不可以引用。
如:
//cpp1.cpp
extern int x=10;
static int y=5;
//cpp2.cpp
#include
void main()
{
extern int x;
extern int y;
cout
cout
}
将这两个文件放在同一工程中,你发现每一文件单独编译能通过,但作为工程不能构成.exe 文件运行。若将有关变量y 的行注释后(或将static 换成extern) 就可以了。这是因为静态变量的作用域在本文件内,不能扩充到其它文件。其作用是当多人合作开发一个工程时,仅在自己的文件内使用的全局变量用静态变量不会与其他人用的变量相混淆,这就是标识符的一致性。
3、静态局部变量
在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。
静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。
全局变量和静态局部变量有什么区别?
存储的地方是一样的,不同之处在于它们的作用域不同:
全局变量基本上在程序的任何地方都能被看到
而静态局部变量只能在其指定的范围内被使用
比如
int i ; // 全局变量
class C
{
public:
static int i_C; // 静态局部变量
}
void main()
{
i = 1; // 合法
i_C = 1; // 错误
C::i_C = 1; // 合法
C cc;
cc.i_C = 2; // 合法
}
2、
全局变量具有外部连接性,即同一工程中其它文件中的也可引用。
而静态变量不具有外部连接性,即同一工程中其它文件中不可以引用。
如:
//cpp1.cpp
extern int x=10;
static int y=5;
//cpp2.cpp
#include
void main()
{
extern int x;
extern int y;
cout
cout
}
将这两个文件放在同一工程中,你发现每一文件单独编译能通过,但作为工程不能构成.exe 文件运行。若将有关变量y 的行注释后(或将static 换成extern) 就可以了。这是因为静态变量的作用域在本文件内,不能扩充到其它文件。其作用是当多人合作开发一个工程时,仅在自己的文件内使用的全局变量用静态变量不会与其他人用的变量相混淆,这就是标识符的一致性。
3、静态局部变量
在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。
静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。