普通变量类型指针
以Long类型做例题,其它类型用法相同
Dim 变量 As Long
Dim 指针 As Long Ptr
'指针指向实体变量
指针 = @变量
'使用变量,在指针前面加 "*" 那和普通变量无区别使用
'此时 “*指针” 和 “变量” 是同一个变量
*指针 = 1
Print 变量
变量 = 2
Print *指针
数组变量指针
Dim 数组变量(100) As Long
Dim 指针 As Long Ptr
'指针指向实体变量
指针 = @变量(0)
'此时 “*指针[n]” 和 “变量(n)” 是同一个变量
指针[0] = 1
Print 变量(0)
变量(3) = 3
Print 指针[3]
用户定义类型变量指针
Type 用户类型
aa As Long
bb as long
End Type
Dim 变量 As 用户类型
Dim 指针 As 用户类型 Ptr
'指针指向实体变量
指针 = @变量
'此时 “指针->” 和 “变量.” 是同一个变量
指针->aa = 1
Print 变量.aa
变量.bb = 3
Print 指针->bb
构造变量指针
向操作系统申请内存,然后构造出一个变量实体(和真实变量声明一样,构造出后,会初始化操作,数值会默认0,字符为空),但这变量实体并没有变量名,构造出的变量实体,不使用后,需要自己写代码销毁。
- 构造普通变量
Dim 指针 As Long Ptr =New Long
*指针 = 1
Print *指针
Delete 指针 '销毁构造变量,不销毁会内存泄漏
“销毁” 这词是不恰当的,但是我习惯用这个词汇,也有地方我写的教程,写“释放”,是同一个意思,这个意思就是向操作系统申请来内存使用,用后交还给操作系统管理,不然谁都用了不还,系统内存没得用了。“销毁”意思是把这个指针销毁了,后面代码就无法使用此指针,一用软件就崩溃。
- 构造数组变量
Dim 指针 As Long Ptr =New Long[100]
指针[1] = 1
Print 指针[1]
Delete[] 指针 '销毁构造的数组变量,不销毁会内存泄漏
- 构造用户类型
Type 用户类型
aa As Long
bb As Long
End Type
Dim 指针 As 用户类型 Ptr = New 用户类型
指针->aa = 1
Print 变量->aa
Delete 指针 '销毁构造变量,不销毁会内存泄漏
申请内存用于指针
- 普通变量
Dim 指针 As Long Ptr =CAllocate(SizeOf(Long))
*指针 = 1
Print *指针
Deallocate 指针 '销毁内存,不销毁会内存泄漏
- 数组变量
Dim 指针 As Long Ptr =CAllocate(SizeOf(Long)*100)
指针[1] = 1
Print 指针[1]
Deallocate 指针 '销毁内存,不销毁会内存泄漏
- 用户类型
Type 用户类型
aa As Long
bb As Long
End Type
Dim 指针 As 用户类型 Ptr =CAllocate(SizeOf(用户类型))
指针->aa = 1
Print 变量->aa
Deallocate 指针 '销毁内存,不销毁会内存泄漏
指针的指针,多级指针
过于烧脑,功力没到,就不要使用。
Dim 变量 As Long
Dim 指针1级 As Long Ptr
Dim 指针2级 As Long Ptr Ptr
Dim 指针3级 As Long Ptr Ptr Ptr
'....套娃模式,不知道能套多少级....
指针1级 = @变量
指针2级 = @指针1级
指针3级 = @指针2级
变量 = 1
Print *指针1级,**指针2级 ,**指针3级
*指针1级 = 2
**指针2级 = 3
***指针3级 = 4
不知道类型的指针
有些指针,我们并不知道是什么类型,就知道这个是个指针
Dim 未知指针 As Any Ptr
未知指针 = CAllocate(100)
Deallocate 未知指针
未知指针,指定为某类型指针使用
Dim 未知指针 As Any Ptr
未知指针 = CAllocate(100)
*CPtr(Long Ptr, 未知指针) = 100
Print *CPtr(Long Ptr, 未知指针)
Deallocate 未知指针
当然,其它指针也可以转自己需要的类型指针使用
Dim 变量 As Single =100
Dim 指针 As Single Ptr =@变量
Dim 未知指针 As Any Ptr =@变量
Print *CPtr(Long Ptr, 指针), *CPtr(Long Ptr, 未知指针)
评论一下?