结构中的差异?

dfg*_*dfg 13 c c++ data-structures

有什么区别:

typedef struct part 
{
   int a;
} Part;
Run Code Online (Sandbox Code Playgroud)

typedef struct 
{
   int a;
} Part;
Run Code Online (Sandbox Code Playgroud)

我知道第二个是"匿名",但它们有什么不同吗?

Eoi*_*rst 19

除了Mike Seymour的回答,这是一个原因的例子:

链接列表例如

// this works
typedef struct part {
    struct part *next;
} Part;

// this doesn't work
typedef struct {
    struct Part *next;
} Part;
// neither this
typedef struct {
    Part *next;
} Part;
Run Code Online (Sandbox Code Playgroud)

  • 当编译器尚未定义时,编译器如何知道Part(在第二个示例中)是什么? (4认同)

Mik*_*our 15

在这两种情况下,您都定义了一种结构类型,以及一种称为Part该类型的类型别名.

在第一种情况下,您还定义了一个结构名称part,因此结构类型也可以称为struct part或仅part在C++中.

在第二种情况下,结构本身没有名称(因此是"匿名"),并且只能通过类型别名来引用.由于该别名仅结构定义之后声明,因此结构不能引用自身.