Member 11712396 Ответов: 1

В чем разница между вызовом по имени и вызовом по ссылке?


эти темы для меня новы, и они все еще не ясны мне, поэтому я попытался решить некоторые примеры в интернете.
int function inc(int x, int y) {
x := y + 1;
x := y + 1;
}
void main(void) {
int s := 3;
inc(s,s);
writeln(s);
}


каков вывод с использованием вызова по имени и вызова по ссылке?

Что я уже пробовал:

я думаю, что выход будет 5 для обоих, не так ли?

Richard MacCutchan

Только если это вызов по ссылке. Вы запустили код, чтобы увидеть, какие результаты он дает?

1 Ответов

Рейтинг:
0

Jochen Arndt

При вызове по значению передается копия значения, и функция работает с этой копией. Это похоже на локальную переменную, инициализированную переданным аргументом. Исходное значение, переданное вызывающим абонентом, не изменяется. Это то, что сделал бы ваш код, если бы он был действительным Pascal (это смесь C и Pascal, и функция не возвращает значение) и s останется без изменений (3).

Если вы вызываете по ссылке, аргументы изменяются. Вы должны сказать компилятору, что хотите передать по ссылке, предшествуя аргументам с помощью var ключевое слово:

function inc(var: x, y: Integer): Integer;
begin
    x := y + 1;
    x := y + 1;
    inc := x;
end
Здесь xs) будет, наконец, 5 для особого случая, который x и y являются ли ссылки на одну и ту же переменную s.

Взгляните на любой учебник по Паскалю. Этим должны заниматься все.

Существует также передача аргумента вызова по имени. Но, насколько я знаю, это не поддерживается Pascal, и вы, вероятно, имеете в виду вызов по значению. Общее описание см. Стратегия оценки-Википедия[^].