malloc関数について

malloc関数について女帝からのありがたいお言葉 ちゃんと習得したいものです。
3
山下 @yamashitam

(struct person *)malloc(sizeof(struct person)) よくわからない人はおまじない程度にとらえていいと思いますが、仕組みとしては(1)sizeof演算子がstruct person型の使うバイト数を整数で取得(続く) #meijimaxc

2010-12-07 14:04:18
山下 @yamashitam

(2)取得した数字をmalloc関数に渡す。malloc関数は、stdlib.hに用意されている、メモリを確保してその先頭アドレス(番地)を返してくれる関数です。(続) #meijimaxc

2010-12-07 14:06:46
山下 @yamashitam

(3)つまりこれを、自分で宣言したポインタ変数(struct person *pとか)に代入するのですが、このままではできません。malloc関数の返り値はvoid *という「どんな型にするかはあとで決めてくれ」という特殊な型です。(続) #meijimaxc

2010-12-07 14:11:21
山下 @yamashitam

なので代入の前にキャストが必要です。キャストとは、C型にキャストしたいものAに対して代入先B(C型)がある場合「B = (C)A」とすることです。今回ではp = (struct person *)malloc...となります。(続く) #meijimaxc

2010-12-07 14:14:01
山下 @yamashitam

「)」の手前にある「*」は、「”ポインタ変数”にキャストですよ!」という目印です。(終) #meijimaxc

2010-12-07 14:14:48
山下 @yamashitam

mallocの使い方について座学で学習していないようなので、混乱する人が多く見受けられます。ドリルを読んでもわからないという人がいます。というわけでつらつらと書いてみました。 #meijimaxc

2010-12-07 14:17:15