指针 (Pointers)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgPointers
- 最后更新: 2019-07-04
值为内存地址的数据类型。
声明
指针是变量,其值为内存地址,称为"指向"该内存。所指向数据的类型取决于指针的类型(Integer 指针指向 Integer 数据)。指针的声明方式与任何其他变量相同,在类型名称后加后缀 "pointer" 或 "ptr"。
赋值指针变量
指针是一个内存地址,指针本身的值就是那个内存地址。赋值一个指针变量就是为它赋予某物的内存地址。为指针赋予内存地址的一种方式是使用 Operator @(取地址)获取程序中其他变量的地址。
访问指针所指向的数据
指针所指向的数据可以用 Operator *(取值)来访问。该运算符返回其操作数所指向数据的引用。以下代码:
start GeSHi
Dim myInteger As Integer = 10
Dim myPointer As Integer Pointer = @myInteger
*myPointer = 20
Print myIntegerend GeSHi
定义了一个名为 myInteger 的 Integer 变量和一个名为 myPointer 的 Integer 指针,该指针指向 myInteger 在内存中的存储位置。Operator @(取地址)用于获取 myInteger 的地址。值 20 被赋给 myPointer 所指向的位置——myInteger 的地址,即 @myInteger。对 *myPointer 的更改会直接影响 myInteger 的值(表达式 "*myPointer" 与 "myInteger" 等价)。
指向用户定义类型的指针
指向用户定义类型的指针的定义和使用方式与所有其他指针相同。访问 Type 或 Class 的成员需要以下两种方法之一:
start GeSHi
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->bend GeSHi
第一种方法使用 Operator .(成员访问)。此运算符通过引用访问成员,因此先对指针解引用。成员访问运算符的优先级高于解引用运算符,因此需要括号在使用成员访问运算符之前先对指针解引用。
第二种方法使用 Operator ->(通过指针访问成员)。此运算符通过指针访问成员,指针会自动解引用。这可以使代码更清晰,尽管两种形式产生相同的结果。
参见
Operator @ (Address of)Operator * (Value of)Operator . (Member access)Operator -> (Pointer to member access)VarptrStrptrProcptr
返回 目录