在下面的代码中,如何使指针p存储i的地址?printf()里面的"*(float*)p"是什么意思?
#include
void main()
{
int i = 10;
void *p = &i;
printf("%f\n", *(float *)p);
}
Run Code Online (Sandbox Code Playgroud)
A void*可以存储任何地址.它基本上是一个"通用指针".您可以将void*您保存到其中的类型强制转换为从中获取有用类型,并使用指针算法或取消引用指针来执行此操作.指针本身并不知道它存储的类型,因此你必须告诉它它指向的是什么类型.它缺乏类型使它变得危险,因为程序员的工作是记住指针指向的类型.
在你的情况下,你p指出i其中的地址是一个int,然后你尝试打印出指针,p因为float你没有将它分配到a的地址float.这是未定义的行为,是void*缺乏经验的人的危险的一个很好的例子.