初級-ポインタで引っかかるという場合の説明

C言語のポインタで引っかかる/壁に当たる」という場合、
概してですが、
ポインタ関連の記号「*」(アスタリスク)に対し、
「間接参照演算子」である場合と、
(変数宣言時の)「型修飾子」である場合の、
はっきりとした意識分けが説明されておらず、
漠然と「ポインタ関係の記号」として
意識されて使用しているケースが多くあります。
厳密なC言語プログラミング言語上の設計を理解するには、
「構文上、何子なのか」
という意識分けが、重要です。

型修飾子の場合の「*」

例えば、このような文の場合、

 int * p_iVarX;

構文内の「int *」は、
「int」+「*」で、1つの型を意味し、
「int型を指し示すポインタ型」であることを意味します。
「(int*)型」と読み替えてもよいでしょう。
この場合の「*」は、「〜のポインタ型」という意味を付加(修飾)する、
「型修飾子」です。
C言語の設計上、宣言時の空白の位置が自由で、

 int*p_iVarX;

と書くこともできますし、

 int *p_iVarX;

と書くこともできるので、
「intに着いている型修飾子」であることがわかりにくいのです。

間接参照演算子の場合の「*」

例えば、iVarXがint型変数で、このような代入文の場合、

 iVarX = *p_iVarX;

構文内の「*」は、「間接参照演算子」であり、
int型を指し示すポインタ型である、
p_iVarX(intポインタ型)変数に格納されているアドレスが
指している先のint型の値を参照する(間接参照する)
という演算子としての意味です。

「ポインタ関連」という同じカテゴリにある全く同じ記号でも、
言語設計上全く異なる役割を持っている点を意識できれば、
少し突破しやすくなるのではないでしょうか。