编程中的前后增量

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;一样工作

希望这能说明问题。

【讨论】:

以上是关于编程中的前后增量的主要内容,如果未能解决你的问题,请参考以下文章

C++ 前后增量重载。 “它”怎么知道? [复制]

以编程方式获取自动增量主键列

使数组唯一的最小增量

JavaScript基础之算术运算符 前后增量/前后减量运算符 比较运算符逻辑运算符 程序流程控制

perl语言写增量-全量备份脚本

cuda编程CUDA中的atomic原子操作