以下类型转换在C中做了什么?
我对C中的类型转换有疑问:
void *buffer; (int *)((int)buffer); 这种类型的铸造做什么?和((int)缓冲区)做什么? 解决方法
想象一下,你和我一样在Linux / x86-64计算机上.那么指针是64位,int是32位宽.
因此,缓冲区变量已初始化到某个位置;也许0x7fff4ec52020(可能是某些局部变量的地址,也许在main内部). cast(int)缓冲区为您提供了一个int,可能是最低有效32位,即0x4ec52020 您正在使用(int *)((int)buffer)再次强制转换,它会为您提供虚假地址0x000000004ec52020,它不会指向有效内存.如果你取消引用那个虚假的指针,你很可能会得到一个SIGSEGV. 所以在某些机器上(特别是我的)(int *)((int)buffer)与(int *)buffer不同; 幸运的是,作为语句,(int *)((int)buffer);没有明显的副作用,并将由编译器优化(通过“删除”它)(如果你要求它进行优化). 所以这样的代码是一个巨大的错误(可能会成为一个undefined behavior,例如,如果您取消引用该指针).如果原始编码器真的想要这里描述的奇怪语义,他应该添加注释(并且这样的代码是不可移植的)! 也许#include-ing< stdint.h>使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |