user-0 提问: 在结构体中定义另一个结构体类型变量可以吗 

回复:
user: user-1
content: 引用 11 楼 zhao4zhong1 的回复:http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组 get

user: user-2
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组

user: user-1
content: 引用 6 楼 zhao4zhong1 的回复:#define Name_Maxsize 10 typedef struct List_2 {   char Class_Name[Name_Maxsize];   char Class_Term;   char Class_Score;   struct List_2 *next; } Stu_Score;  typedef struct Tree_1 {   int Room_ID;   struct Tree_1 *lchild,*rchild; } Stu_Room;  typedef struct List_1 {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_2 *Stu_Score_List_P;   struct Tree_1 *Stu_Room_Tree_P;   struct List_1 *next; } Stu_Information; int main() {     Stu_Information si;      si.Stu_ID=0;     return 0; }  赵老师，这个是不是就可以认为Stu_Information指向了List_2 和Tree_1，就是通过那两个指针连起来的，在对创建Stu——information的时候只给该对象申请空间就好，跟指针指向的list_2和？Tree_1是没有关系的？

user: user-3
content: 感觉一个是全局的，一个是局部的（在结构体内定义的结构体，不能被外部调用定义新参数）

user: user-3
content: 引用 5 楼 baichi4141 的回复:[quote=引用 4 楼 u012148985 的回复:] typedef struct List_Stu_Infomation {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_Stu_Infomation *next; }Stu_Infomation; 可以编译  typedef struct List_Stu_Infomation//Ñ§ÉúÐÅÏ¢±í½á¹¹ {   int Stu_ID;   char Stu_Name[Name_Maxsize];   Stu_Infomation *next; }Stu_Infomation; 编译报错 可见楼主没弄清楚这里的typedef是干什么的 typedef struct A { int x; } B; 这段代码实际上是两个功能的组合 第一个功能：strcut A { int x; }定义一个名为struct A的结构体 第二个功能：typedef struct A B;声明struct A的另一个名称B 所以，楼主的代码中，直到B;这一行为止，typedef这条语句都尚未完成，此时编译器根本就不知道有一个叫B的东西 所以楼主在struct A这个结构体里面，只能使用struct A来指代本类型  容易混淆的是，在C++中，struct A直接定义一个名为A的结构体，不需要typedef [/quote]+1

user: user-0
content: 引用 5 楼 baichi4141 的回复:[quote=引用 4 楼 u012148985 的回复:] typedef struct List_Stu_Infomation {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_Stu_Infomation *next; }Stu_Infomation; 可以编译  typedef struct List_Stu_Infomation//Ñ§ÉúÐÅÏ¢±í½á¹¹ {   int Stu_ID;   char Stu_Name[Name_Maxsize];   Stu_Infomation *next; }Stu_Infomation; 编译报错 可见楼主没弄清楚这里的typedef是干什么的 typedef struct A { int x; } B; 这段代码实际上是两个功能的组合 第一个功能：strcut A { int x; }定义一个名为struct A的结构体 第二个功能：typedef struct A B;声明struct A的另一个名称B 所以，楼主的代码中，直到B;这一行为止，typedef这条语句都尚未完成，此时编译器根本就不知道有一个叫B的东西 所以楼主在struct A这个结构体里面，只能使用struct A来指代本类型  容易混淆的是，在C++中，struct A直接定义一个名为A的结构体，不需要typedef [/quote]  是这个问题！谢谢

user: user-2
content: #define Name_Maxsize 10 typedef struct List_2 {   char Class_Name[Name_Maxsize];   char Class_Term;   char Class_Score;   struct List_2 *next; } Stu_Score;  typedef struct Tree_1 {   int Room_ID;   struct Tree_1 *lchild,*rchild; } Stu_Room;  typedef struct List_1 {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_2 *Stu_Score_List_P;   struct Tree_1 *Stu_Room_Tree_P;   struct List_1 *next; } Stu_Information; int main() {     Stu_Information si;      si.Stu_ID=0;     return 0; }

user: user-4
content: 引用 4 楼 u012148985 的回复:typedef struct List_Stu_Infomation {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_Stu_Infomation *next; }Stu_Infomation; 可以编译  typedef struct List_Stu_Infomation//Ñ§ÉúÐÅÏ¢±í½á¹¹ {   int Stu_ID;   char Stu_Name[Name_Maxsize];   Stu_Infomation *next; }Stu_Infomation; 编译报错 可见楼主没弄清楚这里的typedef是干什么的 typedef struct A { int x; } B; 这段代码实际上是两个功能的组合 第一个功能：strcut A { int x; }定义一个名为struct A的结构体 第二个功能：typedef struct A B;声明struct A的另一个名称B 所以，楼主的代码中，直到B;这一行为止，typedef这条语句都尚未完成，此时编译器根本就不知道有一个叫B的东西 所以楼主在struct A这个结构体里面，只能使用struct A来指代本类型  容易混淆的是，在C++中，struct A直接定义一个名为A的结构体，不需要typedef

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:在结构体中定义另一个结构体类型变量 和 在结构体中定义指向另一个结构体类型的指针变量 不是一回事。 尽管两者都可以。 typedef struct List_Stu_Infomation {   int Stu_ID;   char Stu_Name[Name_Maxsize];   struct List_Stu_Infomation *next; }Stu_Infomation; 可以编译  typedef struct List_Stu_Infomation//Ñ§ÉúÐÅÏ¢±í½á¹¹ {   int Stu_ID;   char Stu_Name[Name_Maxsize];   Stu_Infomation *next; }Stu_Infomation; 编译报错

user: user-2
content: 在结构体中定义另一个结构体类型变量 和 在结构体中定义指向另一个结构体类型的指针变量 不是一回事。 尽管两者都可以。

user: user-5
content: 可以的,这样定义  另外一个结构体就变成了成员了

user: user-6
content: 没问题啊~~