c中不同类型指针之间的转换

不同类型的指针为什么可以装换,例如:
void * a;
char c=a;
a=(void * ) &c;

指针不就是一个地址在里面么,有什么好转换的?

转了,编译器可以知道具体的指针类型,这样你操作起来会方便,安全,你不转也没问题,你用着方便就用

举个简单的例子:
void pa = NULL;
int *pb = (int *)pa;
char *pc = (char *)pa;
++pb;
++pc;
//pb与pc的结果是不一样的。

举个简单的例子:
void pa = NULL;
int *pb = (int
)pa;
char pc = (int)pa;
++pb;
++pc;
//pb与pc的结果是不一样的。

举个简单的例子:
void pa = NULL;
int *pb = (int *)pa;
char *pc = (char *)pa;
++pb;
++pc;
//pb与pc的结果是不一样的。

指针的本质是都一样的,转换类型是让编译器知道怎么看所指向的内容。

指针就是地址,也可以认为是一个数字,因为地址就是数字,所以指针可以任意转型

@Stephen222666 举个简单的例子:
void pa = NULL;
int *pb = (int *)pa;
char *pc = (char *)pa;
++pb;
++pc;
//pb与pc的结果是不一样的。

结果会怎么样????

只有转换了才能通过编译

不同的指针 ++ --等结果也不同

sizeof也不同

void类型指针主要用在接口的地方,虽然是个地址,但是指针也是有类型的

这么说吧,指针==地址,但指针本身也有地址,也就是说,假如一个指针是 int a,那么当a就应该得到一个返回为int型的地址,这样,当你在需要用int型的地址给a时,如
int *a;
int c=0;
a=&c;//
*但是**如果c不是个int型呢?假如他不是int型,但得到的也是int型的值。那么就需要转换了。
a= (int)&c;//希望你能理解

你需要理解一下内存管理的原理。
任何内存都有一个地址,地址里面的值才是变量的值。比如一个char型,它有一个地址,可能是0x11223344,
但这个地址只占了一个字节的内存,也就是一个char的位宽,那么下一个可用的地址就是0x11223345(如果是按字节编址),
如果下一个变量是int型,地址可能是0x11223348,需要对齐,这个要看程序的设定。