关于Object Pascal的变量及类实例的存取结构(200分全部家当附送)(200分)

  • 主题发起人 主题发起人 liuyuch2000
  • 开始时间 开始时间
L

liuyuch2000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄:
本人由于对OBJECT PASCAL的存取结构不甚了解,已经在编程的大道上数次碰壁。而
手上也没有现成的PASCAL的书,因此劳动大家指点指点。
范围:所有OBJECT PASCAL的基本变量及对象的基本情况
重点:string,longstring,数组,TBUTTON
 
这个基本的问题难道就没有人能够回答吗??
 
你不明白的就贴出来,我帮你看看你的代码
 
这种问题可能还是自己看书能搞得清楚一些
string默认是longstring,为单字节的ansistring,可由编译控制符控制
可以看作是字符数组,string为Char,如果是WideString则为WideChar
Delphi的LongString是生存期自管理类型,也可以用SetLength函数手动为其分配内存
数组是一个连续内存空间,可通过下标来访问数组中每个元素的值....
建议你看看<Delphi5从入门到精通>这本书,以及<delphi高级编程指南>
特别是后者,有较大篇幅在讲这个,当然Delphi的在线帮助也是非看不可的,特别是
对String与PChar的比较那几节。
 
[BLUE]上网下载一些电子书看看,一定有所收获![/BLUE]
 
去下一本Object Pascal 看看吧。
 
比如说:TString的声明里有如下代码
procedure TStrings.LoadFromStream(Stream: TStream);
var
Size: Integer;
S: string;
begin
BeginUpdate;
try
Size := Stream.Size - Stream.Position;
SetString(S, nil, Size);
Stream.Read([red]Pointer(S)^, [/red]Size);
SetTextStr(S);
finally
EndUpdate;
end;
end;
其中stream.read(pointer(S)^,Size)为什么要这样写呢?
 
Stream.Read(var Buffer
Count: Integer);
把Stream的内容以当前位置开始写Count字节到Buffer中
S是生存期自管理类型,在内存中其实只是一个指向真正保存字符串的内存的指针
所以先把它强制成Pointer,其所指向的就是保存字符串的Buffer了,即Pointer(S)^
 
在这里也可以传S[1]过去,因为S[1]就是保存字符串内存的第一个位置
Stream.Read(S[1], Size);
//下面的代码执行后Memo1与Memo2的内容是一样的。
procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
Stream: TFileStream;
Buffer: Pointer;
begin
Stream := TFileStream.Create('E:/Test.pas', fmOpenRead);
SetLength(S, Stream.Size);
Stream.Position := 0;
Stream.Read(S[1], Stream.Size);
Memo1.Text := S;
Stream.Position := 0;
Stream.Read(Pointer(S)^, Stream.Size);
Memo2.Text := S;
end;
 
to xianjun:
即然是这样,那你对string的结构一定很清楚了,请不吝赐教!
 
呵呵, 我所知的也说得差不多了
建议你看看Delphi自带的帮助<Building applications with Delphi>里的Working with strings
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
694
import
I
后退
顶部