首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

初学delphi希望大家指点几个小问题

2012-02-14 
初学delphi希望大家指点几个问题我不太了解。则么样才能得到一个PDouble指针在我开辟的内存空间上的每个值。

初学delphi希望大家指点几个问题
我不太了解。则么样才能得到一个PDouble指针在我开辟的内存空间上的每个值。
int   *ptr  
int   i;  
ptr   =   (double   *)   malloc(sizeof(double)   *   20);  
ptr2   =   ptr;  
for   (i=0;   i <20;   i++){  
    *ptr   =   i;  
    ptr++;  
}  

这个是c语言的代码,*ptr就是这个指针的所指的值
那么r任意一个不越界的地址应该就是*(ptr+i)
delphi
怎么表示呢,这个代码我是在网上copy的,所以千万别把这个代码copy过来说,我看不懂才问的

[解决办法]
试着翻译了一下你的代码。不知道这段代码是干什么用的。供参考

procedure TForm1.Button1Click(Sender: TObject);
var
Ptr, Ptr2 : PInteger;
I : Integer;
begin
GetMem(Ptr, SizeOf(double)*20);
Ptr2 := Ptr;
for I := 0 to 20 do
begin
Ptr^ := I;
Inc(Ptr);
end;
//上面这一段就是翻译的你的C代码
Ptr := Ptr2;
for I := 0 to 20 do
begin
ShowMessage(FloatToStr(Ptr^));
Inc(Ptr);
end;
Ptr := Ptr2;
FreeMem(Ptr, SizeOf(Double)*20);
end;
[解决办法]
循环取值(从头开始)的代码,已以上面给出;

如果想直接根据偏移值取值,可以这样:

var
Ptr, Ptr2 : PInteger;
I : Integer;
begin
GetMem(Ptr, SizeOf(double)*20);
Ptr2 := Ptr;
for I := 0 to 20 do
begin
Ptr^ := I;
Inc(Ptr);
end;
//上面这一段就是翻译的你的C代码 即赋值部分
Ptr := Ptr2;
integer(Ptr) := integer(Ptr)+SizeOf(integer)*3; //偏移3个integer类型的空间
ShowMessage(FloatToStr(Ptr^)); //取Double值
Ptr := Ptr2;
FreeMem(Ptr, SizeOf(Double)*20);
end;

热点排行