我无法弄清楚的 7 行简单 C 代码



有人能解释一下为什么这里的输出是2 1 1,c在这里优先考虑什么?为什么i++的输出是1 ?提前感谢~

#include <stdio.h>
void main(){
int i=1;
int *p=&i;
printf("%d%d%dn",*p,i++,i);
}

此代码的行为未由C标准per C 2018 6.5 2定义:

如果一个标量对象上的副作用相对于同一标量对象上的不同副作用或使用同一标量对象的值计算是无序的,则该行为是未定义的…

i++具有将i的增量值更新的副作用。函数调用参数还包括*pi,它们都引用i并使用其值。i是一个标量对象。函数调用参数的求值顺序及其副作用是无序的(这意味着C标准没有对它们施加任何排序要求)。因此,上述规则的所有条件都满足,因此该行为不是由C标准定义的。

最新更新