ポインタのインクリメント演算の加算幅はポインタの方のバイト数になる
ポインタのインクリメント演算の加算幅はポインタの方のバイト数になります。
例えば、下記の場合は、int型のポインタをインクリメントしています。
この処理系ではintは4バイトなので、4ずつポインタの値が加算されます。
参考:[c言語]ポインタ変数に直接値を代入する場合
int* pData = (int*)0x10;
for(i = 0; i < 5; i++){
pData++;
printf("ポインタの値: %p\n", pData);
}
一方、下記の場合は、char型のポインタで1バイトずつ加算されています。
charは1バイトになっていますね。
char* pStr = (char*)0x1F;
for(i = 0; i < 5; i++){
pStr++;
printf("ポインタの値: %p\n", pStr);
}
サンプルコード
下記がサンプルコードになります。
$ cat sample.c
#include <stdio.h>
int main(){
int* pData = (int*)0x10;
char* pStr = (char*)0x1F;
int i, data;
printf("size = %lu\n", sizeof(data));
for(i = 0; i < 5; i++){
pData++;
printf("ポインタの値: %p\n", pData);
}
char c;
printf("size = %lu\n", sizeof(c));
for(i = 0; i < 5; i++){
pStr++;
printf("ポインタの値: %p\n", pStr);
}
return 0;
}
下記が実行結果になります。
$ gcc -o sample sample.c $ ./sample size = 4 ポインタの値: 0x14 ポインタの値: 0x18 ポインタの値: 0x1c ポインタの値: 0x20 ポインタの値: 0x24 size = 1 ポインタの値: 0x20 ポインタの値: 0x21 ポインタの値: 0x22 ポインタの値: 0x23 ポインタの値: 0x24
