2014-02-13 5 views
1

У меня есть сомнения относительно 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); 
} 

Я отношусь к одному из ранее вопроса о what is pass by name and how does it work

и ссылок приведена в нем:

Pass by name parameter passing

у меня есть вопрос: будет ли выше код для печати: (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 после назначения.

+0

Эй, спасибо, это было действительно полезно. Итак, здесь прохождение по имени ведет себя как pass by reference. –