Cが初めてなので、ボイドポインターから得た唯一の実用的な使用法は、特定のポインターに異なるデータ型を格納する可能性のある汎用機能です。したがって、メモリの割り当てを行うときに、ポインターを型キャストしませんでした。
時々voidポインターを使用するコード例をいくつか見ましたが、それらは型キャストされます。なぜこれが便利なのですか?無効ではなく、目的のタイプのポインターを直接作成しないのはなぜですか?
Cでvoidポインタを別の型にキャストする理由は2つあります。
*(int*)p = 42
)が指すものにアクセスしたい場合1の理由は明らかです。 2つ目は、C++ではvoid*
から他の型への暗黙的な変換が許可されていないのに対し、Cでは許可されているためです。
例えば、関数パラメーターとして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 */
}