[C++] Przekazywanie argumentów przez wartość


(Piki1) #1

Poniższy przyklad miałem na kolokwium zaliczeniowym, wiem, że w C++ argumenty funkcji są przekazywane przez wartość i w zwiazku z tym, wartość zmiennej x nie ulegnie zmianie. Ale, odpowiedzi jakie dostaliśmy po, trochę nas zmurowały. Powinno nam wyświetlić 3, a w odpowiedziach jest 6. No ja tu czegoś nie rozumiem. Dev też wywala 3.

#include 

using namespace std;

int f(int i)

    {

        return i+1;

    }

int main(int argc, char *argv[])

{int x=3;

    f(f(f(x)));

    cout<
    system("PAUSE");

    return EXIT_SUCCESS;

}

(Sawyer47) #2

Nie ma tu za bardzo nic do rozumienia, po skompilowaniu tego co podałeś wyświetli 3.


(system) #3

Tzn powiem tak - są wykonane operacje na kopii zmiennej x, ale są wykonane w pamięci i nigdzie do żadnej innej zmiennej nie zapisane - po trzecim wywołaniu funkcji f dane znikają ze stosu (tutaj znaczy z podręcznej pamięci, którą system wydzierżawił dla skryptu).

Jeśli chciałbyś rzeczywiście otrzymać 6, zrób małą korektę:

#include 

using namespace std;

int f(int i)

    {

        return i+1;

    }

int main(int argc, char *argv[])

{int x=3;

    x = f(f(f(x)));

    cout<
    system("PAUSE");

    return EXIT_SUCCESS;

}