Delphi의 함수 포인터가 비어 있는지 판단합니다

1573 단어 Delphi
delphi 함수 포인터는 @@p만 함수 포인터 자체의 주소를 대표합니다
assigned (p) 가 비어 있는지 판단
또는 @p=nil로 함수 바늘이 비어 있는지 판단합니다
 
Delphi의 함수 포인터는 사실상 포인터입니다. 다만 사용할 때 약간의 차이가 있을 뿐입니다
함수 바늘은 먼저 함수 유형을 정의해야 한다. 예를 들어
type

    TTestProc = procedure of object;


이것은 가장 간단한 함수 유형으로 매개 변수도 없고 되돌아오는 값도 없으며 클래스의 구성원 함수를 요구한다
클래스의 구성원 함수는 사실 호출할 때의 매개 변수의 차이를 대표한다. 왜냐하면 클래스의 구성원 함수는 하나의 대상 매개 변수를 내포하고 있기 때문에 현식으로 명확하게 쓰지 않고 함수는 모두 정적이기 때문이다.
당연하지, 만약 재부팅이 있으면 허함수 지침표가 되고, 그 중의 호출은 좀 복잡해진다
함수 형식은 함수 포인터 변수를 정의할 수 있습니다
var

    p: TTestProc;


이 포인터 변수는 4 자체 Pointer입니다.Pointer와 직접 변환할 수 있지만 @을 추가합니다. 예를 들어:
var

    p: TTestProc;

    p1: Poniter;

begin

    p1:= @p;

    @p:= p1;

end;


여기 p1은 Pointer 타입입니다.
p가 진정한 함수로 부여되면 다음과 같이 사용할 수 있다.
p();


만약 매개 변수가 직접 매개 변수를 추가할 수 있다면 일반적인 함수 호출 방법과 별 차이가 없다. 함수 바늘 자체의 주소를 얻으려면
@@p;


@를 추가하는 것은 사실 잘못된 뜻을 방지하기 위해서이다. p 자체도 함수로 사용할 수 있기 때문에 @p로 바늘을 대표하지만 특수한 상황에서 p도 바늘을 대표할 수 있다. 예를 들어
Assigned(p);


이럴 때는 다른 뜻이 없기 때문에 @를 붙일 필요가 없다. 물론 사용할 수도 있다
Assigned(@p);


사실 assigned () 함수의 매개 변수는 바늘 변수로 이 바늘이 nil인지 아닌지를 판단하는 데 사용되며, 그렇지 않으면 False를 되돌려주고, 그렇지 않으면 True를 되돌려줍니다
  
요약:
p와 @p는 모두 함수 포인터를 대표하고 @@p만 함수 포인터 자체의 주소를 대표하며, 다른 뜻이 생기지 않기 위해 @p를 사용해야 할 때도 있고, p를 사용해야 할 때도 있다. (예: assigned (p))
일반적으로 값을 부여할 때 p와 @p를 사용할 수 있지만 비교할 때 @p를 사용해야 한다. 이것은 컴파일할 때 엄격하게 제어되기 때문에 컴파일 오류가 발생할 때 이 문제를 고려할 수 있다.

좋은 웹페이지 즐겨찾기