静态变量
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和 static 变量,只不过和全局变量比起来,static 可以控制变量的可见范围,说到底 static 还是用来隐藏的。虽然这种用法不常见。
PS:如果作为 static 局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
#include <iostream> using namespace std; int count = 1; //全局变量 int fun() { static int count = 10; // 在第一次进入这个函数的时候,变量 count 被初始化为 10!并接着自减 1,以后每次进入该函数,count 的值是上一次函数运行之后的值 return count--; // 就不会被再次初始化了,仅进行自减 1 的操作;在 static 发明前,要达到同样的功能,则只能使用全局变量 } //int count = 1; //全局变量 int main() { cout<<"global "<<"local staic"<<endl; for(; count <= 10; ++count) cout<<count<<" "<<fun()<<endl; return 0; }
并且,由此可见全局变量和局部静态变量 count 的作用域是不同的。
全局变量从定义处开始至程序结束起作用,即全局变量存在有效作用域。
#include<iostream> using namespace std; int main() { cout<<"a= "<<a<<endl; //编译不通过,a是未知字符 return 0; } int a=10; //全局变量从此处定义
若要想让 main 函数也使用全局变量 a,可以用 extern 对全局变量进行声明,就可以合法使用了。
#include<iostream> using namespace std; int main() { extern int a; cout<<"a= "<<a<<endl; //合法,输出10 return 0; } int a=10; //全局变量从此处定义
全局变量的值可以在局部函数内重新赋值。
#include <iostream> using namespace std; // 全局变量声明 int g = 20; int fun1(int a,int b){ g=a+b; cout<<"被改变的全局变量为:"<<g<<endl; return 0; } int fun2(){ cout<<"此时的全局变量为:"<<g<<endl; return 0; } int main(){ fun2(); fun1(10,20); fun2(); return 0; }
在一个函数体内可以存在重名的变量,前提是它们的作用域不同。
#include <iostream> using namespace std; int main() { int b = 2; { int b = 1; cout << "b = " << b << endl; } cout << "b = " << b << endl; }
输出为:
b = 1 b = 2
当变量间出现重名的情况下,作用域小的屏蔽作用域大的,所以上面第一个 cout 输出 b 的值为 1,但由于在块里面申请的变量作用域只限于当前块,所以离开这个块后变量会自动释放,所以第二个 cout 输出 b 的值为 2。
在程序中,局部变量和全局变量的名称可以相同。
但是在函数内的局部变量与全局变量是两个独立的变量,互不影响。
下述代码中,全局变量定义了一个int g=99,局部变量定义了一个int g=10,由于这两个g所在的作用域不同,所以各自独立。
#include <iostream> using namespace std; // 全局变量声明 int g = 99; // 函数声明 int func(); int main() { // 局部变量声明 int g = 10; //cout << g; int kk = func(); cout << kk; return 0; } // 函数定义 int func() { return g; }
感谢您的支持,我会继续努力的!
支付宝扫一扫,即可进行扫码打赏哦
1839C++ 变量作用域
静态变量
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和 static 变量,只不过和全局变量比起来,static 可以控制变量的可见范围,说到底 static 还是用来隐藏的。虽然这种用法不常见。
PS:如果作为 static 局部变量在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
并且,由此可见全局变量和局部静态变量 count 的作用域是不同的。
1838C++ 变量作用域
全局变量从定义处开始至程序结束起作用,即全局变量存在有效作用域。
若要想让 main 函数也使用全局变量 a,可以用 extern 对全局变量进行声明,就可以合法使用了。
1837C++ 变量作用域
全局变量的值可以在局部函数内重新赋值。
1836C++ 变量作用域
在一个函数体内可以存在重名的变量,前提是它们的作用域不同。
输出为:
当变量间出现重名的情况下,作用域小的屏蔽作用域大的,所以上面第一个 cout 输出 b 的值为 1,但由于在块里面申请的变量作用域只限于当前块,所以离开这个块后变量会自动释放,所以第二个 cout 输出 b 的值为 2。
1835C++ 变量作用域
在程序中,局部变量和全局变量的名称可以相同。
但是在函数内的局部变量与全局变量是两个独立的变量,互不影响。
下述代码中,全局变量定义了一个int g=99,局部变量定义了一个int g=10,由于这两个g所在的作用域不同,所以各自独立。