2017-05-08 48 views
-2

我正在与Cea一起学习软件系统开发A-Level。代码显示在下面。标记方案说伪码是错误的,有人能解释为什么吗?这个伪代码如何是假的(不输出43)

伪代码:

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 
} 
+0

请把代码放到你的问题,链接的图像可能会丢失,并没有为其他人编制索引。除此之外,如果你至少在回答问题的人的问题上付出至少的努力,那将是非常棒的。 –

+2

[请不要将您的代码发布为图片。](// meta.stackoverflow.com/q/285551) –

回答

1

查看功能评估策略,特别是Call by Value。功能incrementNum收到numArg副本numParam,该副本已增加。原始变量未触及。根据实际的编程语言,你有多个解决方案:

  • 改写incrementNum使得它返回其参数(见cybermonkey's solution
  • 使用不同的评估策略。例如在C++中,你可以通过引用调用(注意int& VS int在增加的签名):
#include <iostream> 

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

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

    return 0; 
} 

输出43

1

没有与此代码的一些问题:

  • numParam不是从incrementNum分配,这意味着它 不会影响价值numParam等不会增加数值 到43

  • incrementNum不会返回(因为它是void - 它应该是int)。

代码工作如下:

(例如对于C
int incrementNum(int numParam){ 
    return numParam++; 
} 

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

我认为它的工作你也必须改变函数返回++ numParam; – DevNewb

+0

@DevNewb由于某种原因,伪代码是伪代码;这是粗略的代码,是语言无关的。 '++ numParam'和'numParam ++'通常被理解为'给变量加1',这是我故意没有做好的事情,因为我不想完整地完成他们的作业。 – cybermonkey

+0

将它改为'''numParam = numParam +1;返回numParam;'''相应'''返回numParam + 1'''然后?对于这样的初学者问题,这个级别的细节应该进入伪代码。 –

0

incrementNum不返回到numArg和参数的方法的值不是通过引用传递)。所以在方法调用之后,numArg的值仍然是42。