什么是结构体的嵌套? 在结构体的定义中,结构体的成员又是另外一个结构体的变量。 结构体嵌套的问题有哪些? 结构体的自引用,就是在结构体内部,包含指向自身类型结构体的指针。 结构体的相互引用,就是说在多个结构体中,都包含指向其他结构体的指针。 结构体应该注意的问题? 结构体定义中可以嵌套其他结构体类型的变量,不可以嵌套自己这个类型的变量。 可以嵌套自己类型的指针。 *********************************自引用结构体****************************** **************************************************************************** 不用TYPEDEF——错误的方式:
不用TYPEDEF——正确的方式: #include<iostream>using namespace std;struct tag_1{struct tsg_1 *A;//由于指针的长度时确定的(在32位机器上指针长度是4),所以编译器能够确定该结构体的长度//这个指针看似指向自身,其实不是,而是执行同一类型的不同结构。int value;}; 用TYPEDEF——错误的方式:
*********************************相互引用结构体****************************** ******************************************************************************* 用TYPEDEF——错误的方式: #include<iostream>using namespace std;typedef struct tag_a{B *bp;int value;}A;typedef struct tag_b{A *ap;int value;}B;//错误的,在类型B在定义之前就被引用 用TYPEDEF——正确的方式(“不完全声明”):
********************************结构体嵌套的三种正确形式************************ *********************************************************************************** typedef struct tag_1{int value;struct tag_1 *link;}NODE;
struct tag_1{int value;struct tag_1 *link;};typedef struct tag_1 NODE; 结构体自身嵌套时候要注意: 结构体内部定义了一个指向结构体的指针,指针的大小在具体的机器平台和编译器环境中都是已知的(即使不同的平台环境的定义不完全相同)。但是要提醒的是:这个指针看似指向自身,其实不是,而是指向同一类型的不同结构。 链表和树的数据结构就都使用到此技巧。自身的结构体指针指向下一节点或者下一子树的地址。
|
|