ポインタ演算
数値変数に 1 を足すと、数値が 1 増えるのは言うまでもない。また文字型だとしても、加算した分文字コードが変わり、隣の文字に変化する。
ポインタ変数に 1 を加えた場合は、まあポインタの数字が増えるわけだが、必ずしも 1 だけ増えるとは限らない。
C 言語におけるポインタと配列は似ている。ポインタの加算は配列の添え字を増すのと同じ結果を得る事ができる。
#include <stdio.h>
int main()
{
int a[] = {0, 1, 2, 3, 4};
int *b = a;
for(int i=0; i<5; i++)
printf("%d", a[i]);
printf("\n");
for(int i=0; i<5; i++)
printf("%d", *(b+i));
printf("\n");
return 0;
}
01234このとき、ポインタの中身がどう変化しているのかを見るとわかりやすいかもしれない。
01234
#include <stdio.h>
int main()
{
int a[] = {0, 1, 2, 3, 4};
int *b = a;
for(int i=0; i<5; i++)
printf("%d", &a[i]);
printf("\n");
for(int i=0; i<5; i++)
printf("%d", b+i);
printf("\n");
return 0;
}
1245048つまりポインタに対して 1 を加えた場合、アドレスは 1 増えるのではなく、型の大きさの分だけ増えるわけだ。(今回は
1245052
1245056
1245060
12450641245048
1245052
1245056
1245060
1245064
int
型だから 4 byte 。)