Pointer(Result)^ 的意思??

xabcxabc 2008-04-24 12:10:14


//转换函数
//下面是通过流的方式读入一个文本文件FileName,返回string类型
//
function TForm1.BlobContentToString(const FileName: String): String;
begin
with TFileStream.Create(FileName,fmOpenRead) do
try
SetLength(Result,Size);
Read(Pointer(Result)^,size);
finally
Free
end;
end;

请问:
1:Pointer(Result)^什么意思
2:如何与TFileStream的Read
function Read(var Buffer; Count: Longint): Longint;
函数匹配
谢谢了。
...全文
188 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
接分是王道!
手指风 2008-04-26
  • 打赏
  • 举报
回复
function StrAlloc(Size: Cardinal): PChar;
begin
Inc(Size, SizeOf(Cardinal));
GetMem(Result, Size);
Cardinal(Pointer(Result)^) := Size;
Inc(Result, SizeOf(Cardinal));
end;
你看看SysUtils单元的这个函数,String和PChar你就姑且看作是一样的好了。
blazingfire 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 i_mimi 的回复:]
呵呵其实就是把Result 转乘指针 然后再解引用
Delphi的String 索引是从1开始的 pointer转换一把就是转成了PChar
[/Quote]

:TStream.Read(var Buffer, Size: Integer): Integer
注意第一个参数是Var类型,这种类型在C++,C#里叫引用,Delphi中没有找到相关的文档到底叫什么个类型。
不过我们叫它为引用也是可以的。其实这种类型在D的编译器中还是用指针实现的!还有一个在out类型也是这样
skylkj 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skylkj 的回复:]
引用 4 楼 blazingfire 的回复:
Read(Pointer(Result)^,size);
取得串第一个字符里的引用,相当于
Read(Result[1], Size);


那这样岂不是这种用法是错误的?

按理说应该是Read(@Result[1], Size)或者Read(Result, Size); 吧....
[/Quote]

我理解错了

谢谢
僵哥 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 skylkj 的回复:]
引用 4 楼 blazingfire 的回复:
Read(Pointer(Result)^,size);
取得串第一个字符里的引用,相当于
Read(Result[1], Size);


那这样岂不是这种用法是错误的?

按理说应该是Read(@Result[1], Size)或者Read(Result, Size); 吧....
[/Quote]
请注意read的参数类型。
skylkj 2008-04-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 blazingfire 的回复:]
Read(Pointer(Result)^,size);
取得串第一个字符里的引用,相当于
Read(Result[1], Size);
[/Quote]

那这样岂不是这种用法是错误的?

按理说应该是Read(@Result[1], Size)或者Read(Result, Size); 吧....
whisht 2008-04-24
  • 打赏
  • 举报
回复
查阅指针相关文档
bds248 2008-04-24
  • 打赏
  • 举报
回复
就是从你的Result的第一个字符开始,读取size个字符。
cnzzlp 2008-04-24
  • 打赏
  • 举报
回复
你的result 是个string类型
SetLength(Result,Size);//分配了大小 TFileStream.size

Read(Pointer(Result)^,size);
相当于从一个字符数组(string型)的第一个字符,读取size个字符
米的向日葵 2008-04-24
  • 打赏
  • 举报
回复
呵呵其实就是把Result 转乘指针 然后再解引用
Delphi的String 索引是从1开始的 pointer转换一把就是转成了PChar
blazingfire 2008-04-24
  • 打赏
  • 举报
回复
Pointer(Result)^=>(@Result[1])^=>Result[1]
blazingfire 2008-04-24
  • 打赏
  • 举报
回复
Read(Pointer(Result)^,size);
取得串第一个字符里的引用,相当于
Read(Result[1], Size);

5,386

社区成员

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

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