【发布时间】:2014-08-10 10:34:29
【问题描述】:
所以我有这段 Pascal 代码:
program P;
var a: array [1..2] of Integer;
var i :Integer;
var k :Integer;
procedure update(x,y,z: Integer);
begin
x := x+1;
y := x*2;
x := y;
k := x;
end
begin
a[1] := 5; a[2] := 10;
k := 3;
for i:=1 to 2 do
begin
update(a[i],a[2],k);
print(a);
print(k)
end
end.
(假设'print'打印由空格分隔的数组元素,然后打印一个新行,并且对于一个整数它也只是打印它)
我试图了解如果函数调用是通过值结果或引用,输出会有多么不同。
显然,如果它只是按值,很容易看出该过程不会对实际参数产生任何影响,即输出(按值)应该是:5 10 3 5 10 3。
我认为,如果它是价值结果,至少在第一次迭代中应该是:12 12 12。 在引用的情况下,我感到困惑。 那会是什么?
【问题讨论】:
-
为什么这个标签是 C++ 而不是 Pascal?
-
对不起,我的错,虽然这并没有什么不同,因为问题的主题与它所用的语言无关。
-
您包含了代码,因此标签绝对会有所作为。
-
当你尝试它时会发生什么?如果你这样做,你会清楚地看到不同之处。 (此外,当您发布代码时,该标签是完全相关的。注意您在这里收到的建议通常是个好主意,尤其是当它来自在这里有大量经验的人时。如果您这样做,您会更快地得到答案您根据您发布的代码的语言对其进行标记;熟悉该语言的人会看到它,并且在搜索信息时与本网站的未来读者相关。)
-
为了说明区别,写你的
print函数输出数组内容,去掉循环,按print,update,print的顺序运行代码,比较输出。
标签: parameter-passing pass-by-reference pascal semantics pass-by-const-reference