質問: 【C言語】 man readのvoid *buf引数の型について タイトルの通りmanページ('')によると第二引数について"void *buf"と記載されておりますが、void型と表記されている意図について確認したいです。 実際にスクリプトを書く時には、"char *buf"などとvoid型ではない型を使っております。 manページにvoid型が記載されている理由を個人的に考えてみましたが、「どの型を使うかはユーザが決める為、一意に決まらないという意味でvoidとしている」のだろうかと思いましたが、実際の理由を知りたいです。 もし、ご存知でしたら教えてください。また、解説されている文献・webサイト等もございましたら併せてご紹介いただけますと助かります。宜しくお願い致します。
回答: C言語で、void* は、型無しポインタ(汎用ポインタ)を指します。 型が無いので間接参照やポインタ演算はできず、ただ、ポインタ値(アドレス)を表現するためだけにあります。 なぜ、汎用ポインタなのか?は、型を無視して一塊のデータをまるっと読み込むもので、 それにどんな方を割り当てて読み取るかは、ユーザー次第だから、 という意味かと思います。 例えば、char *bufにしてあると、読み取りたい側が、そこにデータの型に合わせた型のポインタを渡すと 型の不一致で、エラーになってしまうかと思います。