能否将_Atomic Type *类型指针转换为void *再转回使用?
关于_Atomic指针与void*的转换问题
可以安全地将_Atomic Type *转换为void *,之后再转换回原类型指针使用,具体原因和注意事项如下:
C标准明确支持这类指针转换操作
根据C语言标准,任何指向对象类型的指针都可以转换为void *,且将该void *转换回原指针类型时,得到的指针与原指针完全等价。_Atomic Type属于合法的对象类型,因此_Atomic int *转void *、再反向转回来的操作完全合规,行为是确定的。对齐要求不会成为障碍
尽管_Atomic类型的对齐要求可能比对应非原子类型更高,但void *被标准要求能够容纳任何对象指针的对齐信息,转换过程中不会丢失对齐相关的关键信息,转回到原类型后依然能正确访问原子变量。你提供的示例代码合法且安全
你的代码中,(void*)&g_x将原子变量地址转为void *传递给回调函数,Use函数里再转换回_Atomic int *并解引用,整个流程完全符合C标准规定,不存在未定义行为,运行结果是可靠的。
内容的提问来源于stack exchange,提问作者Jackoo
相关产品推荐
相关产品推荐

