结构数组的单行初始化

Single line Initialization of Array of Structures

我试图在一行中声明和初始化结构数组。但是看起来不像我们在数组中那样支持它。在下面的代码中,myStructArray[3] 给出错误,而 myStructArray2[3] 工作正常。为什么不允许在一行中初始化(我知道这样做不是一个好习惯,但仍然想知道原因。)

typedef struct myStruct
{
       int structMemInt;
       char structMemChar;
}MYSTRUCT;

int main (void)
{
     struct myStruct myStructArray[3] = {2,'a',5,'b',7,'c'};

     struct myStruct myStructArray2[3] = {
         {2,'a'},
         {5,'b'},
         {7,'c'},
     };
}

已更新:

这里的要点是关于每个数组成员没有单独的大括号与大括号的一行初始化。这意味着为什么它不适用于 {2,'a',5,'b',7,'c'} 以及为什么必须包含大括号 {{2,'a'},{5,'b'},{7,'c'}}?

我正在比较多维数组的行为,其中我们不需要用大括号分隔每一行数据。 这个疑问开始是因为 Byron Gottfried 的 C 编程理论和问题(Schaum 大纲系列)在多维数组部分的示例 9.16(无论我有什么版本)中解释如下。因此,这意味着就二维数组初始化而言,这本书是错误的。

int values[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

还有一本书(我没有书的详细信息,我是从网上得到的)说的也是类似的方式(附上第二张图片)

因为你声明了一个结构类型数组。该数组的每个位置包含两种类型的数据,一种是整数,另一种是字符。您可以通过这种方式访问​​每个位置

myStructArray2[0].structMemInt=2;
myStructArray2[0].structMemChar='a';
myStructArray2[1].structMemInt=5;
myStructArray2[1].structMemChar='b';
myStructArray2[2].structMemInt=7;
myStructArray2[2].structMemChar='c';

struct myStruct myStructArray2[3] = {
         {2,'a'}, //  location 0
         {5,'b'}, //  location 1
         {7,'c'}, //  location 2
     };

但是

struct myStruct myStructArray[3] = {2,'a',5,'b',7,'c'};

这是不正确的。听说您尝试插入结构声明中不存在的 6 个项目。

我想你明白了。