델파이 공부하던중에...
펑션안에서 변수앞에 var를 붙여서 파라미터 값을 변경하는 예제가 이해가 안되서요..
function valueadded(v : integer) : integer;
begin
v :=5;
Result :=v;
end;
function valueAddedToRef(var v: integer) : integer;
begin
v :=5;
Result :=v;
end;
Procudure TForm1.Button1Click(Sender : TObject);
var i, j : integer;
begin
i :=10;
j :=valesAdded(i);
showmessage(IntToStr(i)+ ' '+IntToStr(j));
j :=valesAddedToRef(i);
showmessage(IntToStr(i)+ ' '+IntToStr(j));
end;
이렇게 하면 처음에는 '10 15'라는 값이 나오고
다음에는 '15 15'라는 값이 나오는데..
왜 이런걸까요? i의 주소값이 j랑 동일해 진다는 건가요?
또 한가지만요
procedure AddOne(var X,Y : integer);
begin
X := X+1;
Y := Y+1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
i :=1;
AddOne(i,i);
Showmessage(IntToStr(i));
end;
위의 결과값은 3인데요.. 왜 3인가요? 분명히 i값이 따료 x,y에 들어갔는데...
> function valueadded(v : integer) : integer;
> begin
> v :=5;
> Result :=v;
> end;
>
> function valueAddedToRef(var v: integer) : integer;
> begin
> v :=5;
> Result :=v;
> end;
>
> Procudure TForm1.Button1Click(Sender : TObject);
> var i, j : integer;
> begin
> i :=10;
> j :=valesAdded(i);
> showmessage(IntToStr(i)+ ' '+IntToStr(j));
> j :=valesAddedToRef(i);
> showmessage(IntToStr(i)+ ' '+IntToStr(j));
> end;
>
> 이렇게 하면 처음에는 '10 15'라는 값이 나오고
>
> 다음에는 '15 15'라는 값이 나오는데..
>
> 왜 이런걸까요? i의 주소값이 j랑 동일해 진다는 건가요?
간단하게 C로 옮기면
int valueadded(int v)
{
v = 5;
return(v);
}
int valueaddedToRef(int *v)
{
*v = 6; // 넘겨받은 주소의 데이터저장소에 값을 넣쵸...
return(*v);
}
int main()
{
int j, i = 10;
j = valueadded(i);
printf("i is %d, j is %dn", i, j);
j = valueaddedToRef(&i); //주소를 넘겨주구... 값으로 받죠... 그렇타면 주소안의 데이터는 넘겨받은 쪽에서 주무를 수도 있다는 말이구여...
printf("i is %d, j is %dn", i, j);
return 0;
}
와 같은 말이져...
결과는
i is 10, j is 5
i is 6, j is 6
즉, 델파이에서는여...
호출할때 넘겨주는 인자의 형태가 C랑 다를 뿐이라구 이해하시면...
글구 사용하시다보믄 더 편하구나 감탄하시구여...
>
> 또 한가지만요
>
> procedure AddOne(var X,Y : integer);
> begin
> X := X+1;
> Y := Y+1;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> i : integer;
> begin
> i :=1;
> AddOne(i,i);
> Showmessage(IntToStr(i));
>
> end;
>
> 위의 결과값은 3인데요.. 왜 3인가요? 분명히 i값이 따료 x,y에 들어갔는데...
3 이 맞습니다...
왜 3 이냐하면여...
처음에 i := 1; 로 시작을 하구여...
AddOne함수에서는 i의 주소를 받게 됩니다...
그렇타면 같은 주소가 인자로 전달되는 결과이며...
X := X+1; ==> i := i+1; // 2
Y := Y+1; ==> i := i+1; // 3
이라는 말씀이져...
이것두 간단히 C코드로 옮겨보믄여,...
void AddOne(int *x, int *y)
{
*x = *x + 1;
*y = *y + 1;
}
int i = 1;
AddOne(&i, &i); // 같은 주소가 넘어가는것이 겠죠...
고로 i == 3 이 되는 것입니다...
아~ 오랜만에 별거아닌거 정말 어렵게 설명하는 군여...
이해가 되셨나 모르것네여... 걍 C코드루 보면 아실꺼 가타서여...
히 즐델공~ 하셔여... 쌩~