#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的地址。