ポインタ
メモリアドレスを保持し、それを通じてデータにアクセスできる機構
関連
純粋にメモリアドレスを保持するやつ
C言語の文脈で「ポインタ」と言ったらこれを指す
メモリ管理の仕組みを備えたポインタ
モチベーション
大きいデータのコピーのコストを下げる
ポインタがないと、大きいデータを丸々コピーする必要がある
code:c
struct Big {
};
void f(struct Big b) {
...
}
code:c
f(big);
しかし、ポインタがあれば8バイトのアドレスを渡すだけで済む
code:c
void f(struct Big* b) {
}
元のデータを直接変更できる
値渡しでは呼び出し元は変わらない
code:c
void inc(int x) {
x++;
}
ポインタを使うと元データを書き換えられる
code:c
void inc(int* x) {
(*x)++;
}
動的メモリという概念そのものがポインタ前提
下記のようなmalloc()の返り値は、確保されたメモリの先頭アドレス以外に返しようがない code:c
int* p = malloc(sizeof(int));
リストなどのデータ構造を作るため
OSやハードウェアと直接やり取りするため
関数ポインタ
関数の情報がメモリ上に保存される
Pythonでポインタ地獄をやるやつ