Rso's Jotter

日々の開発の知見のメモやその他雑記

Cのポインタ関連復習

研修でもやったのでポインタあたりの扱い方をメモ

配列表記と間接演算子、アドレス演算子

配列aが宣言されたとき、a[i] と *(a + i)は等価である。
同様にa と &a[0]は同じアドレスを指す。

配列表記とポインタ表記

"関数の仮引数内において"、下記の表記は等価である。

void func(int* arg);
void func(int arg[]);
void func2(int** arg);
void func2(int* arg[]);
void func2(int arg[][]);

配列とデータの受け渡し

二次元配列を関数に渡すとき

int a[3][4];
func3(a);

void func3(int a[][4]){・・・} //**aではない
void func3(int a[]){・・・} //これでもいける

ポインタの配列を関数に渡すとき

char *p[] = {"test", "hoge", "fuga"};
func4(p);

void func4(int **p){・・・}

2次元配列の話はこちらも参照