在C语言中,{ a[i] = a[++i] } 和 { a[i] = a[i+1]; i++; } 是等价的吗?

26 浏览
0 Comments

在C语言中,{ a[i] = a[++i] } 和 { a[i] = a[i+1]; i++; } 是等价的吗?

在C语言中,a[i] = a[++i];a[i] = a[i+1]; i++;等价。也就是说,赋值语句的哪一边先被计算,以及左边使用的i的值是什么?或者说,这个赋值语句是否有歧义?

0
0 Comments

从上述内容中,我们可以提取出以下问题的出现原因和解决方法:

问题的出现原因:

- 问题出现在使用和递增变量 i 的同一个序列点(sequence point)中。

- 在这种情况下,使用 a[i] = a[i++] 这样的语句会导致未定义的行为。

问题的解决方法:

- 修改语句为 a[i] = a[i+1]; i++; 可以解决问题。

- 这样修改后的语句是正确定义的,不会导致未定义的行为。

根据以上内容,我们可以得出结论:在C语言中,a[i] = a[i++];a[i] = a[i+1]; i++; 这两个语句并不等价。前者会导致未定义的行为,而后者是正确定义的。

0