指针间赋值的问题

gw_sh 2003-11-19 03:50:37
比如C中可有如下代码,但如何在delphi下实现:
....
int *p, *pp;
....
p=malloc(...);
pp=p+1;
....
pp[-1]=...;
...全文
22 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
gw_sh 2003-11-20
  • 打赏
  • 举报
回复
晚些时候我会结帖的,虽然有点遗憾,delphi的指针要是能像c中那样可以以数组方式存取就方便了。
hiflower 2003-11-20
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
type
TArray=array of Integer;
var
p:PInteger;
a:TArray;
i:Integer;
begin
GetMem(p,10*SizeOf(Integer));
a:=TArray(p);
for i:=1 to 10 do
begin
p^:=i;
Inc(p);
end;

for i:=1 to 10 do
begin
ShowMessage(Inttostr(a[i-1]));
end;
a:=nil;
//FreeMem(p);
end;

不能确定是否有内存泄漏:)
gw_sh 2003-11-20
  • 打赏
  • 举报
回复
还是不甘心,换一种问法:delphi是否允许把一个数组的地址副给另一个数组,然后再这样存取:
pp=p+1;
pp[-1]=...;
hiflower 2003-11-20
  • 打赏
  • 举报
回复
只有 PChar 类型才能象数组一样操作
gw_sh 2003-11-19
  • 打赏
  • 举报
回复
这样的操作好像麻烦了点,不过还是谢谢花了。
jacky_shen 2003-11-19
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
I, II: PInteger;
begin
GetMem(I, Sizeof(Integer) * 10); // p=malloc(...);
II := SysReallocMem(I, Sizeof(Integer) * 1); // pp=p+1;
FreeMem(I);
end;
hiflower 2003-11-19
  • 打赏
  • 举报
回复
pp:=PInteger(Integer(p)+SizeOf(Integer));
PInteger(Integer(pp)+SizeOf(Integer)*(-1))^:=.....
gw_sh 2003-11-19
  • 打赏
  • 举报
回复
关键是我想在分配指针后用数组的方式存取,比如:
//c version
....
int *p, *pp;
....
p=malloc(...);
pp=p+1;
....
pp[-1]=...;//**like this**
//////////////
在delphi中这样的操作好像不允许,不只如何解决
SGP 2003-11-19
  • 打赏
  • 举报
回复
inc(p) = c中的 p++
dec(p) = c中的 p--
gw_sh 2003-11-19
  • 打赏
  • 举报
回复
不知在分配内存后,p可不可以这样存取:p[x]:=..,好像delphi中不行
zhaojinghui 2003-11-19
  • 打赏
  • 举报
回复
var
p,pp : ^Integer;
begin
try
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
finally
Dispose(p);
Dispose(pp);
end;
zhaojinghui 2003-11-19
  • 打赏
  • 举报
回复
var
p,pp : ^Integer;
begin
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
Dispose(p);
Dispose(pp);
zhaojinghui 2003-11-19
  • 打赏
  • 举报
回复
var
p,pp : ^Integer;
begin
New(p);
new(pp);
p^ := 1;
pp := p;
ShowMessage(IntToStr(p^));
ShowMessage(IntToStr(pp^));
hiflower 2003-11-19
  • 打赏
  • 举报
回复
方法1:
var
p,pp:PInteger;
begin
GetMem(p,n);
pp:=PInteger(Integer(p)+SizeOf(Integer));
end;
方法2:
var
p,pp:^Integer;
begin
GetMem(p,n);
pp:=p;
Inc(pp);
end;
gw_sh 2003-11-19
  • 打赏
  • 举报
回复
拜托请先看清楚问题。pp=p+1,在delphi中好像不能进行这样的操作
konhon 2003-11-19
  • 打赏
  • 举报
回复
var
p,pp:^integer;
i:integer;

new(p);
new(pp);//自动
p:=&i;//I的地址

dispose(p);
dispose(pp);
gw_sh 2003-11-19
  • 打赏
  • 举报
回复
up

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧