c++ 变量作用域
Posted expedition
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 变量作用域相关的知识,希望对你有一定的参考价值。
一、局部变量
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用
#include <iostream> using namespace std; int main () // 局部变量声明 int a, b; int c; // 实际初始化 a = 10; b = 20; c = a + b; cout << c; return 0;
二、全局变量
在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。
#include <iostream> using namespace std; // 全局变量声明 int g; int main () // 局部变量声明 int a, b; // 实际初始化 a = 10; b = 20; g = a + b; cout << g; return 0;
局部变量和全局变量的名称可以相同,但是在函数内,同名的局部变量的值会覆盖全局变量的值
#include <iostream> using namespace std; // 全局变量声明 int g = 20; int main () // 局部变量声明 int g = 10; cout << g; return 0;
结果: 10
三、局部变量和全局变量的初始化
示例:
#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;
在一个函数体内可以存在重名的变量,前提是它们的作用域不同
#include <iostream> using namespace std; int main() int b = 2; int b = 1; cout << "b = " << b << endl; cout << "b = " << b << endl;
当变量间出现重名的情况下,作用域小的屏蔽作用域大的,所以上面第一个 cout 输出 b 的值为 1,但由于在块里面申请的变量作用域只限于当前块,所以离开这个块后变量会自动释放,所以第二个 cout 输出 b 的值为 2
全局变量的值可以在局部函数内重新赋值
#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 a = 10; int main() int a = 20; cout << ::a << endl; // 10 【可引用也可以重新赋值】 cout << a << endl; // 20 return 0;
C++全局变量 局部变量 静态全局变量 静态局部变量的区别
全局变量和局部变量作用域不同,static 关键字可限定引用范围:
#include <stdio.h> int s32Test; // 定义全局变量,系统默认初始化0 static void Fun(); // 声明只限定在被当前文件调用的函数 static void Fun() int s32Test = 1; // 局部变量,如果不初始化,会是一个随机数值 //与全局变量名相同,会屏蔽全局变量调用,s32Test = 1 printf("This is Fun(),s32Test = %d!", s32Test); int main() Fun(); return 0;
以上是关于c++ 变量作用域的主要内容,如果未能解决你的问题,请参考以下文章