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

あるライブラリの関数を利用しようとしたのですが、その関数の引数にVoidポインタがあり、どういう型のデータを格納したのかわかりません。このポインタのアドレスに格納されたデータの型を調べる関数なり方法なりというのはあるのでしょうか。

Voidポインタというのは型を問わずに受け取れるというのは利点ですが、受け取ったものがあらかじめなんだかわからない場合はどうするのでしょうか。よろしくお願いします。

A 回答 (3件)

★基本的に調べようがありません。


・『void』ポインタはアドレス情報のみを受け渡しますので、型のサイズまでは分かりません。
 逆に言えば、型のサイズが分からないから『汎用ポインタ』と呼べるのです。
・あるライブラリの関数とは何?→どんな関数か分かりませんので、これ以上はアドバイス無理!
 ただ、C言語の qsort などでは比較用の関数で『void』ポインタを受け取りますが、その関数内で
 渡されたデータの『型』を指定します。→ポインタの形でキャストします。
 この比較用の関数は自前で用意する関数ですので、ソートするデータの型が分かっています。
 でも、ソートするデータ型が複数ある場合は、比較用の関数を複数作って切り替えます。
・あと関数に型を表す引数があれば、それを見て判断できますが、そうでない場合は『void』ポインタで
 渡される前の『型』の調べることは不可能です。→言語仕様より。
・以上。参考に。→一応、あるライブラリの関数とは何?
    • good
    • 0
この回答へのお礼

すみません。Voidではなくvoidです。

やはり、データの既知でないとしょうがないのですね。わからない前提で動作するものを作ろうと思っていまたのですが、それは不可能とわかっただけでもありがたい事です。

有難うございました。

お礼日時:2007/04/09 17:25

voidではなくVoidですか?その型の定義がどうなっているのか補足してください。



> あるライブラリの関数を利用しようとしたのですが、

ライブラリの関数を利用するのであれば、質問者さんは受け取る立場のコードを書くのではなく、渡す立場のコードを書くのでは?渡す側であれば、自分がどんな型の引数を渡したかわかるはずです。実際はどうなのでしょうか?
    • good
    • 0
この回答へのお礼

すみません。Voidではなくvoidです。

やはり、データの既知でないとしょうがないのですね。わからない前提で動作するものを作ろうと思っていまたのですが、それは不可能とわかっただけでもありがたい事です。

有難うございました。

お礼日時:2007/04/09 17:26

その関数の仕様を調べればわかると思うんだけど....

    • good
    • 1

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