指针的指针的问题 ^pchar

lbisme 2008-09-13 11:54:25
procedure TForm1.btn1Click(Sender: TObject);
type
rd=record
i:^pchar;
end;
var
a:char;
pa:pchar;
p:^pchar;
r1:rd;
begin
a:='w';
pa := @a;
r1.i :=@pa;
p:= Pointer(r1.i);//若写为p:=r1.i则编译时提示:Incompatible types,为啥?
caption := p^^;
end;
...全文
67 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihuasoft 2008-09-13
  • 打赏
  • 举报
回复
很简单,原因就是Delphi/ObjectPascal对类型的检查非常严格,将不在同一行申明的两个^X指针视为不同类型的指针.
参见《Delphi开发人员指南》第45页。
例如:
var
a:^integer;
b:^integer;
begin
a := b; //编译器报错:不同类型。
end;

如改为:
type
PInteger = ^integer;
var
a:PInteger;
b:PInteger;
begin
a := b; //OK
end;

或者:
var
a, b:^integer;
begin
a := b; //OK
end;

没其他的原因,就是因为编译器对程序员负责,检查很严格。相对于说C/C++就是弱类型定义语言了。

你的程序如果这样改就没问题了:

type
TP=^pchar;
rd=record
i:TP;
end;
var
a:char;
pa:pchar;
p:TP;
r1:rd;
begin
a:='w';
pa := @a;
r1.i :=@pa;
p:= r1.i;//没问题
caption := p^^;
end;
rainlovesea 2008-09-13
  • 打赏
  • 举报
回复
EN

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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