ポインタは難しくない、Cのポインタに関する文法がクソなだけや!!!!!!
というわけで、ポインタに関してまとめてみようと思う。
基本
int a; //int型 int* b; //int型へのポインタ = int*型
配列へのポインタ
int* p[10]; //int*型の配列 int (*q)[10]; //int[10]型へのポインタ = int (*)[10]型
関数へのポインタ
//簡易化のため、関数の型=戻り値の型とさせていただきます。(「戻り値hoge型の関数」と表現) //本当は「戻り値hoge型引数foo型, foo型, bar型の関数」というべきですね int* f(); //戻り値int*型の関数 int (*g)(); //戻り値int型の関数へのポインタ = int (*)()型
使用
基本
略
配列へのポインタ
int a[10]; int* p = a; //先頭要素へのポインタ int (*q)[10] = &a; //配列へのポインタ
関数へのポインタ
void func(){} void (*p)() = func; //どちらも同じ void (*p)() = &func; p(); //どちらも同じ (*p)(); *p() //エラー!戻り値型へのポインタになる
多次元配列へのアクセス
int a[3]; *(a + 1); //a[1]と同じ int b[3][3]; *((*(b + 1)) + 2);//b[1][2]と同じ
2012/7/28追記
char str1[] = {'H', 'e', 'l', 'l', 'o', '\0'};//本当はこう初期化しなければならない char str2[] = "Hello"; //↑の糖衣構文(省略形) char* str3 = "Hello"; //書き込み不可領域に確保されたリソースを指すポインタ
参考文献
"POINTER":http://kmaebashi.com/programmer/pointer.html(2012/7/19アクセス)
"ポインタ虎の巻"http://www.nurs.or.jp/~sug/soft/tora/index.htm(2012/7/19アクセス)