我多次看过这种声明,不知道它在做什么:
*(type*)$var
例如:
*(char *)&myChar
如果正在检索myChar
的地址并且它被转换为char
指针那么为什么额外的指针在外面以及为什么可能是int或hex值的地址被转换为指针?这对我来说毫无意义。我是初学者所以请一步一步解释这里发生了什么以及为什么要使用这种混乱的格式进行类型转换。谢谢。
答案 0 :(得分:4)
*(char *)&myChar
采用myChar
的地址,然后将传递给char*
,最后访问它所指向的对象。结果是,访问将根据 casted 指针类型。例如
int x;
char c = *(char*)&x;
此处x
的类型为int
,但正在char
进行访问。实际上 1 Byte ,因为char
大小是1个字节。
此类投射在您打包较大尺寸的较小尺寸数据的情况下非常有用。在上面的例子中,你可以在一个整数中存储4个字符(假设int的大小为4 Byte),然后单独访问它们。但在C ++代码中,很少使用它们。
答案 1 :(得分:2)
*(type *)&var
是一种常见的C语言,用于将值的位重新解释为不同的类型。
例如,您有时可能会看到
char buf[4];
*(uint32_t *)&buf = 32;
将32位的位表示写入数组buf
。
注意:这个习语并不总是安全的,基本上是不可移植的。如果所考虑的值未正确对齐,它也可能会破坏性。大多数用途也受平台的字节序限制。请谨慎使用!