A **
只是一個指向指針的指針。因此,在instruction*
包含instruction
結構的地址的情況下,instruction**
包含instruction*
的地址,其中包含instruction
對象的地址。
要訪問instruction**
指向的指針指向的instruction
,您只需使用兩個星號而不是一個,如(**p).repetitions
或類似內容。
你可以想像它是這樣的:但是
instruction* ----> instruction
instruction** ----> instruction* ----> instruction
記住,簡單地宣佈struct instruction** instructions;
實際上並沒有創造一個instruction
結構。它只是創建一個保存垃圾值的指針。你必須初始化:
struct instruction inst;
// set members of inst...
*instructions = &inst;
...
(*instructions)->repetitions++; // or whatever
但是,它看起來像你使用instruction**
指向的instruction*
秒的陣列。要初始化數組,你需要一個for
循環:
instructions = malloc(sizeof(struct instruction*) * num_of_arrays);
for (i = 0; i < num_of_arrays; ++i)
instructions[i] = malloc(sizeof(struct instruction) * size_of_each_subarray);
然後你就可以像訪問instructions[i]->datamember
的元素。
最好不要將問題放在代碼行註釋中。 – takrl 2011-04-28 06:43:17
如果您不知道C#是什麼,請不要使用C#標記C問題。 – BoltClock 2011-04-28 06:44:12
請將您的問題放在代碼塊外面,否則人們不會看到它。我編輯了它,現在將其移出。 – 2011-04-28 06:44:32