gpt4 book ai didi

c - typedef 结构混淆中的指针

转载 作者:太空宇宙 更新时间:2023-11-04 05:58:43 25 4
gpt4 key购买 nike

我正在尝试定义一个 typedef 结构,如下所示:

typedef struct node{
int keys[2*MIN_DEGREE-1];
struct node* child[2*MIN_DEGREE];
int numkeys;
int isleaf;
} BNODE,*BNODEPTR;

为什么我不能按如下方式声明结构而不是使用 struct node* child[2*MIN_DEGREE]:

typedef struct node{
int keys[2*MIN_DEGREE-1];
BNODEPTR child[2*MIN_DEGREE];
int numkeys;
int isleaf;
} BNODE,*BNODEPTR;

对于编译器如何解析具有指向相同类型的嵌套指针的结构,我有点困惑。如果有人帮我解决这个问题就太好了。

谢谢

最佳答案

您不能像这样在结构体中使用 BNODEPTR,因为它要么根本不作为类型存在,直到在结构体的右括号之后的定义之后,或者(更糟的是)它指的是完全不同的类型*

你可以使用:

typedef struct node BNODE, *BNODEPTR;

struct node
{
int keys[2*MIN_DEGREE-1];
BNODEPTR child[2*MIN_DEGREE];
int numkeys;
int isleaf;
};

还有另一个完整的论点说 BNODEPTR 是邪恶的,你应该只使用 BNODEBNODE *,但这是一个风格问题,不是技术性的。

如果是我的代码,它可能更像:

typedef struct Node Node;

struct Node
{
int keys[2*MIN_DEGREE-1];
Node *child[2*MIN_DEGREE];
int numkeys;
int isleaf;
};

在 C++ 中,规则略有不同,您不需要 typedef 行(因此 Node 将被称为左括号中的类型)。

* 这只有在原始的 BNODEPTR 定义在外部作用域并且这个出现在函数内部时才会发生,但是当它发生时,它真的很困惑!

关于c - typedef 结构混淆中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com