*(int *)foo VS (int *)*foo。这两者有什么区别?
我正在开发 RTOS 项目,我试图将类型转换为 void 指针的结构类型传递给线程函数,并使用类型转换将该 void 指针取消引用为相同的结构类型。当我尝试以 (eUartDriver_t*) *args
的方式执行此操作时,出现错误。然后在互联网上找到使用 *(eUartDriver_t*) args
,但它没有解释其中的区别以及为什么它有效
I am working on RTOS project and I'm trying to pass struct type typecasted to void pointer to thread function and derefernce that void pointer using typecast to same struct type. I was getting error when trying to do it this way (eUartDriver_t*) *args
. Then found on the internet to use *(eUartDriver_t*) args
, but it didn't explained the difference and why does it work
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
据推测,
args
被声明为void *
。表达式*args
的意思是“args
指向的东西”,因此*args
将是一个void
,但是void
不是可用的类型。所以*args
是错误的代码,编译器会抱怨。(eUartDriver_t *) args
表示“将args
的值转换为eUartDriver_t *
”。该类型是指向eUartDriver_t
的指针。此转换的结果是指向eUartDriver_t
的指针,因此应用*
(如* (eUartDriver_t *) args
中所示)引用 < code>eUartDriver_t,这是一个可用的类型。Presumably
args
is declared to be avoid *
. The expression*args
means “the thingargs
points to,” so*args
would be avoid
, butvoid
is not a usable type. So*args
is bad code, and the compiler complains.(eUartDriver_t *) args
says “Convert the value ofargs
toeUartDriver_t *
”. That type is a pointer to aneUartDriver_t
. The result of this conversion is a pointer to aneUartDriver_t
, so applying*
, as in* (eUartDriver_t *) args
, refers to aeUartDriver_t
, which is a usable type.@UnholySheep
@UnholySheep