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

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

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

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

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

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

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

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

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

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

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

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

相关推荐
要做朋鱼燕5 分钟前
ARM CoreSight:多核SoC调试追踪架构解析
开发语言·笔记·职场和发展·嵌入式·嵌入式软件
從南走到北8 分钟前
JAVA露营基地预约户外露营预约下单系统小程序
java·开发语言·小程序
曹牧16 分钟前
Java:实现List的定长截取
java·开发语言·list
Lxinccode19 分钟前
python(42) : 监听本地文件夹上传到服务器指定目录
服务器·开发语言·python·文件上传服务器·监听文件上传服务器
木头左39 分钟前
Python实现ETF网格自动化交易集成动量阈值判断
开发语言·自动化
CodeCraft Studio43 分钟前
全球知名的Java Web开发平台Vaadin上线慧都网
java·开发语言·前端·vaadin·java开发框架·java全栈开发·java ui 框架
静水流深-刘申44 分钟前
算法继续刷起-2025年09月26日
开发语言·c++·算法
平平无奇。。。1 小时前
C++11之异常
开发语言·c++·visual studio
La Pulga1 小时前
【STM32】ADC数模转换器
c语言·stm32·单片机·嵌入式硬件·mcu
木头左1 小时前
跨周期共振效应在ETF网格参数适配中的应用技巧
开发语言·python·算法