在说指针时,我们不得不说一下C语言当中的指针,当然如果你没有学过C语言
那么我觉的下面的写的内容你在理解上会有些吃力,因为本篇文章和以后的文章
当中我会用C语言当的指针来对应的来理解D当中的指针,因为我个人觉的他们真
的是太像了,(除了符号外);
一、类型指针的定义;
(1).在C语言当中我们假如我们要定义一个整形的指针变量;
# include <stdio.h> ..... int *ptr; char *ptr1; return 0; }
对应的在D中是这样的定义的;
var ptr :^integer; {相当于c int *ptr} ptr1 :^char; {相当于c char *ptr1}
二、无类型指针的定义;
(1).在C语言当中我们如果要定义一个无类型的指针;如下
# include <stdio.h> ...... void *ptr; return 0; }
在D当是这样定义的;{(C语言 void)=(Delphi Pointer)}
var ptr: Pointer;
三、指针的解除和引用;
(1).还是用C语言当中的简单例子来说我们的D;
# include <stdio.h> ........ ptr = &Object; ...... return 0; }
在D中则是;
var x, y:integer; p:^integer; begin x:=17; p:=@x; y:=p^; Writeln(format('值为:%d',[y])); Readln; end; end.
小结:
前面我们说了D当中的指针和我们的C当中的指针太像了
也就只有符号不同罢了。所以理解好D当中的指针我认为前
提是先对C当中指针有一定的认识。这样理解起来会更好。
四、指针运算。
呵呵!还是从我们的C来说起吧!!!哥们看代码;
# include <stdio.h> ..... ..... char a[20]; char *ptr = a; ptr++; ptr+=2; return 0; }
下面我们就来看看在D中是如何实现上面的C代码;
var a:array[1..20] of Char; ptr:PChar; //我们可以将Pchar看作:^Char; begin inc(ptr);//Inc相等于C当中的 "++"; inc(ptr, 2); //相等于C当中的 "+="; end;
五、动态内在分配;
还是照我们我们的原来的方法从C语言来说起在C语言当中我们如果要动态的分配内存则
要用到一个函数“malloc”(在头文件中包含:“malloc.h”)
# include <stdio.h> # include <malloc.h> int main(void) { int *p, *ptr2; int i; ptr = (int*)malloc(sizeof(int) * 20); ptr2 = ptr; for(i = 0; i < 20; i++ ) { *ptr = i; ptr++; } free(ptr2); return 0; }
在D中我们是这样实现的;
var ptr, ptr2:^integer; i: integer; begin GetMem(ptr, sizeof(integer) * 2); //这句等价于c的ptr = (int*)malloc(sizeof(int) * 20) ; ptr2:=ptr; for i :=0 to 19 do begin ptr^ :=i; inc(ptr); end; FreeMem(ptr2); end;
关于指针就介绍到这里,本人水平有限文章有写的不对,请大家指点。
thanks