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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
xht08324 分钟前
PHP vs Python:编程语言终极对决
开发语言·python·php
计算机安禾7 分钟前
【数据结构与算法】第3篇:C语言核心机制回顾(二):动态内存管理与typedef
c语言·开发语言·数据结构·c++·算法·链表·visual studio
23.7 分钟前
【Java】char字符类型的UTF-16编码解析
java·开发语言·面试
无小道11 分钟前
关于mmap的理解和使用
开发语言·mmap
froginwe1116 分钟前
jQuery 隐藏/显示详解
开发语言
码云数智-大飞25 分钟前
分布式数据库:2026年数据架构的基石与挑战
开发语言
查古穆38 分钟前
python进阶-推导式
开发语言·python
njidf1 小时前
C++中的访问者模式
开发语言·c++·算法
英俊潇洒美少年1 小时前
js 同步异步,宏任务微任务的关系
开发语言·javascript·ecmascript
C_Si沉思1 小时前
C++中的工厂模式变体
开发语言·c++·算法