发现Delphi中关于函数参数部分的内容还是比较多的,暂时说到这篇随笔为止吧,以后再继续讨论一下函数的参数部分的内容。

一 工程文件

  1. program DefaultParameter;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils,
  7. Unit1 in 'unit1.pas';
  8.  
  9. var
  10. nVar:integer;
  11. strVar:string;
  12. i:integer;
  13. nVarArray:array of integer;
  14. begin
  15. {
  16. 1 调用具有默认参数的方法
  17. }
  18. //不提供参数
  19. unit1.defaultParameter();
  20. //提供参数
  21. unit1.defaultParameter(,'volcanol');
  22.  
  23. //调用无类型参数的函数
  24. {
  25. 1constant object cannot be passed as var paramter
  26. }
  27. //WriteLn(noTypeParameter('100')); //这样无法调用
  28. nVar := ;
  29. WriteLn(noTypeParameter(nVar));
  30.  
  31. //转换时出现了异常,因此不建议使用无类型参数
  32. strVar:= '';
  33. WriteLn(noTypeParameter(strVar));
  34.  
  35. //调用短字符串类型参数的函数
  36. for i := to sizeof(ShortString) do
  37. begin
  38. strVar[i]:='a';
  39. end;
  40. shortSringParameter(strVar);
  41.  
  42. //如果将 string类型的变量传递给 shortString 类型变量会自动截断
  43. for i := to sizeof(ShortString) + do
  44. begin
  45. strVar[i]:= 'a';
  46. end;
  47. shortSringParameter(strVar);
  48.  
  49. //动态数组参数
  50. try
  51. SetLength(nVarArray,);
  52. WriteLn(Low(nVarArray));
  53. WriteLn(High(nVarArray));
  54. for i := Low(nVarArray) to High(nVarArray) do
  55. begin
  56. nVarArray[i] := i;
  57. end;
  58. WriteLn(High(nVarArray));
  59. arrayParameter(nVarArray);
  60. except
  61. on E:Exception do
  62. ReadLn;
  63. end;
  64.  
  65. ReadLn;
  66. ReadLn;
  67. end.

二、单元文件

  1. { 参数
  2. 1、默认参数
  3. 2、无类型参数
  4. 3、短字符串参数
  5. 4、数组参数
  6. }
  7.  
  8. {
  9. 1 和其他的OOP编程语言一样,DelphiObject Pascal语言也支持方法和函数的
  10. 默认参数机制
  11. 2 默认参数在某些场合非常适用,当一些方法、函数的参数在不同的场合调用时
  12. 均具有同样的设置时,就可以设置为默认参数
  13. 3 如何函数参数设置过默认参数,那么在调用的时候就可以不提供实际参数
  14. }
  15.  
  16. unit Unit1;
  17.  
  18. interface
  19. {
  20. 单元文件的结构需要注意
  21. }
  22. uses
  23. SysUtils;
  24.  
  25. {
  26. 单元文件中, type类型定义必须在 uses 子句后面
  27. }
  28. type
  29. PInt=^integer;
  30.  
  31. { 默认参数
  32. 1、默认参数的定义的规则与C++里面默认参数的规则类似
  33. 2、默认参数定义的形式参数必须从最后一个参数开始,及从右往左定义
  34. 3、如果一个参数定义了默认参数,则其后面的参数均需要定义默认参数
  35. 4、如果在一个类型中定义了多个形式参数,则这些形式参数均不能定义默认参数
  36. 5
  37. }
  38. procedure defaultParameter(nVar:integer;varStr:string='Delphi');
  39.  
  40. { 无类型参数
  41. 1、无类型参数就是例程声明时形式参数不指定形式参数的类型
  42. 2、无类型参数定义时必须用关键字varconstout之中的一个
  43. 3、无类型参数不能使默认的传值方式
  44. 4、在使用无类型参数时,必须将参数进行类型转换后才能使用
  45. 5、调用时需要注意存在一些限制
  46. A) 整型字面值不能传递给无类型参数
  47. B) 无类型的整型值不能传递给无类型参数
  48. 6、由于无类型参数在转换的时候存在太多的限制,建议一般不要使用这种类型的定义
  49. 方法
  50. }
  51. function noTypeParameter(var noTypeVar):string;
  52.  
  53. { 短字符串参数
  54. 1 短字符串类型 ShortString 255字节长度的字符串类型
  55. 2 可以通过 string[length] 的方法定义指定长度小于255字节的字符串类型
  56. varStr:string[255]; 就是定义一个长度最大为255字节的字符串变量
  57. 3 形式参数不能用 string[length] 的方式定义 ,如果需要的话就必须定义新的
  58. 数据类型
  59. 3 2010以后 string默认为WideString, 需要打开开关才能使 AnsiString类型
  60. }
  61. procedure shortSringParameter(strVar:ShortString);
  62.  
  63. { 数组参数
  64. 1、数组分为静态数组、动态数组,还有一种数组类型 开发数组
  65. 2、静态数组定义为
  66. nVarArray:array[1..10] of integer; //在定义的时候自定数组维度
  67. 3、动态数组定义为
  68. 定义动态数组类型
  69. nVarArray:array of integer; //定义时不指定数组的维度,
  70. 使用前用 SetLength(数组名,第一维的长度,第二维的长度,) 函数申请
  71. 数组空间。
  72. 3、数组参数在定义时不能指定数组的维度和大小,要使用指定类型的参数,则必须定义
  73. 新的数据类型
  74. 4、还可以使用开放数组形式定义数组参数
  75. }
  76. procedure arrayParameter(nVarArray:array of integer);
  77.  
  78. implementation
  79. procedure defaultParameter(nVar:integer;varStr:string='Delphi');
  80. var
  81. str:string;
  82. begin
  83. str := 'Hello ' + varStr;
  84. WriteLn(str);
  85. end;
  86.  
  87. function noTypeParameter(var noTypeVar):string;
  88. var
  89. str:string;
  90. begin
  91. //将 noTypeVar 无类型参数转换为整型数
  92. str:= IntToStr(integer(noTypeVar));
  93.  
  94. //隐含的变量 result 返回函数值
  95. result := str;
  96. end;
  97.  
  98. procedure shortSringParameter(strVar:ShortString);
  99. begin
  100. WriteLn(strVar);
  101. end;
  102.  
  103. {
  104. 1、下面的函数执行的过程中还存在一定的问题,需要继续研究一下
  105. 2、动态数组的上、下界最好通过Low()、High()函数来求取,所以与 C/C++ 有一点区别
  106. }
  107. procedure arrayParameter(nVarArray:array of integer);
  108. var
  109. i:integer;
  110. begin
  111. WriteLn(Low(nVarArray));
  112. WriteLn(High(nVarArray));
  113.  
  114. for i := Low(nVarArray) to High(nVarArray) do
  115. begin
  116. //WriteLn(IntToStr(nVarArray[i])); //这样编译就会出错,原因??
  117. WriteLn(nVarArray[i]) ;
  118. end;
  119. end;
  120.  
  121. end.

  欢迎转载本系列文章,转载请注明来源。

Delphi_08_Delphi_Object_Pascal_基本语法_06_函数参数的更多相关文章

  1. 【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用

    含义 引用不产生副本,只是给原变量起了别名. 对引用变量的操作就是对原变量的操作. 基本语法 数据类型 &别名 = 原名 e.g. int a = 10; int &b = a; // ...

  2. Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数

    这里主要讨论Delphi中函数.方法的相关内容. 一.工程文件 { Delphi语法方法和函数 1.方法 2.函数 } program Routine; {$APPTYPE CONSOLE} uses ...

  3. C++中对C的扩展学习新增语法——内联函数以及函数参数

    内联函数以及函数参数 内联函数 使用 inline 关键字必须和函数体放在一起. 内联函数具有内部链接属性. 内联函数会被编译器在编译阶段替换到函数调用的地方. 可以把内联函数定义写到头文件中,多个c ...

  4. python基础语法5 函数定义,可变长参数

    函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...

  5. Python基本语法_函数属性 & 参数类型 & 偏函数的应用

    目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...

  6. ES6新增语法(二)——函数和参数

    箭头函数 箭头函数:将原来函数的function关键字和函数名都删掉,并使用"=>"连接参数列表和函数体. 箭头函数语法: (参数1,参数2)=>{ 函数体 } 注意点 ...

  7. JS基础语法---函数---介绍、定义、函数参数、返回值

    函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...

  8. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

  9. Swift3.0P1 语法指南——函数

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

随机推荐

  1. 微软发布VSBT,无需安装Visual Studio即可实现项目编译

    安装了Visual Studio的那些使用微软平台的开发者通常能够非常容易地操作自己的项目:打开解决方案,修改内容,设置好所有必须的文件以及配置后编译项目.但是在构建服务器或者持续交付系统等没有安装V ...

  2. C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  3. Android中Fragment的两种创建方式

    fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认 ...

  4. Autofac 的点滴

    泛型类型的注册和使用 public interface IRepository<T> where T:class { } public interface ISchoolDetailRep ...

  5. Spring MVC入门

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  6. [BOT]自己动手实现android 饼状图,PieGraphView,附源码解析

    本文要介绍的是一个参照手机支付宝app里面记账本功能里的"饼状图"实现的控件.通常app中可能的数据展示控件有柱状图,折线图,饼状图等,如果需要一个包含多种View控件的库,那么 ...

  7. Vue.js——60分钟快速入门

    Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...

  8. 压缩javascript文件方法

    写在前面的话:正式部署前端的时候,javascript文件一般需要压缩,并生成相应的sourcemap文件,对于一些小型的项目开发,这里提供一个简单的办法. ======正文开始====== 1.下载 ...

  9. CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator

    CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator 我还没有用过Compute Shader,所以现在把红宝书里的例子拿来了,加入CSharpGL中. ...

  10. ABP(现代ASP.NET样板开发框架)系列之22、ABP展现层——导航栏设置

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之22.ABP展现层——导航栏设置 ABP是“ASP.NET Boilerplate Project (ASP.NE ...