++我执行与i ++ +1相同的任务吗?

时间:2016-11-04 06:07:58

标签: c

假设我正在为ASCII字符分配代码,其中代码1分配给ASCII值0,NUL字符,依此类推。我正在迭代地这样做,目前使用i +++ 1,即:

for (int i = 0; i < 256; i++) {
    // assign code i++ +1
    arr[i].code = i++ +1;
}

如果我改用++ i,那就足够了吗?

4 个答案:

答案 0 :(得分:2)

这可能会有所帮助

y = i +++ x - &gt;将x添加到i的当前值,并将结果分配给y,然后递增i的值

y = ++ 1 - &gt;将i递增1并将结果赋值给y

答案 1 :(得分:1)

我更愿意写i++ + 1。但是,++ii+++1具有相同的效果和价值。

后者在逻辑上做了更多的工作来得出结果:它保留旧值i,增量i,将旧值加1并得到总和作为结果。 preincrement运算符只增加i并使用其新值作为结果。

从技术上讲,两者都应该在给定优化编译器的情况下编译为基本相同的代码。

答案 2 :(得分:1)

是。他们是一样的。

++的边界比+更严格,因此表达式从左到右依次计算为

s = (i++) + 1

可以进一步扩展为

s = i + 1
i = i + 1

另一方面,s = ++i执行相同的任务。它可以扩展为

i = i + 1
s = i

您最好使用第二个版本,因为它更具可读性和可扩展性。但我不认为速度会有所不同。

答案 3 :(得分:0)

是的,i +++ 1和++ i都将评估为i加1的值,并且两者都会增加1。

这是一个奇怪的方法,这样做是否有问题:

for (int i = 1; i < 256; i += 2)

我相信,以后阅读你的代码的人会更喜欢后者。