网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
09月03日漏签0天
vb吧 关注:156,007贴子:1,166,283
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 36回复贴,共1页
<<返回vb吧
>0< 加载中...

分享:VB6如何判断数组是否初始化

  • 只看楼主
  • 收藏

  • 回复
  • sunruisunrui
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 初音七奈
  • 钩子编程
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个写法以前见过,感觉挺bug的
理论上来说,VB是不支持指针直接运算的,需要用隐藏函数(如VarPtr)才能取指针并进行运算;但是这里却可以对数组名这个指针进行Not运算……未初始化的指针值为0,取反之后就是-1


2026-09-03 08:53:26
广告
不感兴趣
开通SVIP免广告
  • A1Duke
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
如果数组已经初始化,则返回非0,否则返回0。


  • 隨風缒夢
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

刚刚测试了下,用not数组名来判断数组为空,遇到bug了。只要not 数组名后,对single类型变量赋值,再debug.print 输出就会出现表达式太复杂了,但是编译就没问题了


  • 贴吧用户_GGeStU9
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
'------------------------------------------------------------
'函数名:IsInitArr
'类型:Boolean
'参数:
' Arr-必选参数,Variant,任意数组
Public Function IsInitArr(Arr As Variant) As Boolean
'返回数组 Arr 是否已经初始化,若是则返回 True,否则返回 False
If IsArray(Arr) Then
On Error Resume Next
'--------------------------------------------------
'IsInitArr = UBound(Arr)
'这是为了排除 Array() 这种特殊情况
'其范围被认为是 0 To -1,但仍然是越界的
IsInitArr = UBound(Arr) >= LBound(Arr)
'--------------------------------------------------
If Err.Number = 9 Then IsInitArr = False
Else
Throw 5, "参数 Arr 必须是数组类型而不能是 " & TypeName(Arr) & " 类型"
End If
End Function
'------------------------------------------------------------


  • 👨🏿‍🦱
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

编译后百万次16毫秒左右,再想高效就得上汇编了,奈何VB6原生不支持,也不必搞那么麻烦
楼上的代码也试过,如果数组已初始化效率比这个稍差点也还可以,如果数组未初始化触发异常的话效率直降百倍


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 36回复贴,共1页
<<返回vb吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示