- ベストアンサー
(char *)についての質問
以下のコードの意味が理解できなかったので質問させていただきます。 str=(char *) malloc (sizeof(char) * (num+1)); ここで理解できなかった部分はstr=(char *)の部分(ここでさしているchar *とは何なのか?)とmalloc()関数内の「*」です。 ご回答よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
現在のCではmallocに(char*)などキャストをつける必要はないです. まず先頭のchar*ですが,これは括弧の中に入っていて意味が生じます.それは型変換(キャスト)です.mallocはvoidへのポインタ(void*)なので,キャラクタへのポインタ(char*)へ変換しようという意図なのでしょう.ただ,void*はどんなポインタ型にも適合する特殊なポインタ型なので,キャストは不要です.というか,型不適合があってもキャストが入っているとエラーにならないので,やめた方がよいとされています. 後ろの方は,char*ではなくて, ( sizeof(char) ) * (num + 1) という意味で,掛け算です.
その他の回答 (2)
- pchan0022000
- ベストアンサー率42% (112/261)
通りすがりに答えてみる。 inum=(int)dnum; INT型へのキャスト inum=(char)dnum; CHAR型へのキャスト inum=(char *)dnum; CHARポインタ型へのキャスト という訳でキャスト演算子内での「*」の意味は ポインタを表しています。
お礼
ご回答いただき本当にありがとうございました。 「*」はポインタ型を指していたのですね!! これで理解が深まり先に進めそうです!! ありがとうございました。
- tv_junky
- ベストアンサー率8% (1/12)
>>str=(char *)の部分(ここでさしているchar *とは? キャストというもので、strに値を代入するときの型を表します。 mallocの戻り値は "void *"ですのでそれを "char *"にしています。 >>tr=(char *)の部分(ここでさしているchar *とは? こちらは単純に掛け算の演算を表しています。
お礼
ご回答ありがとうございます。 sizeof()で確保したメモリを(num+1)の分掛けるという意味だったのですね。もう一方はキャスト演算子ということが分かってとても勉強になりました。 キャスト演算子内の「*」について理解ができていないのでもし差し支えなければご教授いただきたいです。
お礼
貴重なお時間を頂いて本当に感謝しています。 mallocにキャストをつける必要がないという大変ためになるご回答ありがとうございました。 とても勉強になりました。
補足
非常に分かり易いご説明ありがとうございます。 ご回答頂いた内容と、参考書を見て理解が深まりました。 差し支えなければもうひとつお聞きしたいのですが参考書にはキャスト演算子の使い方が inum=(int)dnum; と記載されており「*」が付いていないのですがキャスト演算子内での「*」の意味は何なのでしょうか?