这是我的代码:
typedef struct{
int a;
} DATA;
int main()
{
DATA *temp, *temp2;
void *vtemp;
temp = (DATA *)malloc(sizeof(DATA));
temp->a = 5;
vtemp = &temp;
printf("set value : %d\n", temp->a);
// Some ops //
temp2 = (DATA *)vtemp;
printf("got value : %d\n", temp2->a);
return 0;
}
我应该得到“得到的值”作为 5 但我得到一个随机数如下(可能打印地址?):
set value : 5
got value : 7024656
最佳答案
temp
是结构的地址。当你写:
vtemp = &temp;
您将 vtemp
设置为变量 temp
的地址。所以,&temp
实际上是 DATA**
类型。当您将 vtemp
转换为 DATA*
类型时,这是一个错误。很简单,vtemp
不是 DATA*
类型,您的转换不会改变它。
我猜你的意思是将 temp
分配给 vtemp
:
vtemp = temp;
关于将 void* 转换为 struct* 并读取结构成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903172/