void *

読み:ヴォイド・アスタリスク
外語:void *
品詞:名詞

C/C++における、ポインタ変数の型の一つ。ANSI C以降で登場した。

これは、「特に型の指定されていないポインタ」を表わし、その型については意識せず、単にポインタとして処理したい場合に使用される汎用のポインタである。

C/C++のポインタ変数は、例えばchar *ならchar型変数を指すポインタであり、int *ならint型変数を指すポインタである。

対してvoid *は、void型変数というものは存在していない特殊なもので、ポインタではあるがその型が指定されていないものを言う。

void *型のポインタは、代入はできるが参照ができず、参照しようとすればコンパイル時点でエラーとなる。この型で受け取ったものを参照するときには別途char *型などに型キャストせねばならない。

例えばmalloc関数の返却値はvoid *型である。これを必要な変数型にキャストして用いることになる。

例えば次のように使う。

struct HOGEHOGE *hogehoge;

hogehoge = (struct HOGEHOGE *)malloc(sizeof(struct HOGEHOGE));

またmallocで確保したメモリを解放するfree関数の引数もvoid *型である。引数として利用される場合は、どのような型を与えてもエラーにならない。

例えば上の例の、struct HOGEHOGE *型として使われたメモリを解放する場合は、次のようになる。

free(hogehoge);

型を意識しないで済むため便利である反面、コンパイラによる自動での型チェックが働かなくなるため、頻用するとバグが発生する率が高まる。