2015-10-15 143 views
-2

我想在一行中声明和初始化结构数组。但它看起来不像我们在数组中那样受到支持。在下面的代码中,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编写的理论和问题(Schaum概要系列)在例9.16(我有任何版本)中对多维数组部分的解释如下。所以这意味着就二维数组初始化而言,这本书在错误方面是错误的。

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

enter image description here

而且更多的书(我没有书细节,我从网上得到)说,类似的方法(附后第二张照片)

enter image description here

+2

它与行数没有任何关系..如果你要提供oneliner作为{{2,“a”} ...}(注意{}的额外级别,它应该工作相同。 –

+0

@KarthikT:对不起,我的问题还不清楚,更新了问题 –

+1

所以你找到了一种可行的方法,一个不行,你已经意识到它不是换行符,而是缺失的大括号导致了差异那么,什么问题? – 5gon12eder

回答

2

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

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个不存在于您的结构声明中的项目。

我想现在你明白了你的观点。