此结构数组中最后一项的意义
Significance of last item in this array of structs
myarray
中的最后一项如何有效?据说这是一个“空终止列表”。这是C代码。
typedef struct sFoo
{
char *a;
char *b;
} SFOO;
static SFOO my_sfoo_array[] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
{ } /* what?! */
};
缺少的结构元素是否自动提供为 0
,以便最后一个条目 { }
真的是 {0, 0}
?
这不是有效的 C 初始化
static SFOO my_sfoo_array[] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
{ } /* what?! */
};
C 不允许空大括号。
在C++中是值初始化的意思。
所以在 C 中,这样写是正确的
static SFOO my_sfoo_array[3] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
};
在这种情况下,第三个元素的成员将由空指针初始化。
C 中的初始化程序定义为
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
如您所见,initializer-list 不是可选的。
myarray
中的最后一项如何有效?据说这是一个“空终止列表”。这是C代码。
typedef struct sFoo
{
char *a;
char *b;
} SFOO;
static SFOO my_sfoo_array[] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
{ } /* what?! */
};
缺少的结构元素是否自动提供为 0
,以便最后一个条目 { }
真的是 {0, 0}
?
这不是有效的 C 初始化
static SFOO my_sfoo_array[] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
{ } /* what?! */
};
C 不允许空大括号。
在C++中是值初始化的意思。
所以在 C 中,这样写是正确的
static SFOO my_sfoo_array[3] =
{
{ 0x1000, 0x2000 },
{ 0x3000, 0x4000 },
};
在这种情况下,第三个元素的成员将由空指针初始化。 C 中的初始化程序定义为
initializer:
assignment-expression
{ initializer-list }
{ initializer-list , }
如您所见,initializer-list 不是可选的。