Delphi의 함수 포인터가 비어 있는지 판단합니다
1573 단어 Delphi
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를 사용해야 한다. 이것은 컴파일할 때 엄격하게 제어되기 때문에 컴파일 오류가 발생할 때 이 문제를 고려할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.