dポイントプレゼントキャンペーン実施中!

曖昧な質問になってしまいますが、voidポインタを使うことによって
どのような利点があるのかが解りません、あらゆるポインタ型から
キャスト可能だということは解るのですが、具体的な使用方法がわかりません
よろしくお願いします。

A 回答 (3件)

 利点は、おっしゃっていることそのまんまです。



 たとえば、「どんな型の変数を代入する必要があるか全く分からない」という状況があったとします。
 もしかしたら struct tm* かもしれないし、もしかしたら int* かもしれない。あるいは char* かもしれない。

 これらのどれもが代入する必要がある可能性がある場合、先を見越して型を決めておくことができません(union で対処できる場合はいいですが)。
 そこで、void* 型を「何でもいいよ」という意味で宣言しておくんです。

 memcpy 関数の第1引数は void* で宣言されていますが、これは、どんなメモリーをどんな形でコピーする必要があるか、まったく分からないからです。
    • good
    • 0
この回答へのお礼

回答ありがとう御座いました。
そうですね、memcpyなどは普段何も考えずに使って
いたので気付きませんでした。
初心者なのでまた質問するかもしれませんが
その時はまたお願いします。

お礼日時:2002/08/21 15:12

> int *buf;


>
> buf = ( int * )malloc( sizeof( char ) * 10 );

訂正。

int *buf;

buf = ( int * )malloc( sizeof( int ) * 10 );

でした。すいません。
    • good
    • 0
この回答へのお礼

いいえ、とんでもないです、回答ありがとう御座いました。
私自身、Cを始めたばっかりなのでmallocに
キャスト演算子を付けてすらいませんでした
ので勉強にもなりました。

お礼日時:2002/08/21 15:22

具体例をあげれば動的にメモリ確保する malloc や realloc など、型の違うポインタを返す関数の戻り値や、型の違うポインタを引数に取る関数など。

また、関数へのポインタなど。

どんな型がそこに来るのかわからないという場合いくらでも利点はあります。

ちなみに malloc なら、戻り値が void* で、

char *buf;

buf = ( char * )malloc( sizeof( char ) * 10 );

で char 型のサイズが10個ある配列の先頭要素へのポインタが取得できます。つまり char 配列を確保しています。

ここで、

int *buf;

buf = ( int * )malloc( sizeof( char ) * 10 );

とすると今度は int 型の配列が確保できたりします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!