此结构数组中最后一项的意义

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 中显示的那一行。虽然没有逗号,但两行会有所不同。

以上是关于此结构数组中最后一项的意义的主要内容,如果未能解决你的问题,请参考以下文章

更改影响第一项的列表视图中最后一项的颜色

获取数组VueJS的最后一项

数组的动态分配

颤动 listView.Builder 隐藏最后一个列表项的分隔符

?数组首尾操作的方法

获取数组第一项的最快方法是啥? [复制]