2014-05-14 36 views
1

我最近正在学习C++语言。如何访问其他本地区域的局部变量?

我一直想知道如何在局部区域[2]访问局部变量“a”来观察下面的代码。

如何做到这一点?

#include "stdafx.h" 
using namespace std; 

///// global area ///// 
int a = 1; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    ///// local area[1] ///// 
    int a = 2; //<= how to access this "a" at local area[2]? 

    cout << "global area [a] : " << ::a << endl; 
    cout << "local area[1] [a] : " << a << endl; 
    { 
     ///// local area[2] ///// 
     int a = 3; 
     cout << "global area [a] : " << ::a << endl; 
     cout << "local area[2] [a] : " << a << endl; 
     cout << "local area[1] [a] : " << ?????? << endl; 
    } 

    return 0; 
} 
+0

你试图在调试器中运行? – NirMH

+0

你为什么要这样?我不确定,但可能会尝试通过%ebp(x86)的不正确寻址访问来帮助您。 – user1641854

+2

你根本做不到。如果您在内部作用域中声明了一个影响外部作用域声明的变量,则外部作用域的变量不可用。唯一的例外是全局范围内的变量,这要归功于'::'运算符。 –

回答

1

你不能这样做。当你在内部作用域中声明一个变量时,它会隐藏外部作用域的变量,并且该语言不会像访问全局变量一样提供任何访问方式。

即使它确实支持这一点,但将变量命名为相同也是不好的做法。想象一下,必须处理大量的范围和所需的复杂性!

只需对中间变量使用不同的变量名称,就可以更轻松地编写和维护代码。

+1

谢谢Veritas的详细解释:D –

1

你需要从外部范围有点帮助:

using std::cout; 
using std::endl; 
int main(int argc, char* argv[]) 
{ 
    ///// local area[1] ///// 
    int a = 2; //<= how to access this "a" at local area[2]? 
    int& alternative_name = a; 

    cout << "global area [a] : " << ::a << endl; 
    cout << "local area[1] [a] : " << a << endl; 
    { 
     ///// local area[2] ///// 
     int a = 3; 
     cout << "global area [a] : " << ::a << endl; 
     cout << "local area[2] [a] : " << a << endl; 
     cout << "local area[1] [a] : " << alternative_name << endl; 
    } 

    return 0; 
} 
+0

谢谢MSalters。:D –