2013-03-10 10 views
5

Kod:Jak uzyskać dostęp do zmiennej globalnej, gdy istnieje konflikt lokalny i globalny

int a = 33; 
int main() 
{ 
    int a = 40; // local variables always win when there is a conflict between local and global. 
    // Here how can i access global variable 'a' having value '33'. 
} 

Jeśli zapytać: Dlaczego ktoś chciałby zrobić coś wyżej? Dlaczego [a-zA-Z] *?

Moja odpowiedź brzmi: Po prostu wiem, że "można to zrobić".

Dzięki.

+0

http://stackoverflow.com/questions/5827447/how-refer-to-a-local-variable-share-same-name-of-a-global-variable-in-c –

+0

jego właściwie dobre pytanie, ale czym jest "[a-zA-Z] *"? –

+2

Oznacza to każde pytanie zaczynające się od "Dlaczego" i kończące się na "?" na przykład Dlaczego chcesz uzyskać dostęp do globalnego tutaj? lub dlaczego bla bla bla bla? – VishalDevgire

Odpowiedz

12

Jak o tym starym trick:

int main() 
{ 
    int a = 40; // local variables always win when there is a conflict between local and global. 

    { 
     extern int a; 
     printf("%d\n", a); 
    } 
} 
+1

+1 za pokonanie mnie przez 30 sekund. –

+1

+1: miła sztuczka. Nie wiem o tym. – Heisenbug

+3

@R .. Aby być uczciwym, myślę, że po raz pierwszy zobaczyłem to jakiś czas temu w jednym ze starszych postów. – cnicutar

8
int a = 33; 
int main() 
{ 
    int a = 40; 
    int b; 
    { 
    extern int a; 
    b = a; 
    } 
    /* now b contains the value of the global a */ 
} 

twardszego problemem jest coraz a czy to static z zakresu plików, ale to też jest rozwiązywalne:

static int a = 33; 
static int *get_a() { return &a; } 
int main() 
{ 
    int a = 40; 
    int b = *get_a(); 
    /* now b contains the value of the global a */ 
} 
+0

Dlaczego nie po prostu zrobić 'int b = a; int a = 40; '? Lub, może kompilator zmienić kolejność linii w tym przypadku .... –

+0

Rzeczywiście można to zrobić. –

4

TO C++, PRZEGLĄDAMY C tag, SORRY!

int a = 100; 

int main() 
{ 
    int a = 20; 

    int x = a; // Local, x is 20 

    int y = ::a; // Global, y is 100 

    return 0; 
} 
Powiązane problemy