function - 当您将表达式传递给通过值结果传递的函数时会发生什么?
问题描述
我正在参加一门编程语言原理课程,并且有一个练习,我应该告诉我这个程序打印了什么:
{
int x=2;
void A (val/res int y)
{
x++;
write(y);
y=y+2;
}
A(x)
A(x+1)
write (x);
}
A 是一个传递值/结果参数的函数,因此在返回之前,它应该在实际参数中复制其形式参数 (y) 的最终值。当 A first 被调用时,它的实际参数是 x,所以那里没有问题。但是,对 A 的第二次调用将 x+1 作为实际参数。这意味着什么?也许 y 的最终值会丢失,因为没有变量可以复制它?或者我应该把它看作一个方程,所以如果 y 的最终值为 7,我得到 x + 1 = 7,那么 x 的值为 6?
解决方案
这意味着参数的值被复制到y
:
- 当
x
=2 时,A(x)
复制 2y
到A
- 当
x
=4时,将或 5的值A(x+1)
复制到x+1
y
A
但是,正如您指出的那样,传递x+1
值/结果参数是有问题的,我希望任何支持这种类型参数的语言都不会认为它是合法的,正如您所引用的那样。如果它被认为是合法的,它是如何完成的将取决于语言定义;我不相信有一个标准的方法来处理这个。
推荐阅读
- c++ - C++ 初始化风格
- python - Django 已安装但无法导入
- php - 如何在循环下获取wordpress循环中的当前项目?
- node.js - 试图在我的系统中安装 mangoose 给出错误 404 not found mangoose@latest
- javascript - 如何在angularfire 2版本5中将密钥添加到添加到节点的对象
- mysql - 删除后触发 THEN UPDATE mysql
- python - 用于远程 ssh 的 Paramiko
- php - 使用 Ajax 从 MySQL 中删除记录
- vue.js - 从 VueJs 路由器的位置栏中隐藏 URL
- android - 如何为 Android 导航控制器编写测试