指针被类型化以表示在它指定的位置上存储某一类型的数据。
指定类型的指针只表示特定类型的数据。指针在内存中占据
Overview of pointers(指针概述)
要了解指针如何工作,看下面的例子:
1 var
2X, Y: Integer;// X和Y是整数变量
: ^Integer;// P指向一个整数
4 begin
5X := 17;// 给X赋值
6P := @X;// 把X的地址赋给P
7Y := P^;// dereference P;把结果赋给
8 end;
第2行声明X和Y为整数类型的变量,第3行声明P是一个指向整数的指针,这表明
- 62 - Pointer4个字节。Y P可以指向X或 类型表示一个任意类型的指针,而
Data types, variables and constants
Y的存储位置。第5行把一个值赋给X,第6行把X的地址(用@X表示)赋给P。最后,在第7行,取得P所指位置的值(用P^表示)并把它赋给Y。这些代码执行后,X和Y有相同的值,即17。
@运算符,这里我们用来取得一个变量的地址,它同样可用于函数或过程。要了解更多信息,请参考The @ operator和Procedural types in statements and expressions。
^符号有两个用途,在我们的例子中都用到了。当它出现在一个类型标志符前面时: ^typeName
它表示一个指向typeName类型的变量的指针;当它出现在一个指针变量的后面时:
pointer^
它表示对指针解除引用,换句话说,它返回在指针所指向的地址处保存的值。
我们的例子看起来是在兜圈子,它只不过是把一个变量的值复制给另一个变量而已,我们完全可以通过一个简单的赋值语句来完成,但指针有几个用途:首先,理解指针能帮助你理解常在代码中虽然没有明确使用指针,但它们却在背地里发挥作用。使用大的、动态分配内存(块)的任何数据类型都使用指针。例如,长字符串就是一个隐含的指针,类变量也是;此外,一些高级的编程技术需要使用指针。
最后,指针有时是跳过Object Pascal严格的(数据)类型匹配的唯一方法。使用一个通用指针(来引用一个变量,并把它转换为其它类型,然后重新引用它,这样你就可以把它作为任何类型对待。比如,下面的代码把一个实数变量的值赋给一个整数变量。type
PInteger = ^Integer; var
R: Single; I: Integer; P: Pointer; PI: PInteger; begin ...
P := @R;
PI := PInteger(P); I := PI^; end;
当然,实数和整数有不同的存储格式,上面的赋值只简单地把除了使用@运算符,你也可以使用几个标准例程给一个指针赋值。赋给指针,而Addr和Ptr函数则返回一个指向特定变量或地址的指针。像P1^.Data^表示的那样,对指针解除引用可用作限定符,也可以被限定。保留字nil是一个特殊常量,可赋给任何指针(类型)Pointer types(指针类型)About pointer types(关于指针类型)使用下面的语法,你能声明一个任意类型的指针,type pointerTypeName = ^type
当定义一个记录类型(或其它数据类型)我们不需要拷贝一大块内存。
标准指针类型有许多理由存在,最通用的是
R。当nil被赋给一个指针时,指针不表示任何东西。
习惯上也就定义了一个此类型的指针,Pointer,它可以指向任何数据类型,但不能对它解除引用,
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-43.html
这酒怎么酿的这成本压缩真是厉害厉害
给观众带来更多更好的作品
我们就不仅仅是丧失机遇的问题了