- ベストアンサー
(int *)の意味
- C++のmalloc関数は、指定された大きさの領域をヒープに割り当て、その領域の先頭のポインタを返す関数である。
- 例えば、int *x; のようにポインタ変数を宣言し、malloc関数を使ってint型の領域を割り当てることができる。
- その際、(int *)を使ってmallocから返されるポインタの型をintポインタとして指定する。
- みんなの回答 (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です。
その他の回答 (5)
- maiko0318
- ベストアンサー率21% (1483/6969)
追加です。 言語の仕様としてはいろいろなコンピュータ、OSに対応する必要があります。 よって >アドレスなのでintでもcharでも floatでも同じ長さではあるのですが、 と書きましたが、 intとcharとfloatで違うメモリーを使い、かつそのアドレスの長さが違う場合、 >代入の際には型を揃えることが重要なのです。 この文章が生きてきます。 int*にキャストしておくと問題なく解釈できます。
お礼
わかりました、代入の際には型を揃えること。おぼえておきます。
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
しょーもない回答です。静的な意味で考えた場合、mallocは void *malloc(size_t size); で定義されている(voidのpointer)のでxに代入するとき、(int *)でキャストしないとエラーか何かになるからでしょう。
お礼
ありがとうございます。
- ok-kaneto
- ベストアンサー率39% (1798/4531)
>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を格納しています。
お礼
詳細な説明ありがとうございます!
- asuncion
- ベストアンサー率33% (2127/6289)
>xはポインタのような気もして そのとおりです。 >x=(int *)malloc(sizeof(int)); int型1個分の領域を動的に確保して、 xがその場所を指すようにしています。 xはint型へのポインターですから、 *xはint型です。
お礼
ずばりありがとうございます。やはりxはポインタの認識で良いのですね。
- maiko0318
- ベストアンサー率21% (1483/6969)
sizeof(int)の長さの記憶域を取ります。 そしてそのアドレスをxに入れます。 アドレスなのでintでもcharでも floatでも同じ長さではあるのですが、 xがint* の型なのでint*にして代入します。 代入の際には型を揃えることが重要なのです。
お礼
有難うございます。int*の型というところの理解ができていませんでした。
お礼
一番わかりやすかったのでBAにさせていただきます。 ありがとうございます。後半についても勉強していきます。