>>903-905
レスありがとうございます。
一応、ポインタはわかってるつもりだったんですが、まだまだだったようです。

「やさしいC」には説明がなくてよくわからないのですが、
ネットで調べた感じだと、おそらく、変数や配列に型があるように、
ポインタにも型みたいな物があるんだと想像してます。

int a;
int *Pt;

これはint型の変数a、と
「int型の数が入る変数を指す”メモリ上のアドレスを格納できるポインタを”宣言している」のであって。
ポインタ(アドレス)自体には型は無く、入るのはアドレスのみ、と考えていたんですが、
どうやらポインタ自体に型のような物があり、「int*」「char*」こんな風に表現してるようです。
いいんですよね?(゜∀゜;

でキャスト式を使って「(char*)Pt」こんな風にすると、ポインタの型が変更できる考えとります。
「ポインタに入るのは番地よって、型が無く、番地であるなら、何でも何時でも入れられる。」
こう考えていたのが間違いだったと考えてます。

   str = (char*) malloc(sizeof(char) * (num + 1));
とすると↑は、malloc()関数が「void*」という型のアドレス(ポインタ)を返している(返すと決まっている)。
ポインタstrは「char*型のポインタ」?なのでvoid*型のアドレス(ポインタ)を中に格納できない。
でキャスト式を使って型変換をしている、となって合点がいきます。

これでいいんですよね(゜∀゜;?
麻奈さん説明してくれよー(´Д`;