在多维数组中将聚合初始化器与标量混合初始化器混合

时间:2012-08-13 11:02:49

标签: c multidimensional-array

这可能吗?如果有人可以指导我提到的标准,我会很高兴。

对我来说,它的工作方式与我期望它使用MinGW一样。但是,我想知道这是否是标准的。这是我测试的代码:

#include <stdio.h>

int main(void) {

    int me[3][2] = {{1, 2}, 3, 4, 5, 6};
    int x = 0;

    while(x<6) printf("%d_", ((int*)me)[x]), ++x;

    return 0;

}

输出为:1_2_3_4_5_6_

2 个答案:

答案 0 :(得分:3)

  

这可能吗?如果有人可以指导我在哪里,我会很高兴   这是提到的标准。

认为它的标准,但我不会说我有明确的证据。

  

6.7.9

     

如果聚合或联合包含元素或成员   聚合或联合,这些规则递归地应用于   分包或包含工会。如果是初始化者   subaggregate或者包含union 以左括号开头   由该支撑包围的初始化器及其匹配的右支撑   初始化子聚合的元素或成员或   包含工会。 否则,列表中只有足够的初始值设定项   考虑到子聚合的元素或成员或   所包含的联盟的第一个成员;任何剩余的初始化器都是   左边初始化下一个元素或聚合的成员   当前的分包或包含联盟是其中的一部分。

后来,虽然不是专门针对数组的,但它给出了一个不一致括号初始化的例子

struct { int a[3], b; } w[] = { { 1 }, 2 };
     

w[0].a[0]为1,w[1].a[0]为2;所有其他元素都为零

答案 1 :(得分:2)

至于初始化程序,是标准的。

至于印刷。嗯,这更复杂。内存保证是连续的,但编译器实际上可以在该行上触发UB(但我真的不认为你会发现它有一个)。