gpt4 book ai didi

c - 无法让这个数据结构工作(新手)

转载 作者:行者123 更新时间:2023-12-04 04:41:29 27 4
gpt4 key购买 nike

我对 C 很陌生,我一直在尝试用这种数据结构制作一个程序:

struct node {
char command[100];
char prereq[100][80];
char *targ;
int isUpdated;
} Node;

但是,每当我尝试在代码中实现它时,就像这样:
Node n = malloc(sizeof(*n));

我收到编译器错误,例如“nmake.c:13:31: error: unknown type name ‘Node’”。

我试过这样的代码:
typedef struct node *Node;

具有相似的结果。怎么了?

最佳答案

我想你对什么感到困惑 typedef确实。

像这样的声明:

struct node { ... };

将定义一个名为 struct node 的类型.不要忘记这个词 struct !如果你只是说 node它没有任何意义(请注意,这在 C++ 中是不同的)。

所以现在要创建一个局部变量,您可以:
struct node x;

并做一个动态的:
struct node *px = malloc(sizeof(struct node));

现在,如果您想为该类型创建别名,您可以使用与创建变量完全相同的语法,但您要编写 typedef在声明的开头:
typedef struct node Node;

或者,如果您更喜欢指针类型:
typedef struct node *PNode;

然后创建变量:
Node a;
Node *b = malloc(sizeof(Node));
PNode c = malloc(sizeof(Node)); //do not use sizeof(PNode) as it is useless here

有些人,正如@WhozCraig 在评论中所说,你似乎打算在原始代码中更喜欢使用 sizeof 的声明变量而不是类型:
Node *b = malloc(sizeof(*b));
PNode c = malloc(sizeof(*c));

其实除了款式没有什么区别,挑你最喜欢的吧!

请注意,在定义原始结构时,您可以使用相同的声明来创建变量或 typedef,但不能同时使用:
struct node { ... } a; //a is a variable

typedef struct node {...} b; //b is a type

有些人喜欢强制使用语法并执行以下操作:
typedef struct node {...} Node, *PNode; //tree types in one line!

但就我个人而言,我觉得这种做法有点愚蠢:除非您想隐藏它是一个指针的事实,否则不要对指针进行 typedef。

关于c - 无法让这个数据结构工作(新手),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18818304/

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