c - 如何取消引用结构中结构指针数组的索引

标签 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 循环中检查子数组的某些索引是否为 NULL。 我正在尝试通过以下方式获取值

(temp->children)[c]

它说如果标量类型('struct node' 无效)语句需要表达式 我尝试了以下所有方法:

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

但两者都不起作用..

下面的代码运行不正常..它说“间接需要指针操作数('struct node'无效)。

*(*temp).children[c] 

最佳答案

我认为您的代码示例一定有问题。它必须是“节点根”;或者下面的代码都将失败:

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*,因此您无法检查它们是否为空。

没有堆分配,你有等同于:

Node children[27];

这是一个包含 27 个节点对象的内存块。您可以通过以下方式访问它们:

children[c].numOfOccurs=0;

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

在查找空指针时,您按原样对待它:

Node *children[27];

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

关于c - 如何取消引用结构中结构指针数组的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25955931/

相关文章:

c++ - 带 shared_ptr 的二维数组

python - 日历/日期计划器的最佳数据结构是什么?

c - 如何在C中获取位于两个子字符串之间的子字符串?

c - 为什么当变量被替换为它正在计算的内容时,这个表达式的输出是不同的?

C 检查 NULL 和错误处理

c++ - 访问指向对象指针 vector 的指针的第一个元素?

c - 数组检查从 0 到 size-1 的所有整数

c++ - 在涉及 AND 的 if 条件下避免流浪指针

pointers - Golang 中的指针接收器和值接收器这两个术语是什么意思?

c - 如何将 char* 发送到函数并让它更改 C 中 char* 的内容?