为什么将void指针递增1会向前移动一个字节,但对于整数指针,它是4个字节,对于double是8?

Tho*_*hom 1 c pointers void-pointers pointer-arithmetic

在下面的程序中,如果我向void指针添加1,它会向前移动一个字节.但是,正如预期的那样,它分别为指针intdouble指针移动4和8个字节.为什么 void指针移动1个字节,就像一个字符指针会吗?

#include<stdio.h>

int main(void)
{

        int num=3,*int_ptr=&num;
        double sum=3,*double_ptr=&sum;
        void *void_ptr1=&num,*void_ptr2=&sum;
        printf("%p,%p,%p,%p,%p,%p,%p,%p",void_ptr1,void_ptr1+1,\
        void_ptr2,void_ptr2+1,int_ptr,int_ptr+1,double_ptr,double_ptr+1);
}
Run Code Online (Sandbox Code Playgroud)

小智 6

你不能对void指针进行指针运算(因为它没有意义).可能只是你的编译器有一个扩展,允许在void指针上执行指针算法,它就像这样实现.但是,它既不是标准也不鼓励使用.

  • C标准以开放场地为界,而不是围墙.如果你被监禁,你就不能离开.如果你住在一个城镇,你可以离开,但当你这样做时,镇法律不适用.因此,它是不正确的所以说"你不能对void指针进行算术运算."一个正确的陈述是"C标准没有在void指针上定义算术."这很重要因为**C标准是为了设计的许可证延期**. (2认同)