2)
没有问题.
String类型其实是一个指针(你用SizeOf()测试一下就可以知道,无论你的字符串里有多少字,返回值都是4), Delphi会在内部维持一个引用记数,在没有人使用时候就会自动释放.
没有问题.
String类型其实是一个指针(你用SizeOf()测试一下就可以知道,无论你的字符串里有多少字,返回值都是4), Delphi会在内部维持一个引用记数,在没有人使用时候就会自动释放.
解决方案 »
- 假如你是领导,你会选哪中程序员
- 如何实现XML转换XTR
- 点击按钮显示隐藏按钮。
- 会MySql的帮帮忙!求助
- 请教一下用TQuery控件后的问题.
- 关于fastreport或quickReport的相同问题!
- 关于Treeview某节点的值被修改后,数据库某字段值更新成新的值的问题,进来看看,up有分
- 北大方正文档与WORD文档怎样转换?
- DELPHI连接ORACLE的问题。
- 关于 DBGRID 的问题, 急!
- 送分问题——listview使用了imagelist设置了图标,如何使得item被选中时相应的图标颜色不变呢?
- www.shd.com.cn的各类“技术论坛”分别诚聘有月薪的版主!!!
function xpro:integer 相当于
procedure xpro(var result:integer);
所以可以正确返回值,至于生存期,应该是在返回值之后就释放result,可能是这样的:var
i:integer;
begin
i:=xpro; //获得result后result分配的空间被释放
function Foo: integer;
begin
...
Result := 100;
end;
...
var n: integer;
...
n := Foo; { 这里在调用 Foo 前就将 n 的地址传递给 Foo 函数(像 TechnoFantasy 说的,可以认为 Result 是一个特殊的隐藏的 Var 参数),到了 Foo 里的 Result 就是 n 的地址了 }
...
s是一个指针,指向堆中分配的字符串,引用计数为1
result := s时,result 指向同一字符串,引用计数变为2
返回时s被释放,引用计数减为1
result 回到调用处,一般是通过AL/AX/EAX/EDX:EAX的方式返回到调用者处。
如:Procedure yy;
Var
s1 : String;
Begin
s1 := xx;
End;此时就是S1指向那个字符串,引用计数仍为1。直到YY退出时,S1被释放,引用计数为0,则堆中那个字符串才被释放。
第二个问题前面都说了,我就不说了。