结构体的嵌套 自身嵌套 相互嵌套

2023-05-16

什么是结构体的嵌套?

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

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

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

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

结构体应该注意的问题?

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

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

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

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

不用TYPEDEF——错误的方式:    

#include<iostream>
using namespace std;
struct tag_1{
        struct tag_1 A; //A是一个结构体,A的内部还会有一个结构体,以此下>去,无线循环。在内存分配的时候,由于无限的嵌套,无法确定结构体的长度,所>以时非法的。
        int value;
};
int main()
{
        return 0;
}

不用TYPEDEF——正确的方式:    

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

用TYPEDEF——错误的方式:

#include<iostream>
using namespace std;
typedef struct{
        int value;
        NODE *link;
}NODE;
//使用typedef为结构体创建一个别名NODE。
//但是是错误的,因为类型名的作用域是从语句结尾开始的,而在结构体内部是不>能使用的,因为还没有定义。

*********************************相互引用结构体******************************

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

用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——正确的方式(“不完全声明”):

#include<iostream>
using namespace std;
//正确的方式 使用不 完全声明
typedef struct tag_a A;
typedef struct tag_b B;
struct tag_a
{
//      struct tag_b *bp;
        B *bp;
        int value;
};
struct tag_b
{
//      struct tag_a *ap;
        A *ap;
        int value;
};

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

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

typedef struct tag_1
{
        int value;
        struct tag_1 *link;
}NODE;
typedef struct tag_1 NODE;
struct tag_1
{
        int value;
        NODE *link;
};
struct tag_1
{
        int value;
        struct tag_1 *link;
};
typedef struct tag_1 NODE;

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

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

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

/* 错误的表示*/
typedef struct  //这里是结构体类型的定义 
{
        int value;
        s_ref_1 *link;//注意这局引用了结构体类型名              
}s_ref_1;//ISO C++ 不允许声明无类型的‘s_ref_1’


/* 正确的表示*/
typedef struct s_ref_t //这里是结构体类型定义 和 结构体标签
{
        int value;
        struct s_ref_t *link;//注意这句话与上面相同位置的区别,使用了标签
}s_ref_2;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结构体的嵌套 自身嵌套 相互嵌套 的相关文章

  • 交换机对数据帧的处理规则

    一 概述 以太网交换机对二层帧的转发处理比较复杂 xff0c 很多同事都不是很清楚 本文将对此问题进行总结 xff0c 并通过实验进行验证 二 交换机基本概念 在了解交换机转发规则之前 xff0c 我们先理解交换机的一些概念 xff0c 如
  • NAT详解

    NAT详解 1 概述 1 1 nat简介 NAT xff08 Network Address Translation xff0c 网络地址转换 xff09 是1994年提出的 它是一个IETF Internet Engineering Ta
  • FTP服务

    1 FTP简介 FTP是File Transfer Protocol xff08 文件传输协议 xff09 的英文简称 xff0c 而中文简称为 文传协议 用于Internet上的控制文件的双向传输 同时 xff0c 它也是一个应用程序 x
  • 从Linux服务器下载文件夹到本地

    1 使用scp命令 把本地的source txt文件拷贝到192 168 0 10机器上的 home work目录下 scp home work source txt root 64 192 168 0 10 home work 把192
  • 安卓开发——网络传输工具类HttpUtil(基于okhttp3)使用

    AndroStudio开发 xff1a 使用时需先导入okhttp3依赖 xff1a com squareup okhttp3 okhttp 3 4 1 依赖导入步骤 xff1a File ProjectStructure Dependen
  • 无人系统传感器导航

    文章目录 GPS 全球定位系统 Global positioning system RTK Real time kinematic 距离传感器超声波传感器激光测距传感器毫米波雷达 Lidar Light detection and rang
  • 深度相机选取建议:

    2020 9 4更新 xff1a 现在再回头来看TOF应该会是未来 xff0c 限制TOF发展的硬件问题正在慢慢解决 苹果的ipad上也加上了TOF xff08 用于AR xff09 xff0c ipone12上估计也会有 可能小米的mix
  • JavaHTTP请求工具类HTTPUtils

    HTTP 请求工具类 HTTPUtils xff0c 其中涉及 HTTP 请求相关的各种操作 xff0c 关于这些方法详细的介绍可以查看这些博客 x1f4ac 相关 博客文章 Java发起HTTP请求并解析JSON返回数据 https bl
  • YOLOV7语义分割(日后自用笔记)

    系统win10 本文只是根据readme文件走流程 xff0c 记录一些常用公式 RizwanMunawar yolov7 segmentation at 87b016cda50371d6e2824378d641c2d4417ea1c3 g
  • char型和int型之间的类型转换

    char转换为int型数据 通过赋值方式将char类型变量转换为int型变量 xff0c 变量值为char类型变量的ASCII码值 例如 xff1a int a 61 0 那么打印a的结果为48 xff0c 如果想要得到正确的数字 xff0
  • ROS出现Cannot find source file的错误和add_dependencies,add_executable,target_link_libraries三者先后顺序不对所造成的错误。

    出现上面这个报错 xff0c 往往是 CMakeLists txt中的问题 add executable server tutorial ws src dynamic tutorials src server cpp 这行代码的问题 xff
  • 利用python ast包,绘制python代码的调用关系图(可分析互相调用的多个py文件)

    我的目的是辅助代码阅读 xff08 也方便写文档 xff09 xff0c 因此不需要太详细的信息 xff0c 只需要看用户定义的函数的函数调用关系 文章目录 1 开源项目staticfg的安装和直接使用2 绘制python的简单调用关系图
  • 1.3 Ubuntu18.04 ROS udp server 通信实现

    Ubuntu18 04 ROS udp Server通信实现 此小节介绍udp Server收发数据 udp通信属于帧传输 xff0c 在帧传输过程中对于消息的次序和到达情况没有需求 xff0c 没有进行校验 xff0c 所以UDP属于不可
  • 1.4 Ubuntu18.04 ROS udp Client通信实现

    Ubuntu18 04 ROS udp Client通信实现 此小节介绍udp Client收发数据 udp通信属于帧传输 xff0c 在帧传输过程中对于消息的次序和到达情况没有需求 xff0c 没有进行校验 xff0c 所以UDP属于不可
  • 1.5 Ubuntu18.04 ROS tcp/ip服务器与Android tcp/ip客户端通信

    Ubuntu18 04 ROS tcp ip服务器与Android tcp ip客户端通信 此小节介绍ubuntu18 04 ros tcp ip服务端与Android tcp ip客户端通信 xff0c 此操作可以使用安卓系统开发ROS机
  • Kerloud Mini发布,做开源技术的拥护者

    产品介绍 云讷科技团队在无人系统软硬件上有多年的行业积累 xff0c 经过一年多的努力 xff0c 团队已经完全实现了自主化飞控软硬件的研发 xff0c 并具备了全套产业链生产能力 新出品的Kerloud Mini飞行控制器是针对低成本无人
  • 2019年全国大学生电子设计竞赛G题解决方案-双路语音同传的无线收发系统

    今天 xff0c 今年的电赛的四天三夜的比赛时间已经结束了 xff0c 理论上已经不可以做板了 在这里分享一下我们做的G题的其中一个解决方案 xff08 我们做了三个方案 xff09 xff0c 思路等等 下面先说一下题目 xff1a 一
  • 检验和计算——C语言

    一 计算检验和的步骤 检验和的计算都是一个模板 xff0c 只是各种检验和的初始数据不一样 总结一下就是 xff1a 求和 回卷 取反 把校验和字段设置为0 求和 xff1a 把需要校验的数据看成以16位为单位的数字组成 xff0c 依次进
  • 服务器放在机柜_怎么区分塔式服务器与机架式服务器以及优点?

    服务器根据外型可以分为塔式与机架式 他们之间的区别 xff0c 并不单单在于外观 xff0c 而是在于其本身的工业设计理念 xff0c 以及性能是完全不同的 xff0c 下面56云就来做一个简单说明 xff0c 希望能帮助贵公司的决策分析
  • Ubuntu下 Python 版本切换

    在Ubuntu的开发环境下 xff0c 由于Python2和Python3很多不兼容 xff0c 经常会需要我们手动切换Python版本 span class token function sudo span update alternat

随机推荐