2017-11-18 9 views
1

私はロジックを理解することに問題があるプロジェクトに取り組んでいます。私は誰かが私にそれを説明するか、それを少なくとももっと明確にすることができたことを感謝します。 データ構造が変更された場合、データ構造はハッシュテーブルです。配列ポインタの要素へのポインタ

コード:

typedef struct tHTElem { 
    char* key; 
    int data; 
    struct tHTElem* ptrnext; 
} tHTElem; 

typedef tHTElem* tHT[MAX_SIZE]; 

限り、私はこのことを理解し、tHT[]tHTElemを構造化するポインタの配列ですか?
この配列の1つの要素へのポインタを作成したい場合は、このように作成する必要がありますか?

tHTElem *ptrToElem = NULL; 

これを初期化しますか?

ptrToElem = tHT[42]; 

私はちょっとこの中で失われています。..
何かアドバイスをありがとうございました。あなたは構造体を宣言したときにすでにtypedefステートメントを使用しているので

+0

あなたは文脈を提供する必要がありますが、 'ptrToElem'が必要な理由や理由がはっきりしません。また、 'tHTElem * ptrToElem = NULL'はすでに' ptrToElem'を 'NULL'に初期化しています。 –

+0

なぜ「MAX_SIZE」ですか? 'tHT'は型名なので、索引付けすることはできません。 – HuStmpHrrr

+0

私はそれがテーブルを持っているの要素を正確に初期化することを念頭に置いています。私はちょうどこの状況をexatで参照と逆参照を使用する方法を混乱させています そしてなぜMAX_SIZE?可能なキーのリストの最大長だけです。 – SevO

答えて

2

あなたはライン typedef tHTElem* tHT[MAX_SIZE];typedefを必要としません。それ以来、タイプ名はtHTElemです。

型を問わず、配列を宣言するときは、ポインタを宣言しています。したがって、char **cchar * c[]と同じです。つまり、cは、配列のポインタがあるメモリのどこかへのポインタです。

tHTElem* tHT[MAX_SIZE];があります。tHTElem** tHT;と同じです。あなたは、このようにすればいいの要素42にpoiterを作成したいのであれば:

tHTElem *ptrToElem; 
ptrToElem = *tHT[42]; 

あなたは配列であり、42はその位置でメモリにアクセスするため... = *tHT[42];*です。

関連する問題