はじめての 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 という ... らしい。