2016-12-19 9 views
0

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

Полная подробно обсуждение здесь:http://gateoverflow.in/94182/programming-output Я старался изо всех сил, чтобы объяснить вещи для пользователя, но я до сих пор не в состоянии convience его полностью, может быть, я не хватает какой-то концепции.

грубый пример кода:

var b : int; 
procedure M (var a, int) 
begin 
a= a*a; 
print(a); 
end; 
procedure N 
begin 
b= b+1; 
M(b); 
end; 
begin 
b=12; 
N; 
print(b); 
end; 

enter image description here

Я полагаю, что, как и в вопросе дается, что переменные являются статическими, так что значение аб не должно изменяться от 13, но значение a должно быть 13 * 13 = 169, но мои рассуждения противоречат тому, что называется ссылкой.

+0

Скопируйте и вставьте свой код здесь, а не публикуйте снимок экрана. Кроме того, это выглядит как Pascal, а не C. –

+0

«когда я передаю переменную x в переменную y по ссылке, тогда как x, так и y должны теперь указывать на одно и то же местоположение». Это правильно. Какая часть вышеуказанного кода вызывает трудности в вашем понимании? –

+0

Выходная часть, я получаю a = 169 b = 13. но в идеале это должно быть 169 для обоих? –

ответ

0

Мне пришлось рассмотреть обзорную терминологию. Я сам путался между статическим и динамическим охватом. Статическая область охвата используется во всех современных языках программирования. Я пришел к выводу, что как a, так и b должны иметь значение 169 в соответствующих отчетах печати.