变长数组(有趣+最本质的讲解)

1. 前言

如果你也是编程的爱好者,亦或是你想要学好编程。一个好的知识功底,必不可少。希望读者们能够坚持下来,沉住心态,好好学习技术。🥇🥇🥇。人们总说,黎明前的那片天空是最黑暗、最寒冷的,只要我们坚持住,必定能迎接属于自己光明的未来!❤️❤️❤️

在本文中,我将带领大家从头开始认识变长数组。车速可能有点快,坐稳啦!

2. 变长数组的意义

在我看来,每个事物都有其存在的道理。既然编译器都是人造的,那变长数组又何尝不是呢。

那变长数组有什么实际意义呢?
不妨回到没有变长数组的那段日子。我们在创建数组时,都是直接给定数组元素个数的大小(或者,让编译器通过我们赋值的情况自动算出元素个数的多少),可是我们很难事先预料到我们创建数组的大小是否满足程序运行后续的要求,或者说,是否会出现浪费的情况。这些情况是很难预料到的 (就像你不知道,你是否何时会遇到你的另一半的那种感觉😍)。(需要注意一点的是:创建数组或初始化数组,数组元素个数的大小必须是个常量值,不能往里面添个变量)。

int arr1[66]; //里面可以是一个常量值
int arr2[66+22]; //也可以是一个常量表达式
int arr3[] = {1,2,3,4};

为了解决这个问题,变长数组横空出世了,它的出现就很好的解决了这种不确定性。为什么这么说呢?因为,变长数组的大小是可以通过变量来确定的。那么看到这里,我相信读者们对变长数组有一点点感觉了。那我们就趁热打铁,开启变长数组的大门,感受知识的熏陶!

3.变长数组

3.1 变长数组的来源

变长数组来源于C99标准中,那就意味着在C99标准之前的C语言标准中是不支持变长数组的。如果大家发现自己的编译器上写变长数组,程序就会报错,那么这时你就有解决的方向了。

这里为了照顾一些初学者或者从未感知过这方面的读者就简要地讲解一下,什么叫做C语言的标准?
C语言能够发展到现在,必定离不开一个规范化的过程。就像在茫茫人海中,如何找到你心目中的那个"她",除了感觉,剩下只有择偶标准了。C语言也是一样的。在发展之初,C语言经历过标准的改变,从C89到C95,再到C99(后面还有的,这里就不过多举例了),这些过程也注定了C语言站在历史的长河中,不被时间的洪流击垮。

由于VS2022虽然支持C99标准的语法,但是它偏偏不支持变长数组。因此,大家可以找装用gcc编译器的IDE进行测试。在本节中,我将用dev c++ 给大家举例示范。

3.2 变长数组的用法

变长数组最本质的特征是,其大小只有在编译器运行时才知道也就是说我们不能给变长数组进行初始化操作了
而且变长数组通过变量确定其数组元素的个数有多少时,也是不能通过后续的操作,再改变这个数组的大小了

可能有些读者读到这里一头雾水,我再解释一下:
对于一般的数组来说,编译器其实在读到这个数组时,就已经知道了这个数组的元素个数是多少了。因为,方括号里面放的是常量值,一读就懂了。
变长数组就很不一样了,我们说,其数组的元素个数由变量的值所决定,既然它是变量,编译器一开始肯定是不知道其值是多少的,既然无法确定数组元素个数的多少,我们又给它进行初始化操作(默认知道了数组的大小了,因为编译器会根据初始化元素的个数自动计算出数组元素的个数),出现矛盾了。所以,给变长数组初始化这种操作是万万不可取的

例子:
比如,我要设定这个数组元素个数为5个:变长数组
如果设为10个呢:
变长数组
结果依旧能够正确输出!

相信看到这里的读者,已经掌握得七七八八了,下来一定要自己动手感受一下!

4. 总结

在本文中,我带着大家揭开了变长数组的神秘面纱(意义、使用方式),在以后不至于看到变长数组却不认识。

好了,车也到站了。希望读者们能够好好的消化知识。另外,觉得作者写得不错的话,不要吝啬你们手中的赞哦!

更多精彩有趣的文章还在后面,感谢大家的关注。(❁´◡`❁)(●’◡’●)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值