• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(int *)の意味)

(int *)の意味

このQ&Aのポイント
  • C++のmalloc関数は、指定された大きさの領域をヒープに割り当て、その領域の先頭のポインタを返す関数である。
  • 例えば、int *x; のようにポインタ変数を宣言し、malloc関数を使ってint型の領域を割り当てることができる。
  • その際、(int *)を使ってmallocから返されるポインタの型をintポインタとして指定する。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.6

int *x ; で宣言された変数x は 「int *」型 mallocが返すのは 「void * 」型 です。 x=malloc(sizeof(int)); では 「int * 」型 = 「void *」型 なので、型が一致しません。 そこで、 (int *)を使って、 「void *」型を「int *」型に型変換しています。 わざと「ポインタ」という言葉を使わずに説明しました。 混乱の原因は、ポインタを特別なものだと思い過ぎているからではないでしょうか。 ちなみに。 ・C++を使っているのなら、(型)というキャストは使わないようにするのがよいでしょう。 詳しくは「C++ キャスト」で検索すると解説サイトが見つかります ・C++では、領域割り当て用の演算子 new というものがあります。 これは、型を指定するので、キャストの必要はありません。 また、classやstructは、mallocで確保してしまうとコンストラクタが呼ばれません。 なお、mallocに対してfreeがあるように、new には deleteです。

samidare01
質問者

お礼

一番わかりやすかったのでBAにさせていただきます。 ありがとうございます。後半についても勉強していきます。

その他の回答 (5)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.5

追加です。 言語の仕様としてはいろいろなコンピュータ、OSに対応する必要があります。 よって >アドレスなのでintでもcharでも floatでも同じ長さではあるのですが、 と書きましたが、 intとcharとfloatで違うメモリーを使い、かつそのアドレスの長さが違う場合、 >代入の際には型を揃えることが重要なのです。 この文章が生きてきます。 int*にキャストしておくと問題なく解釈できます。

samidare01
質問者

お礼

わかりました、代入の際には型を揃えること。おぼえておきます。

回答No.4

しょーもない回答です。静的な意味で考えた場合、mallocは  void *malloc(size_t size); で定義されている(voidのpointer)のでxに代入するとき、(int *)でキャストしないとエラーか何かになるからでしょう。

samidare01
質問者

お礼

ありがとうございます。

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.3

>int *x; xはint型へのポインタです。 *xはxが指し示す中身です。 >x=(int *)malloc(sizeof(int)); sizeof(int)はint型変数の大きさ(バイト数)を返します。 malloc関数はメモリを指定された大きさだけ確保する関数で、 返却値はそのアドレス(void *型)です。 そのアドレスは(void *)型ですが、xは(int *)型です。 ですから、(int *)を付けることでキャスト(型変換)をしてxに確保したint型のアドレスを渡しています。 >*x=100; 先ほどのmalloc関数で確保したアドレスに100を格納しています。

samidare01
質問者

お礼

詳細な説明ありがとうございます!

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>xはポインタのような気もして そのとおりです。 >x=(int *)malloc(sizeof(int)); int型1個分の領域を動的に確保して、 xがその場所を指すようにしています。 xはint型へのポインターですから、 *xはint型です。

samidare01
質問者

お礼

ずばりありがとうございます。やはりxはポインタの認識で良いのですね。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

sizeof(int)の長さの記憶域を取ります。 そしてそのアドレスをxに入れます。 アドレスなのでintでもcharでも floatでも同じ長さではあるのですが、 xがint* の型なのでint*にして代入します。 代入の際には型を揃えることが重要なのです。

samidare01
質問者

お礼

有難うございます。int*の型というところの理解ができていませんでした。

関連するQ&A