2026/9/2 16:38:30

【C语言】结构体标签[特殊字符]️

【C语言】结构体标签[特殊字符]️ 描述对象带标签的typedef重定义与不带标签的typedef重定义typedef struct a{} a; vs typedef struct {} a;1. typedef struct a{} a; (带标签)typedef struct a{int x;}a;代码解释- struct a 结构体标签名标识符标签名叫 a- 后面的 a 给这个结构体起的别名使用方式:struct a s1; // 用标签名定义变量合法a s2; // 用别名定义变量合法标签名 struct a 和别名 a 是两个独立东西只是名字碰巧一样。2. typedef struct {} a; 无标签typedef struct{int x;}a;代码解释- 没有结构体标签名 struct 后面是空的这个结构体是匿名结构体- a 是它唯一的别名使用方式a s1; // ✅ 可以用别名struct 无名 s2; // ❌ 没有标签名不能写 struct xxx不能再用 struct 名字 去定义变量因为根本没有标签。最关键考点结构体自引用链表✅正确带标签递归typedef struct Node{int data;struct Node *next; // 这里必须struct Node标签}Node;因为 Node 别名是最后才生效大括号里面还识别不到 Node 。❌错误匿名结构体不能自引用typedef struct{int data;Node *next; // 编译报错此时Node还没定义出来}Node;总结1. 带标签 typedef struct 标签{ }别名; 既能 struct 标签 又能 别名 支持结构体内部指针自引用链表、树必选。2. 匿名 typedef struct { }别名; 只能用别名不能自引用适合普通简单结构体。