局部变量隐藏全局变量,可是下面这种情况如何解释的?求大神...
#include <iostream>
#include <stdlib.h>
using namespace std;
int x = 72,y = 64 ;
void fun1();
void fun2(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
int x = 50,y = 24;
fun1();
fun2(x,y);
cin.get();
return 0;
}
void fun1()
{
cout<<x<<" "<<y<<endl;
}
void fun2(int x,int y)
{
cout<<x<<" "<<y<<endl;
}
打印的是72 64
50 24,带参数时就不一样,求解释!
[解决办法]
- C/C++ code
void fun2(int x,int y){ cout<<x<<" "<<y<<endl; // parameter value cout << ::x << " " << ::y << endl; // global value}
[解决办法]
这个例子不刚好说明局部变量隐藏全局变量吗
fun2,最内一层的局部变量x,y,也就是形参, 隐藏了全局变量x,y
而fun1, 最内一层的变量x,y就已经是全局变量x,y了
变量搜索的顺序是,block内(花括号对),函数体内(含形参),然后函数体定义前的
而这里,main函数里声明的x,y显然不在它的作用域内,
你可以想想,如果按你的理解,那我同一个函数再别的地方调用,还返回不同的结果,这合理吗
[解决办法]
有啥可解释的?
在main函数里,局部变量隐藏了全局变量
在fun1里,全局变量有效
在fun2里,函数参数隐藏了全局变量
你哪里不明白?是以为main函数的局部变量能够传递到fun1里?还是不明白fun2的参数传递?
[解决办法]
这很好理解,fun1()没有传参进去,它的定义说明它调用的X,Y来自这个cpp作用域下,而在这个作用域下,只有最上面的x,y,而main函数里面的x,y出了main的外面就不起作用了