题目
程序设计 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
提问时间:2020-07-13
答案
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].
举一反三
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
奥巴马演讲不用看稿子.为什么中国领导演讲要看?
想找英语初三上学期的首字母填空练习……
英语翻译
1,人们染上烟瘾,最终因吸烟使自己丧命.
最新试题
热门考点
- 1What do you think of the book?Oh,excellent.It is worth a second time.是填to read还是reading?
- 2用换元法解x²-|x|-6<0
- 34张卡片上分别写有数字1,2,3,4,从这4张卡片中随机抽取2张,则取出的2张卡片上的数字之和为奇数的概率为( ) A.13 B.12 C.23 D.34
- 4甲乙两名工人9天共挖了648米水渠,甲挖水渠的速度比乙挖水渠的速度慢1/5,那么甲每天挖水渠多少米?
- 5设A、B两地相距m千米,甲从A地、乙从B地同时出发,相向而行,甲、乙行驶的速度分别为x千米/小时、y千米/小时,出发后30分钟相遇;甲到B地后立即返回,追上乙时又经过了30分钟;当甲追上乙时他俩离A地
- 6英语的两道句型转换题
- 7一个行业的垄断厂商,其面临的需求曲线为Q=1500-10P,短期成本函数为STC=0.1-3.1+60Q+200当条件分别发生变
- 8人教版九年级上册数学书第二十四章习题24.2的第15小题注意要过程,快
- 9改革开放30年以来,中国经济取得了世界上其它任何国家都不曾有过的最高持续增长水平.实行对外开放是( )
- 10时间的英语翻译 (2.30) ( 3.30) (3.00) (2.15) (1.45) (2.45)