怪异:union第一个成员是多维数组,就不能用套嵌括号初始化了?
多维数组可以这样初始化:int mm[2][2]={0,1,2,3};
也可以用套嵌括号初始化:int mm[2][2]={{0,1},{2,3}};
问题是,假若union的第一个成员是多维数组mm[2][2]我就只能用第一种方式初始化!第二种方式会报错。不知说清楚没,请看源码:
union matrix{
int mm[2][2];
int mm00,mm01,mm10,mm11;
};
void main(void){
union matrix m={0,1,2,3};
/**
union matrix m1={
{0,1},
{2,3}
};
*/
}
几个问题
1、LZ的定义,其实是
union matrix {
int mm[2][2];
int mm00;
int mm01;
int mm10;
int mm11;
};
而LZ大概是想定义
union matrix {
int mm[2][2];
int m[4];
};
2、union的成员,谁在前,就得用该成员对应的初始化方法:
如果是
union matrix {
int mm[2][2];
int m[4];
};
那么得是
union matrix m = {{{1,2},{3,4}}};
注意这里括号的数目,最外面的{}是union的,而里面的是mm的initializer
如果是
union matrix {
int m[4];
int mm[2][2];
};
那么得是
union matrix m = {{1,2,3,4}};
同样要注意括号的数目,最外面的{}是union的,而里面的是m的initializer