[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

[iP]C言語のポインタについて

Objective-Cの準備としてのC言語勉強中。
ポインタのお作法がこんがらがるのでメモしとく。

まず例文から
(のつもりがそのまま注釈も書いちゃった)

//整数型の変数:numberの定義
int number = 100;

//(numberを操作するための)ポインタ変数:pointerの定義
int *pointer;
//*pointerではなく、pointerがポインタ変数
//(*は宣言時の型的な役割→「int *」が型らしい)
//なので、↓でもOK(こう書いた方がわかりやすいかも)
int* pointer;
//intは、扱う変数の型
//(この例ではnumberの型と同じとする)

//ポインタ変数には、変数のアドレスを渡す。
//変数の頭に&;を加えることで、変数のアドレスを意味する
pointer  = &number;

//ポインタ変数を使って、変数numberを操作するには
*pointer = 200;
//*をつけると、そのアドレス対象にアクセスできる
//(この場合は*pointer == numberという感じらしい)

printf( %d\n, number);//出力:200