gpt4 book ai didi

c - 使用 typedef 与不使用 typedef 实现节点

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:24 27 4
gpt4 key购买 nike

我不确定我是否理解 typedef 的概念...假设有两种不同的方式来实现节点:一种使用 typedef,另一种不使用 typedef。例如:

有一个节点是这样实现的:其中名为 node1.c 的文件如下所示:

struct node_int {
int value;
node next;
};
void init_node(node *n, int value) {
node new_node = (node)malloc(sizeof(struct node_int));
//some code for initializing
}

node1.h 中看起来像:

struct node_int;
typedef struct node_int *node;

有一个节点是这样实现的:其中一个名为 node2.c 的文件看起来像:

struct node_int {
int value;
struct node *next;
};

void init_node(node_int **n, int value) {
struct node_int* new_node = (struct node_int*)malloc(sizeof(struct node_int));
//some code for initializing
}

node2.h 中看起来像:

struct node_int;

这两个实现是否等效?是否在每种情况下都正确使用了 malloc?任何启发将不胜感激。

最佳答案

将指针隐藏在诸如 typedef struct node_int *node; 之类的 typedef 后面对于许多程序员来说容易出错且令人困惑。你应该避免这样做。您可以简单地为 struct 标记和 typedef 使用相同的标识符:

typedef struct node node;

struct node {
int value;
node *next;
};

node *init_node(int value) {
node *np = malloc(sizeof(*np));
if (np != NULL) {
np->value = value;
np->next = NULL;
}
return np;
}

关于c - 使用 typedef 与不使用 typedef 实现节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53096721/

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