c - : type_a sample; type_b *sample_b = (type_b *) ((void*) &sample); 中的无关(void *)

标签 c

我正在阅读此主题:Typecasting variable with another typedef

type_b *sample_b = (type_b *) ((void *) &sample);

(void *) 不是无关的吗? &sample 将返回一个类型的指针:type_a,可以直接转换为 (type_b *)。为什么额外的(void *)?我觉得这是错误的,但我对我的 C 没有足够的信心 - 因此需要额外的验证。

最佳答案

GCC 有能力优化代码,因为它检测到两个指向不兼容类型的指针指向相同的内存位置。使用这两个指针访问该值将发出有关别名违规的警告(“类型双关”)。

有时,如果您在一个转换操作数之间放置一个 (void*) 转换,然后再转换为另一个点类型,will silence false positive warnings在您可以合法地进行这种重叠访问的情况下。

关于c - : type_a sample; type_b *sample_b = (type_b *) ((void*) &sample); 中的无关(void *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800935/

相关文章:

c - GetPixel() 仅返回 FFFFFF

c - 在 C 中维护字符串数组的更好方法

c - 使用 AT89S51 串行传输整数值

c - 父子进程间通信 - 保持管道打开可以吗?

c - 电脑是怎么算的?

c - 截断文件时出现段错误

c - 程序说明

c - 在 Visual C 中检查 C 结构

c - 如何使用 realloc() 在动态目标中插入字符串?

c - 使用 ansi c 将对象存储在数组中?