#include <stdio.h>
int main()
{
int a = 0x40000000;
char * b = (char*)a;
void *c = &b;
printf("0x%x\n", b);
printf("0x%x\n", c);
return 0;
}
Result:
0x40000000
0xaff720
(char *)将整型a 强制转换为char*类型,也就是说现在b的值是十六进制类型的地址0x40000000,所以第一个printf打印的是0x40000000;
如果你重新定义一个char类型的d,然后就d的地址赋给b, 最后打印*b,结果为s,而b的地址也会从0x40000000更改为新的地址(d的地址)
char d = 's';
b = &d;
printf("%c\n", *b);
而在将void *c = &b,说明将0x40000000值的地址与指针c绑定,那么打印c的值也就是b的地址。