将 void* 转换为 struct* 并读取结构成员值

标签 c pointers struct

这是我的代码:

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/

相关文章:

c - 数组如何像 C 中的指针一样工作?

c - fork() 和 scanf() 如何协同工作?

无法访问结构内的枚举

c - 下标值既不是数组,也不是指针,也不是数组索引处的 vector

c - 如何将 printf 存储到变量中?

c - 高效的 C 比特流实现

c - 设置后如何更改 char * const 的内容 (C)

c - 空指针数组: valgrind gives invalid write size of 8

ios - 为什么 CGImage 的 copy() 方法会在相同的内存地址上生成图像?

c - C中Malloc的使用及指针成员错误