我最初是这样编写代码的
typedef struct
{
struct Node *next;
int data;
} Node;
因为我学到了如果使用typedef
,就可以像这样写struct
而无需在struct
旁边写Node
typedef struct Node
{
struct Node *next;
int data;
} Node;
如果我不使用Node
,那么当我使用诸如 Node *cur = head->next
的代码时,之后会出现警告。
警告信息如下:
'warning: incompatible pointer types initializing 'Node *' with an expression of type 'struct Node *''
(我的系统是 Mac OS,并使用 Visual Studio Code)
我知道如何解决这个问题,但我不知道为什么在某些编译器中,先前的代码可以工作,在其他一些编译器中却不行。
而且,定义结构体的最佳方式是什么?使用typedef
是否推荐?
Node
,但在第一种情况下,结构体本身没有标签,而在第二种情况下,它也有标签Node
。结构体标签空间和typedef不会冲突。在第二种情况下,您可以使用Node
或struct Node
来引用结构体,在第一种情况下,您只能将类型称为Node
。要声明指针,必须先有一个类型。第二种情况相当于struct Node { struct Node *next; int data; }; typedef struct Node Node;
通过使用标签,您可以创建对struct Node
的前向引用。 - David C. Rankintypedef struct
不为struct Node *next;
提供任何信息。 - David C. Rankin