C/C++における、ポインタ変数の型の一つ。ANSI C以降で登場した。
これは、「特に型の指定されていないポインタ」を表わし、その型については意識せず、単にポインタとして処理したい場合に使用される汎用のポインタである。
例えばmalloc関数の返却値はvoid *型である。これを必要な変数型にキャストして用いることになる。
例えば次のように使う。
struct HOGEHOGE *hogehoge;
hogehoge = (struct HOGEHOGE *)malloc(sizeof(struct HOGEHOGE));
またmallocで確保したメモリを解放するfree関数の引数もvoid *型である。引数として利用される場合は、どのような型を与えてもエラーにならない。
例えば上の例の、struct HOGEHOGE *型として使われたメモリを解放する場合は、次のようになる。
free(hogehoge);
型を意識しないで済むため便利である反面、コンパイラによる自動での型チェックが働かなくなるため、頻用するとバグが発生する率が高まる。