我想在一行中声明和初始化结构数组。但它看起来不像我们在数组中那样受到支持。在下面的代码中,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};
而且更多的书(我没有书细节,我从网上得到)说,类似的方法(附后第二张照片)
它与行数没有任何关系..如果你要提供oneliner作为{{2,“a”} ...}(注意{}的额外级别,它应该工作相同。 –
@KarthikT:对不起,我的问题还不清楚,更新了问题 –
所以你找到了一种可行的方法,一个不行,你已经意识到它不是换行符,而是缺失的大括号导致了差异那么,什么问题? – 5gon12eder