数组传递复制问题请教
vb吧
全部回复
仅看楼主
level 11
余思培 楼主
返校后,我将之前写的桶排的代码实际运行,结果发现了很多问题,其中,最麻烦的一个问题就是数组复制传递问题。
例如
Dim intS() As Integer
Dim intT() As Integer
intS = intT
这个过程中记得没错应该是传址
但由于我需要建立的数组需要灵活度
所以我建立了新的数组
Dim intR() As Variant
Dim intS() As Integer
ReDim intR(n) As Variant 'n为一个整型
For i = 0 to n
intR(i) = intS
Next
并在后面进行数组内部数组的长度的的改变,
以期达到灵活的目的,但事实上根据前面发现intR里面的每一个元素都使用的是intS,所以根本达不到目的。
询问问题
1.怎样使intR里面每一元素不一样,使之各元素之间相对独立
2.数组的传值问题
-①函数传值可不可以定义一个变体,然后将变体与数组之间在进行传址或传值以期达到传递数组(传值)或者达到函数返回数组
-②数组之间复制传值只有通过遍历数组和API来完成吗?
目前主要是以上两个问题,并且我在百度的时候看到的搜索结果不是很明白,所以来贴吧求问。
2020年06月11日 05点06分 1
level 13
Dim intS() As Integer
Dim intT() As Integer
intS = intT
传的也是数值,并非地址,自己定义下值,输出就能看到
Dim intR() As Variant
Dim intS() As Integer
的话,可以两个都是Variant
Dim intR() As Variant
Dim intS() As Variant
这样就可以
intS = intT
2020年06月11日 06点06分 2
可能是我被网上搜索的资料混淆了,以为其是传址
2020年06月11日 06点06分
后面晚上回去我再试下
2020年06月11日 06点06分
@余思培 Variant不建议用,Variant灵活性是好,但是速度好像比Integer、Long慢很多倍
2020年06月11日 06点06分
@隨風🍁缒夢 主要我是想嵌套数组,二维数组的第二维我想要灵活变长,但我不知道怎么去改变,所以使用variant
2020年06月11日 06点06分
level 13
回复 ◎余思培 :可以用结构数组,比如
private type a
c() as integer
end type
private t() as a
就是数组中的每个元素是结构,结构中的成员又是数组,可以解决了
2020年06月11日 06点06分 3
受到启发了,很感谢,晚上我回去试一下
2020年06月11日 06点06分
level 8
1.数组本质就是一段连续的内存,找元素的方法是 起始地址+下表*元素长度
如果元素类型不同,肯定做不到
2.1 函数可以返回一个数组,返回类型定义为varient就行,可以理解成指针
2.2 Dim intS() As Integer
Dim intT() As Integer
intS = intT 这个就是赋值,不是引用,我测试过
2020年06月11日 06点06分 4
好的谢谢
2020年06月11日 06点06分
level 8
Dim a(5) As Variant
Dim b() As Integer
Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
For i = 0 To 5
ReDim b(i)
For j = 0 To i
b(j) = j
Next
a(i) = b
Next
Debug.Print a(5)(2)
End Sub
2020年06月11日 07点06分 5
level 11
余思培 楼主
感谢各位大佬,通过实际测试我已经发现整个数组赋值确实是传值。所以问题1和问题2.2已解决,而2.1只是一个可行性提问,经过大佬的解释和实际操作后已验证。
很感谢各位大佬。
2020年06月13日 17点06分 6
level 11
余思培 楼主
另关于数组灵活性问题,随风大佬提示可以用结构数组,利用空余时间试了一下,并和变体数组做了个对比。以下为程序截图、运行截图和云盘源码。以供后来学习者参考。(因为我的配色方案截屏效果非常差,就用手机重截一下。)
感谢 随风大佬 提示
2020年06月13日 17点06分 8
我代码中从来没有用过Variant类型,我做过测试Variant类型存取中很慢,其次是Currency,然后就是Double、Single,最快的就是Integer、Long,但是现在的CPU中测试Double、Single和Integer、Long基本很难测出差异,现在的CPU对浮点数据操作也很快
2020年06月14日 00点06分
@隨風🍁缒夢 理论上Double、Single是Integer、Long慢,因为Integer、Long存储的数据是原值,而Double、Single并不是原值,是底数和指数构成,比Integer、Long要复杂很多,所以老的CPU对浮点操作慢,速度很容易比较
2020年06月14日 00点06分
一般是在能用Integer、Long类型时,尽量这两种,存取速度是最快的
2020年06月14日 00点06分
@隨風🍁缒夢 前段时间主要是想实现功能,不得以使用变体,受到您的启发,使用结构数组,然后就顺便拿变体数组作了个对比,现在我也知道了variant类型速度很慢。
2020年06月14日 01点06分
吧务
level 13
讨论了这么多关于数组的使用问题。我想简单地谈谈看法——
  ⒈ 数组是大量占用计算机内存(RAM)来开辟存储空间的,具有运行速度快的特点。
  ⒉ 正因为数组要占用大量的内存空间,所以计算机算法语言对数组是有【最大、最多数组元素】限制的。因此,对于大型数据管理信息系统,就不可能使用数组来存储、处理、交换数据。
  ⒊ 我们要了解在学习算法语言初期,利用数组来处理数据,就是要了解【内存数组】的优、缺点,甚至于感受到数组处理大型数据管理系统的无奈(甚至是无能)。例如当前世界各国的【新冠疫情统计数据】,就不可能用数组方式来管理数据。
  ⒋ 学习了数组处理数据的技巧之后,我们应该迫切地希望学习和使用【数据库】技术。
  ⒌ 对于系统程序编制过程中,各个功能块和子程序之间需要传递数据的多少,在《软件工程》中有一个术语,叫做【数据耦合度】。传递的数据多叫做【数据耦合度高】,传递的数据少叫做【数据耦合度低】。很显然,【数据耦合度】为零的系统,才是最好的程序设计方案。
  怎样才能做到【数据耦合度为零】呢?只有外部【数据文件】和【数据库】技术才做得到。也就是说:数据是以外部文件方式独立于程序代码的,这才是要研究的数据存储、处理的问题关键。
2020年06月14日 01点06分 9
level 8
最快的是直接申明足够长度的数组
任何形式改变数组的长度,都会带来内存的申请销毁,
2020年06月14日 03点06分 10
销毁和重构的时间我没有考虑,我回去实操试一下直接申请足够空间,并试一下存字符串并分割为数组,以及直接读写硬盘数据。如果都太慢,就老老实实去学数据库吧
2020年06月14日 04点06分
@余思培 字符串如果内容固定,操作的只是指针,效率不会差,如果要频繁拼接的话,就麻烦了,. net的解决办法是用stringbuilder类,VB6的话,也有前人写好的stringbuilder类
2020年06月14日 05点06分
level 8
2020年06月14日 03点06分 11
变长搞错了,循环了一亿次,时间大概是差10倍
2020年06月14日 03点06分
1