表題のとおりのお話。まずは、その1
■配列とポインタ
いままで、配列を宣言することはやってきました。
char c[5] = {'a','b','c','d',0};
など。
(char c[ ] = "abcd"; でも、もちろんOK)
この配列の場合、大きさは宣言時にあらかじめ決まっていました。
しかし、大きさが決まらないものを取りたい場合があります。
このときに、ポインタを使い、領域を取って使います。
■ポインタによる領域の取り方
では、同じく、c1というところに、5バイトぶんの大きさを取って、
"abcd"とセットしてみましょう
こんなかんじになります。
char *c1;
c1 = (char *)malloc(5);
strcpy(c1,"abcd");
まずは、宣言です。
変数名に、*を付けることでポインタになります。
その後、mallocという関数で、(メモリ)領域をとります。
mallocの引数が、取る大きさなので、ここをかえることによって、いくらでも取る領域の大きさをかえることが出来ます。
たとえば、intの5個分の大きさをとり、それをi_lの中に入れてみましょう。
intの大きさはsizeof(int)でわかりますので、
int *i_l;
i_l = (int *)malloc(sizeof(int) * 5 );
となりまdす。mallocは、どんな型の領域でもとりますので、キャストしたほうがいいです。
■領域を取ったら、解放する
なお、自分でmallocで領域を取ったら、必要なくなったところで、解放してください。
free(c1);
で領域を開放できます。
(i_lの場合は、free(i_l); )
■まとめ
決まった大きさのときは配列を使いましたが、決まっていない大きさ(領域)を取りたいときはポインタを使います。
ポインタを使うには、
char *c1;
c1 = (char *)malloc(5);
strcpy(c1,"abcd");
// 処理
free(c1);
のように、
1.まず宣言(変数に*をつけると、ポインタになる)
2.領域をmallocで確保
3.適当に処理して
4.処理が終了したらfreeで返す
という形になります。
次回は、ポインタによるアクセスについてです