⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 delphi的学习资料
💻 PAS
字号:
{
  本例用来说明函数的三类参数传递
  指向byte的指针pa,pb,px,py 只是为了加深理解,对运行结果无影响;
  程序测试中,应Watch这些指针的值,以及它们所指向的地址中的内容(例如 pa^ )

  本例用来说明数组作为参数,作为返回值
}

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Math;
     //注意:  此处 Math是人工写上的,后面用到的函数sqrt定义于 Math.pas中
type
  TfmMain = class(TForm)
    btnXY: TButton;
    Lb00: TLabel;
    btnArr: TButton;
    edt1: TEdit;
    edt2: TEdit;
    btnArr2: TButton;
    btnZ: TButton;
    procedure btnXYClick(Sender: TObject);
    procedure btnArrClick(Sender: TObject);
    procedure btnArr2Click(Sender: TObject);
  private    { Private declarations }
  public     { Public declarations }
  end;

var
  fmMain: TfmMain;

  pa,pb: ^byte;
  px,py: ^byte;

type
  TArr= array of word;

procedure xxx(var a: byte; b: byte);
procedure yyy(m,n: single; const r: byte);
function zzz(u,v: word; w: byte=2): word;
function Arr_1( ar: array of word): integer;
function Arr_2(i0,i9: Byte): TArr;


////////////////////////////////////////////////////////////////////////////////
implementation
{$R *.dfm}

procedure xxx(var a: byte; b: byte);   // a 是变参,  b是值参
begin
  pa:=@a;   pb:=@b;
  b:=b+3;
  a:=a*10 +b;
end;


procedure yyy(m,n: single; const r: byte);
var
  t: single;
begin
   // 此时, m,n,r 的值是 ?
  m:=m+1;
  n:=n+2;
//  r:=r+3;   错句  为什么?
  t:=m+n+r;
  fmMain.Lb00.Caption:=FormatFloat('#.###',t);
end;


function zzz(u,v: word; w: byte=2): word;   // 参数缺省值
begin
  Result:=u+v+w;
end;


procedure TfmMain.btnXYClick(Sender: TObject);
var
  x,y: byte;
  tmp: word;
begin
  px:=@x;   py:=@y;
  x:=2;   y:=5;
//  xxx(x+1,y);      错句  为什么?
  xxx(x,y);
  // 此时, x,y 的值是 ?
  yyy( sqrt(x)+2, 100, x*y);

//  tmp:=zzz(10,20,1);  // 用完整参数
  tmp:=zzz(10,20);      // 用缺省参数
  fmMain.Lb00.Caption:=IntToStr(tmp);
end;


procedure TfmMain.btnArrClick(Sender: TObject);
var
  a: array of word;
  i: byte;
  i0,i9: byte;
begin
  i0:=StrToInt(edt1.Text);
  i9:=StrToInt(edt2.Text);
  SetLength(a,i9-i0+1);

  for i:=i0 to i9 do
    a[i-i0]:=i;

  Lb00.Caption:=IntToStr(Arr_1(a) );
end;


function Arr_1( ar: array of word): integer;   // 数组求和
var
  i: byte;
  sum: integer;
begin
  sum:=0;
  for i:=0 to High(ar) do
  begin
    sum:=sum+ar[i];
  end;

  Result:=sum;
end;

procedure TfmMain.btnArr2Click(Sender: TObject);
var
  a: TArr;
  i: byte;
  ti0,ti9: byte;
begin
  ti0:=StrToInt(edt1.Text);
  ti9:=StrToInt(edt2.Text);
//  SetLength(a,ti9-ti0+1);   // 此句不需要,理由是???
  a:=Arr_2(ti0,ti9);
  Lb00.Caption:=IntToStr(Arr_1(a) );
end;


function Arr_2(i0,i9: Byte): TArr;   // 生成数组
var
  i: byte;
  tmpArr: TArr;
begin
  SetLength(tmpArr, i9-i0+1 );

  for i:=i0 to i9 do
    tmpArr[i-i0]:=i;

  Result:=tmpArr;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -