[C++] Nazwy lokalne / przesłanianie nazw zmiennych
Ostatnio zmodyfikowano 2014-02-05 15:58
jakuszek Temat założony przez niniejszego użytkownika |
[C++] Nazwy lokalne / przesłanianie nazw zmiennych » 2014-01-26 15:16:53 Cześć.
Krótko i na temat:
Przerabiam książkę Grębosza i jest tam jedno ćwiczenie którego nie potrafię rozwiązać:
#include <iostream>
using namespace std;
int zmienna = 3; int main() { { int zmienna = 6; { int zmienna = 9; cout << zmienna << endl; cout <<::zmienna << endl; } } system( "pause" ); }
W bloku który jest 'najgłębiej' zagnieżdżony wyrzucam na ekran nazwę 'zmienna'. Wewnątrz tego bloku mogę dotrzeć do zmiennej o wartości 9 oraz do nazwy globalnej o wartości 3. Nie wiem jednak jak dotrzeć do nazwy o wartości 6 bez wychodzenia z bloku, tzn tej będącej o jeden poziom wyżej.
Byłbym wdzięczny za pomoc. |
|
Monika90 |
» 2014-01-26 15:19:47 Nie wiem jednak jak dotrzeć do nazwy o wartości 6 |
Nie da się. |
|
kitsss |
» 2014-02-03 00:26:19 Doszło tutaj do zasłonięcia nazwy, więc nic się nie poradzi. Chyba, że dysponujesz nieograniczonymi sposobami, to możesz utworzyć i pokazać wskaźnik na tamtejszą zmienną równą 6 i pokazać go cout'em nawet w tej najbardziej zagnieżdżonej klamrze. Nie wiem czy dobrze mówię, jak sprawdziłem praktycznie na kompilatorze, to te same zmienne (oczywiście zasłonięte nazwą) posiadają różne adresy. Tą metodą wskaźnikową akurat się udało. |
|
jakuszek Temat założony przez niniejszego użytkownika |
» 2014-02-04 13:16:56 Faktycznie, nie wpadłem na to by użyć wskaźników. Wytłumaczyć się mogę jedynie tym, że C++ znam pobieżnie i jeszcze nie przewałkowałem w mojej książce tematu wskaźników. Wklejam poniżej kod z rozwiązaniem. Jeżeli ktoś ma inne lepsze/gorsze pomysły rozwiązania "problemu" i chciałby go przedstawić to z chęcią się z nimi zapoznam. #include <iostream>
using namespace std; int * wskaznik; int zmienna = 3; int main() { { int zmienna = 6; wskaznik = & zmienna; { int zmienna = 9; cout << zmienna << endl; cout << * wskaznik << endl; cout <<::zmienna << endl; } } system( "pause" ); }
|
|
MrPoxipol |
» 2014-02-05 09:25:13 Możesz użyć bezpieczniejszych referencji do zmiennej. |
|
jakuszek Temat założony przez niniejszego użytkownika |
» 2014-02-05 15:58:26 Dzięki za podpowiedź. Poniżej kolejna wersja 'kodu':) #include <iostream>
using namespace std; int zmienna = 3; int main() { { int zmienna = 6; int & referencja = zmienna; { int zmienna = 9; cout << zmienna << endl; cout << referencja << endl; cout <<::zmienna << endl; } } system( "pause" ); }
Jeżeli ktoś jeszcze chciałby przedstawić inne rozwiązanie mojego "problemu" to będę wdzięczny :) |
|
« 1 » |