본문 바로가기
Delphi/문법

델파이의 String 변수 팁

by MonoSoft 2024. 5. 24.
728x90
반응형

델파이의 String 변수 팁

 

728x90

 

 

 

 

 

내부적으로는 포인터이면서 외견상으로는 숫자와 같은 일반 변수처럼 작동한다.

 

따라서 string변수는 자유롭게 포인터형태로 타입캐스팅이 가능하며

포인터 조작이 가능하다.

 

var

s1: string;

p: pointer;

begin

s1 := 'Hello world'; p := pointer(s1);

Move(p^, xxx^, Length(s1));

end;

 

 

다른 특징은 델파이의 스트링변수를 복사할때 나타난다.

 

var

s1 : string;

s2: string

begin

s1 := 'Hello world';

s2 := s1;

Memo1.Lines.Add(inttostr(integer(Pointer(s1))) + ','+ inttostr(integer(Pointer(s2))));

 

메모에서 확인해 보면 s1과 s2는 동일한 메모리

주소를 사용한다는 것을 알 수 있습니다.

 

하지만 s1이나 s2의 값이 바뀌는 순간 s1과 s2는

서로 다른 주소를 참조한다.

s2 := '123';

Memo1.Lines.Add(inttostr(integer(Pointer(s1))) + ','+ inttostr(integer(Pointer(s2))));

 

만약 아래처럼 동일한 주소를 참조하는 string의

일부 요소를 변경하면 어떤 일이 생길까?

 

var

s1,s2: string; begin

s1 := 'Hello world'; s2 := s1;

s1[3] :='k';

Memo1.Lines.Add(s1); //Heklo world

Memo1.Lines.Add(s2); //Hello world

 

외견상으로는 별개의 스트링이므로 컴파일러는

알아서 s1변수값을 별도의 메모리주소에 복사하여

서로다른 주소를 참조하게 한다.

 

728x90
반응형

댓글