2016-03-02 110 views
1

有些人可能会澄清一些基本的C语言时刻。结构数组指针问题

struct key { 
    char *name; 
    int value; 
}; 

struct key first_key_array[] = { 
    {"abc", 5}, 
    {"xyz", 6}, 
    {"def", 7} 
}; 

struct key second_key_array[] = { 
    {"what", 200}, 
    {"when", 300} 
}; 

struct data { 
    struct key **key_array; 
}; 

struct data all_key_arrays[] = { 
    {first_key_array}, 
    {second_key_array} 
}; 

我可以直接访问first_key_array [0]:

printf("%s %d", first_key_array[0].name, first_key_array[0].value); 

但通过all_key_arrays访问不起作用:

printf("%s %d", all_key_arrays[0].key_array[0].name, all_key_arrays[0].key_array[0].value); 

有人能分享任何想法?

+4

“struct data all_key_arrays [] ='的初始化器格式不正确。你的编译器应该告诉你这个。如果您没有看到任何编译器消息,那么您需要弄清楚如何停止禁用编译器的输出消息。在尝试运行程序之前,您需要修复编译器消息。 –

+1

修复将是'struct key ** key_array;'应该是'struct key * key_array;',虽然这个设计有一个问题,如果你通过'all_key_arrays'进入,那么没有办法检查你没有通过它指向的任何地方结束访问 –

回答

1

尝试改变初始化为all_key_arrays到:

struct data all_key_arrays[] = { 
    first_key_array, 
    second_key_array 
}; 

struct data all_key_arrays[] = { 
    &first_key_array[0], 
    &second_key_array[0] 
}; 

解释 - all_key_arrays是一个数组的指针,所以你值初始化数组应该是,指针。