ポインタについて ポインタ変数:メモリのアドレスを対象にする変数 アドレス演算子「&」 :変数のアドレスを計算。 (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
© Copyright 2025 ExpyDoc