这可能吗?如果有人可以指导我提到的标准,我会很高兴。
对我来说,它的工作方式与我期望它使用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_
。
答案 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(但我真的不认为你会发现它有一个)。