Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数
这里主要讨论Delphi中函数、方法的相关内容。
一、工程文件
{ Delphi语法方法和函数
1、方法
2、函数
}
program Routine;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas';
{ 方法
1、在工程文件中定义方法不需要在接口声明
}
procedure foo();
begin
WriteLn('这是在工程文件中定义的方法');
end;
var
nVar1:integer;
nVar2:integer;
varString:string;
begin
//调用工程文件中的方法
foo();
//调用单元文件unit1中的方法
//writeCurrentDir();
forwardKey_();
{ 传地址方法调用
1、swapInteger() 交换函数
2、调用IntToStr() 方法将整型转换为字符串类型
}
nVar1 := ;
nVar2 := ;
varString := 'Before swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' +
IntToStr(nVar2);
WriteLn(varString);
//调用的时候,参数列表中的参数用 逗号分隔
swapInteger(nVar1,nVar2);
varString := 'After swap nVar1 =' + IntToStr(nVar1) +' ;nVar2 =' +
IntToStr(nVar2);
WriteLn(varString);
//演示传值参数的调用情况
varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1);
WriteLn('Befor call valueProcedure');
WriteLn(varString);
valueProcedure(nVar1);
varString := 'In the call function the value of nVar1 = ' + IntToStr(nVar1);
WriteLn('After call valueProcedure');
WriteLn(varString);
//演示常量参数的调用情况
constProcedure();
//演示输出参数的调用情况
WriteLn('Before call outProcedure(), nVar2 = ' + IntToStr(nVar2));
outProcedure(,nVar2);
WriteLn('After call outProcedure(), nVar2 = ' + IntToStr(nVar2));
ReadLn;
end.
二、单元文件 unit1
{ 方法和函数
1、方法
2、函数
}
unit Unit1;
interface
uses
Windows, //Win32 API
SysUtils; //Delphi系统功能
{ 方法
1、在单元文件中,必须如果要被其他文件引用,则方法必须在接口部分声明原型
2、定义方法的关键字是procedure
}
procedure writeCurrentDir();
(* 其他关键字
1、external用于引用其他编译单元的函数或方法,例如引用DLL、其他obj文件的函数
2、如果要引用其他obj文件的函数或方法,则需要使用引用其他obj文件,通过编译开关
{$L BLOCK.obj}
、forward关键字可以用来声明方法或者函数, 和C语言一样方法或者函数必须先定义
后才能使用,而有时候可能需要推迟一下定义函数或方法,这时就可以利用forward
关键字先声明函数或方法,有点像C语言中先声明函数的原型。
*)
{
下面的函数演示forward的用法
}
procedure forwardKey_();
{ 方法或者函数的参数传递方式
1、按地址传递, 在定义参数的时候使用关键字 var
2、按值传递,不用其他关键字,默认的传递方式
3、按常量方式传递, 利用关键字 const 定义形式参数
4、按输出方式传递, 利用关键字 out 来定义形参
5、参数列表的分隔符是分号 ; 注意这个与C语言的区别
}
{ 演示按地址传递方式的方法
1、利用关键字 var 定义形式参数
2、交换两个变量的值, 经典函数swap
3、要注意与传递指针的区别
}
procedure swapInteger(var nVar1:integer;var nVar2:integer);
//procedure swapIntegerByPointer();
{ 传值方式
1、传值方式为默认的传递方式
}
procedure valueProcedure(nVar:integer);
{ 常量方式传递参数
1、这个函数演示按常量方式传递参数
}
procedure constProcedure(const nVar:integer);
{ 输出参数
1、在Delphi中默认的是方法不能返回值到调用函数,函数可以返回值到调用函数
2、函数通过函数名返回值,或者通过缺省的result变量返回值。
3、还有一种方式可以返回值,就是定义输出参数
4、输出参数用 out 关键字定义
5、注意输出参数和传地址、指针变量的区别
}
procedure outProcedure(nVar1:integer;out nVar2:integer);
implementation
procedure writeCurrentDir();
//在过程中定义,过程作用域的局部变量
var
strPath:WideString;
currentPath:ansistring;
nPathLen:integer;
begin
//要使用字符串必须先初始化,如果没有初始化的话就必须先申请内存
SetLength(strPath,);
WriteLn(strPath);
//申请内存后,输出全为 ????, 因此利用函数进行清零
FillMemory(@strPath,,);
//获取当前工作路径, 调用Win32 API
GetCurrentDirectory(,PWideChar(strPath));
currentPath:=strPath;
WriteLn(currentPath);
{ 命令行参数
1、Delphi程序也能获取命令行参数
2、通过 SysUtils 单元中的 ParamStr() 函数获取命令行参数
3、命令行参数编号从 0 开始, ParamStr()获取传递给应用程序的第一个参数
}
//通过调用Delphi提供的函数获取当前路径,带目录分隔符 \
currentPath := ExtractFilePath(ParamStr());
WriteLn(currentPath);
//不带目录分隔符 \
currentPath := ExTractFileDir(ParamStr());
WriteLn(currentPath);
end;
{ forward关键字的使用
1、如下所示,如果不用关键字 forward 就会编译出错
2、这里表示 forwardKey_1() 先声明原型然后再定义
3、如果将下面一行声明全注释,则在 forwardKey_2()中会提示 forwardKey_1()
没有定义
}
procedure forwardKey_();forward;
procedure forwardKey_();
begin
WriteLn('Call forwardKey_1() by used forward keyword.');
forwardKey_();
end;
procedure forwardKey_();
begin
WriteLn('This is forwardKey_1().');
end;
{ 传地址方式例子
1、swap 函数
}
procedure swapInteger(var nVar1:integer;var nVar2:integer);
var
nVar:integer;
begin
nVar := nVar1;
nVar1 := nVar2;
nVar2 := nVar1;
end;
{ 传值方式的例子
1、直接输出参数
}
procedure valueProcedure(nVar:integer);
var
str:string;
begin
str:='Before change in function valueProcedure nVar= ' + IntToStr(nVar);
WriteLn(str);
nVar := ;
str := 'After change in function valueProcedure nVar= ' +IntToStr(nVar);
WriteLn(str);
end;
{ 常量方式的参数
1、用于保护不让在函数里面改变传递给实际参数的值
2、这里有一点与C语言里面类似,就是指针的指向和指针指向变量的值的关系,需要注意
}
procedure constProcedure(const nVar:integer);
var
nVar1:integer;
begin
//因为形式参数 nVar 定义为 const,所以下面的语句编译不能成功
//nVar:=300;
//可以访问变量。
nVar1:= nVar;
WriteLn('nVar1 = ' + IntToStr(nVar1));
end;
{ 输出参数
1、输出参数的定义用关键字 out 实现
2、如果接触过西门子PLC的话,就会很容易理解输出参数的用法
}
procedure outProcedure(nVar1:integer;out nVar2:integer);
begin
nVar2 := nVar1;
end;
end.
欢迎转载,转载请注明来源。
Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数的更多相关文章
- 【C/C++】引用&的含义/语法/作为函数参数/函数返回值/本质/常量引用
含义 引用不产生副本,只是给原变量起了别名. 对引用变量的操作就是对原变量的操作. 基本语法 数据类型 &别名 = 原名 e.g. int a = 10; int &b = a; // ...
- Delphi_08_Delphi_Object_Pascal_基本语法_06_函数参数
发现Delphi中关于函数参数部分的内容还是比较多的,暂时说到这篇随笔为止吧,以后再继续讨论一下函数的参数部分的内容. 一 工程文件 program DefaultParameter; {$APPTY ...
- C++中对C的扩展学习新增语法——内联函数以及函数参数
内联函数以及函数参数 内联函数 使用 inline 关键字必须和函数体放在一起. 内联函数具有内部链接属性. 内联函数会被编译器在编译阶段替换到函数调用的地方. 可以把内联函数定义写到头文件中,多个c ...
- python基础语法5 函数定义,可变长参数
函数 1.什么是函数 函数就是一种工具. 可以重复调用 2.为什么要用函数 1.防止代码冗(rong)余 2.代码的可读性差 3.怎么用函数 1.定义函数-->制造工具 2.调用函数--> ...
- Python基本语法_函数属性 & 参数类型 & 偏函数的应用
目录 目录 前言 软件环境 Python Module的程序入口 函数的属性 Python函数的创建 函数的参数 必备参数 缺省参数 命名参数 不定长参数 匿名参数 偏函数的应用 前言 Python除 ...
- ES6新增语法(二)——函数和参数
箭头函数 箭头函数:将原来函数的function关键字和函数名都删掉,并使用"=>"连接参数列表和函数体. 箭头函数语法: (参数1,参数2)=>{ 函数体 } 注意点 ...
- JS基础语法---函数---介绍、定义、函数参数、返回值
函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...
- 深入理解javascript函数参数与闭包(一)
在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...
- Swift3.0P1 语法指南——函数
原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...
随机推荐
- jQuery2.x源码解析(缓存篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...
- SuperMap-iServer-单点登录功能验证(CAS)
SuperMap-iServer-单点登录功能验证(CAS) 1.测试目的: 验证SuperMap-iServer使用CAS单点登录的功能是否正常. 2.测试环境: SuperMap-iServer8 ...
- Android Studio切换为eclipse的快捷键之后还是有区别的部分快捷键
Android Studio Eclipse 把代码提示换成了Class Name Completion, 快捷键是Ctrl+Alt+Space(空格键). 代码提示快捷键Alt+/, ...
- ios 获取或修改网页上的内容
UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌 入页面中,通过这个方法我们可 ...
- Linux基础介绍【第九篇】
服务器添加3块磁盘的体系结构 [root@oldboylinux test]# free -m total used free shared buffers cached M ...
- Struts2.5需要的最少jar文件
以Struts2.5.2为例 从官网上下载“struts-2.5.2-min-lib.zip”,里面有7个jar文件: commons-fileupload-1.3.2.jarcommons-io-2 ...
- .NET Core 1.0.1 升级汇总
ASP.NET Core BUG fix: ASP.NET Routing Port fix for "Request not matching route with defaults&qu ...
- ASP.NET跨平台最佳实践
前言 八年的坚持敌不过领导的固执,最终还是不得不阔别已经成为我第二语言的C#,转战Java阵营.有过短暂的失落和迷茫,但技术转型真的没有想象中那么难.回头审视,其实单从语言本身来看,C#确实比Java ...
- Java下好用的开源库推荐
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...
- WCF学习之旅—第三个示例之三(二十九)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...