Q&A

  • 참조형?
procedure Fun(var Buf; Size: Integer)
begin
// Buf를 그냥 배열 변수인 것 처럼 다루는 소스... ;;;;
end;

위에서처럼 함수나 프로시저의 인자로 var값이 들어가 있는 경우가 있는데 이런 것은 참조형이라고 하더라구요... 참조형에 대해 자세히 좀 알려주세요.
1  COMMENTS
  • Profile
    방재웅 2003.07.08 10:03

    님께서 질문하신 부분은 Untyped Parameter 라는 부분입니다.

    '델파이 개체참조' 모델과는 약간 다른 개념입니다.

    함수정의에서 위처럼 (var F) 이런식으로 파라메터가 선언된
    의미는 F가 흔히 C언어에서 말하는 const 포인터 변수라고 할 수 있죠.

    예를들어

    procedure Test();
    var
       aryTest : Array[0..100] of char;

    begin
       FillChar(aryTest,sizeof(aryTest),0);
    end;

    FillChar함수는 C언어에서 memset() 함수와 비슷한 기능을 합니다.
    즉 길이만큼 지정된 값으로 채우는 기능을 하죠.

    여기서 aryTest는 배열 aryTest를 가리키는 주소값(포인터)입니다.

    델파이 헬프에서 Untyped Parameter 부분을 찾아보시면 됩니다.

    그리고 델파이에 대해서 조금더 깊이 아실려면
    "델파이 개체참조모델"에 관해서 연구하세요.

    참조모델에 대해서 C++과 비교해서 간략이 설명드리자면,

    C++에서

    클래스 C가 있다고 할 때

    C myclass;

    이렇게 선언하자 마자
    메모리에 C의 인스턴스가 생성됩니다.
    물론 크기는 sizeof(C) 만큼이겠죠.

    델파이에서는
    클래스 D가 있다고 했을 때

    D myclass;

    요렇게 선언하면 어떻게 될까요?

    이 선언은 C++과 다르게
    D클래스의 인스턴스가 메모리에 생성되지 않습니다.

    myclass 변수는 사실 C클래스형의 포인터 변수 입니다.
    크기는 4byte죠. (포인터 변수이기 때문에)
    즉, D클래스 개체의 주소를 저장할 수 있죠.

    C++로 표현하자면
    D* myclass;

    요렇게 되는 겁니다.