VB中有关数组(Array,Split)的问题
1、Array函数返回的是一个包含数组的变体变量2、Split函数返回的是一个从0开始的字符串数组上面的1、2是我在网上看到的解释,不知道对不对,基于上面的结论我有如下疑...
1、Array函数返回的是一个包含数组的变体变量
2、Split函数返回的是一个从0开始的字符串数组
上面的1、2是我在网上看到的解释,不知道对不对,基于上面的结论我有如下疑问
疑问:有一个带有参数的过程Subarr(x()),其中参数x()是一个数组
一、call subarr(array(1,2,3))或者 call subarr(split(“1,2,3”,“,”))均报错
二、定义一个变体变量arrx,对arrx赋值arrx=array(1,2,3)或者arrx=split(“1,2,3”,“,”)然后
call subarr(arrx)仍然报错
三、如果定义一个一维数组arry(1 to 3 ),并对数组进行赋值,那么call subarr(arry)则可以正常运行
四、如果把过程Subarr的参数从数组x(),变成变体变量x,即subarr(x),那么以上情况均能正常运行
结论:那么从我疑问中一、二、三、四中的现象来看,则可以断定array和split函数返回的应该都是包含数组的变体变量,而不是真正的数组。而且包含数组的变体变量和单纯的数组是有本质区别的,至少在参数传递时是不一样的。
请问大神,我的结论正确么??
那些浮于应用层面的童鞋绕道。 展开
2、Split函数返回的是一个从0开始的字符串数组
上面的1、2是我在网上看到的解释,不知道对不对,基于上面的结论我有如下疑问
疑问:有一个带有参数的过程Subarr(x()),其中参数x()是一个数组
一、call subarr(array(1,2,3))或者 call subarr(split(“1,2,3”,“,”))均报错
二、定义一个变体变量arrx,对arrx赋值arrx=array(1,2,3)或者arrx=split(“1,2,3”,“,”)然后
call subarr(arrx)仍然报错
三、如果定义一个一维数组arry(1 to 3 ),并对数组进行赋值,那么call subarr(arry)则可以正常运行
四、如果把过程Subarr的参数从数组x(),变成变体变量x,即subarr(x),那么以上情况均能正常运行
结论:那么从我疑问中一、二、三、四中的现象来看,则可以断定array和split函数返回的应该都是包含数组的变体变量,而不是真正的数组。而且包含数组的变体变量和单纯的数组是有本质区别的,至少在参数传递时是不一样的。
请问大神,我的结论正确么??
那些浮于应用层面的童鞋绕道。 展开
1个回答
展开全部
哈哈,题主的研究很仔细,结论很正确。
可能很多人都被 Split() 的官方说明误导了,MSDN 里是这么解释的:
【返回一个下标从零开始的一维数组,它包含指定数目的子字符串。】(题主那个第二行“字符串数组”显然是不正确的描述)
于是乎很多人可能就以为既然这个一维数组包含的是“子字符串”,那么它的类型就应该是 String 喽?其实严格地讲,Split() 只能对 Variant 使用,默认输出是动态字符型。
所以,
Dim a() As String
a = Split("1,2,3", ",")
从严格上讲是错误的,正确的应该是:
Dim a() As Variant
a = Split("1,2,3", ",")
当然,Array() 和 Split() 还是有很多本质上的区别的。最直接的一点就是 Split() 的下标必须从 0 开始,而 Array() 就随意了。
更多追问追答
追问
你贴出来的2条代码均报错了哦
我上面实验的结论,split的返回值 前提是一个变体变量 然后其中才装有数组
你的代码一开始就用数组的方式定义,结果肯定报错哦
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询