我有全球结构:
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]
答案 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]。