注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

隐龙 为了一生的信念

今日默默沉于水,他日飞腾在九天...

 
 
 

日志

 
 

DELPHI内存详解(6)-函数返回值  

2012-07-09 13:36:08|  分类: Delphi |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Delphi函数在返回值的处理上,对于32简单数据类型(不包括浮点数类型),是使用eax返回的,如Integer等;对于64位简单数据类型,是使用edx:eax返回的,如int64类型,而对于结构体返回值来说,长度在32位及以下是通过eax返回的,32位以上返回有点区别,不是“32位以上用寄存器返回指针”,而是在调用前传递了一个默认指针参数。如下面例子的function IncX: TTest;函数,在TTest类型长度大于32位时,实际上等同于于procedure IncX(var v: TTest)或者procedure IncX(v: ^TTest)。下面例子非常有意思:

下面的代码中,定义了一个记录类型,定义了2个同名的方法(同不同名无所谓),v1v2x字段都初始化为10,分别调用2个方法后。提问:

1v1.xv2.x的值分别为多少?(要求不要在机上测试)

2、假如从记录定义中去掉y字段,v1.xv2.x的值又分别为多少?(要求不要在机上测试)

type

TTest = record

    x: Integer;

    y: Integer;

end;

procedure IncX(var v: TTest); overload;

begin

Inc(v.x);

end;

function IncX: TTest; overload;

begin

Inc(Result.x);

end;

var

v1, v2: TTest;                             

begin

v1.x := 10;

v2.x := 10;

v1 := IncX;

IncX(v2);

end;

试题的结果是:两个都是11

DELPHI的函数返回值一定要初始化,如果没有初始化,则返回是一个随机值(没有初始化返回值,DELPHI编译器会告警)。


  评论这张
 
阅读(877)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018