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

时间:2018-03-18 18:11:59

标签: c arrays debugging struct

我想构建一个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;
}

1 个答案:

答案 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}};