gpt4 book ai didi

c - void *p = &i 是什么意思?

转载 作者:行者123 更新时间:2023-11-30 19:55:03 25 4
gpt4 key购买 nike

在下面的代码中,void指针p如何存储i的地址? printf() 中的“*(float *)p”是什么意思?

#include
void main()
{
int i = 10;
void *p = &i;
printf("%f\n", *(float *)p);
}

最佳答案

void* 可以存储任何地址。它基本上是一个“广义指针”。您可以将 void* 转换回保存到其中的类型,以从中获取有用的类型,并用它执行诸如指针算术或取消引用指针之类的操作。指针本身不知道它存储的类型,因此您必须告诉它它指向什么类型。缺乏类型使其很危险,因为程序员的工作就是记住指针指向的类型。

在你的例子中,你让p指向i的地址,它是一个int,然后你尝试打印出被指向者p 作为 float,而您一开始并没有将其分配给 float 的地址。这是未定义的行为,也是说明 void* 在缺乏经验的人手中的危险的一个很好的例子。

关于c - void *p = &i 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40673963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com