几个简单的问题,(50分)

  • 主题发起人 主题发起人 handsome1234
  • 开始时间 开始时间
H

handsome1234

Unregistered / Unconfirmed
GUEST, unregistred user!
pe Func = function(X: Integer): Integer;

var

F: Func;

P: Pointer;

N: Integer;



Func(P) := F
{ 将F中的程序型值赋给P }
1为什么是:“将F中的程序型值赋给P”这样

N := Func(P)(N)
{ 通过P调用函数 }
2为什么是:“通过P调用函数 ”这样

begin

W := $1234;

B := TByteRec(W).Lo;

TByteRec(W).Hi := 0;

L := $01234567;

W := TWordRec(L).Low;

B := TByteRec(TWordRec(L).Low).Hi;

B := PByte(L)^;

end;

PByte(L)^;
3这个是如何工作的啊,l是先于那个结合^or PByte?
操作符好说,有个优先表,如果操作树前有个类型名该怎么办?
 
函数是一个指针啊
Func(P) 显式将Pointer类型转换为Func类型,这样才能赋值相融
这个问题你应该遇到过,只不过delphi中其他类型都是TXXX的样子,可能没绕过弯来
第二个问题是同样的道理

3 类型转换应具有最高的优先级,在其他语言环境中()好像也是比较高的
 
Func(P) := F;
P 是一个指针,Func(P) 把 P 看成一个函数,整句话的意思就是 P 指向函数 F 的入口地址
这样写也是一样的: P := @F;

N := Func(P)(N);
P 已经是一个指向函数 F 的指针了,于是现在 Func(P) 就和 F 等价了
调用 F 的语句是 F(N),一个代换就变成了 Func(P)(N)

 
两位已经说的很清楚了,呵呵
 
后退
顶部