vb的结构体内定义数组可以吗?为什么我改不了结构体里面数组的维数上下限。导致后面我赋值的时候出现了““System.NullReferenceException”类型的未经处理的异常”。代码如下,希望各位大神帮忙解答,小弟感激不尽!
Structure chorm
Dim bit() As Integer
Dim fit As Single
End Structure
Public popcurrent(3) As chorm Public Sub startpop()
Dim i As Integer, j As Integer, random As Integer, value As Single
For i = 0 To 3
For j = 0 To 5
random = Rnd()
random = random Mod 2
popcurrent(i).bit(j) = random
Next
' modelvalue(popcurrent(i))
' popcurrent(i).fit = fitness()
Next
End Sub
Structure chorm
Dim bit() As Integer
Dim fit As Single
End Structure
Public popcurrent(3) As chorm Public Sub startpop()
Dim i As Integer, j As Integer, random As Integer, value As Single
For i = 0 To 3
For j = 0 To 5
random = Rnd()
random = random Mod 2
popcurrent(i).bit(j) = random
Next
' modelvalue(popcurrent(i))
' popcurrent(i).fit = fitness()
Next
End Sub
举个栗子
Private Type test
inttst As Integer '整形成员
arytst() As Integer '动态数组成员
End Type
Private Sub Command1_Click()
Dim i As Integer
Dim a As test
ReDim a.arytst(5) '定义数组成员
a.inttst = 100 '整数成员赋值
For i = 0 To 5 '数组成员赋值
a.arytst(i) = i * 2
Next
Debug.Print a.arytst(5) '检验结果
ReDim a.arytst(10) '再次重定义数组成员
For i = 0 To 10 '数组成员赋值
a.arytst(i) = i * 3
Next
Debug.Print a.arytst(10) '检验结果End Sub
区别在于:用固定数组,“数据元素空间”是按类型、数量等,直接分配在“结构体”的成员空间内;
但用“动态数组”,那么它只是一个“数组指针”而已(不管什么类型、是否“有数组元素”等),总是占4字节空间。估计在VB.NET中,这方面的特性,应该跟VB6是一样的,只是具体的“使用细节”上可能有点差异而已。
就算“有点差异”也主要是因为语法差异造成,可以忽略的。
“外部DLL或Win API中定义的结构”几乎都是“确定结构长度”的,如果有“数组成员”都是用的固定数组;
但在“VB6工程内”的自定义数据类型,用到的数组成员,绝大多数情况下都必须用动态数组。这二者不能混为一谈的!
楼主的需求目前看只是程序内部自己使用。需求就是要不定数组!
针对需求解决问题,不要扩大没必要的应用场景增加无意义的争论。