Type
SwapProc=Procedure(Var X,Y:Integer);
MathFunc=Function(X:Double):Double;{以上是类型声明部分}Var
P:SwapProc;
F:MathFunc;{以上把P说明为SwapProc 类型的变量,把F说明为MathFunc类型的变量}Procedure Swap(var A,B:integer);
Var
Temp:Integer;
Begin
Temp:=A;
A:=B;
B:=Temp;
End;Function Tan(Angle:Double);
Begin
Tan:=Sin(Angle)/Cos(Angle);
End;{以上定义了一个过程和一个函数}{以上把Swap过程赋给P变量,把Tan函数赋给F变量}
P:=Swap;
F:=Tan;P(I,J); {相当于调用Swap(I,J)}
X:=F(X); {相当于X:=tan(X)}1 既然过程变量是指针类型,为什么P:=Swan 和F:=Tan 不应该时P := @Swan 和F := @Tan,就是所取函数的地址
2 另外@P操作是返回无类型指针(Delphi操作手册里讲到)吗,而且返回的这个指针是指向Swap的 也就是 @P = @Swap 这种说法对吗? 而不是返回P变量的地址吗?
谢谢!
SwapProc=Procedure(Var X,Y:Integer);
MathFunc=Function(X:Double):Double;{以上是类型声明部分}Var
P:SwapProc;
F:MathFunc;{以上把P说明为SwapProc 类型的变量,把F说明为MathFunc类型的变量}Procedure Swap(var A,B:integer);
Var
Temp:Integer;
Begin
Temp:=A;
A:=B;
B:=Temp;
End;Function Tan(Angle:Double);
Begin
Tan:=Sin(Angle)/Cos(Angle);
End;{以上定义了一个过程和一个函数}{以上把Swap过程赋给P变量,把Tan函数赋给F变量}
P:=Swap;
F:=Tan;P(I,J); {相当于调用Swap(I,J)}
X:=F(X); {相当于X:=tan(X)}1 既然过程变量是指针类型,为什么P:=Swan 和F:=Tan 不应该时P := @Swan 和F := @Tan,就是所取函数的地址
2 另外@P操作是返回无类型指针(Delphi操作手册里讲到)吗,而且返回的这个指针是指向Swap的 也就是 @P = @Swap 这种说法对吗? 而不是返回P变量的地址吗?
谢谢!
type
TA = array [0..5] of Char;
PA = ^TA;
var
A: PA;
写A[0]和A^[0]是等价的, 都是操作A指向的数组的第一个元素. 严格说应该只有A^[0]才是对的. 但两者都能通过编译.2. @p也是编译器特殊处理的, 帮助里有, 对函数类型变量@p取的是函数入口, @@p才是取变量的地址