定义:
  TMy = function(i:integer):integer;
  TMyObject = function(i:integer):integer of object ;procedure TForm1.Button3Click(Sender: TObject);
var
 xx : TMy ;
 yy : TMyObject ;
begin
  if Assigned(yy) then
    showmessage(inttostr(8)) ;  //执行
  if Assigned(xx) then
    showmessage(inttostr(4)) ;  //执行
end;procedure TForm1.Button3Click(Sender: TObject);
var
 xx : TMy ;
 yy : TMyObject ;
begin
  if Assigned(yy) then
    showmessage(inttostr(8)) ; //不执行
  if Assigned(xx) then
    showmessage(inttostr(4)) ; //执行
  if Assigned(yy) then
    showmessage(inttostr(8)) ;  //不执行
  if Assigned(xx) then
    showmessage(inttostr(4)) ;  //执行end;
 为什么啊,搞不懂

解决方案 »

  1.   

    俺认为是初始化的问题,编译器只为局部变量分配空间而不进行初始化,所以可能造成Assigned()值为真
      

  2.   

    to :
      zhangl_cn(不做和尚了!) 
     问题是为什么2次执行的结果不一样呢?
      

  3.   

    var
     xx : TMy ;
     yy : TMyObject ;并不说明 xx yy 为 nil ,而是指向内存中的不确定位置,是无效指针assigned 只能判断是不是 nil 指针,而不能判断无效指针你用下面的看看两个变量的指针位置只有为 0 的时候 assigned() 才返回 F 
    ShowMessage(IntTostr(Integer(@xx)));
    ShowMessage(IntTostr(Integer(@yy)));