Zakres widoczności zmiennych

0

Siemka, mam takie zadanie:
"Zadeklaruj jedną zmienną globalną oraz jedną lokalną o tej samej nazwie. Zademonstruj
zakres widoczności zmiennej lokalnej, w sytuacji kiedy przesłoni zmienną globalną."
Napisałem takie kod i nie wiem (a raczej wątpię) czy załatwia on sprawę, prosiłbym o pomoc, z góry dzięki :


using namespace std;

int variables=12;

int main()
{
    int variables=11;
    cout<<variables;//Wyswietla sie wartosc zmiennnej lokalnej
    return 0;
}```
2

Powiedziałbym że jest OK, ja bym tylko wypisał dodatkowo zmienną variables przed re-deklaracją.

0
  1. tak jako informacja, nie uzywaj globalnych. Wiem, ze takie jest zadanie, ale po zadaniu zapomnij o globalnych zmiennych.

  2. teraz zmien wartosc globalnej zmiennej i znowu wyswietl ta zmienna. W ten sposob pokazesz ze mimo, ze zmieniasz wartosc tej zmiennej, ta globalna nadal zostaje taka sama. Najlepiej zrob sobie druga funkcje ktora wyswietla globalna zmienna. wiec bedziesz miec taki flow

  • wyswietlasz zmienna globalna w funkcji Foo()
  • funkcja Bar() zmienia wartosc zmiennej o tej samej nazwie (i bedzie to zmienna lokalna)
  • wyswietlasz zmienna globalna w funkcji Foo()
2

W sumie to pytanie z serii " o co prowadzącemu chodziło".

Dla mnie wygląda to spoko, ale mógłbyś jeszcze wypisać variables nad definicją zmiennej wewnątrz funkcji main(), aby pokazać, że tam będzie inna wartość.

0

Oki, dzieki za pomoc. Zgadzam się co do tego że nie wiadomo o co chodzi prowadzącemu...

0
Bartek24 napisał(a):

Oki, dzieki za pomoc. Zgadzam się co do tego że nie wiadomo o co chodzi prowadzącemu...

Wiadomo. Chodzi mu o operator zakresu ::

  • variable z maina
  • ::variable globalne

Na przykładzie wygląda to tak:

#include <iostream>

using namespace std;

int variable = 5;

void fun()
{
    cout << "fun() globalne:" << variable << endl;//Globalne, bo innego nie ma
    
    int variable = 15;
    cout << "fun() lokalne:" << variable << endl;//Lokane, bo w tym miejscu kompilator widzi definicję zmiennej lokalnej variable
    
    cout << "fun() globalne:" << ::variable << endl;//globalne, bo jasno zasygnalizowałem kompilatorowi przez użycie :: "użyj zmiennej globalnej"
}

int main()
{
    int variable = 10;
    
    fun();
    
    cout << "main() lokalne:" << variable << endl;
    cout << "main() globalne:" << ::variable << endl;

    return 0;
}

https://onlinegdb.com/rJDTgv6RQ

1 użytkowników online, w tym zalogowanych: 0, gości: 1