我是一名网络开发人员和各种语言的程序员,这让我感到困惑,因为当我回到旧语言时。有人可以回答这个,因为我没有回答这个问题,测验基本上是我的答案错了。
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
请帮我解释一下答案,因为我认为答案是相反的
答案 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++;
**/
简单理论
在赋值之前的预增量工作和赋值之后的后增量不一定是正确的,但是因为有些情况下广泛使用这些运算符会产生不可预测的结果。