vb中redim:动态修改数组的存储空间

vb中redim:动态修改数组的存储空间

初学VB写程序的时候,最头疼的就是数组固定大小报错,折腾半天才搞懂vb中redim是专门用来动态更改数组维度和容量的语句,能直接解决静态数组空间卡死的问题。最开始学编程,习惯直接定义固定数组,写代码时总拿捏不准数据量大小,定义小了存不下数据,定义大了又白白占用内存,每次运行程序要么报错溢出,要么资源浪费,直到用上Redim,才彻底摆脱了这个尴尬的问题。

最开始写学生成绩统计的小程序,傻乎乎写了个固定数组,定义了十个元素的数组,想着班级学生人数肯定够用。结果测试的时候,录入第十一个学生成绩,程序直接弹窗报错,下标越界,程序直接卡死闪退。当时对着代码盯了十几分钟,反复检查循环语句、赋值语句,完全找不出问题,压根不知道是数组空间不够的问题,只觉得代码写法和课本上一模一样,怎么偏偏运行出错。

后来翻老旧的VB实操笔记,才看到Redim的用法,才明白静态数组定义之后,大小就锁死了,全程不能更改,而Redim可以在程序运行的过程中,随时重新定义数组的长度和维度,适配实时变化的数据量。当时立刻改代码,删掉固定的数组长度定义,在读取学生人数之后,用Redim重新划定数组空间,输入多少个学生数据,数组就开辟多少空间,瞬间解决了下标越界的报错。

很多新手都会踩一个通病,就是直接用Redim反复重定义数组,最后发现之前存储的数据全部清空了。我当时就犯了这个错,第一次Redim开辟空间存了部分数据,后续新增数据再次用Redim扩容,原本数组里的内容直接清零,忙活半天录入的数据全部消失,心态直接崩了。

折腾好久才搞明白,单纯的Redim只会重置数组空间,清空原有所有数据,想要保留旧数据,必须加上Preserve关键字。这是最实用、最容易被忽略的细节,没有之一。当时反复测试对比,不加Preserve,每次重定义都是全新空数组;加上之后,扩容时会保留之前存储的所有数据,只新增空白存储空间用来存新数据,完美适配动态增减数据的场景。

Redim还有一个很关键的限制,它只能用于动态数组。如果一开始就用固定数值定义了数组,后续无论怎么用Redim,都无法修改,程序会直接提示语法错误。之前不懂这个规则,拿着静态数组反复套Redim语句,改了五六遍代码依旧报错,白白浪费了半个多小时。正确的做法是先只声明数组名称、不指定长度,把它定义为动态数组,后续再根据程序运行需求,用Redim自由调整大小。

写批量录入数据的脚本时,这个用法真的百试百灵。不用提前预估数据总量,不用浪费多余内存,程序运行中统计出数据条数,立刻用Redim Preserve扩容数组,逐条存入内容,全程不会报错、不会丢数据,适配所有不确定数据量的场景。

慢慢摸透之后才发现,Redim根本不是什么复杂的高级函数,就是一个适配动态数据的基础语句,专门用来弥补静态数组的缺陷。很多新手学不会,只是没人讲透它的使用前提和配套规则,只记了表面用法,忽略了动态数组声明、Preserve关键字这两个核心要点。

敲完最后一段测试代码,看着程序流畅跑完、所有数据完整显示在界面上,关掉VB窗口,桌面上还摊着写满数组用法和报错记录的草稿纸。

了解更多百科知识请访问 百科