此指针类型转换表示法的含义

时间:2014-06-10 06:04:41

标签: c++ c pointers types casting

我多次看过这种声明,不知道它在做什么:

*(type*)$var

例如:

*(char *)&myChar

如果正在检索myChar的地址并且它被转换为char指针那么为什么额外的指针在外面以及为什么可能是int或hex值的地址被转换为指针?这对我来说毫无意义。我是初学者所以请一步一步解释这里发生了什么以及为什么要使用这种混乱的格式进行类型转换。谢谢。

2 个答案:

答案 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

注意:这个习语并不总是安全的,基本上是不可移植的。如果所考虑的值未正确对齐,它也可能会破坏性。大多数用途也受平台的字节序限制。请谨慎使用!