ポインタについて int *p

ポインタについて
ポインタ変数:メモリのアドレスを対象にする変数
アドレス演算子「&」
:変数のアドレスを計算。
(scanf で使用した。)
ポインタ子「*」
:ポインタ変数につけるとそのアドレスの内容を指す
1.ポインタの宣言
ポインタ変数は以下のように宣言する。
int *p;
ここで,int などの型はデータのサイズを単位として数えることを想定している。(以
下の具体例参照)
例:ex_pointer1.c
1 #include <stdio.h>
2 void main() {
3
int v, *p;
4
v = 100;
5
p = &v;
6
printf("1回目 v=%d &v=%p p=%p *p=%d\n", v, &v, p, *p);
7
*p=200;
8
printf("2回目 v=%d &v=%p p=%p *p=%d\n", v, &v, p, *p);
9
p++;
10
printf("3回目 v=%d &v=%p p=%p *p=%d\n", v, &v, p, *p);
11 }
出力(以下で,値 100 と 200 以外は場合によって違う値になる)
1 回目 v=100 &v=0012FF88 p=0012FF88 *p=100
2 回目 v=200 &v=0012FF88 p=0012FF88 *p=200
3 回目 v=200 &v=0012FF88 p=0012FF8C *p=1245112
6 行目:変数 v の値は 100,変数 v のアドレスは 0012FF88。v と*p(&v と p)は同じ値
8 行目:変数 v の値は 200,変数 v のアドレスは 0012FF88。v と*p(&v と p)は同じ値
10 行目:変数 v の値は 200,変数 v のアドレスは 0012FF88。行暗号 10 の命令により
p は v から 4 バイト(整数型のサイズ1つ分)移動。これより v と*p は異なる。
1
2.配列とポインタ
配列変数の場合,配列名は最初の配列要素のアドレスを持つ。
例:ex_pointer2.c
1 #include <stdio.h>
2 void main() {
3
int v[] = {10,2,5,-3,7};
4
int *p;
5
p = v;
6
printf("1回目 v[0]=%d v=%p p=%p *p=%d\n", v[0], v, p, *p);
7
p++;
8
printf("2回目 v[0]=%d v=%p p=%p *p=%d\n", v[0], v, p, *p);
9
p += 2;
10
printf("3回目 v[0]=%d v=%p p=%p *p=%d\n", v[0], v, p, *p);
11 }
出力
1回目 v[0]=10 v=0012FF78 p=0012FF78 *p=10
2回目 v[0]=10 v=0012FF78 p=0012FF7C *p=2
3回目 v[0]=10 v=0012FF78 p=0012FF84 *p=-3
2