提问人:KNuz 提问时间:11/13/2016 更新时间:11/14/2016 访问量:150
按值传递和按名称传递的输出
Output for pass-by-value and pass-by-name
问:
当 x 和 y 按值传递以及按名称传递时,我需要找到以下代码的结果。
PROGRAM EX1;
int i; //global
int A[3]; //global
PROCEDURE P1(int x, int y)
Begin
y:=2;
PRINT(x);
i:=3;
PRINT(x);
i:=3;
PRINT(x);
PRINT(y);
End;
BEGIN //main
A[1]:=7; A[2]:=13; A[3]:=11;
i:=1;
P1(A[i],i); //first call
P1(i,A[i]); //second call
END.
以下是我得出的结论,如果 x 和 y 是按值传递的: 输出: 13, 11, 11, 3 第二输出:1、3、3、11。 如果这是错误的,请帮助我理解为什么。
从我看到的示例来看,我也不确定按名称传递在此代码中如何工作。也请帮忙。
假设是静态范围。
答:
0赞
FDavidov
11/14/2016
#1
在描述中,我将忽略您的代码很可能无法编译/运行的事实,并且只会解决您的特定问题。
无论用于传递参数的机制如何(按值或按名称),对变量的赋值都是没有意义的:当按值传递时,源参数可能是数组这一事实根本没有意义(在函数中);当按名称传递并且您传递 where 时,到达函数主体的内容是,因此更改为根本没有影响。i
P1
A[i]
i=1
P1
A[1]
i
因此,在这两种情况下(按值和名称),您将得到相同的结果,这意味着:第一次调用为 7,7,7,2,第二次调用为 1,1,1,2。
评论