вызов по значению-результат в Паскале - PullRequest
0 голосов
/ 12 июня 2010

Как я могу смоделировать вызов по значению-результат в этом примере. Без добавления переменных и без изменения имени переменной .?

Program one;
    var
      x:integer;
    Function two():integer;
        begin
           x:=x+1;
           two:=x;
        end;
    Procedure three(x:integer);
       begin
          x:=x+5;
          x:=two();
       end;
begin
x:=8;
three(x);
write(x);
end.

Ответы [ 3 ]

0 голосов
/ 14 июня 2010

Делайте to two () то, что уже делает три ().

0 голосов
/ 14 января 2011

Трудно разобрать что-то из вопроса в его нынешнем виде.

Однако вопрос, кажется, имеет некоторый смысл, если мы предположим, что OP - это , спрашивающий, как эмулировать вызов по ссылке (не по значению) в примере кода.

Итак ... Фактический код передает параметр в three() по значению. three(), похоже, пытается сохранить значение в глобальной переменной, прежде чем вызвать two(), что, в свою очередь, изменит глобальную переменную.

Но глобальная переменная фактически используется для передачи значения, поэтому хитрость в том, что после передачи глобального значением в three() глобальное изменение в конечном итоге будет изменено, как если бы оно было передано по ссылке.

Только есть небольшой вопрос (который, кажется, составляет целую проблему): как обращаться к глобальному изнутри three(), поскольку имя параметра совпадает с именем глобального?

Я не знаю, какая версия Pascal должна запускать этот код, но если компилятор совместим с семейством TP / Delphi и если имена переменных должны быть оставлены без изменений, тогда я попробую единственный способ, которым я знаю пока что: one.x. В частности, эта строка в реализации three()

x:=x+5;

Я бы изменил на

one.x:=x+5;

Итак, глобал здесь получает значение параметра, увеличенное на 5, и вызывает two(), и two() снова изменяет глобал.

0 голосов
/ 12 июня 2010

Если это домашнее задание, я не думаю, что вам нужно будет var y трудно найти ответ.

РЕДАКТИРОВАТЬ: Комментарий ниже является правильным - возможно, я вел вас по неверному пути - вероятно, лучше вернуться туда, где мы были и начать с этого.

...