qiutuanyang 2017-11-12 04:51 采纳率: 0%
浏览 2919
已采纳

C++将void*类型的指针强制转换后无法解引用该指针所指向的对象

请教各位前辈,为什么将void*指针进行static_cast强制类型转换后无法让该指针解引用
所指向的对象?但是强制转换后赋给int*dp后却可以解引用,输出*dp的值是100;
代码和报错信息

  • 写回答

4条回答 默认 最新

  • 战在春秋 2017-11-12 06:32
    关注

    c/c++语言中,void意思是 无类型,所以不能声明类型为void的变量,但可以声明指向void类型的指针。

    void *foo ;   ///Works fine
    void foo ;   ///Error
    

    可以给void指针赋任意类型的地址值,但不能通过void指针访问这些地址指向的变量

    int i=90 ;
    void *ip ;
    ip=&i ;   ///Works fine
    cout<< *ip ;   /* error:cannot access the value of i */
    

    如果想要访问void指针指向的变量,需要先将其转换为具体类型的指针,如下:

    int i=90 ;
    void *ip=&i ;
    int *iv=static_cast<int *>(ip) ; ///Casting ip to int type
    cout<< *iv ; //Works fine
    
    注意需要转换为正确的类型,否则会引入bug,如下:
    string st=*static_cast<string *>(ip) ;// casting to string type
    cout<< st ; //undefined
    

    如果对您有帮助,请采纳答案好吗(鼠标在我的答案区域停留片刻即可看到采纳按钮),谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler