Оценка переменной через Pass By Name
У меня есть сомнения по поводу Pass By Name
Procedure test ( int c, int d)
{
int k = 10;
c = 5;
d = d + 2 ;
k = c + d;
print (k);
}
main()
{
k = 1;
test(k,k);
print (k);
}
Я упоминал один из предыдущих вопросов о том, что такое передача по имени и как она работает.
и приведенная в нем ссылка:
Передача имени параметра передачи
Вопрос, который у меня есть: напечатает ли вышеприведенный код: ( 14, 1) или (14, 14)
В основном сомнение заключается в том, будет ли значение k в процедуре отражено в основной процедуре или нет.
Я готовлюсь к экзамену. Это фрагмент кода, приведенный в одном из банка вопросов.
1 ответ
Передача по имени, когда вы передаете переменную, а не более сложное выражение, ведет себя так же, как передача по ссылке. Таким образом, ваш код печатает 14 и 7.
Обратите внимание, что локальная переменная k
в вашей процедуре test
не та же самая переменная, что и глобальная переменная k
, В test
, задания c = 5
а также d = d + 2
оба назначают на глобальный k
как это было передано по имени test
через оба c
а также d
, Таким образом, после этих назначений k
имеет значение 7
, Назначение k = c + d;
влияет на локальную переменную k
(поскольку это k
в то время), а не глобальная переменная k
(который находится в тени локальной переменной), и, таким образом, глобальный k
сохраняет значение 7
после назначения.