2014-04-09 69 views
0

我不明白爲什麼下面的代碼做它做什麼。指針的指針在哈希表

void initializeTable() 
{ 
NodeT* (*hashTable) ; 
*hashTable=(NodeT*)malloc(30*sizeof(NodeT)); 
    int i; 
    for(i=0;i<30;i++) 
    { 
     (*hashTable)[i].info=(char*)malloc(10*sizeof(char)); 
     strcpy((*hashTable)[i].info,"a"); 
     cout<<(*hashTable)[i].info<<" "; 

    } 
} 

我想了解哈希表如何工作。在我的程序的第一個版本,我用類似NodeT* hashTable[arraySize]以創建指針數組來NodeT,爲了做鏈接。在此之後,我決定嘗試爲數組分配dinamycally內存,所以我嘗試使用(我認爲)相當於NodeT* (*mockTable)

我的問題是:爲什麼我使用(*hashTable)[i].info,而不是(*hashTable)[i]->info?至於我擔心的,是hashTable指向指針數組來NodeT指針,所以這不應該發生。我在這裏錯了什麼?

回答

0

你明白了,但看起來你錯了指針 你的hashTable是一個指向指針(**)的指針,當你在strcpy中訪問它時,你實際上會進入這個雙指針的值1' st是數組index [i],第二個是使用* hashTable訪問調用其中的值的變量。 所以如果你定義一個決鬥指針變量 STRUTT **溫度; 並且你想訪問它裏面的一個字段 你可以 * temp [i] .field 但是如果你只想訪問一個指針級別(相同的** temp),你需要: temp [ Ⅰ] - >字段 或 * TEMP->字段 其中兩個唯一的「砰砰」最頂部的指針