Что происходит, когда вы передаете выражение функции, которая имеет значение-результат? - PullRequest
0 голосов
/ 02 июля 2019

Я посещаю курс принципов языков программирования, и есть это упражнение, где я должен рассказать, что печатается этой программой:

{

int x=2;

void A (val/res int y) 
{
    x++; 
    write(y); 
    y=y+2; 
}

A(x)
A(x+1)
write (x); 

}

A - это функция с передачей параметров значения / результата, поэтому перед ее возвратом следует скопировать окончательное значение своего формального параметра (y) в фактический параметр. Когда первый вызывается, его фактическим параметром является x, так что проблем здесь нет. Тем не менее, второй вызов A имеет х + 1 в качестве фактического параметра. Что это значит? Может быть, окончательное значение у теряется, потому что нет переменной, куда его скопировать? Или, может быть, мне следует рассмотреть это как уравнение, поэтому, если конечное значение y равно 7, я получаю, что x + 1 = 7, а затем значение x равно 6?

1 Ответ

1 голос
/ 02 июля 2019

Это означает, что значение аргумента копируется в y:

  • Когда x = 2, A(x) копирует 2 в y в начале A
  • Когда x = 4, A(x+1) копирует значение из x+1 или 5 в y в начале A

Однако, как вы указали, передача x+1 для параметра значение / результат является проблематичной, и я ожидаю, что любой язык, поддерживающий этот тип параметра, не сочтет его допустимым по той причине, на которую вы ссылаетесь. Если это будет считаться законным, то как это будет достигаться, будет зависеть от определения языка; Я не верю, что есть стандартный способ справиться с этим.

...