2014-10-09 337 views
-1

我有以下結構,它包含兩個整數值。指向結構指針的指針

struct data 
{ 
int v1; 
int v2; 
}; 

/*some functions on struct data*/ 

struct data* create(int v1,int v2); 
void printData(struct data *d); 

現在我有以下結構VEC至極將那種像一個列表,該結構具有規模和指針的指針類型的數據結構。

struct vec 
{ 
int size; 
struct data **array; 
}; 

/*possible functions for vec structure*/ 
struct vec* createVec(); 
void addFront(struct vec *v, struct data* dta); 

因爲我是一個初學者指針,我想澄清和確認我的理解。

  1. struct data ** array;我想弄明白這是如何工作的,所以我畫了一個可能的可視化圖像,並希望有人能確認我是否正確。

pointer to pointer to structure of type data

我知道這是不是最大的數據結構等這麼做是嚴格幫我澄清我的指針理解。

+1

又是什麼問題?爲什麼不自己嘗試並在問題出現後詢問? – zubergu 2014-10-09 15:02:42

+0

問題是如果我的可視化是正確的。我已經畫出了我認爲正在發生的事,但我可能是錯的。 @zubergu現在清楚了 – user1010101 2014-10-09 15:03:34

+0

'struct data ** array;'不是你的圖像顯示。它只是一個帶有垃圾值的4字節內存。 – 2014-10-09 15:14:20

回答

1

你的可視化效果很好。

如果我們看看你的圖表,我們希望vec->array[0](你的數組的第一個元素)是指向struct data的指針,對吧?

陣列索引操作([0])將去參考第一元件,這意味着汽提從所述類型的指針。

所以,如果array類型爲struct data **array[0]的類型將是struct data *(注意少一個*),這是我們所期望的。

1

爲了幫助你明確在你的頭腦(和你的代碼)的一切,你可以做到以下幾點:

typedef struct data* data_ptr

然後,結構VEC可以寫成

struct vec 
{ 
int size; 
data_ptr *array; 
}; 

所以,數組的確是一個指向數據結構的指針。 然而數組是一個令人誤解的名字,因爲你可以用其他數據結構如列表等獲得你想要的結果。 如果你決定堅持使用數組,那麼你應該正確地分配內存並釋放它,並且該結構看起來像你所繪製的。

因此,(在正確的初始化之後),array[i]會給你一個指向第i個數據結構的指針,而array[i]->v1應該給你第i個結構的v1值。