vb.net二维数组指针 vb6 二维数组

vb.net 怎么使用指针对数组快速赋值赋值数组好像没有快速赋值吧vb.net二维数组指针,或者vb.net二维数组指针你再把问题再清楚一点 。
语句执行时间倒是可以做到 。在语句前
Dim oldTime As Date = Now
在过程语句后加
Dim newTime As Date = Now
Dim differenceInSeconds As Long = DateDiff(DateInterval.Second, oldTime, newTime)
textbox1.text= "共用vb.net二维数组指针了:"differenceInSeconds"秒!"
VB.NET 二维数组问题根据vb.net二维数组指针你的语句vb.net二维数组指针 , 上下标是确定的vb.net二维数组指针,所以定义语句修改为:
Dim ary(UBound(temp), 1) As String '声明二维数组
vb.net 如何给二维数组赋值 我要第一维存值,第二维存值的位置(像excel一样) 该怎么做,谢谢!Dim xlsApp As Excel.Application
Dim xlsBook As Excel.Workbook
Private Sub Command1_Click()
Dim I, J As Integer
Dim A(500, 2)
Set xlsApp = Excel.Application
xlsApp.Visible = False
'假设Excel文件在vb.net二维数组指针:D:\Book1.xls
Set xlsBook = xlsApp.Workbooks.Open("D:\Book1.xls")
For I = 1 To 500
For J = 1 To 2
A(I - 1, J - 1) = xlsapp.cells(I, J)
Next J
Next I
【vb.net二维数组指针 vb6 二维数组】'以下是退出Excel
xlsBook.Close (False)
xlsApp.Quit
Set xlsApp = Nothing
'=================================
'Excel中vb.net二维数组指针的500×2vb.net二维数组指针的数据已读入到数组A()中vb.net二维数组指针,以下可以添加你要运算vb.net二维数组指针的代码 。
'=================================
End Sub
VB中数组怎么定义是这么定义的:
数组中的第一个元素的下标称为下界,最后一个元素的下标称为上界 , 其余的元素连续地分布在上下界之间,且数组在内存中也是用连续的区域来存储的,所以数组每维的长度不能超过Long数据类型的最大值 , 即264—1=263 。
把VB.NET数组当作一个对象来处理,就意味着数组类型是单个引用类型,数组变量包括指向构成数组元素、数组维和数组长度等数据的指针,数组之间互相赋值但仅仅是在相互复制指针,数组继承了System名字空间的Array类 。
VB.NET中的数组有两种类型:定长数组和动态数组 。
扩展资料:
1、数组的使用
在’VB 6.0中 , 能够用For Each来循环遍历一个数组 。
比如:
Dim x As Integer
F0r Each x In arrayl
Console.WriteLine(x)
Next
2、在VB.NET中能够使用For循环和数组长度来遍历一个数组 。
比如:
Dim i As工nteger
F0r i=0 T0(arrayl.Length-1)
(此处空一行)
Console.WriteLine(arrayl(1)J
Next i
用最简单的代码介绍一下指针在VB.net里面的用法?例1:以下程序我们申请几个指向不同类型的指针:
’使用StructLayout(LayoutKind.Sequential)属性告诉net编译器:结构的元素在内存中按其出现的顺序排列
StructLayout(LayoutKind.Sequential) _
Public Structure DEFUDT_Test
Public bytb As Byte
Public i32a As Int32
End Structure
Public Function fnGetIntptr1() As IntPtr
’取得一个4字节数组指针
Dim tabytTest(3) As Byte
’以下语句告诉net垃圾回收进程不对tabytTest进行处理,也就是说tabytTest占用的内存区域固定不变 。
Dim thObject As GCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)
Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() ’取得指向字节数组的指针
’取得一个指向32位内存数据的指针,
’由于使用gchandle取指针的方法只能对引用的对象有效,
’所以对如int32等值类型必须使用将其封装成为一个对象的方法以变为引用类型
Dim ti32Test As Object = Convert.ToInt32(0)
’以下语句告诉net垃圾回收进程不对ti32test进行处理,也就是说ti32Test的内存位置固定不变 。
Dim thObject1 As GCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)
Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() ’取得ti32Test的首地址
Dim tudtTest1 As DEFUDT_Test
’由于结构是一种值类型变量,为保证指针申请方便,我们申请
’取得一个和结构tudtTest1大小一致的字节数组指针,只要空间占用长度和结构一样就可以了
’由于net在结构封装中会插入额外的数据位,所以一定要用sizeof方法得到结构在非托管使用时的实际大小
Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte
Dim thObject2 As GCHandle = GCHandle.Alloc(tudtTest, GCHandleType.Pinned)
Dim tpObject2 As IntPtr = thObject2.AddrOfPinnedObject() ’取得指向结构的指针
’在这儿你可以写对指针处理的任意代码(在例2中会给予补充)……
’在使用完毕后一定要释放指针指向的内存块,让垃圾回收器可对这个内存块回收处理
If thObject.IsAllocated Then
thObject.Free()
End If
If thObject1.IsAllocated Then
thObject1.Free()
End If
If thObject2.IsAllocated Then
thObject2.Free()
End If
End Function
上例中指针流程处理可以归纳为:
1、 定义一个具有合适内存长度的引用变量(关于引用变量和值变量的差异可以参观VB.NET的书籍)
2、使用GCHandle.Alloc方法将变量的内存区域固定下来 。
3、使用GCHandle对象的AddrOfPinnedObject取得该内存区域的首地址并赋值给指针变量.
4、对指针进行操作
5、使用GCHandle对象的free方法释放指针指向的内存区域以便net垃圾回收器可以回收这个内存空间
2、指针所指向数据的存取
在.net中,对指针指向数据的存储函数都封装在marshal类中 , 主要的函数包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指针所表示的地址中写入XXX类型的数据,而ReadXXX中作用就是将指针所在地址的数据以XXX类型方式读出 。看例程2 , 我们使用这些方法演示对例1那几个指向不同类型数据的指针作数据存/取操作 。
例2:演示向例1申请得到的几个指针执行写入及读取数据的操作.
Marshal.WriteInt32(tpObject1, 0, Convert.ToInt32(77)) ’向ti32Test变量指向的地址写入32位整数77
MsgBox("现在ti32Test的值为:"ti32Test) ’因为变量存储地址的数据已改为77,所以显示为77
’以下这句之所以可行,因为ti32Test是32位整数,而tpObject指向的tabytTest数组刚好有4个元素
’而每一个byte元素都占用8位,合起来就是32位,和ti32Test占用的空间一样 。这就印证了前面提’
’到的net中指针没有指向类型的说明 。
Marshal.WriteInt32(tpObject, 0, ti32Test)
’以下代码再将tabytTest字节数组的内容理解为一个int32整数,
’并将值赋值给tudtTest结构中的int32元素
’我们使用Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32以取得i32a元素在结构中的内存偏移位置
’所以New IntPtr(tpObject2.ToInt32Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32)就临时产生了
’一个指针并指向i32a所在的内存地址(, 这个方法也说明了指针可以以字节为单位进行加减计算以指向合适的变量 。
’Marshal.ReadInt32的作用是从指针中读取一个32整数 。
Marshal.WriteInt32(New IntPtr(tpObject2.ToInt32Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32), _
0, Marshal.ReadInt32(tpObject))
’这儿可以将字节数组的内容复制到真正的结构中
MsgBox(Marshal.OffsetOf(tudtTest1.GetType, "i32a").ToInt32)
tudtTest1 = CType(Marshal.PtrToStructure(tpObject2, GetType(DEFUDT_Test)), DEFUDT_Test)
MsgBox("结构tidtTest1中i32a元素的值为:"tudtTest1.i32a) ’此处将显示刚赋的值77
关于vb.net二维数组指针和vb6 二维数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读