

No.2ベストアンサー
- 回答日時:
すでに回答があるとおりですが。
void * という型は、「あらゆるポインタ型から、安全に型変換できる」ということになっています。
また、void func(void *v);
のような宣言をプロトタイプ宣言といいます。
プロトタイプ宣言の役割は、ひとつには、引数と返値の型が実際に呼ばれるときの型と合致しているかどうかをチェックするためのものですが、もうひとつ、「暗黙の型変換」を可能にするためでもあります。
たとえば、
void func(char c);
int i;
func(i);
と書けば、プロトタイプ宣言から、実査に要求されている引数は、char であることがわかるので、暗黙のうちに、
func((char)i);
という型変換が行われます。
これと同じように、
void func(void *v);
というプロトタイプ宣言があれば、
int i = 0;
func(&i);
は、暗黙のうちに、func((void *)&i);
という型変換が行われます。。
なおかつ、前述のように、void * は、あらゆるポインタ型からの型変換が可能なので、明示的に (void *) という型キャストをつける必要はないということです。
こちらは、他のポインタ型から、void * への変換です。
なお、void * から、他のポインタ型への変換は、Cでは「暗黙のうちに安全に」行われましたが、C++では、明示的にキャストが必要です。
こちらは、void * から他のポインタ型への変換です。
No.4
- 回答日時:
言語規約としては「整数からポインタへの変換 (またはその逆) はできるけどその結果は処理系定義」です. UNIX だと「ビットパターンを保存して変換」になることが多いと思うので, 「UNIX である限り」は問題ないんじゃないですかね>#3.
ちなみに質問に挙げられている「整数からポインタへの変換」には原則としてキャストが必須.
No.3
- 回答日時:
どの本に書いてあったのでしょうか。
互換性のためにあまり良い方法ではないことは確かですが、void*に整数値を渡すことはコールバックなどで実際に使われますよね。
# 一例 http://homepage3.nifty.com/owl_h0h0/unix/job/UNI …
言語規約からすればこのようなコードは意図通りに動作する保証はないのでしょうけど。
No.1
- 回答日時:
まず確認ですが
> int i = 0;
> func((void*)i);
という記述は誤植か投稿時の間違いであって
int i = 0;
func((void *)&i);
ではないのでしょうか?
# もし「func((void*)i)」で合っているのであれば、ポインタではなく変数そのままを渡すのも
# 「笑える行為」だと言いたいのかも知れません。
> これは何がまずいのでしょうか?
つまり「func((void *)&i)」の場合は「func(&i)」とすれば良いという意味かと思われます。
void * は汎用ポインタという呼ばれ方もしていて、どの型のポインタでも引数に渡しても良いはずなので
別の型のポインタを渡す時に「敢えて void にキャストするのがナンセンスである」という意味ではないか
と思われます。
# と、一般人の私が書いておけば、専門家の方が詳しく説明して下さるかと……
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAでのkernel32(64bit)
-
Run-Time Check Failure #3とい...
-
C言語のポインタに直接アドレス...
-
参照型で受け取った引数をポイ...
-
戻り値で構造体を返すことは可...
-
コンストラクタでnewを失敗した...
-
どうしてエラーになるかわかり...
-
ポインタのポインタとrealloc
-
ハンドルはポインタか
-
引数のポインタについて
-
#define NULL ((void *)0) の弊害
-
セグメントエラー
-
自作関数の引数
-
変数の中身がごみかどうか判定...
-
C++で変数の型を途中で切り替え...
-
C言語の文字列?処理 strcpyやl...
-
TCHAR文字列内の検索について
-
配列を使わずに、変数名を動的...
-
C# DataGridView のヘッダーセ...
-
Integer変数をカラにしたいので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
セグメントエラー
-
#define NULL ((void *)0) の弊害
-
fopne で失敗する原因
-
LPSTR型の初期化について
-
トリプルポインタが必須!とな...
-
戻り値で構造体を返すことは可...
-
c言語で任意のファイルから読み...
-
参照型で受け取った引数をポイ...
-
ポインタについて
-
アプリを32bitから64bit移行
-
ハンドル、アドレス、ポインタ...
-
ポインタが文字化けしてる?!...
-
NULLポインタが0でない処理系と...
-
ハンドルはポインタか
-
リトルエンディアンというもの...
-
【C言語】戻り値が構造体の関数
おすすめ情報