Что такое возвращаемое значение? - PullRequest
0 голосов
/ 07 ноября 2011

На языке, который передает параметры по ссылке, учитывая следующую функцию:

int function g(x, y) {
  x = x + 1;
  y = y + 2;
  return x + y;
}

Если вызывается i = 3 и g(i,i), какое значение возвращается? Я думал, что это 9, это правильно?

1 Ответ

2 голосов
/ 07 ноября 2011

Если это передача по ссылке (ваш исходный вопрос был C, но C не имел передачи по ссылке, и вопрос все равно изменился, так что я отвечу в общем), это, вероятно, тот случай, x и y просто изменят переменные, которые переданы для них. Вот что такое ссылка, в конце концов.

В этом случае они оба являются ссылкой на одну и ту же переменную i, поэтому ваша последовательность, вероятно, будет:

i = i + 1;       // i becomes 4.
i = i + 2;       // i becomes 6.
return i + i;    // return i + i, or 12.

Вы можете увидеть это в работе со следующим C (используя указатели для эмуляции передачи по ссылке):

pax$ cat qq.c
#include <stdio.h>

int g(int *x, int *y) {
    *x = *x + 1;
    *y = *y + 2;
    return *x + *y;
}

int main (void) {
    int i = 3;
    int rv = g (&i, &i);
    printf ("Returned: %d\n", rv);
    return 0;
}

pax$ gcc -o qq qq.c ; ./qq
Returned: 12

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

#include <stdio.h>

int g(int *x, int *y) {
    *x = *x + 1;
    *y = *y + 2;
    return *x + *y;
}

int main (void) {
    int i1 = 3, i2 = 3;
    int rv = g (&i1, &i2);
    printf ("Returned: %d\n", rv);
    return 0;
}

(это делает вывод 9), но это обычно не относится к ссылочным типам.

...