Q&A

  • 포인터 궁금해서요~
포인터를 공부하다 궁금한게 있어 이렇게 올립니다~

type
  TAA =record
   ss : String[20];
   ii : Integer;
end;
   PAA = ^TAA;

procedure TForm1.Button1Click(Sender: TObject);
var
  aa : PAA;
   iRow : Integer;
begin
   Inc(iRow);
   new(aa);
   aa.ss := 'aaaa';
   aa.ii := iRow;
end;

위와같이 코딩했을때는 에러가 전혀 나질 않습니다.. 그런데

   aa.ii := iRow; 이부분을    aa.ii := Inc(iRow); 이렇게 바꾸면 왜 에러가 날까요??
정말 몰라서 그러니 자세하게 좀 알려주세요~~ ^^
3  COMMENTS
  • Profile
    착한천사 2006.03.04 22:32
    착한천사 김경록입니다.
    Error 메세지를 보시면 금방 눈치 채실 것 같은데..
    INC는 결과값을 반환하지 않는 Procedure입니다.
    즉, 대입문에서는 절대 사용할 수 없습니다.

    ii는 Integer, inc()함수는 Procedure

    Type으로 대입연산자를 비교하면,

    Integer = Procedure

    은 절대 불가합니다.

    대입연산자의 경우 반드시 우측에는 좌측의 변수와 대응대는 혹은 호환되는
    상수값을 반환하여야만 합니다.
    이 상수값은 정수,실수,pointer등이 이에 해당됩니다.
    pointer는 실제 포인트라기보다 물리적인 메모리 주소를 전달하므로,
    상수라고도 이야기 할 수 있겠습니다.


  • Profile
    최용일 2006.02.28 10:19
    안녕하세요. 최용일입니다.

    포인터하고 별 상관은 없군요....

    델파이의 서브루틴은 Procedure와 Function이 있습니다. Procedure는 리턴값이 없고 Function은 리턴값이 있죠. 때문에 Procedure는 대입문의 우변에 쓸 수 없습니다.
    Inc함수는 Procedure입니다.

    aa.ii := Inc(iRow);
    ===>
    Inc(iRow);
    aa.ii := iRow;

    ^^ 항상 즐코하세요...

  • Profile
    bbizim 2006.02.28 20:41