12.6 まとめ

ポインタ
メモリ上の場所を指差するもの
アドレス演算子
変数の前から作用させて、変数のアドレスを取得する printf("address is %u\n", &a);
ポインタ変数
アドレスを格納するための変数
  1. 指しているデータ型は変更不可能(宣言時に決定される)
  2. 指しているデータのアドレスは変更可能
ポインタ変数の宣言

              int *p;
              int *x1, *x2;
              char *pc;
変数の前に、* を置くと、ポインタ変数になる。

文字列
文字列はアドレスそのものとして表現されている
              char *s = "this is a test";
この場合、ポインタ変数 s には、"this is a test" という文字列の メモリ中でのアドレスが格納され、最初の this の 't' へのポインタになっている。

文字列の終わり

メモリ中では目印として文字列の最後に、特別な値が書き込まれていて、それは C 言語 では '\0' としてあらわす。

間接参照演算子 *

ポインタ変数が指しているデータの中身を操作したい場合には、間接参照演算子を 用いる。
              int *p, x;
              x=12;
              p=&x;     /* p は x をポイントしている */
              *p=13;    /* x の中身に 13 が代入されている */

ポインタの演算

ポインタ変数についての演算を行うことが出来るが、注意点として、そのポインタ変数 が指しているデータ型によって演算結果が異なることがある。
              int *pi, x; char *pc, c;
              pi=&x; pc=&c;
              pi++;  pc++;
この場合、pi++pc++ とでは増え方が違っている。つまり、 ポインタ変数の加減乗除は、アドレスを加減するのではなく、データ型の大きさ分の 加減乗除を行うようになっている。そのために、pi++ は、整数型変数一個 分の大きさだけアドレスを増やし、pc++ は、文字型変数一個分の大きさだけ アドレスを増やす結果となる。



最初のページ 戻る 次へ 最後のページ 目次
Hiroyasu Asami