c - 为什么 i=2+2*i++ 给出错误的结果?

标签 c

我觉得这样的表达式应该是无效的,但我能够编译它并得到答案5。 最后我觉得即使真的答案也应该是4而不是5。

int main(void)
{
  int i=1;

  // how is the next line evaluated ie in what sequence??

  i=2+2*i++;
  printf("%d",i);
  return 0;
}

我得到的输出是 5。我不明白它应该如何给出这个值。

最佳答案

这是未定义的行为,因为 i 在序列点之间被修改多次。例如,this compiler给出 4 作为答案,因为它将增量放在赋值之后。如果增量是在赋值之前,另一个合理的答案是 6。但是,正如您所发现的,编译器可以随意生成答案,包括 5。

参见here有关序列点和未定义行为的更多信息。

关于c - 为什么 i=2+2*i++ 给出错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154848/

相关文章:

c - 如何从c中的文件中获取元数据

c - system() 在 Linux 中是如何工作的?

c - 为什么Windows和Linux有不同的strdup实现: strdup() and _strdup()?

C程序打印接下来的五个质数

c - 将 char* 添加到 char**

c - 如何在 postgres 扩展中定义动态字符串数据类型?

c - 错误 : request for member 'valore' in something not a structure or union

c - 如何在 C 中将一个字节压入缓冲区?

c - struct 有一个函数指针,指向一个函数,该函数接受所述结构的指针..需要预定义吗?

c - 使用递归删除链表中所有出现的数字