如果我输入5,为什么这个程序打印25而不是27?

Shi*_*nz6 -4 c

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

pax*_*blo 5

i = i++ * i++ ;
Run Code Online (Sandbox Code Playgroud)

是未定义的行为,因此可以随心所欲,例如返回25,返回27,返回30(这可能比27更有意义),格式化你的硬盘,甚至嘲笑你.

:-)

C标准(C99和C11,可能更早,虽然我没有检查)有一些称为序列点的东西,并且你不允许在没有插入序列点的情况下两次更改相同的变量(其中乘法符号*不是一).

您可以在附录C中看到标准的两次迭代中认为是序列点的内容.