C に慣れていないので、void ポインターから得た唯一の実用的な使用法は、特定のポインターにさまざまなデータ型を格納できる多目的関数用です。したがって、メモリ割り当てを行うときにポインターを型キャストしませんでした。
void ポインターを使用することがあるコード例をいくつか見てきましたが、それらは型キャストされます。なぜこれが役立つのですか?ボイドの代わりに、目的のタイプのポインターを直接作成してみませんか?
C で void ポインターを別の型にキャストする理由は 2 つあります。
*(int*)p = 42
)1の理由は明らかです。2 番目の理由は、C++ ではvoid*
他の型への暗黙的な変換が許可されていませんが、C では許可されているためです。
void ポインターを逆参照する場合は、void ポインターを別のものにキャストする必要があります。たとえば、void ポインターを関数パラメーターとして取得し、これが整数であることを確認します。
void some_function(void * some_param) {
int some_value = *some_param; /* won't work, you can't dereference a void pointer */
}
void some_function(void * some_param) {
int some_value = *((int *) some_param); /* ok */
}