Q&A

  • Move 에 대한 설명좀해주세요?
다른건 아니고요
string 형을 array에 move 시킬때
var
  data : String;
  data_re : array[0..4] of char;

move(PChar(data)^, data_re, length( data_re));

위처럼 하더군요 그랫 질문인데요
PChar(data)^ 부분에서 pchar( ) 이런식으로 하면 그안의 값이 포인터가 되어
^ 로 주소의 값이 data_re 에 들어가는건가요?

PChar(data)^ 이부분이 어떻게 data_re 의 배열에 move 되는지 궁금합니다
3  COMMENTS
  • Profile
    한원희 2004.06.12 03:45
    안녕하세요. 한원희입니다.

    Move 함수는 포인터 또는 배열 이동 함수입니다.
    원본을 대상 배열이나 포인터로 이동시키지요.
    그런데, 델파이의 String은 배열이면서도, 약간 다릅니다. 왜냐하면, 델파이의 AnsiString에는 문자열의 길이와 참조 계수라는 것을 포함하면서, 실제 문자열은 별도의 힙 메모리에 생성이 되기 때문입니다. 즉, 아래의 data 변수 자체가 가리키는 포인터는 문자열의 시작되는 포인터가 아니라, AnsiString 정보를 젖아하고 있는 위치를 가리키고 있기 때문에, 바로 Move를 사용하면 엉뚱한 값(포인터 값)이 복사됩니다.

    그래서, 델파이의 문자열을 Move와 비슷한 함수들에게 문자열이 시작되는 포인터로 넘겨 줄 경우에 data[1]과 같은 형식으로 적어주거나, 아래의 예제처럼 문자열이 시작되는 포인터를 명시적으로 가리키도록 합니다.

    그럼, 즐프~

  • Profile
    너구리 2004.06.11 21:59
    스트링을 pchar함수에 넣으면

    char 배열 포인터로 반환됩니다.

    그렇다면 PChar(data)^ 이부분은

    char 배열 포인터니깐 그포인터가 실제 가리키는 값이 된다는말이죠..

    하지만 잘못 짠거 같습니다.

    move(data,data_re,length(data_re));

    그냥 이렇게 해도 됩니다.

    move함수를 실제로 보면 알수 있습니다.

    포인터 배열을 이용해서 하나씩 포인터를 바꿔줍니다.


  • Profile
    KDDG_BaSTaD 2004.06.11 21:43


    ==> 안녕하세요 BaSTaD 입니다.

    포인터에 대해 더 알아보시면 확실해집니다..
    String 타입도 배열입니다. Char 배열이죠.. Char 배열 시작포인터가 스트링 시작 포인터인것이지요.. (-_-;; 말로 잘 설명이 않되네요 그림이 좋은데..)

    어떻게 Move되었냐는 질문은 메모리복사되었다고 밖에 설명드리기 힘드네요..(부족한지라..)

    어떻게?? 에 더 섬세한 설명못해드린게 지성할 따름입니다.. (_ _ *) 더욱 고수가 나셔주시는게...

    by KDDG 만수 ㅔ 이