我怎样才能在这个结构的定义中有一个指向下一个结构的指针:
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;
};