之前看到《系统程序员成长计划这本书》,里面常用void *
指针,然后再转为int时直接使用强转使用,比如void *int_pt;
,使用时直接强转(int)int_pt
。我对此有点怀疑,所以自己写了个小程序验证了一下。证明这种用法是错误的。
-
void *int_pt;
,使用时直接强转(int)int_pt
,(int)int_pt
值是地址值,就是int_pt
指向的地址的数值。 - 正确使用该地址所在的int数应该是
*(int *)int_pt
,包括赋值和读取值都应该用这种方式。
附上测试源码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
void *testvalue;
testvalue = malloc(sizeof(int));
*(int *)testvalue = 134;
printf("%d\n", (int)testvalue);
printf("%d\n", *(int *)testvalue);
free(testvalue);
return 0;
}
运行结果:
$ ./test
12738576
134