我经常看到这种声明,但不知道它的作用:
*(type*)$var
例如:
*(char *)&myChar
如果正在检索
myChar
的地址并将其转换为char
指针,那么为什么需要额外的指针以及为什么将可能是int或十六进制值的地址转换为指针?这对我来说毫无意义。作为初学者,请逐步解释这里发生了什么以及为什么使用这种令人困惑的类型转换格式。谢谢。*(char *)&myChar
首先获取myChar
的地址,然后将其转换为char*
,最后访问指针所指向的对象。这样做的效果是,访问将按照转换后的指针类型进行。例如:
int x;
char c = *(char*)&x;
x
是 int 类型,但是它被作为 char 类型访问。实际上只占用了1个字节,因为char类型的大小为 1个字节。sizeof(char)
的定义始终为1。 - T.C.*(type *)&var
是一个常见的C语言习惯用法,用于将一个值的位重新解释为不同类型。
例如,有时您可能会看到:
char buf[4];
*(uint32_t *)&buf = 32;
这段代码将32位的二进制表示写入到数组buf
中。
注意:这种用法并非总是安全的,而且基本上是不可移植的。如果所考虑的值没有正确对齐,它还可能出现严重错误。大多数使用也受平台的字节序影响。请极为谨慎使用!
*(type*)$var
不是有效的 C 语法。 - Alex CelestemyChar
的类型,解释一下该结构的意图会很有帮助。 - R Sahu