关于岗位增量

int get() { static i = 1; return i++; } int main(int argc, char *argv[]) { printf("%d %d %d\n", get(), get(), get()); return 0; } 

输出:3 2 1(顺序取决于编译器)

问题:但为什么增量返回前的值是静态变量(文件范围)。 post / pre increment的拇指规则是什么? 我从来没有弄错。 请帮忙。

好吧,让我更具体一点,我读到的所有例子都是, a = i++; or a = ++i; a = i++; or a = ++i; 这些是递增然后赋值或赋值然后递增的表达式。 但这些表达是什么样的, return i++; func(a++); return i++; func(a++); 我这样读了“在i ++之后没有任何东西要分配,所以返回最后增加的值”(在这里纠正我)

这里有两个问题,一生和范围。

变量的范围是可以看到变量名称的位置。 在这里,我只在函数get()中可见。

变量的生命周期是它存在的时间段。 如果我的定义没有关键字static,那么生命周期将从get()到get()的返回; 因此每次通话都会重新初始化为1。

关键字static用于将变量的生命周期延长到程序的生命周期; 例如,初始化仅发生一次,然后变量保留其值 – 无论它是什么 – 将来所有调用get()。

post和pre increment 之间的差异 : 循环中的pre-increment和post-increment之间的差异是什么?

资料来源:在这个地方回答

更新1

通过制作现有值的临时副本,然后递增原始值,然后最终返回表达式的结果,后增量工作。 结果,似乎增量是在表达后评估中完成的,但事实并非如此,并且如果感兴趣的话,展示这一点的示例程序是相当直接的。 这是临时副本,使后期公司昂贵。 (感谢WhozCraig进行纠正)

更新2

这两个都是增量后的一元操作。 它们都生成操作数的临时副本(i在第一种情况下,在第二种情况下为a),然后递增操作数,然后返回临时副本作为post-inc表达式的结果。 在第一种情况下的结果是i递增并且返回其在递增之前的值。 在第二种情况下,a递增,并且使用递增之前的值调用func。(由WhozCraig给出)