[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