Пожалуйста, помогите мне понять передачу параметров - PullRequest
0 голосов
/ 20 января 2012

Я хочу больше узнать о разборе параметров.У меня есть пример с кодом ниже.Каковы результаты, если я передам параметр по: * Значение * Ссылка * Имя

procedure f (x, y, z)
x := x + 1
y := z
z := z + 1

i := 0; a[0] := 10; a[1] := 11

f (i, a[i], i)

print i, a[0], a[1]

Если я правильно понял, результаты будут:

По значению: 1, 11, 12

По ссылке: 2, 12, 10

По имени: 1, 10, 0

Я в правильном направлении?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Я дам вам частичный ответ

когда вы передаете по значению, вы передаете копию своей переменной, поэтому ваша переменная не может быть изменена функцией. поэтому ответ по значению должен быть 0,10,11, которые являются начальными значениями i и массива.

когда вы перейдете по ссылке, это изменит ваши значения: первая строка изменит i на 1; вторая строка изменит [0] на 1; третья строка изменит i на 2; это означает, что он напечатает 2,1,11

Я никогда не слежу за тем, чтобы передать имя.

надеюсь, это поможет

0 голосов
/ 20 января 2012

При передаче по значению переданные значения будут одинаковыми до и после вызова функции f, поэтому первый результат должен быть 0, 10, 11.

При передаче по имени используется текстовая подстановка,очень похоже на подстановку макросов, используется в некоторых языках, таких как Algol.В c это было бы похоже на определение f как макроса: #define f(x,y,z) x = x + 1; y = z; z = z + 1;, который в этом примере расширился бы до i = i + 1; a[i] = i; i = i + 1;, что дало бы результат

2, 10, 12

...