为何用一个数组来接收 split()函数的值,这个数组就只能定义成variant类型呢?

bjwqt 2006-02-16 11:42:29
为何用一个数组来接收 split()函数的值,这个数组就只能定义成variant类型呢?
我反复都试过了,定成其他类型都会报错.只有定成variant类型可以,可是据说尽量不要用variant类型吗?
还有,我的一串字符串,都是字符,我想用空格分割,结果存到数组中去.按理说每个数组元素也都是字符型呀,可是这个数组定义成string型就是不行,必须要定义成variant,不明白.请老师指教.
...全文
468 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjwqt 2006-02-16
  • 打赏
  • 举报
回复
我好象明白了一点,数组必须声明成动态的才行.是吗.
可是下面的区别我还是弄不明白.请再指教.

为什么: Dim arybumen() As String 是可以的.
可是 : dim arybumen() as variant 就是不可以的.[会提示类型不匹配]
可是: dim arybumen as variant 却也是可以的.[此时并没有定义成数组,为何却是可以的呢?]
以上三种区别在哪里呢?
polarman 2006-02-16
  • 打赏
  • 举报
回复
Split(expression[, delimiter[, count[, compare]]])
Split函数并不是专门用来分割字符串的,还可以分割其他类型的数据
返回类型被定义成Variant是明智的


bjwqt 2006-02-16
  • 打赏
  • 举报
回复
仔细研究一下,我说的还不对,
Dim arybumen() As String 是可以的.
dim arybumen() as variant 就是不可以的.[会提示类型不匹配]
dim arybumen as variant 却也是可以的.[此时并没有定义成数组,为何却是可以的呢?]
请各位指教.刚学就遇到这种难题.
ZOU_SEAFARER 2006-02-16
  • 打赏
  • 举报
回复

Private Sub Command2_Click()
Dim a() As String
Dim str As String
str = "Hello good luck find"
a = Split(str, " ")
Dim i As Integer
For i = 0 To UBound(a)
Debug.Print a(i)
Next
End Sub
proer9988 2006-02-16
  • 打赏
  • 举报
回复
区别:

Private Sub Command1_Click()
Dim s() As String
s = Split("A B C D", " ")

End Sub

Private Sub Command2_Click()
Dim s As Variant
s = Split("A B C D", " ")

End Sub
无影追风 2006-02-16
  • 打赏
  • 举报
回复
dim s() as string
s=split("A B C D"," ")
yinweihong 2006-02-16
  • 打赏
  • 举报
回复
应该没问题,报什么错,看看你的代码
szjhxu 2006-02-16
  • 打赏
  • 举报
回复
其实有什么好说的啊,VB就是这样规定的。
northwolves 2006-02-16
  • 打赏
  • 举报
回复
楼主精神让人感动,打个比方

如果下面是对的,
dim ren() as 人
ren=split("zhangsan,lisi,wangwu",",")

那么
dim ren() as 人类
ren=split("zhangsan,lisi,wangwu",",")
就不太合适了

damofengbo 2006-02-16
  • 打赏
  • 举报
回复
谢谢,我还是不明白,split()函数的结果是要用数组来接收的,不能用普通变量来接收.
为什么定义一个variant变量却可以接收函数的结果呢?
如果普通变量可以接收split()函数的结果,可是定义成string型的变量却是不能接收呢?
=======================================

variant 特殊类型
String 普通类型
bjwqt 2006-02-16
  • 打赏
  • 举报
回复
可以定义成已知类型的动态数组,不可以定义成variant类型(不定类型)的动态数组.

所以:Dim arybumen() As String 是可以的,dim arybumen() as variant 就是不可以的
===========================
再问最后一次就结贴,以上说法是规定吗?如果不是规定,为什么呢?
fishmans 2006-02-16
  • 打赏
  • 举报
回复
split函数是分割字符串的
dim aa() as string
由于分割后具体会有多少个元素未知,所以要定义成动态数组来接收,
dim aa as variant
对于variant型,是可变类型,包括数组类型
所以定义成variant也是可以的
eslbs 2006-02-16
  • 打赏
  • 举报
回复
Dim arybumen() As String
Dim arybumen as variant

如果用c的角度来看
这2种定义
arybumen=split(****)的时候
arybumen 的本质都好像指针一样

给 arybumen 赋一个数组指针的位置
fxy_2002 2006-02-16
  • 打赏
  • 举报
回复
variant是一个变体,可以接受一切类型。
所以它能接受到数组,也可以接受到对象。
bjwqt 2006-02-16
  • 打赏
  • 举报
回复
请教,我比较钻牛角尖呀.
bjwqt 2006-02-16
  • 打赏
  • 举报
回复
至于dim arybumen as variant 只是定义一个变量而已
=========================
谢谢,我还是不明白,split()函数的结果是要用数组来接收的,不能用普通变量来接收.
为什么定义一个variant变量却可以接收函数的结果呢?
如果普通变量可以接收split()函数的结果,可是定义成string型的变量却是不能接收呢?
熊孩子开学喽 2006-02-16
  • 打赏
  • 举报
回复
可以定义成已知类型的动态数组,不可以定义成variant类型(不定类型)的动态数组.

所以:Dim arybumen() As String 是可以的,dim arybumen() as variant 就是不可以的

至于dim arybumen as variant 只是定义一个变量而已.楼主自己把自己弄糊涂了.

不用问为什么,没有什么道理好讲,编译器就是这么规定的,记住就好了.

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧