代码之家  ›  专栏  ›  技术社区  ›  claf

C:指向结构定义中的结构的指针

  •  46
  • claf  · 技术社区  · 16 年前

    如何在此结构定义中具有指向下一个结构的指针:

    typedef struct A {
      int a;
      int b;
      A*  next;
    } A;
    

    7 回复  |  直到 12 年前
        1
  •  77
  •   Jonathan Leffler    6 年前

    您可以先在一条语句中定义typedef并向前声明结构,然后在后续定义中定义结构。

    typedef struct A A;
    
    struct A
    {
        int a;
        int b;
        A* next;
    };
    

    编辑:如其他人所述,如果没有转发声明,结构名称在结构定义中仍然有效(即,您可以使用 struct A ),但typedef在完成typedef定义之前不可用(因此仅使用 A

        2
  •  65
  •   Chris Young    16 年前

    除了第一个答案之外,如果没有typedef和forward声明,这也可以。

    struct A 
    { 
        int a; 
        int b; 
        struct A *next; 
    };
    
        3
  •  21
  •   Miles D    16 年前

    你错过了比赛 struct A*

      typedef struct A {
        int a;
        int b;
        struct A* next;
      } A;
    
        4
  •  14
  •   qrdl    16 年前

    您可以不必提前声明:

    struct A {
        int a;
        int b;
        struct A *next;
    };
    
        5
  •  9
  •   ephemient    16 年前

    如果您确实必须键入定义结构(我工作的大多数程序员都不会这么做),请执行以下操作:

    typedef struct _A {
        int a;
        int b;
        struct _A *next;
    } A;
    

    明确区分 _A struct 名称空间)和 A (在类型命名空间中)。

    typedef 隐藏它指向的类型的大小和存储(我同意)的论点是,在像C这样的低级语言中,试图隐藏任何东西都是有害的,而且会适得其反。习惯打字 struct A 你是说什么时候

        6
  •  0
  •   user7296055    8 年前
    typedef struct {
     values
    } NAME;
    

    这是定义结构的较短方法,我认为这是最简单的表示法,只是不要将名称放在前面,而是放在后面。

    你可以这样称呼它

    NAME n;  
    
    NAME *n; // if you'd like a ptr to it.
    

    这种方法有什么问题吗?

        7
  •  0
  •   moien    6 年前

    使用以下预处理器:

    #define structdef(NAME) typedef struct NAME NAME; struct NAME 
    

    structdef(node_t)
    {
       void* value;
       node_t* next;
    };