2014-05-14 62 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 –