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;
}
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;
}