요즘 책사보면서 조금씩 델파이를 배우고 있습니다.
그런데 한가지 막히는 부분이 있는데 function X(var x : string) : string; 과
function X(x : string) : string;의 차이점을 알고 싶습니다.
procedure AddOne(X, K, Y : string);
begin
X := X + 'B';
K := K + 'C';
Y := Y + 'D';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I : string;
begin
I := 'A';
AddOne(I,I,I);
ShowMessage(I);
end;
end.
----------------------------------------------------------------------------------
결과 A
----------------------------------------------------------------------------------
그리고
procedure AddOne(var X, K, Y : string);
begin
X := X + 'B';
K := K + 'C';
Y := Y + 'D';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I : string;
begin
I := 'A';
AddOne(I,I,I);
ShowMessage(I);
end;
end.
----------------------------------------------------------------------------------
결과 ABCD
----------------------------------------------------------------------------------
입니다.
도저히 책을 읽고 또읽어도 이해가 가지 않아서 이렇게 글 올립니다.
이 둘의 차이점에 대해서 설명 부탁드립니다.
델파이 초보자로부터...
> 요즘 책사보면서 조금씩 델파이를 배우고 있습니다.
> 그런데 한가지 막히는 부분이 있는데 function X(var x : string) : string; 과
> function X(x : string) : string;의 차이점을 알고 싶습니다.
>
> procedure AddOne(X, K, Y : string);
> begin
> X := X + 'B';
> K := K + 'C';
> Y := Y + 'D';
>
>
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> I : string;
> begin
> I := 'A';
> AddOne(I,I,I);
> ShowMessage(I);
>
>
>
> end;
>
> end.
> ----------------------------------------------------------------------------------
>
> 결과 A
>
> ----------------------------------------------------------------------------------
>
>
> 그리고
> procedure AddOne(var X, K, Y : string);
> begin
> X := X + 'B';
> K := K + 'C';
> Y := Y + 'D';
>
>
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> I : string;
> begin
> I := 'A';
> AddOne(I,I,I);
> ShowMessage(I);
>
>
>
> end;
>
> end.
> ----------------------------------------------------------------------------------
> 결과 ABCD
> ----------------------------------------------------------------------------------
>
> 입니다.
>
> 도저히 책을 읽고 또읽어도 이해가 가지 않아서 이렇게 글 올립니다.
>
> 이 둘의 차이점에 대해서 설명 부탁드립니다.
>
> 델파이 초보자로부터...
>
>
>
> 이재식 Wrote :
안녕하세요?
자료구조에 입각해보면 매개변수 전달시 크게 3가지 방법이 있습니다.
그중 위의 질문은 call by address에 해당합니다.
즉, function X(x : string) : string ;
function X(var x : string) : string ;
하고는 큰 차이가 있습니다.
위의 예제는 너무길어서요, 제가 간단히 다시 예제를 써서 설명을 해보겠습니다.
우선 A라는 어떤 프로시저가 function X를 호출한다고 합시다.
procedure A ;
var
AData : String ;
begin
AData := '1' ;
X (AData) ;
end ;
function X (x : string) : string ;
begin
x := '2' ;
end ;
이렇게 하면 function X에서는 x의 값이 2가 출력이 됩니다.
그리고 A라는 프로시저의 AData는 1이 되죠.
그러나, function X(var x: string) : string ;
begin
x := '2' ;
end ;
이렇게 var를 쓰면 좀 틀립니다.
우선 function X의 x의 값은 2입니다.
동시에 A프로시저의 AData값이 이젠 1이 아니라 2가 됩니다.
즉, var를 쓰면 call by reference호출이 되어서 procedure A의 AData변수와
function x의 변수가 서로 같은 주소를 공유합니다.