VisualFreeBasic代码_变量指针

2026-1-21 / 0 评论 / 46 阅读

普通变量类型指针

以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, 未知指针)

评论一下?

OωO
取消