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

我怎样才能有一个指向这个结构定义中的下一个结构的指针

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

这是我第一次写它,但它不起作用。

6 Solutions collect form web for “C:指向结构定义中的结构的指针”

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

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

编辑:正如其他人所提到的,没有正向声明的结构名称仍然是有效的内部结构定义(即你可以使用struct A ),但typedef是不可用的,直到typedef定义完成后(所以只使用A wouldn'无效)。 这只是一个指针成员可能无关紧要,但如果你有一个复杂的数据结构,有很多自我types的指针,可能不那么有用。

除了第一个答案,没有typedef和forward声明,这也应该没问题。

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

您在A*之前缺lessstruct

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

你可以没有前向声明:

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

请,你在C,而不是C ++。

如果你真的必须input一个结构体(而且大多数我所使用的程序员不会¹),请执行以下操作:

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

清楚地区分_A (在struct namespace中)和A (在type namespace中)。

typedef隐藏了它所指向的types的大小和存储空间(我同意这一点)是,像C这样的低级语言,试图隐藏任何东西都是有害的,适得其反的。 习惯于在你的意思是struct A时inputstruct A

 typedef struct { values } NAME; 

这是typedef结构的简短方法,我认为它是最简单的符号,只是不要把infront的名字放在后面。

你可以这样称呼它

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

这个方法有什么问题?

  • static_cast和reinterpret_cast有什么区别?
  • 有零元素的数组需要什么?
  • generics约束,其中T:struct和where T:class
  • 什么是C ++类成员的默认值
  • 我用什么生命周期来创build相互引用的Rust结构?
  • 在C中的结构中填充
  • 将结构传递给函数
  • 为什么在.NET中没有RAII?
  • Swift常量:Struct或Enum
  • 为什么C ++不允许匿名结构和联合?
  • 结构与类