zoukankan      html  css  js  c++  java
  • 结构体嵌套的正确表示

    什么是结构体的嵌套?

    在结构体的定义中,结构体的成员又是另外一个结构体的变量。

    结构体嵌套的问题有哪些?

    结构体的自引用,就是在结构体内部,包含指向自身类型结构体的指针。

    结构体的相互引用,就是说在多个结构体中,都包含指向其他结构体的指针。

    结构体应该注意的问题?

    结构体定义中可以嵌套其他结构体类型的变量,不可以嵌套自己这个类型的变量。

    可以嵌套自己类型的指针。

    *********************************自引用结构体******************************

    ****************************************************************************

    不用TYPEDEF——正确的方式:    

     1 #include<iostream>
     2 using namespace std;
     3 struct tag_1
     4 {
     5 struct tsg_1 *A;
     6 //由于指针的长度时确定的(在32位机器上指针长度是4),所以编译器能够确定该
     7 结构体的长度
     8 //这个指针看似指向自身,其实不是,而是执行同一类型的不同结构。
     9 int value;
    10 };

    用TYPEDEF——正确的方式(“不完全声明”):

     1 #include<iostream>
     2 using namespace std;
     3 //正确的方式 使用不 完全声明
     4 typedef struct tag_a A;
     5 typedef struct tag_b B;
     6 struct tag_a
     7 {
     8 // struct tag_b *bp;
     9 B *bp;
    10 int value;
    11 };
    12 struct tag_b
    13 {
    14 // struct tag_a *ap;
    15 A *ap;
    16 int value;
    17 };

    ********************************结构体嵌套的三种正确形式************************

    ***********************************************************************************

    1 typedef struct tag_1
    2 {
    3 int value;
    4 struct tag_1 *link;
    5 }NODE;
    1 typedef struct tag_1 NODE;
    2 struct tag_1
    3 {
    4 int value;
    5 NODE *link;
    6 };
    1 struct tag_1
    2 {
    3 int value;
    4 struct tag_1 *link;
    5 };
    6 typedef struct tag_1 NODE;

    结构体自身嵌套时候要注意:

        结构体内部定义了一个指向结构体的指针,指针的大小在具体的机器平台和编译器环境中都是已知的(不同的平台环境的定义不完全相同)。但是要提醒的是:这个指针看似指向自身,其实不是,而是指向同一类型的不同结构。

    链表和树的数据结构就都使用到此技巧。自身的结构体指针指向下一节点或者下一子树的地址。

    1 /* 正确的表示*/
    2 typedef struct s_ref_t //这里是结构体类型定义 和 结构体标签
    3 {
    4 int value;
    5 struct s_ref_t *link;//注意这句话与上面相同位置的区别,使用了标签
    6 
    7 }s_ref_2;
  • 相关阅读:
    利用ItextPdf、core-renderer-R8 来生成PDF
    把war包放到Tomcat安装文件夹下,不能直接訪问的解决方式
    我的RTOS 之六 -- Touch移植(s5pv210+threadx+ucgui+touch)
    数据库可用率监控工具
    9款极具创意的HTML5/CSS3进度条动画(免积分下载)
    ODBC与JDBC比較
    ORA-02287: 此处不同意序号
    mongodb创建、更新、删除
    jcenter那些事儿
    C#里的应用程序域AppDomain
  • 原文地址:https://www.cnblogs.com/hongdoudou/p/12519912.html
Copyright © 2011-2022 走看看