int main(void)
{
int i;
scanf( "%d", &i );
i = i++ * i++ ;
printf( "%d", i );
getchar();
getchar();
return 0;
}
如果我输入25
,为什么此程序会打印27
而不是5
?
答案 0 :(得分:5)
i = i++ * i++ ;
是未定义的行为,所以可以随心所欲,例如返回25,返回27,返回30(这可能比27更有意义),格式化你的硬盘,甚至嘲笑你。
: - )
C标准(C99和C11,可能更早,虽然我没有检查过)有一些称为序列点的东西,并且你不允许在没有插入序列点的情况下两次更改相同的变量(其中乘法符号*
不是一个。)
您可以在标准的两次迭代的附录C中看到 被认为是序列点的内容。