C 使用结构变量数组访问结构

C 使用结构变量数组访问结构,c,arrays,debugging,struct,C,Arrays,Debugging,Struct,我想创建一个结构数组的结构。我试图更改structs.Node数组的一个结构字段变量([Node(1,[])| | |]*)** 我不明白为什么我的结构数组hope第一个节点计数不等于1。 当我打印F时(“%d\n”,开始->内部计数);我预期为1,因为我的节点1字段innercount已初始化为1,并且我已将hope结构字段初始化为3,节点1,1.0 #include <stdio.h> struct Mynode { int innercount; char t

我想创建一个结构数组的结构。我试图更改structs.Node数组的一个结构字段变量([Node(1,[])| | |]*)** 我不明白为什么我的结构数组hope第一个节点计数不等于1。 当我打印F时(“%d\n”,开始->内部计数);我预期为1,因为我的节点1字段innercount已初始化为1,并且我已将hope结构字段初始化为3,节点1,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;
}
#包括
结构Mynode{
内部计数;
字符标记[20];
};
结构MyData{
整数计数;
struct Mynode hope[20];
浮动平均;
};
int main(){
结构Mynode节点1[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(ptrhope;
结构Mynode*end=ptr->hope+sizeof(ptr->hope)/sizeof(ptr->hope[0]);
while(开始<结束){
printf(“%d\n”,开始->内部计数);
启动++;
}
ptr++;
}
返回0;
}
不能用这样的数组初始化数组。相反,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
用于初始化
数据[0]。hope[0]。innercount
,它是一个整数

GCC的警告非常清楚地解释了这一点

现在,要初始化它,我相信C99+可以使用

struct Mynode node1[1] = {{1,"helo"}};     
struct MyData data[1] = {{3, {[0] = node1[0]}, 1.0}};
至少对我有用。但是,我不确定它是否符合标准。在C89中,必须就地初始化内部结构

struct MyData data[1] = {{3, {{1, "helo"}}, 1.0}};