[iPhone]C ポインタについて
すぐにこんがらがるのでメモ
ポインタとは、(変数の)メモリ上のアドレスの番地を格納するための仕組み
//ポインタの定義 //型名 *変数名 int *p; int* p;//*の位置はこの書き方でもよい int a=100; //変数aのメモリ上のアドレスは、&aとなる。 //ポインタpにaを参照させるには、 p = &a;//*pではないことに注意 //ポインタからaの値を取得するには int b=*p; printf(b);//出力:100
*の使い方についての注意
定義するときの*と、それ以外の*では意味合いが異なるらしい
//整数定義 int a = 100; //整数型のポイントを定義 int *p; *p = a;//これはNG //定義後のポインタ変数に参照させるには、p = &a; //ただしポインタ定義時の初期化でaを代入するのはOK int *q = a;//これはOK //定義するときの*と、それ以外の*では意味合いが違うということらしい
配列のときは配列名には、&はつける必要がない
ポインタ名は配列と同じようだ。
int a[20] = {1,12,23,34,45}; int b = 100; int *pa; int *pb; pa = a;//&aにはならない pb = &b; //配列aの2番目の値を取得するには //配列aを使う場合 printf("%d\n",a[1]);//出力:12 //ポインタpaを使う場合 printf("%d\n",*(pa+1));//出力:12 printf("%d\n",pa[1]);//出力:12
メモリを確保したポインタも配列と同じように扱える
int *bufa; //100バイト分のメモリを確保 bufa = (int *)malloc(sizeof(int)*100); bufa[10] = 123; //配列のように参照 printf("%d\n",bufa[10]);//出力:123 //ポインタとして参照 printf("%d\n",*(bufa+10));//出力:123
Tweet