2016-03-02 112 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是一個數組的指針,所以你值初始化數組應該是,指針。