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

というのがC言語にありますよね?
このvoid型へのポインタというのは、
どのようにイメージすればいいのでしょうか?
例えばchar型へのポインタなら、
指している領域は
1バイトの領域ですよね?
ではvoid型は?

また
malloc関数を
使って
char *p;

p=(char *)malloc(1000);
とするとでchar型にキャストしているから、
1個1バイト分の領域が1000個用意して、
先頭アドレスをpに格納するのですよね?
では、

int *q;
q=(int *)malloc(1000);
としたら、用意されるのは、int型にキャストしているから
1個2バイト分の領域が500個用意されるのでしょうか?
お願いします。

A 回答 (4件)

malloc(1000)とした場合、(int*)としようが(char*)としようが、常に1000バイトの領域が確保されます。

この1000は、確保するバイト数を示します。
その結果、p=(char*)とした場合は、その領域を文字型のデータがあると(1000個ある)と見なしているだけです。
q=(int*)とした場合は、その領域にint型のデータがある(1000バイトに入るのは500個)と見なしているだけです。(今回はint型は2バイトとします。最近は4バイトが流行ですが・・・)
    • good
    • 0
この回答へのお礼

ありがとうございます。
そうでした、たしかint型は4バイトでした
すいません。

お礼日時:2003/12/27 14:13

void型へのポインタは、どの型のポインタかを明示しないポインタですから


利用する時は適当な型にキャストする必要があります。
こちらの 「初級編 5.ポインタの型」のところをご覧ください。
http://maborosi.kobe-du.ac.jp/sugiura/soft/tora/ …

>1個2バイト分の領域が500個用意されるのでしょうか?
キャストに関係なく1000バイト分が確保されます。
#2で指摘されているようにint型は2バイトとは限りません。
むしろ32ビットOS上のC言語は4バイト(32ビット)が普通です。

参考URL:http://maborosi.kobe-du.ac.jp/sugiura/soft/tora/ …
    • good
    • 0
この回答へのお礼

ありがとうございます。
読んでみます。
<むしろ32ビットOS上のC言語は4バイト(32ビット)が普通です。
私が読んでいる本にはint型は16ビットとしてたので、、
最近は32ビットなんですね、

お礼日時:2004/01/21 19:50

#1です。

void型のポインタは、単純にメモリのアドレスを示す為に使います。つまりvoid *pとしたとき、pが指すところに何の型かは不明だが、とにかくそこにデータがあるという場合です。では、このデータをどうやって操作するかというと、具体的な型を持ったポインタに代入してから使用します。char *a; a=p;のようにです。(この場合はそこに文字型のデータがある場合です。)もし、ここでint *b; b=p;とした場合は、int型のデータがそこにあると見なしたことになります。void型をつかうのは、とにかくアドレスを記憶したが、まだ何の型として使うかがその時点で、決まっていない場合が多いです。(char*型を使っているひとも多く見かけます。この辺は趣味の問題です)
余談ですが、char *a;をa++とすると1バイト増加し、int *b; をb++とすると2バイト増加しますが、void *c;をc++するとこれは、コンパイルエラーになります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2004/01/04 10:43

char型のポインタの先が1バイトとは限りません。

例えば
char buf[10];
char *p;
void *q;
p = buf;
というコードの場合、pもqも10バイトの領域を指します。

mallocの引数は純粋にバイト数であって、何型にキャストするかはまったく無関係です。int型のサイズが何バイトかは処理系に依存するので、500個分intの領域がほしいならば
int *q;
q = (int *)malloc(sizeof(int) * 500);
if (q == NULL) /* mallocにしくじった時のエラー処理 */
と書くべきです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
q = (int *)malloc(sizeof(int) * 500);
のように書いたのを思い出しました、
これで、int型の領域が500個
できるんですね?

お礼日時:2003/12/25 21:57

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