当前位置: 首页 > news >正文

C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考

《2》普通变量是静态的,指针变量是动态的。这里的静态和动态是指能否修改。

试想一下在函数传参的时候复制一个普通变量和一个指针类型变量的值。普通变量赋值后,将变量的值复制给参数,在函数内部是无法对这个变量的值进行修改的,而指针变量就可以在函数内部对指向的真实变量进行修改。(从这里看出指针变量的灵活性,特点,以及威力)

《2》、C语言中大量存在赋值“=”操作,效率最高的就是普通变量赋值或者指针变量这种1字节、2字节、4字节赋值操作,C语言非常擅长这种小变量赋值操作以及指针或者指针变量解引用操作,而且这些操作效率非常高。如果直接复制整个结构体,效率非常低,这也是为什么传参中使用结构体变量指针的原因,反正后面可以使用函数体内部使用结构体指针解引用的方式访问成员。

《3》结构体内部使用结构体指针的好处以及必须使用结构体指针的相关情况:

(1)当使用堆内存的时候,也就是使用malloc()、free()相关函数动态申请释放内存的时候,必须要使用结构体指针。而且需要使用的时候再申请内存,使用完了可以释放内存,非常节约内存。

(2)定义一个结构体指针,它存储的或者被写入的是某一个结构体的地址,这个被指向的结构体编译器可以在存储在其他内存地方,有点像碎片内存,这样指向的内存就无需和当前结构体在一起,有利于编译器对内存碎片化操作。

(3)使用结构体指针可以节省内存大小,我们都知道指针变量也就是占4字节内存空间,当我们定义多个结构体变量的时候,使用结构体指针更节省内存,而且效率更好,因为定义变量就是编译器分配内存,内存格子越小,效率越高。

(4)结构体内部包含子结构体,那么这两个结构体在空间上必须挨在一起,时间上(生命周期)保持一致,无法提前释放,也就是说在空间和时间上两者会一直存在,无法改变。

(5)从继承角度考虑,结构体内部使用结构体指针也更有优势,子结构体只需定义一个父结构体的指针变量就相当于继承了父结构体的相关特性(数据以及函数指针)。否则如果包含父结构体整体,随着继承层数的增多,占用内存越来越大,效率越来越低,后面会存在大量空闲的内存,而且也不符合自然规律(只有一个父亲,一个儿子,不能随着继承层数增多,儿子、父亲越来越多)。

总之结构体内部包含子结构体,在空间和时间上绑定在了一起,而且占用内存大,生命周期长,效率地下,容易造成内存浪费,尽量少使用。

结构体内部包含结构体指针,空间上占用内存小,可以按需分配,生命周期也可以程序员自我把握,执行效率高(创建过程、复制过程),而且动态灵活(可以修改指向的结构体成员)。

http://www.dtcms.com/a/327518.html

相关文章:

  • 车载5G加速,扩产+毛利率保卫战
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • Linux下命名管道和共享内存
  • 云原生作业(nginx)
  • 云原生环境Prometheus企业级监控实战
  • 将黑客拒之物联网网络之外的竞赛
  • 2.Ansible基本使用
  • 9. React组件生命周期
  • 使用镜像网站 打开克隆 GitHub 网站仓库内容 git clone https://github.com/
  • 跟李沐动手学深度学习---学习笔记之基础篇
  • ForceVLA——将具备力感知的MoE整合进π0的动作专家中:从而融合视觉、语言、力反馈三者实现精密插拔
  • 【USRP】基于LabVIEW的BPSK、QPSK,文本,图片
  • n8n、Workflow实战
  • Redis序列化配置类
  • 【从零开始java学习|第四篇】IntelliJ IDEA 入门指南
  • 采暖管道安装、分类、计量-文字查找快速定位、批量测量一键计算
  • OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求
  • 115-基于Flask的医疗保健数据预测分析系统
  • 2025年渗透测试面试题总结-15(题目+回答)
  • 【前端Vue】如何优雅地展示带行号的日志文件或文本内容(log-viewer组件的使用)
  • Java数据结构之ArrayList
  • 《算法导论》第 20 章 - van Emde Boas 树
  • 《前端性能监控深解:从指标捕获到数据洞察的完整脉络》
  • Windows已经安装了一个MySQL8,通过修改配置文件的端口号跑2个或多个Mysql服务方法,并注册为系统服务
  • linux远程部署dify和mac本地部署dify
  • 【3】Transformers快速入门:大语言模型LLM是啥?
  • 电商双 11 美妆数据分析总结
  • 自然语言处理( NLP)基础
  • Elasticsearch Node.js 客户端连接指南(Connecting)
  • 2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码