gpt4 book ai didi

c - 结构体指针前向声明?

转载 作者:行者123 更新时间:2023-11-30 18:25:05 24 4
gpt4 key购买 nike

我是 C 编程和创建链表数据结构的新手,我的老师给了我一些看起来有点令人困惑的代码:

typedef struct node *ptr;
ptr start,current;
typedef struct node{
int value;
ptr next;
};

这段代码工作正常,使用其他函数我可以创建一个链接列表,我的困惑是,当我像这样更改代码时:

node *start;
node *current;
typedef struct node{
int value;
node *next;
};

它不起作用。这段代码有什么问题,为什么我不能再转发声明节点指针了。

最佳答案

typedef struct node *ptr;
ptr start,current;
typedef struct node{
int value;
ptr next;
};

结构本身的 typedef 不会以这种方式工作,我猜你在末尾缺少一个 node (它缺少新定义类型的标识符)。

此时,我会告诉你的老师,请不要通过typedef指针类型来混淆每个人。在每次使用中都显示指针类型修饰符是很常见的,只是为了表明它是一个指针。但现在来看看实际的答案:

node *start;
node *current;
typedef struct node{
int value;
node *next;
};

从第一行开始:这里使用node作为类型标识符。但是您还没有告诉编译器 node 应该是什么类型。事实上,您实际上缺少的是前向声明。它的工作原理如下:

/* forward-declare "struct node" and at the same time define the type
* "node" to be a "struct node":
*/
typedef struct node node;

/* now use your type by declaring variables of that type: */
node *start;
node *current;

/* finally fully declare your "struct node": */
struct node {
int value;
node *next;
};

或者,如果没有 typedef,这很容易让初学者感到困惑:

struct node; /* forward declaration (not strictly necessary in this little example) */

struct node *start;
struct node *current;

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

关于c - 结构体指针前向声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33131983/

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