#include <stdio.h>
int main(void) {
int a = 10;
printf("変数aの中身は、アドレス%pに格納されていますn", &a);
return 0;
}
上記プログラムにおいて、5行目で用いられている&aの&を アドレス演算子 と呼ぶ。変数aに割り当てられているアドレスを示す。
#include <stdio.h>
int main(void) {
int *pa; // ポインタを宣言
int a = 10;
pa = &a; // ポインタpaに変数aのアドレスを格納
puts("変数aのアドレスをポインタpaに格納しました");
printf("ポインタpaの中身は、%pですn", pa);
printf("変数aのアドレスは、%pですn", &a);
// ポインタpaの値と、変数aのアドレスの値は等しい
return 0;
}
ポインタ名の前に*マークを付けると、ポインタに格納されているアドレスにどんな情報が含まれているかを表す約束になっている。
#include <stdio.h>
int main(void) {
int *pa;
int a = 10;
pa = &a;
printf("変数aの中身:%dn", a);
printf("ポインタpaの中身:%pn", pa);
printf("ポインタpaのアドレスに格納されている値:%dn", *pa);
return 0;
}
変数aの中身を取り出すのに、「a」と指定するのが直接参照で、「pa」と指定するのが間接参照。のことを間接参照演算子と呼ぶ。
直接と間接……、なんだか隠微な言葉が出てきました。専門用語だと思うとおどろおどろしいですが、「好きな子と直接キスするのは自分には無理なので、間接キスを求めてたて笛を盗もう」とだいたい一緒です。 – p.250
本書は全編に渡ってこういう自虐ネタが挟まれるので、人を選ぶ点は否めない(個人的には大好き)。ちなみに、私が本書で一番好きなサンプルプログラムは、「『ごめんなさい』を繰り返すプログラム(ただし、繰り返し回数はサバを読む)」。
#include <stdio.h>
int main(void) {
int *pa;
int a = 0;
pa = &a;
a = 10;
printf("変数aの中身:%dn", a);
*pa = 5;
printf("変数aの中身:%dn", a);
return 0;
}