编程中的前后增量
Posted
技术标签:
【中文标题】编程中的前后增量【英文标题】:Pre and post increment in programming 【发布时间】:2013-05-19 22:33:04 【问题描述】:所以我在 C 中使用增量并运行了这段代码
int main()
int a = 3;
int b = 8;
b = a++;
printf("%d %d",a, b);
return 1;
最初我以为,哦,是的,这很容易......所以我认为它会打印出 3 和 3。
这是因为 a++ 是一个后自增,并且在函数被使用后递增该值。相反,答案是
a=4
b=3
我不明白在函数完成之前,后增量 a 是如何添加到 a 的,即 printf 语句。
有人能解释为什么答案是什么吗?
谢谢
【问题讨论】:
检查syntax tree, how++
woks in pre-and-post
【参考方案1】:
post 增量是使用后(之后),而不是在printf()
之后。在您拨打printf()
之前,它已更改。
【讨论】:
好吧,谢谢你把事情弄清楚了,所以如果是 ++a,那么它们都会是 4 吗? 是的,但不要相信我的话,检查起来太容易了:-) 是的,我只是想先确定一下,然后再检查我的思路是否正确【参考方案2】:把后增量想象成这个函数:
int postincrement(int* value)
int priorvalue = *value;
*value = *value + 1;
return priorvalue;
所以 printf 与你的增量无关。相反,当你写
b = a++;
想象一下
b = postincremnt(&a);
被调用了,和你的结果完全一致。
【讨论】:
【参考方案3】:后置增量意味着首先将 a 的当前值分配给 b,然后将 a 增加 1。
如果你已经完成 b=++a;
那么你会得到 a=4 , b=4
【讨论】:
【参考方案4】:当您执行b = a++;
时,它的结果为b = a; a = a + 1;
。
如果你使用了b = ++a;
,那么它就像a = a + 1; b = a;
一样工作
希望这能说明问题。
【讨论】:
以上是关于编程中的前后增量的主要内容,如果未能解决你的问题,请参考以下文章