2013-10-30 112 views
1

我寫了這段代碼,我不確定它是如何工作的,但它的工作原理。這是代碼:如何創建指向結構體的指針數組? C++

struct node 
{ 
    string data; 
    node *chain; 
}; 

    int tablesize=10; 

    node *ptr [tablesize]; 

    for (i=0; i<tablesize; i++) 
{ 
    ptr[i]=new node; 
    ptr[i]->data="Empty"; 
    ptr[i]->chain=NULL; 
} 

如果我正確理解它,第一I創建的10個指針的數組,然後我分配每個指針與一個新的節點?爲什麼只有當我解除引用它時才起作用? (PTR [I] - >數據= 「空」;)

+2

因爲'ptr [i]'是一個指針。你不是兩次解除引用。順便說一句,你正在使用可變長度數組(VLA),它不是標準的C++。 – juanchopanza

+0

請勿使用'new'。 :( – rightfold

+0

不要忘記清理你的混亂... – Sambuca

回答

0

由於ptr被聲明爲一個指針數組。因此ptr[i]是一個指向節點的指針。因此,您需要取消引用它才能訪問指向實體。

+0

所以說節點* ptr [tablesize];它實際上是指向指針數組的指針? –

+0

@ Reboot_87 no,它是一個指向'node'的數組,就像'int a [10]'是一個int數組 – juanchopanza

+0

我認爲這是因爲:node * ptr [tablesize];與write:節點相同** ptr =新節點* [tablesize]; –

0

ptr[i]node*因此必須使用->

(您沒有解引用)

+0

不,你會怎麼稱呼它呢? –