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

标签 c data-structures

我对 C 还很陌生,我一直在尝试使用这种数据结构编写一个程序:

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

但是,每当我尝试在代码中实现它时,如下所示:

Node n = malloc(sizeof(*n));

我收到编译器错误,例如“nmake.c:13:31:错误:未知类型名称‘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/

相关文章:

algorithm - 使用并发在文件中查找 k 个最常见的单词

用于可索引字符串列表的 Python 数据结构

c - 如何递归遍历目录并打印 C 中的所有文件?

c - 多维数组模式访问

python - 管理大点列表,最好的方法是什么?

c - 从链表中排序元素

c++ - 如何将ANSI C结构转换为C++类,但保持其对ANSI C的友好性?

c++ - C 链接 C++ 静态函数

我可以像这样初始化一个空的 2D C 字符串吗?

c++ - COM、COM+、DCOM,从哪里开始?