-1

当 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。如果这是错误的,请帮助我理解原因。

从我看到的示例中,我也不确定在此代码中传递名称将如何工作。也请帮忙。

假设静态范围。

4

1 回答 1

0

我将在描述过程中忽略您的代码很可能无法编译/运行的事实,并且只会解决您的特定问题。

不管用于传递参数的机制(按值或按名称),对变量的赋值i都是没有意义的:当按值传递时,(在函数内P1)源参数可能是数组这一事实根本没有意义; 当按名称传递并传递A[i]wherei=1时,到达函数主体的P1A[1],因此更改为i根本没有任何效果。

因此,在这两种情况下(按值和按名称),您将得到相同的结果,这意味着:第一次调用为 7,7,7,2,第二次调用为 1,1,1,2。

于 2016-11-14T06:01:30.487 回答