发现Delphi中关于函数参数部分的内容还是比较多的,暂时说到这篇随笔为止吧,以后再继续讨论一下函数的参数部分的内容。
一 工程文件
program DefaultParameter; {$APPTYPE CONSOLE} uses SysUtils, Unit1 in 'unit1.pas'; var nVar:integer; strVar:string; i:integer; nVarArray:array of integer; begin { 1、 调用具有默认参数的方法 } //不提供参数 unit1.defaultParameter(10); //提供参数 unit1.defaultParameter(10,'volcanol'); //调用无类型参数的函数 { 1、constant object cannot be passed as var paramter } //WriteLn(noTypeParameter('100')); //这样无法调用 nVar := 100; WriteLn(noTypeParameter(nVar)); //转换时出现了异常,因此不建议使用无类型参数 strVar:= '100'; WriteLn(noTypeParameter(strVar)); //调用短字符串类型参数的函数 for i := 0 to sizeof(ShortString) do begin strVar[i]:='a'; end; shortSringParameter(strVar); //如果将 string类型的变量传递给 shortString 类型变量会自动截断 for i := 0 to sizeof(ShortString) + 128 do begin strVar[i]:= 'a'; end; shortSringParameter(strVar); //动态数组参数 try SetLength(nVarArray,10); WriteLn(Low(nVarArray)); WriteLn(High(nVarArray)); for i := Low(nVarArray) to High(nVarArray) do begin nVarArray[i] := i; end; WriteLn(High(nVarArray)); arrayParameter(nVarArray); except on E:Exception do ReadLn; end; ReadLn; ReadLn; end.
二、单元文件
{ 参数 1、默认参数 2、无类型参数 3、短字符串参数 4、数组参数 } { 1、 和其他的OOP编程语言一样,Delphi的Object Pascal语言也支持方法和函数的 默认参数机制 2、 默认参数在某些场合非常适用,当一些方法、函数的参数在不同的场合调用时 均具有同样的设置时,就可以设置为默认参数 3、 如何函数参数设置过默认参数,那么在调用的时候就可以不提供实际参数 } unit Unit1; interface { 单元文件的结构需要注意 } uses SysUtils; { 单元文件中, type类型定义必须在 uses 子句后面 } type PInt=^integer; { 默认参数 1、默认参数的定义的规则与C++里面默认参数的规则类似 2、默认参数定义的形式参数必须从最后一个参数开始,及从右往左定义 3、如果一个参数定义了默认参数,则其后面的参数均需要定义默认参数 4、如果在一个类型中定义了多个形式参数,则这些形式参数均不能定义默认参数 5、 } procedure defaultParameter(nVar:integer;varStr:string='Delphi'); { 无类型参数 1、无类型参数就是例程声明时形式参数不指定形式参数的类型 2、无类型参数定义时必须用关键字var、const、out之中的一个 3、无类型参数不能使默认的传值方式 4、在使用无类型参数时,必须将参数进行类型转换后才能使用 5、调用时需要注意存在一些限制 A) 整型字面值不能传递给无类型参数 B) 无类型的整型值不能传递给无类型参数 6、由于无类型参数在转换的时候存在太多的限制,建议一般不要使用这种类型的定义 方法 } function noTypeParameter(var noTypeVar):string; { 短字符串参数 1、 短字符串类型 ShortString 是255字节长度的字符串类型 2、 可以通过 string[length] 的方法定义指定长度小于255字节的字符串类型 varStr:string[255]; 就是定义一个长度最大为255字节的字符串变量 3、 形式参数不能用 string[length] 的方式定义 ,如果需要的话就必须定义新的 数据类型 3、 2010以后 string默认为WideString, 需要打开开关才能使 AnsiString类型 } procedure shortSringParameter(strVar:ShortString); { 数组参数 1、数组分为静态数组、动态数组,还有一种数组类型 开发数组 2、静态数组定义为 nVarArray:array[1..10] of integer; //在定义的时候自定数组维度 3、动态数组定义为 定义动态数组类型 nVarArray:array of integer; //定义时不指定数组的维度, 使用前用 SetLength(数组名,第一维的长度,第二维的长度,) 函数申请 数组空间。 3、数组参数在定义时不能指定数组的维度和大小,要使用指定类型的参数,则必须定义 新的数据类型 4、还可以使用开放数组形式定义数组参数 } procedure arrayParameter(nVarArray:array of integer); implementation procedure defaultParameter(nVar:integer;varStr:string='Delphi'); var str:string; begin str := 'Hello ' + varStr; WriteLn(str); end; function noTypeParameter(var noTypeVar):string; var str:string; begin //将 noTypeVar 无类型参数转换为整型数 str:= IntToStr(integer(noTypeVar)); //隐含的变量 result 返回函数值 result := str; end; procedure shortSringParameter(strVar:ShortString); begin WriteLn(strVar); end; { 1、下面的函数执行的过程中还存在一定的问题,需要继续研究一下 2、动态数组的上、下界最好通过Low()、High()函数来求取,所以与 C/C++ 有一点区别 } procedure arrayParameter(nVarArray:array of integer); var i:integer; begin WriteLn(Low(nVarArray)); WriteLn(High(nVarArray)); for i := Low(nVarArray) to High(nVarArray) do begin //WriteLn(IntToStr(nVarArray[i])); //这样编译就会出错,原因?? WriteLn(nVarArray[i]) ; end; end; end.
欢迎转载本系列文章,转载请注明来源。
分类:
Delphi
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2012-04-09 4_Windows下利用批处理命令获取详实的批处理命令帮助信息