【问题标题】:In C, is { a[i] = a[++i] } equivalent to { a[i] = a[i+1]; i++;}? [duplicate]在 C 中,{ a[i] = a[++i] } 等价于 { a[i] = a[i+1];我++;}? [复制]
【发布时间】:2015-08-26 14:47:20
【问题描述】:

在 C 中,是

a[i] = a[++i];

相当于

a[i] = a[i+1]; i++;

也就是说,首先评估赋值的哪一侧,左侧使用i的哪个值?还是这个分配模棱两可?

【问题讨论】:

  • 未定义的行为。不要写这样的代码。
  • @Amadan,实际上并非如此。来自stackoverflow.com/a/3914332/434551,“C++03 [第 5/4 节] 说在前一个和下一个序列点之间,一个标量对象的存储值最多只能通过表达式的评估修改一次。”这里,i 是只修改一次。
  • @RSahu:参见this answer,来自 K&R 的引用,带有这个确切的例子。它不违反一个约束这一事实并不意味着它不能违反另一个。
  • this question的复制品,the second answer解释清楚了。

标签: c arrays pre-increment operator-precedence


【解决方案1】:

在您使用的同一序列点并递增i

a[i] = a[i++];

这将导致未定义的行为。

a[i] = a[i+1];
i++;

很好。

然后回答你的问题它们是一样的吗?不,他们不是 !!一个如果定义明确,另一个不是。

查看answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2017-09-10
    • 2019-03-21
    相关资源
    最近更新 更多