在说指针时,我们不得不说一下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