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 ...
随机推荐
- [原] 利用 OVS 建立 VxLAN 虚拟网络实验
OVS 配置 VxLAN HOST A ------------------------------------------ | zh-veth0(10.1.1.1) VM A | | ---|--- ...
- python 数据类型 ----字典
字典由一对key:value 组成的 python中常用且重量级的数据类型 1. key , keys, values 字典由一对key:value 组成的 python中常用且重量级的数据类型 1. ...
- [转载]一个标准java程序员的进阶过程
第一阶段:Java程序员 技术名称 内 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...
- Dynamics CRM 之ADFS 使用 WID 的联合服务器场
使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...
- Android MVP+Retrofit+RxJava实践小结
关于MVP.Retrofit.RxJava,之前已经分别做了分享,如果您还没有阅读过,可以猛戳: 1.Android MVP 实例 2.Android Retrofit 2.0使用 3.RxJava ...
- 真正的汉化-PowerDesigner 16.5 汉化
一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...
- 怎样在Dos里切换盘符
一:在Dos里切换盘符 a:在电脑左下角右击显示图片;(我用的是win10系统,其他系统类似) b:点击运行,输入cmd; c:点击确定: d:输入盘符:(如f:) 或F: 只写字母,不写分号是不行的 ...
- VisualStudio 2015 开启IIS Express可以调试X64项目
现在项目开发时总有时需要在X64下开发,这样我们就需要IIS Express中调试.不要总是放在IIS中,在Attach这样好慢. 如果不设置直接调试X64的程序,我们有可能会受到以下类似的错误 ...
- FineReport:任意时刻只允许在一个客户端登陆账号的插件
在使用FineReport报表系统中,处于账户安全考虑,有些企业希望同一账号在任意时刻智能在统一客户端登录.那么当A用户在C1客户端登陆后,该账号又在另外一个C2客户端登陆,服务器如何取判断呢? 开发 ...
- Android连接网络打印机进行打印
首先这是网络打印工具类,通过Socket实现,多说一句,网络打印机端口号一般默认的是9100 package com.Ieasy.Tool; import android.annotation.Sup ...