Zadzwoń według referencji, wartości i nazwy

Próbuję zrozumieć różnicę pojęciową między wywołaniem przez odniesienie, wartość i nazwę.

Mam więc następujący pseudokod:

foo(a, b, c)
{
   b =b++;
   a = a++;
   c = a + b*10
}

X=1;
Y=2;
Z=3;
foo(X, Y+2, Z);

Co to jest X, Y i Z po wywołaniu foo, jeśli wszystkie a, b i c są wywołane przez odwołanie? jeśli a, b i c są wywołane przez wartość / wynik? jeśli a, b i c są wywołane przez nazwę?

Inny scenariusz:

X=1;
Y=2;
Z=3;
foo(X, Y+2, X);

Staram się zdobyć przewagę w nauce na nadchodzący finał i to wydawało się dobrym problemem do przejrzenia. Pass-by-name jest zdecydowanie najbardziej obcy dla mnie.

questionAnswers(5)

yourAnswerToTheQuestion