c语言中的数组一旦定义就不可以更改长度,删除,插入。这样的数组就是静态数组,有静态就一定有动态数组,但是很可惜c++和C语言一般是不支持的。
不能插入和删除数组元素有时候会非常麻烦,比如一个数组保存了某个班级的学生学号,假如要把某学生的学号从数组中剔除,但是C语言并不支持这么做,这就给编程带来了不小的麻烦。
数组元素都是紧挨着的,中间没有空隙,不管是插入元素还是删除元素,都得移动该元素后面的内存:
- 在第 i 个元素后面插入一个新元素时,第 i 个元素后面的所有元素都要往后移动一个元素的位置,从而给新元素腾出位置来。如果该数组后面紧跟的是其它有用数据,那么为了防止覆盖有用数据,还不敢直接往后移动元素,必须得重新开辟一块内存,把所有的元素都复制过去。
- 删除第 i 个元素就比较简单了,不管三七二十一,把第 i 个元素后面的所有元素都向前移动即可。
插入和删除数组元素都要移动内存,甚至重新开辟一块内存,这是相当消耗资源的。如果一个程序中有大量的此类操作,那么程序的性能将堪忧,这有悖于「C语言非常高效」的初衷,所以C语言并不支持动态数组。
另外,很多时候我们需要把数组的地址保存到一个变量里面(等大家学到指针时就会见到这种情况),如果数组重新开辟了内存,而变量里面的地址不跟着改变的话,后续再使用该变量就会导致错误。让C语言本身去维护这些变量的值,以保持同步更新,这又是不可能做到的,所以这个矛盾无法从根本上解决。
总之,为了保证程序执行效率,为了防止操作错误,C语言只支持静态数组,不支持动态数组。
如果你们想把数组内数据删除或者插入,那么也可以自己写一个函数去完成相应的功能。
如果有想学习或者再学习C语言的同学可以关注私聊发送“C语言”我会给大家提供 交流环境,学习资料和建议指导。
那么文章到这里就结束了。如果觉得我文章还可以的,可以关注,收藏,转发,评论。