델파이의 String 변수 팁
내부적으로는 포인터이면서 외견상으로는 숫자와 같은 일반 변수처럼 작동한다.
따라서 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변수값을 별도의 메모리주소에 복사하여
서로다른 주소를 참조하게 한다.
'Delphi > 문법' 카테고리의 다른 글
간단한 상속(succession) / 인터페이스(interface) (0) | 2024.06.20 |
---|---|
인터페이스에 오브젝트 얻기 (0) | 2024.05.30 |
for TCollectionItem (0) | 2024.05.11 |
ShortString, LongString, WideString 정적배열, 동적배열 (0) | 2024.05.06 |
델파이 코드구역(REGION) 사용방법 (0) | 2024.04.12 |
댓글