Skip to content

指针 (Pointers)


值为内存地址的数据类型。

声明

指针是变量,其值为内存地址,称为"指向"该内存。所指向数据的类型取决于指针的类型(Integer 指针指向 Integer 数据)。指针的声明方式与任何其他变量相同,在类型名称后加后缀 "pointer" 或 "ptr"。

赋值指针变量

指针是一个内存地址,指针本身的值就是那个内存地址。赋值一个指针变量就是为它赋予某物的内存地址。为指针赋予内存地址的一种方式是使用 Operator @(取地址)获取程序中其他变量的地址。

访问指针所指向的数据

指针所指向的数据可以用 Operator *(取值)来访问。该运算符返回其操作数所指向数据的引用。以下代码:

start GeSHi

vb
Dim myInteger As Integer = 10
Dim myPointer As Integer Pointer = @myInteger
*myPointer = 20
Print myInteger

end GeSHi

定义了一个名为 myIntegerInteger 变量和一个名为 myPointerInteger 指针,该指针指向 myInteger 在内存中的存储位置。Operator @(取地址)用于获取 myInteger 的地址。值 20 被赋给 myPointer 所指向的位置——myInteger 的地址,即 @myInteger。对 *myPointer 的更改会直接影响 myInteger 的值(表达式 "*myPointer" 与 "myInteger" 等价)。

指向用户定义类型的指针

指向用户定义类型的指针的定义和使用方式与所有其他指针相同。访问 TypeClass 的成员需要以下两种方法之一:

start GeSHi

vb
Type myType
    a As Integer
    b As Double
End Type

Dim x As myType
Dim p As myType Pointer = @x

'' 1) 解引用指针并使用成员访问运算符:
(*p).a = 10
(*p).b = 12.34

'' 2) 使用成员访问运算符的简写形式:
Print p->a
Print p->b

end GeSHi

第一种方法使用 Operator .(成员访问)。此运算符通过引用访问成员,因此先对指针解引用。成员访问运算符的优先级高于解引用运算符,因此需要括号在使用成员访问运算符之前先对指针解引用。

第二种方法使用 Operator ->(通过指针访问成员)。此运算符通过指针访问成员,指针会自动解引用。这可以使代码更清晰,尽管两种形式产生相同的结果。

参见

  • Operator @ (Address of)
  • Operator * (Value of)
  • Operator . (Member access)
  • Operator -> (Pointer to member access)
  • Varptr
  • Strptr
  • Procptr

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系