是什么意思(void *)变量和(void *)& C中的变量

时间:2016-09-07 17:09:42

标签: c pointers casting

通常情况下,指针变量可以通过(void *)Pointervariable被类型化为空指针,但是我看到一个程序,其中int变量的正常变量用作(void *)variable,同样int }变量也用作(void *) &variable

这两个是什么意思?

1 个答案:

答案 0 :(得分:3)

那是整数值视为一个指针(期望访问该整数值指出的内存),没有别的

然而,这不是一个很好的做法。引用C11,章节§6.3.2.3

  

整数可以转换为任何指针类型。除非事先指明,否则   结果是实现定义的,可能没有正确对齐,可能不指向   引用类型的实体,可能是陷阱表示。

对于更安全的整数到指针(反之亦然)转换,有两种类型明确定义,intptr_tuintptr_t。从章节§7.20.1.4

  

以下类型指定带有任何有效属性的有符号整数类型   指向void的指针可以转换为这种类型,然后转换回指向void的指针,   并且结果将与原始指针进行比较:

intptr_t

它是未签名的对应人uintptr_t

该标准将这些类型设为可选,因此,再次无法保证所有实施的可用性。

但是,关于(void *) &variable,将指向某个类型的指针视为指向void的指针。如果指针稍后在解除引用之前转换为原始类型,则这有时会很有用。这是完美定义的行为。再次引用标准(强调我的

  

指向对象类型的指针可能会转换为指向不同对象类型的指针。如果   结果指针未正确对齐引用类型,行为是   未定义。 否则,当再次转换回来时,结果应该等于   原始指针。