程序设计 call by value ,call by address ,call by name
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/10/05 09:58:53
程序设计 call by value ,call by address ,call by name
假设有一段code内容大致如下:
----------------------------------
MAIN()
BEGIN
A[1:4]={1,2,3,4};
X = 1;
Y = 2;
CALL SUB(X,Y,A[X]);
END
SUB(A,B,C)
BEGIN
A = B;
C = 12;
END
----------------------------------
在下列三种呼叫方式下
程式执行的结果各为何?
希望能附上说明给我,这样我比较能理解
call by value
call by address (reference)
call by name
假设有一段code内容大致如下:
----------------------------------
MAIN()
BEGIN
A[1:4]={1,2,3,4};
X = 1;
Y = 2;
CALL SUB(X,Y,A[X]);
END
SUB(A,B,C)
BEGIN
A = B;
C = 12;
END
----------------------------------
在下列三种呼叫方式下
程式执行的结果各为何?
希望能附上说明给我,这样我比较能理解
call by value
call by address (reference)
call by name
call by value 方式:
调用时子程序得到的是参数值的副本,子程序中对形参的改变其实只是影响了该副本的值,但在返回主程序后该副本会被丢弃,因此在主程序中按值调用的参数仍保持原来的值.
例如SUB(A,B,C)中,若形参A是by value的,则在MAIN中CALL SUB(X,Y,A[X])后,X仍为1.
call by address/reference 方式:
调用时子程序得到的是实际参数的内存地址,因此在子程序中改变形参的值时,实际会导致对该形参所对应的地址处的内存数据的变化,即直接修改的是主程序中的变量的值,返回主程序后该参数所对应的变量值会产生变化.
例如SUB(A,B,C)中,若形参A是by reference的,则在MAIN中CALL SUB(X,Y,A[X])后,X会变为2.
call by name 方式:
有点类似于宏扩展的方式,调用的参数并非是在调用前计算出来,而是在子程序中每个引用所对应的形参的地方都重新进行计算,因此有延迟计算的作用.例如你例子中,若主程序调用SUB时是by name的,则实际执行的情况是:
A=B --> X=Y --> X=2
C=12 --> A[X]=12 --> A[2]=12
这里就看到,因为X的值先变化过,所以在对C赋值的时候,实际影响的是A[2],而不是A[1].
调用时子程序得到的是参数值的副本,子程序中对形参的改变其实只是影响了该副本的值,但在返回主程序后该副本会被丢弃,因此在主程序中按值调用的参数仍保持原来的值.
例如SUB(A,B,C)中,若形参A是by value的,则在MAIN中CALL SUB(X,Y,A[X])后,X仍为1.
call by address/reference 方式:
调用时子程序得到的是实际参数的内存地址,因此在子程序中改变形参的值时,实际会导致对该形参所对应的地址处的内存数据的变化,即直接修改的是主程序中的变量的值,返回主程序后该参数所对应的变量值会产生变化.
例如SUB(A,B,C)中,若形参A是by reference的,则在MAIN中CALL SUB(X,Y,A[X])后,X会变为2.
call by name 方式:
有点类似于宏扩展的方式,调用的参数并非是在调用前计算出来,而是在子程序中每个引用所对应的形参的地方都重新进行计算,因此有延迟计算的作用.例如你例子中,若主程序调用SUB时是by name的,则实际执行的情况是:
A=B --> X=Y --> X=2
C=12 --> A[X]=12 --> A[2]=12
这里就看到,因为X的值先变化过,所以在对C赋值的时候,实际影响的是A[2],而不是A[1].
Explain the difference between "call by value" and "call by
call by one's
程序员试题中call by value 和call by reference分别是什么意思
请问从这幅图表中能看出call by value 和 call by reference 的什么区别呢?
-Can I call you by your first name?-Yes,you ( )
-Can I call you by your first name?-Yes,you
You can call me by my English name这个by在这里的含义?
call me,call me by my number or这首歌是什么call me,call me by my n
if u miss,please call me by
What's in a name?That which we call a rose by any other name
I dislike ----me by my first name.A.your calling B.you call
I dislike------me by my first name A.your calling B.you call