如何取消引用结构内结构指针数组的索引

时间:2014-09-21 04:51:19

标签: c pointers

我有全球结构:

typedef struct node{
    int numOfOccur; 
    struct node *children; 
}Node;
Node *root;

然后在我正在做的另一种方法中:

root.numOfOccur = 0;
root.children = (Node *)calloc(27, sizeof(struct node));
Node* temp = &root;

然后我尝试检查while循环,如果children数组的某些索引是否为NULL。 我试图以下列方式获得价值

(temp->children)[c]

它表示语句需要表达式,如果标量类型('结构节点'无效) 我尝试了以下所有方法:

temp -> children[c]
(*temp).children[c]

但两者都不起作用..

下面的代码效果不好..它说"间接需要指针操作数(' struct node'无效)。

*(*temp).children[c] 

1 个答案:

答案 0 :(得分:2)

我认为您的代码示例必须有点偏离。它必须是'节点根;'或者以下代码都会失败:

root.numOfOccur = 0;
root.children = (Node *)calloc(27, sizeof(struct node));
Node* temp = &root;

我将假设情况就是这样,因为您在询问有关遵循上述逻辑的代码的问题。如果这个假设是正确的,你的问题是calloc(27,sizeof())分配一个内存块,它包含27个Node对象并将它们归零。您说明的每个表达式都是相同的:

(temp->children)[c]
temp->children[c]
(*temp).children[c]

每个引用数组中的Node对象,而不是Node *,因此您无法检查它们是否为null。

如果没有堆分配,则相当于:

Node children[27];

这是27个节点对象的单个内存块。您可以访问以下内容:

children[c].numOfOccurs=0;

确保您不使用大于26的索引。

在查找空指针时,您将按原样处理:

Node *children[27];

这是27节点*的列表。在这种情况下,假设它们最初被清零,你可以在列表中搜索空指针并分配一个新的Node *并分配它,只要你没有检查孩子[26]。