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

时间:2015-03-29 11:03:22

标签: c

int main(void)
{

  int i; 
  scanf( "%d", &i );   
  i = i++ * i++ ;
  printf( "%d", i );
  getchar();
  getchar();
  return 0; 

}

如果我输入25,为什么此程序会打印27而不是5

1 个答案:

答案 0 :(得分:5)

i = i++ * i++ ;

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

: - )

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

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