2016-05-10 6 views
1

У меня есть этот вопрос о прохождении методов, и я хочу, чтобы убедиться, что я правильно понимаюразница между Pass-по стоимости пройти по ссылке и пройти в каждом конкретном

Что такое значение I и массиву если аргументы передаются по значение б эталонное значение с/результат asseume мы имеем следующий псевдокод

enter image description here

это мой ответ

By value 
i = 1 
a[1]=10 
a[2]=11 

    by reference 
i = 3 
a[1] = 2 
a[2] = 11 

by value result 
i = 2 
a[1] = 10 
a[2] = 1 

Это правильно? спасибо

+0

так что [2] здесь никогда не изменятся? он всегда будет [2] = 11? – user3382285

ответ

1

Прежде всего, когда вы вызываете функцию (или процедуру, что бы вы ни называли), создается новый стек вызовов. В этом стеке вызовов параметры присваиваются значениям (параметры - это те, которые являются частью вашей сигнатуры функции. Обычно мы называем их «формальными параметрами», например x y z в приведенной выше процедуре f). То, что они назначены, соответствует фактическим аргументам, с помощью которых вызывается функция.

Если они переданы значениями, формальные параметры присваиваются значениям аргументов. Это означает, что значения фактических аргументов скопированы формальным параметрам. Любые дальнейшие операции над формальными параметрами вообще не влияют на аргумент. В вашем примере y присваивается значение a[1], которое равно 10. В теле функции y переназначается, но ничего не случилось с a[1].

Если они передаются по ссылке, с другой стороны, формальные параметры присваиваются адресу памяти фактических аргументов, а в теле функции формальные параметры неявно разыменовываются на значения этого адреса памяти. В вашем примере x будет хранить адрес памяти i, y для a[1] и z для i. Операция на x y z фактически работает на i и a[1].

Я не знаю, что вы подразумеваете под «пройденным значением результата». Я никогда не видел таких условий в других местах.

Еще одна вещь, которую я хочу упомянуть, есть два разных значения «ссылки» в мире программирования. У меня не будет времени дать длинное объяснение. Вы можете найти «ссылочный тип в Java» и «ссылочные переменные в C++», чтобы увидеть разницу.

Смежные вопросы