All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
初学来看:动态网页制作技术PHP的常量类型_php资料_编程技术
PHP函数:PHP的通用检测函数总结_[PHP教程]
常用PHP函数功能中文对照表_[PHP教程]
xml数据存入数据库的解决办法_[XML教程]
利用.net反射动态调用指定程序集的中的方法_[Asp.Net教程]
用PHP技术解决网站URL格式过长的问题_[PHP教程]
C#教程:注册表概述
HTML组件HTML COMPONENTS之五_[Html教程]
MVC,3.0,在各个版本IIS中的部署_.net资料_编程技术
Debian下Apache2+Mysql5+Php5的安装配置_php资料_编程技术
Reading number is top 10 pictures
含苞欲放的素颜美少女1
沙漠里的美女
西班牙山村小景5
Ashlynn Brooke a group sexy photo2
The real super beauty5
The money of more than 100 countries and regions14
Sell the barbecue as says father du breul3
Players in the eyes of a perfect love1
关于提肛的健身效果
The real super beauty12
Download software ranking
Such love down(擒爱记)
Tram sex maniac 2 (H) rar bag14
Unix video tutorial9
Unix video tutorial10
Desire a peach blossom
Boxer's Top ten classic battle6
Unix video tutorial7
Boxer's Top ten classic battle7
Tram sex maniac 2 (H) rar bag17
Unix video tutorial14
aaa published in(发表于) 2014/7/19 0:09:51 Edit(编辑)
Delphi函数中参数的使用实例-方法

Delphi函数中参数的使用实例-方法

Delphi函数中参数的使用实例|方法|技巧

参数

函数定义时参数列表中的参数称为形参,函数调用时参数列表中的参数称为实参。在定义的函数原型中,多个参数之间用分号隔开,同一类型的参数可以放在一起,以逗号隔开。函数调用的时候,在函数原型中,多个参数之间用逗号隔开。

一般来说,形参列表和实参列表完全匹配是指参数的个数一样,而且顺序排列的数据类型也完全一致。对于普通的函数,如果编译器发现实参的数据类型与形参的数据类型不匹配,会将实参的数据类型进行一次或多次的“提升”,比如把Integer 类型转换为Double 类型。可以为过程和函数的参数指定默认数值。

指定默认数值的参数要放在参数列表的后部,而没有指定默认数值的参数要放在参数列表的前部。在函数调用的时候,可以为设置了默认值的参数指定一个新值。在函数体中,各语句使用的是指定的新值,如果没有指定新值,则使用默认值。同样,如果存在多个设置了默认值的参数,只有在前面的参数指定了新值后,后面的参数才可以指定新值。

下面的例子定义了一个OutputNum 函数,可以将一个浮点数按指定的精度输出。通过这个例子,

读者可以体会函数中参数的使用:

program Project1;

{$APPTYPE CONSOLE}

uses Sysutils; //为了使用函数Format

function OutputNum(number:double;n:integer = 5):Boolean;

var

Str : string; //浮点数显示输出的内容

begin

if n <= -1 then //小数点后的位数要大于或等于0

begin

Result:=False;

Exit; //退出显示函数

end

else

begin

// 设置显示的格式

Str := Format(’%*.*f’, [10, n, number]);

Result := True ;

Writeln(Str); //显示数据

end;

end;

begin

OutputNum(12.345); //n 默认为5

OutputNum(123,3); //参数对数据类型进行升级

//下面一句代码不正确,故屏蔽掉

//OutputNum(123.456789,9.13); //参数对数据类型不能降级

//可以根据函数的返回值确定下一步的操作

if OutputNum(123.456789,-3) = False then

Writeln( ’输出失败。’ ) ;

Readln;

end.

运行结果如下:

12.34500

123.000

输出失败。

这里有几点需要说明:

• 为了使用函数Format,需要在Uses 语句中将Sysutils 单元包含进去。

• 由于小数点后的位数不可以设置为负数,所以当出现负数时,OutputNum 函数返回False,并调用Exit 函数立刻退出OutputNum 函数。

• 在语句OutputNum(123,3)中,首先将整型常数123 转换为浮点型常数,然后进行参数传递。

最常用的参数有3 种,分别为数值参数、变量参数和常量参数。

数值参数在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到过程的外面。试看下面的例程:

procedure Calculate(CalNo:Integer);

begin

CalNo := CalNo*10;

end;

用以下例程调用Calculate 函数:

Calculate(Number);
Number 进入Calculate 函数后,会把Number 实参拷贝给形参CalNo,在此过程中CalNo 增大10倍,但并未传递出来,所以说Number 值并未改变。形参和实参占用不同的内存地址,在过程或函数被调用时,将实参的值复制到形参占用的内存中。因此,在跳出过程或函数后,形参和实参的数值是不同的,但实参的值并不发生变化。

如果想改变传入的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字Var。例如:

procedure Calculate(var CalNo : Integer);

则CalNo 并不在内存中占据一个位置,而是指向实参Number。当一个实参被传递时,任何对形参所作的改变都会反映到实参中,这是因为两个参数指向同一个地址。将上一个例程中的形参CalNo前面加上Var,再以同样的程序调用它,则在第2 个编辑框中会显示计算的结果,把第1 个编辑框中的数值放大10 倍。这时形参CalNo 和实参Number 的值都是Nnmber 初始值的10 倍。

如果过程或函数执行时要求不改变形参的值,最有保证的办法是使用常量参数。在参数表的参数名称前加上保留字Const 就可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护用户的参数,使用户在不想改变参数值时不会意外地将新的值赋给这个参数。下面的例子可以帮助读者加深理解:

program Project1;

{$APPTYPE CONSOLE}

type

PInteger = ^Integer; //定义指针类型

procedure P1(var N:Integer); //引用参数传递

begin

N:=N+1 ;

end;

procedure P2(N:Integer); //普通参数传递

begin

N:=N+2;

end;

procedure P3(PT:PInteger); //传递指针参数

begin

PT^:=PT^+3;

end;

var

i:Integer;

begin

i:=1;

P1(i); //将i 的值增加1

Writeln(’i:’,i);

P2(i); //希望将i 加2,但没有实现

Writeln(’i:’,i);

P3(@i); //将i 加3

Writeln(’i:’,i);

Readln;

end.

运行结果如下:

i:2

i:2

i:5

这里有几点需要说明:

• 一开始变量i 的数值为1,经过P1 过程的处理,将i 加1,所以显示的第1 个i 的数值为2,这时使用的是引用参数传递。

• 在过程P2 中,将形参的数值增加了2,实际上i 并没有增加,所以显示的第2 个i 的数值仍然为2。在这种情况下,正常的做法可以使用函数的返回值,例如:

Result:=N+2;
在调用函数的时候使用:

i:=P2(i);
• 在过程P3 中,传递的是变量I 的指针,所以操作是针对i 进行的,第3 次显示i 的数值是5。




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.