我们有三个程序。
在proc01中:
output: a=22
在proc02中:
output: a=16 b=2 c=5
在proc03:
output: a=5
proc01和03是相同的。除了我们改变了程序参数 为什么在proc01“d”中添加了值,但是在proc03处,没有。
proc02是另一个例子。“d”值未添加。
为什么????
proc01:
program proc01;
var
a,b:integer;
procedure test01(var a:integer;b:integer);
var
d:integer;
Begin
d:=12;
a:=b+d;
End;
Begin
a:=5;
b:=10;
test01(a,b);
Writeln('a=',a);
Readln;
End.
proc02:
program proc02;
var
a,b,c:integer;
procedure test01(var b:integer; a:integer);
var
d:integer;
Begin
d:=12;
a:=b+d;
b:=a+c;
c:=c+2;
End;
Begin
a:=1;
b:=2;
c:=3;
test01(a,b);
Writeln('a=',a,' b=',b,' c=',c);
Readln;
End.
proc03:
program proc03;
var
a,b:integer;
procedure test01(var b:integer;a:integer);
var
d:integer;
Begin
d:=12;
a:=b+d;
End;
Begin
a:=5;
b:=10;
test01(a,b);
Writeln('a=',a);
Readln;
End.
答案 0 :(得分:3)
可能是因为在proc03中,您为“b”变量传递“a”的值,反之亦然。查看proc01和proc03中test01签名的不同(“a”和“b”的顺序不同)。因此在proc3中,您实际上将“b + d”的结果输入到本地“a”变量中,但是在程序的“b”变量中,程序的“a”变量不会被修改。因此,将test01的签名更改为
程序test01(var a:integer,b:integer)
使其按预期工作。
一般情况下,我不建议在程序和程序的变量中使用完全相同的名称来防止类似的错误。
亚历
答案 1 :(得分:2)
在proc 02和03中a
参数按值传递,而不是按引用传递
因此,当您为a
分配任何值时,它将仅修改本地副本,而不会修改传递的变量