大家来说说指向记录的指针和记录在用法上的异同,详情见里面内容.(100分)

  • 主题发起人 主题发起人 Jhdandcl
  • 开始时间 开始时间
J

Jhdandcl

Unregistered / Unconfirmed
GUEST, unregistred user!
先定义一记录指针,
Type
PMyRec=^TMyRec;
TMyRec=record
Str1:string;
str2:string;
end;
.....
procedure TForm1.Button1Click(Sender: TObject);
var
a:PMyRec;
b:TMyRec;
begin
New(a);
a.Str1:='a.Str1'
//a为一指向TMyRec类型的指针,按理说这句应该是编译通不过的,
可是我测试时通过.??
a^.Str1:='a^.str1'
//a^为指针a所指向的记录型(TMyRec)内存值,
这里a.str1 和a^.str1 有何区别.
Dispose(a);
end;
我的经验是a.str1,和a^.str1 ,虽然用法上有点不一样但是效果都一样,
例;
a.str1:='abc';
showmessage(a.str1)
//显示 'abc'
showmessage(a^.str1)
//还是显示 'abc'
a^.str1:='abc';
showmessage(a.str1)
//显示 'abc'
showmessage(a^.str1)
//还是显示 'abc'
但我想俩者还是应该有区别的,可能是我某个知识点上还没有悟透,请大家谈看法.


 
我也不清楚。好像是没有什么区别。
 
很明显上例中a 是指针型变量, a^ 才是TMyRec型,应该是有区别的.
 
这个真的难坏了!我也不知道DELPHI的编译原理阿!哪里有讲这方面的书的?
 
在delphi中,记录和记录的指针都用 . 来取得成员,和c不一样,
如果在c,可以看出区别: a->str1 和 (*a).str1
但是在delphi,编译器自动帮你处理了,所以在这个方面效果一样,
但是在调用函数的时候,
如果函数定义为: func(var v),调用的时候必须为 func(a^)
如果函数定义为: func(v:PMyVar),调用的时候必须为 func(a)
 
建议还是用a^.Str1好,别被Delphi宠坏了
 
To :Pipi
我在DELPHI help 中没找到任何资料说明,你有相关的说明吗,
 
了解问题,但没有答案.
 
后退
顶部