c - 在 void 指针的指针值处赋值

标签 c pointers

我在结构中有两个空指针。

typedef struct DATA_T {
  BOOLEAN trigger;
  void *var_p;
  void *data_p;
} DATA_T;

typedef struct ITEM_T {
  DATA_T job_data[100];
  BOOLEAN job_active;
  BOOLEAN job_send;
} ITEM_T;

ITEM_T foo[100];

我将两个空指针分配给了不同的地址。现在,我在一个指针上有一个值,我想将另一个指针设置为该值。

foo[i].job_data[j]->data_p = *(int*)foo[i].job_data[j].var_p;

然后发布此错误:

error C2232: '->data_p' : left operand has 'struct' type, use '.'

我不相信我想要一个 . 来代替这里的 ->,因为我需要取消引用指针 data_p

感谢您的协助。

最佳答案

错误信息是因为job_data[j]不是一个指针。它是一个 DATA_T。所以左边应该是 foo[i].job_data[j].data_p =

但是还有一个错误。在右侧,*(int *) 生成一个 int,它不能存储在 void * 中。

如果你想让两个指针指向同一个地方,那么删除*(int *)

如果两个指针实际上都指向 int,而你想在两边复制指向的值,那么在两边都放上 *(int *) .

关于c - 在 void 指针的指针值处赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28864303/

相关文章:

c - 无效的旧大小重新分配错误,标准输入读取

C Signal Handler教授示例讲解

c++ - 局部变量与数组访问

c - 将指针作为函数参数传递并在 C 中返回的基本原理

pointers - 我可以在 julia 中定义指针吗?

c - Windows Phone 和 ANSI C(非 C++)库

java - C 中的埃及分数

c - malloc 中的信号 11 SIGSEGV?

在 C 中更改线程中的变量

c - 列表结构 - 检查子列表