不同通过机制的参数值
问题描述:
int f(float i, float j, float k)
{
float x=i;
i=j;
j=k;
k=x;}
main(){
float x=5; y=10 z=25;
if(...){
f(x,y,z);
}
else{
f(y,z,y); /* what's x,y,z after this line using call-by-reference and call-by-name mechanism*/
}
}
我想我对这三种传递机制有一个很好的理解。在f(x,y,z)后面。 X,Y,Z将具有值不同通过机制的参数值
10 25 5,如果它是通过参考
5 10 25呼叫如果是由值
10 25 5呼叫如果是由值结果呼叫。
(我仔细检查了答案,我相信这些都是corrent)
,但我的答案是完全错误的,F(Y,Z,Y)。我通过参考电话和姓名拨打了10,25,10。如果x(y,z,y)在f(y,z,y)之后如果使用通过引用的呼叫并按名称调用,则x,y,z的值将如何变化
答
对于“调用引用”f(y,z,y)
,首先让我们重写代码f函数
int f(float & i, float & j, float & k)
{
float t=i;
i=j;
j=k;
k=t;
}
的(I改名为局部变量x
到t
,以免混淆)
调用f(y,z,y)
量以下顺序:
{
float t=y;
y=z;
z=y;
y=t;
}
与y中的初始值= 10,Z = 25,因此
float t=10;
y=25;
z=25;
y=10;
其中Z = 25结束,Y = 10和X不变。
+0
非常感谢。我只是意识到我把我的答案写成了y,z,y而不是x,y,z的值。 – user2247155
在这个例子中,f的参数被值传递。 –
我不确定C++中是否有按值调用的结果机制。你是怎么检查的? –
我做了一些修改。这是我考试中的一个问题。所以我只是假设这些传递机制存在,并根据不同的传递机制看到参数将如何变化 – user2247155