안녕하세요.
C에서 사용했던 함수 swap문을 함수로 만들려고 합니다.
델파이에서는 어떻게 하나요. 포인터로 값을 넘겼는데,
함수 내에서는 바뀌어 지는 데 나와서는 그래도가 되어 버리네요.
public
stra, strb : string;
pstra, pastr : pointer; //여기서도 ^string 포인터를 잡으니깐요
// 함수에서는 ^String 포인터가 되지 않더라구요.
......
pstra := @stra;
pstrb := @strb;
인자를 넘길때 는
swap(pstra,pstrb); //포인터로 넘겼습니다.
procedure swap(str1,str2 : pointer);
var
temp : pointer
begin
temp := str1;
str1 := str2;
str2 := temp;
//내부에서는 포인터값이 바뀌었는데,
// swap만 빠져나가면 돌아와버리네요. 주소가 바꾸려면 어떻게 하나요?
end;
평안한 시간되세요.
질문했던 사람인데요.
답변들 모두 감사드립니다.
그런데 답변주신분 중에 틀린 것이 있어 수정하려고 합니다.
@ 가 포인터 변수에 주소값을 넘기는 것입니다. ^을 변수 되에 붙이게
되면 값을 넘겨주게 됩니다.
아참 그리고 var 붙이는 부분에서는 없어도 되고 있어도 되더군요.
그리고 swap문 을 풀려고 생각하다보니 이렇게 생각이 들더군요.
델파이에서는 swap문이 필요없는것이 아닌가? 전역변수로 선언할 시
간단하게 temp변수를 두어서 교환 하게 되고, 그리고 어떤 이벤트가
발생했을 시 그 변수의 값을 주소를 가지고 있는다 할들 이벤트가 끝나
버리면 변수주소는 쓸모 없는 것이 되어 버린다는 결론입니다.
그래서 지역 변수값은 함수나 프로시져로 돌려서 그값을 가져가면 된다.
C와 값이 Call by Reference 나 Call by Pointer 로 swap 문을
구성할 필요성이 없는듯합니다.
저의 생각이 무언가 잘못인는 듯 한데....
이상하점을 찾아서 좀 가르쳐 주세요.
평안한 하루되세요.