メモリとは巨大なロッカー群
駅のコインロッカーを思い浮かべてください。壁一面に扉が並び、どの扉にも「1番」「2番」「3番」と番号が振ってあります。荷物を預けたあとに覚えておくのは、中身ではなく番号だけ。番号さ…
ラボ(単体で使える道具)
ポインタがわかりにくいのは、メモリの中が見えないから。ここでは、書いた C のコードをブラウザで1行ずつ動かして、変数の箱・番地・ポインタが指す先を図で確かめられる。環境構築は不要。
p には a の番地が入る。*p = 25 のところで、a の箱の中身が 10 から 25 に変わるのが見える。
#include <stdio.h>
int main(void) {
int a = 10;
int *p = &a;
*p = 25;
printf("%d\n", a);
return 0;
}
int は4バイトなので、p + 1 は番地が4つ先の「となりの箱」を指す。1行ずつ進めると、指す線が動く。
#include <stdio.h>
int main(void) {
int a[3] = {10, 20, 30};
int *p = a;
printf("%d\n", *p);
p = p + 1;
printf("%d\n", *p);
*(p + 1) = 99;
printf("%d\n", a[2]);
return 0;
}
swap の中の x と y は、main の a と b を指している。関数の中から、呼び出し元の箱を書きかえる様子が見える。
#include <stdio.h>
void swap(int *x, int *y) {
int t = *x;
*x = *y;
*y = t;
}
int main(void) {
int a = 3;
int b = 7;
swap(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
駅のコインロッカーを思い浮かべてください。壁一面に扉が並び、どの扉にも「1番」「2番」「3番」と番号が振ってあります。荷物を預けたあとに覚えておくのは、中身ではなく番号だけ。番号さ…
前のレッスンで、メモリのロッカーには1つずつ番地が振られていると学びました。ここでは、その番地がいつ・どうやって決まるのかを見ていきます。 番地は変数を作った瞬間に決まる int …
友達に本を届ける方法は2つあります。1つは本そのものを手渡す方法。もう1つは「その本は市立図書館の3階、棚B-12にあります」と書いたメモを渡す方法です。 C言語のポインタは、後者…
ポインタで使う記号は2つだけです。& と *。この2つの意味を取り違えないことが、最大の関門です。 & は「住所を調べる」 トラック10で使った演算子です。変数の前に付けると、その…
この先へ ポインタ・メモリ・構造体・ファイル入出力まで、全26トラック・211レッスン・演習508問は有料版に入っている。