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

数组

今天在写程序过程中发现了.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怎么变了??很多东西都变了...变得习惯了还是不习惯了?

时间: 2024-09-11 15:40:44

VB.NET里奇怪的数组赋值现象的相关文章

数据-vb怎么给数组赋值?(新人,没有c币,真心希望能帮我,万分感谢!!)

问题描述 vb怎么给数组赋值?(新人,没有c币,真心希望能帮我,万分感谢!!) 整个程序的文件夹的链接 要求单击command1就弹出一个excel文件(这个excel要经过编写代码生成出来) 我就是不知道怎么写代码让数据相互组合,组合成多个方案,希望有大神能帮帮我!! 非常非常感谢 解决方案 ExcelandVB用VB创建EXCEL文件的实例,输入数据到EXCEL表中,并作一些字体边框的调整 如果需要我帮你下载,请采纳后联系我(这一招是跟某些人学的).

简捷PHP数组赋值方法详解

 PHP数组还是比较常用的,于是我研究了一下PHP数组赋值,在这里拿出来和大家分享一下,希望对大家有用.所谓数组就是一组变量的集合保存在计算机的内存中,这些变量可以是不同的类型,包括整数,布尔值,字符串等.可以说数组就是内存中的一个小型的数据库.它为我们访问数据提供了一个快捷的方式――可以省出IO或者数据库的频繁访问以此来提高一些性能,所以关于数组中一些操作也是很多的. 怎样创建在PHP中创建数组你可以使用如下的方法之一创建数组: <?php $a="abcd";  print(

vb.net的多维数组

多维数组可以理解为"数组的数组",比一维数组多了"维数"概念.可以用多维数组记录复杂的信息.例如,为了追踪计算机屏幕上的每一个像素,需要引用它的X.Y坐标,此时应该用多维数组存储值. vb.net声明多维数组的语法如下: Dim ArrayName(VarNumber1,VarNumber2,......,VarNumberN) As Type 可以将一维数组所有规则推广到二维以上的多维数组.例如,下面的语句声明了一个10×10的二维数组以及4×10×15的三维数组

利用C#的for循环语句为数组赋值

C#的for循环语句为数组赋值是C#编程中比较基础的一部分,通过C# for循环语句遍历一个数组,然后对数组中的每个元素进行赋值. string[] strarr=new string[n]; //n为数组的长度 for(int i=0;i { strarr[i]=m; //m为一个变量,通过i的循环,m也同时实现了一个循环 } //比如通过DATESET里面表ds.Tables["table"].Rows[i-1]["column"].ToString() //的

struct-对结构体中的二维数组赋值为何会影响下一排

问题描述 对结构体中的二维数组赋值为何会影响下一排 #include "stdio.h" struct qipan { char point[20][80]; bool isClear; }; qipan board; int main() { for(int i=0;i<=19;i++) for(int j=0;j<=79;j++) board.point[i][j]=' '; board.point[1][1] = board.point[1][2]=board.poi

javascript-为什么无法用for循环给js数组赋值

问题描述 为什么无法用for循环给js数组赋值 for (var m = 1;m<21; m++) { var href = "http://wufazhuce.com/one/vol."+m+"#articulo"; var url = []; url.push(href); } console.log(url); 为什么这个的输出是 ["http://wufazhuce.com/one/vol.20#articulo"] 没有1到19的

c语言数组与函数-如何在函数中给已经在主函数中定义好的数组赋值

问题描述 如何在函数中给已经在主函数中定义好的数组赋值 已经在main()中定义了一个长度为20的数组,想在定义的函数中给数组赋值,但一直报错,请问如何修改? void arrin(int *arr) { int i; arr[]={1,1,2,2,3,3,4,5,6,5,6,7,7,8,8,9,9,0,0}; for(i=0;i<20;i++) printf("%d",arr[i]); } main() { int testarr[20]; ............ } 解决方

三个函数-数组赋值-下拉列表输出-取驱动器

函数|驱动器|数组|下拉|下拉列表|函数|驱动器|数组|下拉|下拉列表 <TITLE> New Document </TITLE><META NAME="Generator" CONTENT="EditPlus"><META NAME="Author" CONTENT=""><META NAME="Keywords" CONTENT="&quo

关于ASP,ASP.NET,VB.NET里的MD5加密函数

asp.net|函数|加密 在ASP中,我们使用过如动网论坛等用的ASP中MD5函数加密出的字符串则如:1165d25d8cd021d5 而在Asp.Net中下面的方法: 代码 System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,"MD5") 进行MD5加密出来的结果却是:12C403B91165D25D8CD021D5F9B5BB7F 究其原因,是因为,在AS