我在尝试取消引用一个结构数组的双指针时遇到了麻烦。
定义了结构:
struct node_list_t {
struct node_t **node_ptr;
};
我已完成以下操作来分配内存并初始化值:
struct node_t *nodeArray;
struct node_list_t *mainList = (struct node_list_t*)malloc(sizeof(struct node_list_t));
nodeArray =(struct node_t*)malloc(10 * sizeof(struct node_t));
for (i=0;i<size;i++) {
nodeArray[i].mass = i;
}
mainList->node_ptr = &nodeArray;
由于我们被要求使用双指针,因此我尝试以下方法取消引用失败:
printf("%f\n",mainList->node_ptr[i]->mass);
我们被迫将node_ptr保持为双指针,所以我无法改变它。我怎么解除这个?感谢。
答案 0 :(得分:2)
嗯,那就是
printf("%f\n",(*mainList->node_ptr)[i].mass);
为什么呢? mainList->node_ptr
是指向struct node_t
的双指针。
*mainList->node_ptr
取消引用双指针,你会得到一个指向struct node_t
的指针:指针从第二个malloc
返回。
所以(*mainList->node_ptr)[i].mass
等同于
struct node_t *nodes = *mainList->node_ptr;
// nodes[0] is the first node, nodes[1] the second, etc.
nodes[i].mass;
修改强>
如果您在一行中找不到正确的取消引用,请按照上面的示例一步一步地执行此操作。然后在一行中重写它会容易得多。
编辑2
由于OP从问题中删除了代码,因此这个答案毫无意义 没有它,这是原始代码:
struct node_list_t { struct node_t **node_ptr; };
我已完成以下操作来分配内存并初始化值:
struct node_t *nodeArray; struct node_list_t *mainList = (struct node_list_t*)malloc(sizeof(struct node_list_t)); nodeArray =(struct node_t*)malloc(10 * sizeof(struct node_t)); for (i=0;i<size;i++) { nodeArray[i].mass = i; } mainList->node_ptr = &nodeArray;