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