VB.NET里奇怪的数组赋值现象

原创 2004年10月31日 19:38:00
今天在写程序过程中发现了.NET里的一个奇怪现象,就是给数组给数组赋值时竟然是"指向数组的地址",即数组给数组赋值时不是生成一个新的值后传给数组保存,而是传给该数组的地址给数组.打个比方:有数组A和数组B.现在把数组B赋给数组A.而则时数组A不是保存数组B的值而是保存数组B的内存地址,这就产生一个问题:如果数组B的值改变则数组A的值也跟着改变!!!....而在ASP就不是这样情况,VB也可能不是这样,我的机没有VB.所以测试不了...

这样说可能还不是很清楚(我的表达能力就是很差),给一段示例代码就知:
VB.NET的代码:
Sub TestCode()
Dim Test(4) As Array, RandomText(1) As String
Dim Ran As New Random, i, j As Integer
For i = 0 To 4
For j = 0 To 1
RandomText(j) = Ran.Next(100)
Next
Test(i) = RandomText
Next
For i = 0 To 4
MsgBox(Test(i)(0) & "|" & Test(i)(1))
Next
End Sub
运行上面代码你可发现,五次显示的结果都是一样的...如果你以为RANDOM时产生相同的值,那么你可以使用一步步调试.在"自动窗口"中你会发现每当循环时,Test(i-1)里面的值总是跟着Test(i)的值改变....这也说明了我在上面所说的问题,即数组赋值给数组时是"传址"而不是"传值"保存....但如果不是数组则不会有这样的情况出现!解决方法是把RandomText(1) As String的定义放到第一个循环的里面即可,即每循环一次生成一个新的数组

让我们看看在ASP里会不会也是相同的情况吧
ASP代码:
<%@LANGUAGE="VBSCRIPT"%>
<%
Randomize
Dim Test(4), RandomText(1)
Dim Ran, i, j
For i = 0 To 4
For j = 0 To 1
RandomText(j) = Int(Rnd(Time)*100+1)
Next
Test(i) = RandomText
Next
For i = 0 To 4
Response.Write Test(i)(0) & "|" & Test(i)(1) & "<br>"
Next
%>
运行后你会发现5行的数据都是不同的!!!即在ASP里数组赋值给数组是"传值"而不是"传址"保存!!!!


.NET怎么变了??很多东西都变了...变得习惯了还是不习惯了?

VB.NET里奇怪的数组赋值现象

今天在写程序过程中发现了.NET里的一个奇怪现象,就是给数组给数组赋值时竟然是"指向数组的地址",即数组给数组赋值时不是生成一个新的值后传给数组保存,而是传给该数组的地址给数组.打个比方:有数组A和数...
  • bpfish
  • bpfish
  • 2004年10月27日 23:44
  • 1131

Python中奇怪的现象

1、特殊构造的列表的元素不可以自加>>>x = [[0, 0, 0, 0]] *4 >>>x[0][0] += 1 >>>x [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0...
  • VictoriaW
  • VictoriaW
  • 2017年06月15日 11:19
  • 244

VB.NET 数组的定义 动态使用 多维数组

 我们都知道在所有程序设计语言中数组都是一个非常重要的概念,数组的作用是允许程序员用同一个名称来引用多个变量,因此采用数组索引来区分这些变量。很多情况下利用数组索引来设置一个循环,这样就可以高效地处理...
  • departure19841030
  • departure19841030
  • 2009年11月04日 00:32
  • 49159

结构体变量中数组成员赋值问题

#include using namespace std; struct student {   char name[20];   int age; }; int main( ) {...
  • smallgyy
  • smallgyy
  • 2012年11月07日 19:27
  • 2326

vb中给字符串数组赋值

         前段时间用vb.net写程序,遇到一个给字符串数组赋值的问题。用google搜索了很长时间,找到的大都使用循环方法赋值的,我觉得那样有些麻烦,就一直在找新的方法。虽然后来找到了,时间...
  • you_laner
  • you_laner
  • 2006年08月23日 17:30
  • 9884

数组结构体部分赋值问题

之所以写这个博客,是因为前两天参加了深信服的笔试,整体难度不大,提前半个小时写好了,然后还检查了一遍选择题。在选择题上面,它是选项不确定的。有几道选择题不确定,顿时发现自己的基础还是不扎实呀。下面总结...
  • yuanlairuci1992
  • yuanlairuci1992
  • 2016年10月16日 11:28
  • 343

VB.NET中实现控件数组的方法

今天无意中发现了可以实现控件数组的方法,对于初学.NET不久的我来说有点兴奋了....呵呵 在此留个脚印Private Sub TextBoxes_TextChanged()Sub TextBoxes...
  • kpKelvin
  • kpKelvin
  • 2006年12月13日 16:26
  • 1714

关于VB的Byte数组的初始化

最近在研究一些文件结构这类的东西
  • Carlven2012
  • Carlven2012
  • 2014年09月01日 00:26
  • 3327

如何给结构体中的字符数组赋值。

举例如下: char a[10]; 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再给它赋值,如 char a[10]; a[10]="hello...
  • qingfeng__
  • qingfeng__
  • 2016年11月07日 21:59
  • 4155

vb.net中combobox与数组绑定

Dim lbstr() As String = {"集团文件", "红头文件", "各店通知", "学习资料", "常用文件"} Dim lbvalue() As String = {...
  • wjbych
  • wjbych
  • 2012年03月01日 15:42
  • 1710
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VB.NET里奇怪的数组赋值现象
举报原因:
原因补充:

(最多只允许输入30个字)