はじめての C
「ポインタ」
C では、データが どんな型であっても、その型の ポインタを もつことができます (たとえ 関数 だったとしても !)。
では ポインタの使い方を 少しだけ 見てみましょう。
先へ進む前に、ポインタの 2つの 特別な バリエーションに 触れておくことも いいアイデアですね。
初めは あるポインタの型について、2つ目が その特別な値についてです。
まず 最初は、void ポインタから。
void *pv;
void ポインタとは、汎用 - generic - の 特殊な ポインタのことです。 void へは どのポインタの 値であっても 割り当て - assign - られますし、キャストを 使えば、それを 元の型に 戻すことも できます。
キャストが 必要と されるのは、void ポインタでは 間接参照 - dereference - することが できないからです。
void *pv;
int *pi;
int i = 10;
pi = &i;
pv = pi;
printf("%d\n", *pi); /* Prints 10 */
printf("%d\n", *(int *)pv); */ Also prints 10 */注意してほしいのは、キャストは 間接参照を 実行する "前に" つくられてることです。 このことは 重要で、もし キャストが 次のようだと、
(int *)*pv
void ポインタが 間接参照されてしまい、その 正しくない参照から ポインタを 返すことになります。
どちらも、まったくの まちがいです。
(注) * 演算子のことも dereference という ... らしい。