C - 结构数组取消引用内的双指针结构

时间:2018-01-22 01:39:15

标签: c arrays pointers struct dereference

我在尝试取消引用一个结构数组的双指针时遇到了麻烦。

定义了结构:

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保持为双指针,所以我无法改变它。我怎么解除这个?感谢。

1 个答案:

答案 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;