我认为在 gcc 中,void * 和 char * 在指针运算方面的处理方式相同,即 void * “指向”内存中的单个字节,所以下面的代码
void *p;
p = malloc(sizeof(void));
printf("%p %p\n",p,p+1);
确实返回0x984a008 0x984a009
。同样, void ** 指向一个指针,因此递增 1 实际上意味着递增 4 个字节(在 32 位操作系统上),即
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
。这里发生了什么?