这个伪代码怎么是假的(不输出43)

How does this pseudo code is false (does not output 43)

我正在学习 Cea 的软件系统开发 A-Level。代码如下所示。标记方案说伪代码是假的,有人能解释一下为什么吗?

伪代码:

The output from the following pseudo code is 43.
(method) – void incrementNum( int numParam ){
 numParam++
}
(main method) – void main(){
int numArg = 42
incrementNum( numArg )
output numArg // writes 43
}

这段代码有一些问题:

  • numParam 未分配给 incrementNum,这意味着它 不会影响 numParam 的值,因此不会增加该值 至 43

  • incrementNum 不会 return(也不会,因为它是 void- 它应该是 int)。

工作的代码如下:

int incrementNum(int numParam){
    return numParam + 1;
}

void main() {
    int numArg = 42;
    numArg = incrementNum(numArg);
    output numArg; //Writes '43'.
}

方法 incrementNum 的值未返回到 numArg 并且参数未通过引用传递(例如对于 c)。所以方法调用后numArg的值还是42

查看函数评估策略,尤其是 Call by Value。函数 incrementNum 接收到一个名为 numParamnumArg 的副本,它是增加的。原始变量保持不变。根据实际的编程语言,您有多种解决方案:

  • 重写 incrementNum 使其 returns 它的参数(参见
  • 使用不同的评估策略。例如在 C++ 中,您可以通过引用调用(注意 increase 签名中的 int&int):
#include <iostream>

void increase(int& v) {
  v++;
}

int main() {
  int i = 42;
  increase(i);
  std::cout << i << std::endl;

  return 0;
}

输出 43.