Parameters 按值传递和按名称传递的输出
我需要在x和y按值传递以及按名称传递时找到以下代码的结果Parameters 按值传递和按名称传递的输出,parameters,parameter-passing,generic-programming,pass-by-value,pass-by-name,Parameters,Parameter Passing,Generic Programming,Pass By Value,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;
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。
如果这是错误的,请帮助我理解原因
从我所看到的示例中,我也不确定pass-by-name在这段代码中是如何工作的。也请帮帮忙
假设静态作用域 在描述过程中,我将忽略这样一个事实,即您的代码很可能无法编译/运行,并且只解决您的特定问题 不管用于传递参数的机制是什么(按值还是按名称),变量
i
的赋值都是无意义的:当按值传递时,根本没有意义(在函数P1
中)源参数可能是数组的事实;当按名称传递并且传递A[i]
其中i=1
时,到达函数体P1
的是A[1]
,因此对i
的更改将完全无效
因此,在这两种情况下(按值和按名称),您将得到相同的结果,即:第一次调用为7,7,7,2,第二次调用为1,1,1,2。您是否尝试在谷歌上搜索参数传递方法的含义?此外,有时不能以一种方式或另一种方式将参数传递给函数/过程。函数/过程声明确定了要使用的方法。最后,如果按值传递,则一旦过程/函数完成,过程/函数中对其值的任何更改都将丢失。这只是理论上的,如果使用不同的参数传递运行,代码将输出什么。是的,我在谷歌上搜索过,有一本关于不同传球方法的教科书,但我需要更多的指导来帮助我理解。