这个指针类型转换符号的含义是什么?

4

我经常看到这种声明,但不知道它的作用:

*(type*)$var

例如:

*(char *)&myChar

如果正在检索myChar的地址并将其转换为char指针,那么为什么需要额外的指针以及为什么将可能是int或十六进制值的地址转换为指针?这对我来说毫无意义。作为初学者,请逐步解释这里发生了什么以及为什么使用这种令人困惑的类型转换格式。谢谢。

*(type*)$var 不是有效的 C 语法。 - Alex Celeste
如果您知道myChar的类型,解释一下该结构的意图会很有帮助。 - R Sahu
2个回答

4
*(char *)&myChar

首先获取myChar的地址,然后将其转换char*,最后访问指针所指向的对象。这样做的效果是,访问将按照转换后的指针类型进行。例如:

int x;
char c = *(char*)&x;

在这里,x 是 int 类型,但是它被作为 char 类型访问。实际上只占用了1个字节,因为char类型的大小为 1个字节。
这种类型转换在某些情况下很有用,例如在一个更大的对象里打包多个小的数据。在上面的例子中,你可以将4个字符(假设int类型大小为4个字节)存储在一个整数中,然后逐个访问它们。但在C++代码中,它们很少使用。

啊,所以最后那个 * 是用来取消引用的,谢谢您。 - user3704920
5
sizeof(char)的定义始终为1。 - T.C.

2

*(type *)&var 是一个常见的C语言习惯用法,用于将一个值的位重新解释为不同类型。

例如,有时您可能会看到:

char buf[4];
*(uint32_t *)&buf = 32;

这段代码将32位的二进制表示写入到数组buf中。

注意:这种用法并非总是安全的,而且基本上是不可移植的。如果所考虑的值没有正确对齐,它还可能出现严重错误。大多数使用也受平台的字节序影响。请极为谨慎使用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接