int型のポインタを1つ加算・減算すると、IA-32 では int が 4byte (32bit) なので 4byte分 加算・減算される。 void型やchar型の場合は 1バイト (8bit) 分 加算・減算される。 っていうことをすっかり忘れて int 型へのポインタ変数で次の配列を取得するときに ptr += num * sizeof(int); とかしてしまって、実際は配列の3つ先をさすポインタになってしまって、配列長の4分の1を過ぎたあたりから Segv ったりしだして。 それに気づくのに少し時間がかかったり。 同様なのですが、IA-32 では long型へのポインタの場合は 4byte (32bit)、long long 型へのポインタは 8byte (64bit) になります。 以下、確認したときの手順: $ uname -srm Linux 2.4.26-co-0.6.1 i686 $ cat ptr++.c #include <stdio.h> int main (int argc, char** argv) { int a, *p_int; void *p_void; char *p_char; p_int = &a; p_void = (void*)&a; p_char = (char*)&a; printf("sizeof(int)=%d, sizeof(void)=%d, sizeof(char)=%dn", sizeof(int), sizeof(void), sizeof(char)); p_int++; p_void++; p_char++; printf("%p -> p_int=%p, p_voi=%p, p_char=%pn", &a, p_int, p_void, p_char); return 0; } $ gcc ptr++.c -o ptr++ $ ./ptr++ sizeof(int)=4, sizeof(void)=1, sizeof(char)=1 0xbffffda4 -> p_int=0xbffffda8, p_voi=0xbffffda5, p_char=0xbffffda5