スポンサーリンク

ポインタのインクリメント演算の加算幅はポインタの方のバイト数になる

ポインタのインクリメント演算の加算幅はポインタの方のバイト数になります。

例えば、下記の場合は、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

スポンサーリンク