Оценка переменной через 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 после назначения.

Другие вопросы по тегам