1

我是一名网络开发人员和各种语言的程序员,当我回到旧语言时,这让我感到困惑。有人可以回答这个问题,因为我没有回答这个问题,而且测验基本上把我的答案弄错了。

    int m, n;
    m=6;
    n=m++;
    printf("%d %d", m,n);

    -----------
    Options
    a: 6 6
    b: 6 7  ---> the answer i think is right
    c: 7 6  ---> the right answer by quiz server
    d: 7 7

请帮助我解释答案,只是因为我认为答案是相反的

4

4 回答 4

5

后增量运算符返回原始值然后递增。

这意味着您的测验服务器是正确的。

n=m++;

m分配to的原始值,n然后递增m,离开

n=6, m=7
于 2013-05-12T20:51:28.340 回答
4

测验服务器是正确的:

m=6;     // m = 6
n=m++;   // n = m = 6; m = m + 1 = 7;

请注意,上述的后增量m发生赋值之后。

于 2013-05-12T20:51:46.590 回答
1

它有点棘手的问题。

m=6;  //simple enough, m now equals 6
n=m++;  //post increment operator returns old value so n becomes 6.  

但是 m remember 增加到 7。

所以现在,m = 7 和 n=6

这正是打印出来的内容。

最简单的检查方法是将代码粘贴到调试器中并单步执行。如果需要,您可以创建临时变量以获取更详细的信息。

于 2013-05-12T20:57:13.947 回答
1

好吧,我不会讲任何不同的内容,但与上述所有内容相同,但我可以提供更多示例

// Example 1
m = 6 ; / very simple no explanation here

// Example 2
m++ = 6; 
/** 
    This can be rewritten as
    m = 6;
    m = m+1;

**/ 

// Example 4
n = m++; // kind of your case
/**
   This can be re qritted as
   n = m;
   m = m+1;
**/

// Example 5

n++ = m++ + 1; // little complex

/**
   This can be rewritten as
   n = m+1;
   n++;
   m++;
**/

简单理论

预增量在赋值之前起作用,而在赋值之后的后增量不一定正确,因为在某些情况下,大量使用这些运算符会产生不可预测的结果。

于 2013-05-13T02:50:31.407 回答