读书人

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

发布时间: 2012-02-14 19:19:19 作者: rapoo

初学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;

读书人网 >.NET

热点推荐