2012-08-13 31 views
1

這可能嗎?如果有人能指導我提到的標準,我會很高興。在多維數組中混合聚合初始化器與標量初始化器

對我來說,它的工作原理與我預期的那樣,使用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_

回答

3

這可能嗎?如果有人能指導我提到的標準 ,我會很高興。

認爲它是標準的,但我不會說我有確鑿的證據。

6.7.9

如果聚集或聯合包含的元素或成員是 聚集或工會,這些規則遞歸適用於 subaggregates或含有工會。如果 子聚集或包含聯合的初始化用左括號,開始 初始化由括號包圍和其匹配的右括號 初始化元件或子聚集的成員或 包含聯合。 否則,只有列表中有足夠的初始值爲 是爲了考慮子集的元素或成員或包含工會的第一個成員;任何剩餘的初始化程序均爲 左側用於初始化當前子集合或包含的聯合是其一部分的集合 的下一個元素或成員。

及後,雖然沒有專門爲陣列,它給出不一致括號初始化的示例:

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

w[0].a[0]是1和w[1].a[0]是2;所有其他元素爲零

+0

是的,它是標準的。 'me [0]'的初始化與剩下的子集的初始化無關。 – ecatmur 2012-08-13 11:20:24

2

至於初始化,是的,這是標準的。

至於印刷。那麼,這更復雜。內存保證是連續的,但編譯器實際上可以在該行觸發UB(但我不認爲你會找到一個)。