在C中发布增量查询

时间:2013-05-12 20:49:26

标签: c

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

    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 个答案:

答案 0 :(得分:5)

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

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

n=m++;

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

n=6, m=7

答案 1 :(得分:3)

测验服务器是正确的:

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

请注意,上述m的后增量在分配后发生

答案 2 :(得分:0)

这是一个棘手的问题。

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

但是记得增加到7。

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

这正是打印出的内容。

最简单的检查方法是将代码粘贴到调试器中并逐步完成。如果需要,您可以创建临时变量以获得更精细的细节。

答案 3 :(得分:0)

好吧,我不会说出任何不同之处,但与上述内容相同,但我可以提供更多示例

// 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++;
**/

简单理论

在赋值之前的预增量工作和赋值之后的后增量不一定是正确的,但是因为有些情况下广泛使用这些运算符会产生不可预测的结果。