2014-04-09 7 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에 대한 포인터 배열을 생성하기 위해 NodeT* hashTable[arraySize]과 같은 것을 사용하여 연결 작업을 수행했습니다. 이 후에 배열을 위해 dinamycally 메모리를 할당하기로 결정 했으므로 (필자는) 동등한 NodeT* (*mockTable)을 사용하려고했습니다.

제 질문은 다음과 같습니다 : 왜 (*hashTable)[i].info을 사용해야하고 (*hashTable)[i]->info을 사용해야합니까? 늘어나는만큼 우려, hashTableNodeT 포인터의 배열을 가리키는 포인터입니다, 그래서이 일은 안됩니다. 내가 여기서 뭐 잘못 됐어?

답변

0

기본 아이디어가 있지만 포인터를 잘못 입력 한 것처럼 보입니다. hashTable이 포인터 (**)에 대한 포인터이고, strcpy에서이 포인터에 액세스하면 실제로이 이중 포인터 값에 도달합니다. st는 배열 인덱스 [i]이고 두 번째 변수는 그 안에있는 Value를 호출하는 변수에 액세스 할 때 사용되는 * hashTable입니다. 그래서 듀얼 포인터 변수를 정의하면 StrutT ** temp; 필드에 액세스하려면 * temp [i] .field 수 있지만 단일 포인터 (동일한 ** temp) 레벨에서 액세스하려는 경우에는 temp [ i] -> field 또는 * temp-> field 둘 다 "pop"맨 위 포인터

관련 문제