我怎样才能在这个结构的定义中有一个指向下一个结构的指针:
typedef struct A {
  int a;
  int b;
  A*  next;
} A;
这是我第一次写它的方式,但它不起作用。
您可以先在一个语句中定义 typedef 并前向声明该结构,然后在后续定义中定义该结构。
typedef struct A A;
struct A
{
    int a;
    int b;
    A* next;
};
编辑:正如其他人所提到的,如果没有前向声明,结构名称在结构定义中仍然有效(即您可以使用struct A),但 typedef 直到 typedef 定义完成后才可用(因此 using justA无效)。这对于只有一个指针成员可能无关紧要,但如果您有一个包含大量自类型指针的复杂数据结构,则可能不太实用。
除了第一个答案,没有 typedef 和 forward 声明,这也应该没问题。
struct A 
{ 
    int a; 
    int b; 
    struct A *next; 
};
    你错过了struct之前的A*
  typedef struct A {
    int a;
    int b;
    struct A* next;
  } A;
    您可以不使用前向声明:
struct A {
    int a;
    int b;
    struct A *next;
};
    请,您使用的是 C,而不是 C++。
如果您真的必须 typedef 一个结构(而我使用的大多数程序员不会¹),请执行以下操作:
typedef struct _A {
    int a;
    int b;
    struct _A *next;
} A;
清楚地区分_A(在struct命名空间中)和A(在类型命名空间中)。
¹typedef隐藏了它所指向的类型的大小和存储——论点(我同意)是,在像 C 这样的低级语言中,试图隐藏任何东西都是有害的并且适得其反。习惯于随便struct A打字struct A。
typedef struct {
 values
} NAME;
这是 typedef 结构的较短方法,我认为它是最简单的表示法,只是不要将名称放在前面而是放在后面。
然后你可以这样称呼它
NAME n;  
NAME *n; // if you'd like a ptr to it.
这种方法有什么问题吗?
使用以下预处理器:
#define structdef(NAME) typedef struct NAME NAME; struct NAME 
用法:
structdef(node_t)
{
   void* value;
   node_t* next;
};