我想构建一个struct的数组的结构。我试图改变structs.Node数组的一个结构域变量([节点(1,[]) | | |])** 我不明白为什么我的struct array 希望第一个节点数不等于1。 当我printf(“%d \ n”,start-> innercount);我期望1,因为我的 node1 字段innercount已初始化为1,我已将希望结构字段初始化为3,node1,1.0。
#include <stdio.h>
struct Mynode {
int innercount;
char token[20];
};
struct MyData {
int count;
struct Mynode hope[20];
float average;
};
int main(){
struct Mynode node1[1] = {1, "helo"};
struct MyData data[1] = {3, node1, 1.0};
struct MyData* ptr = data;
struct MyData* endPtr = data + sizeof(data) / sizeof(data[0]);
while ( ptr < endPtr ){
struct Mynode* start = ptr->hope;
struct Mynode* end = ptr->hope + sizeof(ptr->hope) / sizeof(ptr->hope[0]);
while(start < end){
printf("%d\n",start->innercount);
start++;
}
ptr++;
}
return 0;
}
答案 0 :(得分:2)
您无法像这样使用数组初始化数组。相反,C89样式的初始化程序希望您拼出聚合的所有字段。检查编译器输出和警告设置。具体做法是:
% gcc strcut.c
strcut.c: In function ‘main’:
strcut.c:15:30: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
struct MyData data[1] = {3, node1, 1.0};
^~~~~
strcut.c:15:30: note: (near initialization for ‘data[0].hope[0].innercount’)
即。 node1
用于初始化data[0].hope[0].innercount
,这是一个整数。
海湾合作委员会的警告非常清楚地解释了这一点。
现在,为了初始化这个我相信在C99 +你可以使用
struct Mynode node1[1] = {{1,"helo"}};
struct MyData data[1] = {{3, {[0] = node1[0]}, 1.0}};
至少它适用于 me 。但是我不确定它是否符合标准。在C89中,您必须初始化内部结构
struct MyData data[1] = {{3, {{1, "helo"}}, 1.0}};