关于(iname*)(void*)p这种用法,对于其中的(void*)作用百思不得其解

sliver86 2010-12-21 01:04:46
在aee.h中有看到(iname*)(void*)p此种用法...对于其中的(void*)作用百思不得其解,貌似不影响,但是高通又为什么要这么做呢?谢谢!
...全文
1743 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sliver86 2010-12-21
  • 打赏
  • 举报
回复
...看来我还不是一点点...我在加班,脑残了...
让我想想...虽然赋值会报错...但是强制类型转换的时候不会报错吧?
还是说也会报错...?囧...
总之,可以明确一点就是,确实是为了编译器能顺利编译通过....因为我去掉过void*虽然没报错,但也不影响使用....
sliver86 2010-12-21
  • 打赏
  • 举报
回复
这边谢谢melody1304了!回去翻了下void*指针的用法就清楚了....举个例子当时就会好多了...

例如:

  float *p1;

  int *p2;

  p1 = p2;

  其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为:

  p1 = (float *)p2;

  而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:

  void *p1;

  int *p2;

  p1 = p2;


最后也谢谢instantboy...本来看到这句还挺生气的...后来看到真正的原因发现还是自己C没学好...
不过,C博大精深,就像我们的产品,不可能没有BUG再量产嘛~一点点不足缺点,暂时能用就成....囧
instantboy 2010-12-21
  • 打赏
  • 举报
回复
呵呵,这个如果不理解的话,建议先好好学学c语言再来学brew,不然就是浮沙筑高台
melody1304 2010-12-21
  • 打赏
  • 举报
回复
能不能转换要看不同的编译器和编译的等级,有些编译器只会报警告,而有些编译器可能就直接报错了
sliver86 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 melody1304 的回复:]
先把p转换成void*,再将void* 转换成iname*,这个任何编译器都是允许的,虽然经过了一次转换,但是必要的,因为如果你直接将p转换成iname* ,可能编译器会报错,不是说有的显式转换都可以的
[/Quote]

那能请问,什么情况下不能直接转换,什么情况下能直接转换呢?
照理说,都是指针的转换,都占用4个字节(32位机器),对编译器的设计来说,也没必要非要转换下void*呀

最后,以前看过一篇文档,高通为了实现虚表的可行性,不是必须编译器相关么?
谢谢呀!
melody1304 2010-12-21
  • 打赏
  • 举报
回复
先把p转换成void*,再将void* 转换成iname*,这个任何编译器都是允许的,虽然经过了一次转换,但是必要的,因为如果你直接将p转换成iname* ,可能编译器会报错,不是说有的显式转换都可以的
BuleRiver 2010-12-21
  • 打赏
  • 举报
回复
不知道。

3,770

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧