b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

pascal 视频教程_pascal和basic_pascal选择排序(45)

电脑杂谈  发布时间:2016-12-28 07:02:37  来源:网络整理

F: TIntegerFunction; {F是一个无参数、返回整数值的函数}

Proc: TProcedure; { Proc是一个无参数过程}

SP: TStrProc; { SP是一个使用string类型参数的过程}

M: TMathFunc; { M是一个使用Double类型参数、返回Double值的函数}

procedure FuncProc(P: TIntegerFunction); { FuncProc是一个过程,它的参数是

一个无参数、返回整数值的函数

上面的所有变量都是过程指针,也就是指向过程或函数地址的指针。若想引用一个实例对象的方法(参考Classes and objects),你需要在过程类型的名称后面加上of object。比如

type

TMethod = procedure of object;

TNotifyEvent = procedure(Sender: TObject) of object;

这些类型表示方法指针。方法指针实际上是一对指针:第一个存储方法的地址,第二个存储方法所属的对象的引用。给出下面的声明

type

TNotifyEvent = procedure(Sender: TObject) of object;

TMainForm = class(TForm)

procedure ButtonClick(Sender: TObject);

...

end;

var

MainForm: TMainForm;

OnClick: TNotifyEvent

我们就可以进行下面的赋值:

OnClick := MainForm.ButtonClick;

两个过程类型是兼容的,如果它们具有

z 相同的调用约定,

z 相同类型的返回值(或没有返回值),并且具有

z 相同数目的参数,并且相应位置上的类型也相同(参数名无关紧要)

过程指针和方法指针是不兼容的。nil可以赋给任何过程类型。

嵌套的过程和函数(在其它例程中声明的例程)不能被用作过程类型值,内置的过程和函数也不可以。若想使用内置的过程作为过程类型值,比如Length,你可以给它加一个包装:

function FLength(S: string): Integer;

begin

Result := Length(S);

end;

Procedural types in statements and expressions(语句和表达式中的过程类型)

当一个过程变量出现在赋值语句的左边时,编译器期望右边是一个过程类型值。赋值操作把左边的变量}

- 65 -

Data types, variables and constants

当作指针,它指向右边指示的过程或函数。但在其它情形,使用过程变量将调用它引用的过程或函数,你甚至可以对过程变量传递参数:

var

F: function(X: Integer): Integer;

I: Integer;

function SomeFunction(X: Integer): Integer;

...

F := SomeFunction; // 把SomeFunction赋给F

I := F(4); // 调用函数,把结果赋给I

在赋值语句中,左边变量的类型决定右边的过程(或方法)指针的解释,比如

var

F, G: function: Integer;

I: Integer;

function SomeFunction: Integer;

...

F := SomeFunction; // 把SomeFunction赋给F


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-45.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 郑玉
      郑玉

      我们希望能有更多的好心人可以帮帮她们

    • 李枫
      李枫

      因为现代战争将没有胜利者

    热点图片
    拼命载入中...