【发布时间】:2019-02-17 19:42:05
【问题描述】:
在C语言中,如果这样初始化一个数组:
int a[5] = {1,2};
那么数组中所有未显式初始化的元素都将被隐式初始化为零。
但是,如果我像这样初始化一个数组:
int a[5]={a[2]=1};
printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]);
输出:
1 0 1 0 0
我不明白,为什么a[0] 打印1 而不是0?是未定义的行为吗?
注意:这个问题是在一次采访中提出的。
【问题讨论】:
-
表达式
a[2]=1的计算结果为1。 -
一个非常深刻的问题。我想知道面试官自己是否知道答案。我不。实际上,表达式
a[2] = 1的值实际上是1,但我不确定是否允许您将指定的初始化表达式的结果作为第一个元素的值。您添加了律师标签的事实意味着我认为我们需要引用标准的答案。 -
好吧,如果这是他们最喜欢的问题,那么您很可能已经躲过了一劫。就我个人而言,我更喜欢在几个小时内完成书面编程练习(可以访问编译器和调试器),而不是像上面这样的“王牌”风格的问题。我可以推测一个答案,但我认为它没有任何真正的事实依据。
-
@Bathsheba 我会做相反的事情,因为这里的答案现在回答了这两个问题。
-
@Bathsheba 将是最好的。当他提出这个话题时,我仍然会把这个问题归功于 OP。但这不是由我来决定我认为什么是“正确的事情”。
标签: c arrays initialization language-lawyer