首页 > 其他分享 >例程

例程

时间:2023-02-15 15:57:37浏览次数:37  
标签:begin end 例程 Value Integer procedure

(1)过程和函数

两者突出的不同点在于:函数能返回计算结果,即有一个返回值,而过程没有,但是你可以调用函数完成一系列操作,跳过其返回值(用可选的出错代码或类似的东西代替返回值);也可以通过过程的参数传递计算结果

procedure Hello;
begin
  ShowMessage ('Hello world!');
end;

function Double1 (Value: Integer) : Integer;
begin
  Double1 := Value * 2;
end;

//流行的做法是用Result 给函数赋返回值,而不是用函数名,我认为这样的代码更易读
function Double2 (Value: Integer) : Integer;
begin
  Result := Value * 2;
end;

​ 一旦定义了这些例程,你就可以多次调用,其中调用过程可执行操作;调用函数能计算返回值。如下:

procedure TForm1.Button1Click (Sender: TObject);
begin
  Hello;
end;

procedure TForm1.Button2Click (Sender: TObject);
var
  X, Y: Integer;
begin
  X := Double1 (StrToInt (Edit1.Text));
  Y := Double1 (X);
  ShowMessage (IntToStr (Y));
end;

(2)传值、传址

procedure tform1.myproc1(chuanzhi: string); //传值
begin
  chuanzhi:= '学编程,到鱼c' ;
  showmessage(chuanzhi);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  x: string;
begin
  x:= edit1.Text;                      //德琪
  myproc1(x);

  edit2.Text:= x+ '+你好!'            //德琪你好!(x还是x)
end;



procedure tform1.myproc2(var chuanzi: string); //传址
begin
  chuanzi:= '学编程,到鱼c' ;
  showmessage(chuanzi);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  x: string;
begin
  x:= edit1.Text;                      //德琪
  myproc2(x);

  edit3.Text:= x+ '+你好!'             //学编程,到鱼c 你好!(x地址更新了)
end;

​ 另外一个例子,下面是利用引用传递参数的例子,引用参数用var关键字标示:

procedure DoubleTheValue (var Value: Integer);
begin
  Value := Value * 2;
end;

​ 在这种情况下,参数既把一个值传递给过程,又把新值返回给调用过程的代码。当你执行完以下代码时:

var
  X: Integer;
begin
  X := 10;
  DoubleTheValue (X);

​ x变量的值变成了20,因为过程通过引用访问了X的原始存储单元,由此改变了X的初始值。

(3)常量参数

特点:不允许在例程中给常量参数赋新值

​ 例如:如果编译下面Delphi将出现错误:

function DoubleTheValue (const Value: Integer): Integer;
begin
  Value := Value * 2;      // compiler error
  Result := Value;
end;

(4)开放数组参数

​ 参数类型已定义,但是数组中的元素个数是未知数

function Sum(const A: array of Integer): Integer;
var
  I: Integer;
begin
  Result := 0;
  for I := Low(A) to High(A) do
    Result := Result + A[I];
end;

begin
  Writeln(Sum([1, 2]));
  Writeln(Sum([1, 2, 4]));
  Readln;
end.

​ 运行结果为:3;7

(5)Forward 声明(前置声明)

​ 欲声明一个过程或函数,而且只给出它的名字和参数,不列出其实现代码,需要在句尾加forward 关键字

procedure Hello; forward;

(6)函数重载

​ 重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同。实际上,编译器是通过检测参数来确定需要调用的例程。

​ 声明重载函数有两条原则:

  • 每个例程声明后面必须添加overload 关键字。
  • 例程间的参数个数或(和)参数类型必须不同,返回值不能用于区分各例程。
procedure ShowMsg (str: string); overload;
begin
  MessageDlg (str, mtInformation, [mbOK], 0);
end;

procedure ShowMsg (I: Integer; Str: string); overload;
begin
  ShowMssage (IntToStr (I) + ' ' + Str);
end;

procedure ShowMsg (FormatStr: string, Params: array of const); overload;
begin
  MessageDlg (Format (FormatStr, Params), mtInformation, [mbOK], 0);
end;

标签:begin,end,例程,Value,Integer,procedure
From: https://www.cnblogs.com/DQ-MINE/p/17123309.html

相关文章

  • 【OpenCV】图片尺寸放缩示例程序
    这次示例程序分别演示了用resize、pyrUp、pyrDown来让源图像进行放大缩小操作#include<opencv2/opencv.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<opencv2/highgu......
  • stm32f103 sdio 移植st官方例程
    第一步:建立驱动文件建立sdio_sdcard.h和sdio_sdcard.c,并将这两个文件添加到MDK工程中,如下图   第二步:移植官方例程1.找到STM32F10x_StdPeriph_Lib_V3.5.0\Pr......
  • ZYNQ与DSP之间SRIO通信例程,实操分享
    XQ6657Z35/45-EVM高速数据处理评估板(XQTyer评估板)由广州星嵌电子科技有限公司自主研发,核心板包含一片TIDSPTMS320C6657和一片XilinxZYNQ-7000SoC处理器XC7Z035-2FFG67......
  • Qt应用程序使用OpenCV库测试视频捕捉实例程序源码
    intmain(){VideoCapturecap(0);if(!cap.isOpened()){return-1;}while(1){Matframe;cap>>frame;if(frame.......
  • opencv官网例程(4.7.0版本)运行示例
    使用官网https://opencv.org/releases/下载4.7版本下载好后添加环境变量到安装路径下以及在系统变量中添加OpenCV_DIR(也可以用set的方式从Cmakelist里添加)打开我......
  • CH573 CH582 CH579蓝牙从机(peripheral)例程讲解六(蓝牙设置白名单)
    蓝牙从机设置白名单,可以只扫描应答(白名单中列出的)设备,只允许(白名单中列出的)设备连接。蓝牙主机设置白名单,可以只扫描、连接特定的蓝牙设备(白名单中列出的)。一.蓝牙从机白......
  • HDMI1.4/2.0 Subsystem官方例程的建立
    HDMI1.4/2.0Subsystem官方例程的建立1、 项目背景明德扬(MDY)为某研究所研制的视频接口转换模块,该模块将HDMI视频转成LVDS7:1视频。视频输入接口采用的是HDMI4K输入,基于X......
  • HDMI1.4/2.0 Subsystem官方例程的建立
    HDMI1.4/2.0Subsystem官方例程的建立1、 项目背景明德扬(MDY)为某研究所研制的视频接口转换模块,该模块将HDMI视频转成LVDS7:1视频。视频输入接口采用的是HDMI4K输入,基于X......
  • win10的realsense2例程运行问题
    使用D405,尝试在Win10平台进行开发,首先下载官方的SDK安装包(Releases·IntelRealSense/librealsense(github.com))之后直接安装,并不能指定安装位置,所以直接一步步下俩就行......
  • DSP+ZYNQ评估板例程使用手册
    【开源资料】XQTyer评估板例程使用手册.pdf链接:https://share.weiyun.com/8csewUvh密码:8r9by7XQ6657Z35/45-EVM(XQTyer评估板)是一款基于TIKeyStone架构C6000系列T......