cla*_*laf 51 c struct pointers
如何在此结构的定义中指向下一个结构的指针:
typedef struct A {
int a;
int b;
A* next;
} A;
Run Code Online (Sandbox Code Playgroud)
这是我第一次写它但它不起作用的方式.
CB *_*ley 69
您可以定义typedef并在一个语句中首先声明struct,然后在后续定义中定义struct.
typedef struct A A;
struct A
{
int a;
int b;
A* next;
};
Run Code Online (Sandbox Code Playgroud)
编辑:正如其他人所提到的,如果没有前向声明,结构名称在结构定义中仍然有效(即可以使用struct A),但是在typedef定义完成之后,typedef才可用(因此使用just A将无效).仅使用一个指针成员,这可能并不重要,但如果您有一个包含大量自我类型指针的复杂数据结构,则可能不那么狡猾.
Chr*_*ung 60
除了第一个答案,没有typedef和forward声明,这也应该没问题.
struct A
{
int a;
int b;
struct A *next;
};
Run Code Online (Sandbox Code Playgroud)
Mil*_*s D 17
你错过了struct之前的A*
typedef struct A {
int a;
int b;
struct A* next;
} A;
Run Code Online (Sandbox Code Playgroud)
qrd*_*rdl 13
你可以不用前瞻声明:
struct A {
int a;
int b;
struct A *next;
};
Run Code Online (Sandbox Code Playgroud)
拜托,你是C,而不是C++.
如果你真的必须键入一个结构(并且我使用的大多数程序员不会¹),请执行以下操作:
typedef struct _A {
int a;
int b;
struct _A *next;
} A;
Run Code Online (Sandbox Code Playgroud)
明确区分_A(在struct命名空间中)和A(在类型命名空间中).
¹ typedef隐藏了它指向的类型的大小和存储 - 论证(我同意)是在像C这样的低级语言中,试图隐藏任何东西是有害的,适得其反.习惯了打字struct A时,你的意思struct A.