我遇到了以下结构:
static struct {
unsigned char a[5];
} b[] = {
{1,1,1,1,1},
{2,2,2,2,2}
};
Run Code Online (Sandbox Code Playgroud)
但是,如果正在编译,我会收到以下警告"警告:在初始化程序[-Wmissing-braces]周围缺少大括号".
如果我改变它:
static struct {
unsigned char a[5];
} b[] = {
{{1,1,1,1,1}},
{{2,2,2,2,2}}
};
Run Code Online (Sandbox Code Playgroud)
然后警告消失了.在"b [] ="之后,每个大括号代表什么?最里面的花括号显然是?代表char a [5]的初始化.但其他支撑是什么?明显?其他一个花括号必须考虑结构数组b [],但哪一个?为什么会出现第三个大括号,它代表什么呢?这让我很困惑.
int a[2] = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
好.现在这个:
int a[2][2] = { { 1, 2 } , { 3, 4 } };
Run Code Online (Sandbox Code Playgroud)
对?a[0][0] = 1和a[0][1] = 2和a[1][0] = 3和a[1][1] = 4.a[0]memcmp等于(int[]){ 1, 2 }并且a[1]memcmp等于(int[]){ 3, 4 }.
现在这个:
struct {
int a[2];
} b = { { 1, 2 } };
Run Code Online (Sandbox Code Playgroud)
所以{ }结构初始化的第一个立场和初始化的内部立场b.a.现在我们创建一个结构数组:
struct b_s {
int a[2];
} b[] = {
{
{ 1, 2 },
},{
{ 3, 4, }
},
};
Run Code Online (Sandbox Code Playgroud)
所以第一个括号代表数组b[]初始化.第二个是用于b[0]初始化的结构.第三个是初始化b[0].a数组.
该b[0]是memcmp等于&(struct b_s){ {1, 2 } }.该b[0].a是memcmp等于(int[2]){ 1, 2 }.该b[0].a[0]等于1.