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;
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;
参见《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;