RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
浅谈Object Pascal的指针
  • 作者:zhaozj
  • 发表时间:2020-12-23 10:35
  • 来源:未知

浅谈Object Pascal的指针
作者:Nicrosoft 阅读:1565 次 时间:2001-8-26 来源:Nicrosoft个人网站

  大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C语言的灵魂,一点都不为过。同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针。Basic不支持指针,在此不论。其实,Pascal语言本身也是支持指针的。从最初的Pascal发展至今的 Object Pascal,可以说在指针运用上,丝毫不会逊色于C语言的指针。

  以下内容分为八个部分,分别是

  一、类型指针的定义  二、无类型指针的定义  三、指针的解除引用  四、取地址(指针赋值)  五、指针运算  六、动态内存分配  七、字符数组的运算   八、函数指针

  一、类型指针的定义。对于指向特定类型的指针,在C中是这样定义的:    int *ptr;    char *ptr;    与之等价的Object Pascal是如何定义的呢?    var ptr : ^Integer;      ptr : ^char;    其实也就是符号的差别而已。

  二、无类型指针的定义。C中有void *类型,也就是可以指向任何类型数据的指针。Object Pascal为其定义了一个专门的类型:Pointer。于是,    ptr : Pointer;    就与C中的    void *ptr;    等价了。

  三、指针的解除引用。要解除指针引用(即取出指针所指区域的值),C 的语法是 (*ptr),Object Pascal则是 ptr^。

  四、取地址(指针赋值)。取某对象的地址并将其赋值给指针变量,C 的语法是    ptr = &Object;    Object Pascal 则是    ptr := @Object;    也只是符号的差别而已。

  五、指针运算。在 C 中,可以对指针进行移动的运算,如:    char a[20];    char *ptr=a;    ptr++;    ptr+=2;    当执行ptr++;时,编译器会产生让ptr前进sizeof(char)步长的代码,之后,ptr将指向a[1]。ptr+=2;这句使得ptr前进两个sizeof(char)大小的步长。同样,我们来看一下Object Pascal中如何实现:    var a : array [1..20] of Char;      ptr : PChar; //PChar 可以看作 ^Char    begin      ptr := @a;      Inc(ptr); // 这句等价于 C 的 ptr++;       Inc(ptr, 2); //这句等价于 C 的 ptr+=2;    end;