跳至正文
-
Subscribe to our newsletter & never miss our best posts. Subscribe Now!
BG6RSH's 随记.

我们总是在感叹昨天,忽视今天,幻想着明天中渡过,且过且珍惜.....

BG6RSH's 随记.

我们总是在感叹昨天,忽视今天,幻想着明天中渡过,且过且珍惜.....

  • 首页
  • 论坛
  • 随记
  • 编程
  • 软件
  • 留言
  • 首页
  • 论坛
  • 随记
  • 编程
  • 软件
  • 留言
关

搜索

  • https://www.facebook.com/
  • https://twitter.com/
  • https://t.me/
  • https://www.instagram.com/
  • https://youtube.com/
Subscribe
编程

Delphi过程函数传递参数的几种方式

作者 admin
2010年1月23日 1 分钟阅读
0

在Delphi过程、函数中传递参数几个修饰符为Const、Var、Out。另一种不加修饰符的为默认按值传递参数。

一、默认方式以值方式传递参数

Delphi/Pascal
1
2
3
4
5
6
7
8
9
10
procedure TForm1.ProcNormal(Value: string);
begin
  origNum := Value + ' Me';
  lblReturn.Caption := origNum; // OrigNum为'Hello Me'
  lblOrig.Caption := Value; // Value为'Hello'
end;
 
//调用:
origNum:='Hello';
ProcNormal(OrigNum);

二、以Const方式传递参数,这个参数在调用过程中不能改变,并且这种方式会被编译器优化,一般建议尽可能地使用这种方式。

Delphi/Pascal
1
2
3
4
5
6
procedure TForm1.ProcConst(const Value: string);
begin
  origNum := Value + ' Me';
  lblReturn.Caption := origNum; // 为'Hello Me‘
  lblOrig.Caption := Value; // 为'Hello Me'
end;

三、按引用方式传递参数

Delphi/Pascal
1
2
3
4
5
6
procedure TForm1.ProcRef(var Value: string);
begin
  origNum := Value + ' Me';
  lblReturn.Caption := origNum; // 为'Hello Me‘
  lblOrig.Caption := Value; // 为'Hello Me'
end;

四、按Out方式传递参数,这个方式传递参数时,参数可以不被初始化,即使有值也被忽视,它一般用于输出,它可以实现在一个过程中返回多个值,我们通常在分布式对象模型,如COM中使用它。

Delphi/Pascal
1
2
3
4
5
6
procedure TForm1.ProcOut(out Value: string);
begin
  origNum:=Value+' Me';
  lblReturn.Caption:=OrigNum;//为'Me'
  lblOrig.Caption:=Value;//为'Me'
end;

五、无类型参数,这是一种较为特殊的方法,参数的类型不确定,只能用Const、Var、Out修饰,不能用于值方式传递参数,具体使用示例如下:

Delphi/Pascal
1
2
3
4
5
6
procedure TForm1.ProcUntype(const Value);
begin
  origNum:=string(Value)+' Me';
  lblReturn.Caption:=OrigNum;//为'Hello Me'
  lblOrig.Caption:=string(Value);//为'Hello Me'
end;

六、默认参数,即如果此参数在调用时未提供时,将使用默认值。

Delphi/Pascal
1
2
3
4
5
6
procedure TForm1.ProcDefault(const Value, const DefaultValue:string=' 123');
begin
  origNum:=Value+' Me'+DefaultValue;
  lblReturn.Caption:=OrigNum;//为'Hello Me 123'
  lblOrig.Caption:=Value;// 为'Hello Me 123'
end;

七、开放数组参数,即参数数组的元素个数不确定。

Delphi/Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.ProcArray(const Value: array of string);
var
  i:Integer;
begin
  for i:=Low(Value) to High(Value) do
    origNum:=OrigNum+Value[i];//调用后为'Hello abc dbd'
  lblReturn.Caption:=OrigNum;
end;
 
//调用:
origNum:='Hello';
ProcArray([' abc ',' dbd']);

八、无类型开放数组参数,即类型及元素个数皆不确定。在WIN32平台中,这个参数的类型实际为array of TVarRec,其使用示例如下:

Delphi/Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.ProcArrayConst(const Value: array of const);
var
  i: Integer;
begin
  for i := Low(Value) to High(Value) do
    with Value[i] do
      case VType of
        vtAnsiString:
          origNum := origNum + String(VAnsiString);
        vtInteger:
          origNum := origNum + IntToStr(VInteger);
        vtBoolean:
          origNum := origNum + BoolToStr(VBoolean);
        vtChar:
          origNum := origNum + VChar;
        vtExtended:
          origNum := origNum + FloatToStr(VExtended^);
        vtString:
          origNum := origNum + VString^;
        vtPChar:
          origNum := origNum + VPChar;
        vtObject:
          origNum := origNum + VObject.ClassName;
        vtClass:
          origNum := origNum + VClass.ClassName;
        vtCurrency:
          origNum := origNum + CurrToStr(VCurrency^);
        vtVariant:
          origNum := origNum + string(VVariant^);
        vtInt64:
          origNum := origNum + IntToStr(VInt64^);
      end;
  lblReturn.Caption := origNum; // 调用后为'Hello abc 3'
end;
 
// 调用:
 
origNum := 'Hello';
ProcArrayConst([' abc ', 3]);

以上就是常见几种传递参数的方式。

标签:

Delphi
作者

admin

关注我
其他文章
上一个

Delphi2010小写金额转大写金额的源代码

下一个

获取热血江湖怪物信息的DELPHI2010源代码

暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

4条垃圾评论已被Akismet阻挡 (在新标签页中打开)

近期文章

  • www.tansoo.cn网站空间迁移至armbian主机
  • 在QT6中安装qtmqtt、qtopcua控件的方法
  • 你的 Python 环境或安装版没有 spyder‑kernels 模块或没有安装正确的版本 (>=
  • 用PYTHON爬网络小说源代码
  • QT5.15.2搭建ANDROID编译环境

近期评论

  • gg 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • admin 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • /api/positions/里addres 为什么是null啊? 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • gg 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》
  • 9394 发表在《Traccar服务软件高德地图适配版docker镜像安装教程》

归档

  • 2025 年 6 月
  • 2023 年 6 月
  • 2022 年 10 月
  • 2021 年 5 月
  • 2021 年 4 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 6 月
  • 2019 年 11 月
  • 2019 年 8 月
  • 2019 年 6 月
  • 2019 年 1 月
  • 2018 年 12 月
  • 2018 年 11 月
  • 2017 年 9 月
  • 2016 年 7 月
  • 2016 年 5 月
  • 2015 年 12 月
  • 2015 年 4 月
  • 2015 年 1 月
  • 2014 年 12 月
  • 2014 年 11 月
  • 2014 年 10 月
  • 2014 年 9 月
  • 2014 年 8 月
  • 2014 年 7 月
  • 2014 年 6 月
  • 2014 年 5 月
  • 2013 年 10 月
  • 2013 年 9 月
  • 2013 年 8 月
  • 2013 年 7 月
  • 2013 年 6 月
  • 2013 年 5 月
  • 2013 年 4 月
  • 2013 年 3 月
  • 2013 年 2 月
  • 2013 年 1 月
  • 2012 年 12 月
  • 2012 年 11 月
  • 2012 年 10 月
  • 2012 年 6 月
  • 2012 年 3 月
  • 2011 年 8 月
  • 2011 年 5 月
  • 2011 年 4 月
  • 2011 年 3 月
  • 2011 年 1 月
  • 2010 年 8 月
  • 2010 年 6 月
  • 2010 年 4 月
  • 2010 年 3 月
  • 2010 年 2 月
  • 2010 年 1 月
  • 2009 年 12 月
  • 2009 年 11 月

分类

  • 编程
  • 软件
  • 随记

其他操作

  • 注册
  • 登录
  • 条目 feed
  • 评论 feed
  • WordPress.org

标签

aliyun Android CRC DBGridEh ddns Delphi EhLib ESP8266 GP328D gp338plus GP3688 Modbus phpbb python QT raspberry S7-SCL sapi speech SpVoice Synology traccar UART Unicode virtualbox vmware WGS84 wordpress ZeroTier 写频 动态IP 图片尺寸 地图 外挂编程 天气预报 导航 打印 扩频 拼音首字母 支票快打 树莓派 爬虫 百度地图 西门子PLC 车联网API

友情链接

  • 私有云论坛
  • 百度开放云
  • 主机管理
  • My Cloud
  • 智能家居技术论坛
  • 精灵云
  • 雅苑私站
Copyright 2026 — BG6RSH's 随记.. All rights reserved. Blogsy WordPress Theme