gcc では、void * と char * はポインター演算に関しては同じように扱われる、つまり void * はメモリ内の 1 バイトを「指す」と考えたので、次のコードは
void *p;
p = malloc(sizeof(void));
printf("%p %p\n",p,p+1);
確かに戻ります0x984a008 0x984a009
。同様に、void ** はポインターを指すため、1 ずつインクリメントすると実際には (32 ビット OS では) 4 バイトずつインクリメントされます。つまり、
void **p;
p = (void **) malloc(sizeof(void *));
printf("%p %p\n",p,p+1);
戻ります0x984a008 0x984a00c
。ただし、次のコードは私を混乱させます
void **p, *p1;
p = (void **) malloc(sizeof(void *));
p1 = (void **) p;
printf("%p %p\n",p1,p1+1);
また 戻る から0x984a008 0x984a009
. ここで何が起こっているのですか?