Преминаване по стойност и справка

Имам практически въпрос, който ме озадачи за предстоящия сертификационен тест. Моля, помогнете с каквото можете! Мисля, че разбирам как да получа частта от отговора за предаване по стойност, но НЯМАМ ИДЕЯ за частта за предаване по препратка на този въпрос.

procedure calc ( pass-by-value int w,
                 pass-by-value int x,
                 pass-by-reference int y,
                 pass-by-reference z)

    w <-- w + 1
    x <-- x * 2
    y <-- y + 3
    z <-- z * 4

end procedure

Какви са стойностите на a и b в края на кодовия фрагмент по-долу?

int a <-- 5
int b <-- 6
calc (a, a, b, b)

person user3735557    schedule 14.06.2014    source източник
comment
Ако не знаете какво представлява прехвърлянето по препратка, може да искате да прочетете за това: en.wikipedia.org/wiki/Call_by_reference#Call_by_reference   -  person Felix Kling    schedule 14.06.2014
comment
Вижте Уикипедия: Стратегии за оценка; по-интересно е да се обсъждат нюанси, отколкото основни термини.   -  person user2864740    schedule 14.06.2014


Отговори (2)


a никога не се променя извън процедурата, защото се предава по стойност, докато b ще се променя, защото се предава по референция. Присвояването на променливи, предадени чрез препратка, ще остане извън процедурата.

един от начините да го разгледате е да замените референтните аргументи с извикващата променлива, да замените y,z с b. докато не е заместител на a, защото се извиква по стойност.

сега вашият код ще изглежда точно така, ако w,x се предаде чрез стойност y,z чрез справка: a ще бъде 5 без промяна, докато b ще бъде:

int a <-- 5
int b <-- 6
w <-- a + 1
x <-- a * 2
b <-- b + 3   => b will be 9 
b <-- b * 4   => b will be 36

b ще бъде 36 в рамките на процедурата и след връщане на процедурата.

person mmohab    schedule 14.06.2014
comment
Благодаря много! ТОЧНО това търсех! Твърде много съм обмислял тези въпроси! - person user3735557; 14.06.2014

Резултати:

w = 6, x = 10, y = 9, z = 36

След изчисления a = 5 и b = 36

person juniperi    schedule 14.06.2014
comment
@MattCoubrough Поправи отговора ми - person juniperi; 14.06.2014
comment
Не съм сигурен, че fixed е правилно - Как това помага на питащия всъщност да разбере ЗАЩО това е резултатът? - person Matt Coubrough; 14.06.2014