- ポインタ
- メモリ上の場所を指差するもの
- アドレス演算子
- 変数の前から作用させて、変数のアドレスを取得する
printf("address is %u\n", &a);
- ポインタ変数
- アドレスを格納するための変数
- 指しているデータ型は変更不可能(宣言時に決定される)
- 指しているデータのアドレスは変更可能
- ポインタ変数の宣言
-
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++ は、文字型変数一個分の大きさだけ
アドレスを増やす結果となる。