niejasnosc w programie z referencją

0

Mam do Was pytanie, moi mili. Znalazłem w internecie program, który działa, a ja nie mam zielonego pojęcia dlaczego:

#include <iostream>

bool wczytaj_liczbe( int & liczba )
{
    std::cin.clear();
    std::cin.sync();
    std::cin >> liczba;
    return std::cin.good();
}

int main()
{
    int x;
    do
    {
        std::cout << "Podaj liczbe: ";
    } while( wczytaj_liczbe( x ) == false );

    std::cout << "Liczba podana to: " << x << std::endl;
    return 0;
}

moje pytanie brzmi: skąd do cholery program wie, że liczba podana w pętli ma być akurat wartością x ?! dlaczego nie ma tam cin>>x ?

0

Bo w pętli wywołujesz metodę w której argumentem jest Twój x. Możesz popatrzeć na ciało tej metody i zauważysz, że wywołujesz metodę cin>> dla jakiegoś inta (w metodzie nazywa się liczba) który w Twoim przypadku jest x (iksem) bo go podałeś jako argument. Dlatego podana z klawiatury wartość zapisuje się do zmiennej x.

0

Bo do funkcji wczytaj_liczbe przekazujesz oryginalną zmienną a nie jej lokalną kopie. W efekcie ta funkcja wpisze dane do twojej zmiennej x.

0

Najpierw przeczytaj to: Przekazywanie parametru przez wartość i referencję

A potem popatrz na te linijki:

while (wczytaj_liczbe(x)
...
bool wczytaj_liczbe(int& liczba)
...
std::cin >> liczba;
0

wielkie dzięki, już zrozumiałem ;)

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