vb的结构体内定义数组

qq_36582897 2017-12-06 03:26:13
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
...全文
687 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-12-07
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
看楼主的“代码语法”,应该是VB.NET的吧! 在VB6中,“结构体”内定义动态数组、固定数组都是没问题的。 区别在于:用固定数组,“数据元素空间”是按类型、数量等,直接分配在“结构体”的成员空间内;   但用“动态数组”,那么它只是一个“数组指针”而已(不管什么类型、是否“有数组元素”等),总是占4字节空间。 估计在VB.NET中,这方面的特性,应该跟VB6是一样的,只是具体的“使用细节”上可能有点差异而已。  就算“有点差异”也主要是因为语法差异造成,可以忽略的。
脆皮大雪糕 2017-12-06
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 chewinggum 的回复:] 别听赵四的,type里面可以定义动态数组。 举个栗子

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

能正常和外部DLL或Win API中定义的结构体互通?[/quote] 能否举个栗子哪个win API里面的struct有数组?目前我用到的API涉及不定长的信息的函数原型里都是指针。 楼主的需求目前看只是程序内部自己使用。需求就是要不定数组! 针对需求解决问题,不要扩大没必要的应用场景增加无意义的争论。
舉杯邀明月 2017-12-06
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 chewinggum 的回复:] 别听赵四的,type里面可以定义动态数组。 举个栗子

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

能正常和外部DLL或Win API中定义的结构体互通?[/quote] “外部DLL或Win API中定义的结构”几乎都是“确定结构长度”的,如果有“数组成员”都是用的固定数组; 但在“VB6工程内”的自定义数据类型,用到的数组成员,绝大多数情况下都必须用动态数组。 这二者不能混为一谈的!
舉杯邀明月 2017-12-06
  • 打赏
  • 举报
回复
看楼主的“代码语法”,应该是VB.NET的吧! 在VB6中,“结构体”内定义动态数组、固定数组都是没问题的。 区别在于:用固定数组,“数据元素空间”是按类型、数量等,直接分配在“结构体”的成员空间内;   但用“动态数组”,那么它只是一个“数组指针”而已(不管什么类型、是否“有数组元素”等),总是占4字节空间。 估计在VB.NET中,这方面的特性,应该跟VB6是一样的,只是具体的“使用细节”上可能有点差异而已。  就算“有点差异”也主要是因为语法差异造成,可以忽略的。
赵4老师 2017-12-06
  • 打赏
  • 举报
回复
引用 2 楼 chewinggum 的回复:
别听赵四的,type里面可以定义动态数组。 举个栗子

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

能正常和外部DLL或Win API中定义的结构体互通?
脆皮大雪糕 2017-12-06
  • 打赏
  • 举报
回复
别听赵四的,type里面可以定义动态数组。 举个栗子

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老师 2017-12-06
  • 打赏
  • 举报
回复
Dim bit(5) As Integer '使用定长Integer数组

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧