【发布时间】:2019-02-17 20:07:25
【问题描述】:
考虑以下简单程序:
#include <stdio.h>
int main(void)
{
int a[5] = { a[2] = 1 };
printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
}
使用 GCC 7.3.0 输出
1 0 1 0 0考虑到a[1]为零,看来初始化类似
int a[5] = { 1 };
a[2] = 1;
问题是:虽然初始化器可以是任何通用表达式,但初始化和赋值的顺序是什么?
这是否有效且定义明确?它可以是实现定义的、未定义的还是未指定的?
【问题讨论】:
-
是的,这似乎与另一个问题非常相似,但只是处理另一个方面。我不完全确定是否重复但对另一个问题的一个好的答案可以涵盖这个主题。有趣的是,这个问题的投票率远高于另一个问题,这可能是另一个指标,表明投票更有可能给予高代表用户。这绝不是评论家@OP,但我觉得这很有趣。
-
让我们问真正的问题!为什么
int a[5] = { a[2] = 1, a[3] =2 };给我们1 2 0 0 0?! -
我看不出这与其他问题有何不同。您基本上回答了另一个问题,说“我真的不知道这里发生了什么”,并发布了同一问题的另一个副本。对这个问题的任何实际有用的答案都会回答另一个问题,反之亦然
-
-
我已经发布了另一个问题的语言律师回答。
标签: c initialization language-lawyer