此结构数组中最后一项的意义
Posted
技术标签:
【中文标题】此结构数组中最后一项的意义【英文标题】:Significance of last item in this array of structs 【发布时间】:2021-04-26 07:59:44 【问题描述】:myarray
中的最后一项如何有效?假设这是一个“空终止列表”。这是 C 代码。
typedef struct sFoo
char *a;
char *b;
SFOO;
static SFOO my_sfoo_array[] =
0x1000, 0x2000 ,
0x3000, 0x4000 ,
/* what?! */
;
缺少的结构元素是否自动提供为0
,所以最后一个条目
真的是0, 0
?
【问题讨论】:
简单地说,是的。 我认为这不是一个标准的东西,而是一个编译器扩展。标准 C 不允许空初始化器。 【参考方案1】:这不是有效的 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 不是可选的。
【讨论】:
在标准 C 中无效,但在通用编译器中有效 ***.com/questions/17589533/… @EugeneSh。什么编译器允许这样的初始化并不重要。我们正在谈论 C。 去掉第二个sn-p中的逗号 @klutt 是允许的。;) @klutt 不仅被允许,而且被认为是一种很好的做法(好吧,我想这取决于)。例如,当您向数组添加另一行时,它将仅是diff
中显示的那一行。虽然没有逗号,但两行会有所不同。以上是关于此结构数组中最后一项的意义的主要内容,如果未能解决你的问题,请参考以下文章