m0_70077461 2024-04-20 20:14 采纳率: 0%
浏览 5

typedef 结构体中嵌套指针

为什么第二个里面可以定义next的指针,而第一个不可以


typedef struct {
    int data;
    LNode *next;
}LNode;
struct LNode{
    int data;
    struct LNode *next;
};

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-20 20:14
    关注

    引自免费微信小程序:皆我百晓生

    在C++中,typedef关键字用于为现有的数据类型创建一个新的名字(别名)。当你使用typedef时,它实际上是在声明一个类型别名,这与直接使用结构体名称是等效的。所以,第一种写法:

    typedef struct {
        int data;
        LNode *next;
    } LNode;
    

    这里,首先定义了一个匿名的结构体,然后通过typedef将其命名为LNode。这样,在这个作用域内,LNode就相当于这个匿名结构体的名称,因此可以直接在内部定义next字段为指向自身类型的指针。

    然而,第二种写法是标准的结构体定义方式,没有使用typedef。在这种情况下,你需要在结构体名称前加上struct关键字来指定类型,就像下面这样:

    struct LNode{
        int data;
        struct LNode *next;
    };
    

    在这段代码中,每次提到next字段的类型时,都需要使用struct LNode *来明确指出它是LNode结构体的指针。这是因为在这个上下文中,只有通过struct关键字才能访问到LNode类型。如果你想要简化这一点,可以考虑添加一个typedef来创建一个别名,就像第一种写法那样。

    如果你想让两种写法看起来更一致,可以给第二种写法也添加一个typedef,如下所示:

    struct LNode{
        int data;
        struct LNode *next;
    };
    
    typedef struct LNode LNodeAlias;  // 添加typedef,使写法更统一
    

    这样,LNodeLNodeAlias都可以用来表示同一个结构体类型,但在内部定义字段时,可以直接使用next而不是struct LNode *next

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 4月20日
  • 创建了问题 4月20日