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