美文网首页
关于void *和int之间相互转换的问题

关于void *和int之间相互转换的问题

作者: 沉睡的牛仔 | 来源:发表于2017-07-02 14:28 被阅读981次

    之前看到《系统程序员成长计划这本书》,里面常用void *指针,然后再转为int时直接使用强转使用,比如void *int_pt;,使用时直接强转(int)int_pt。我对此有点怀疑,所以自己写了个小程序验证了一下。证明这种用法是错误的。

    1. void *int_pt;,使用时直接强转(int)int_pt(int)int_pt值是地址值,就是int_pt指向的地址的数值。
    2. 正确使用该地址所在的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
    

    相关文章

      网友评论

          本文标题:关于void *和int之间相互转换的问题

          本文链接:https://www.haomeiwen.com/subject/gywncxtx.html