델파이 포인터 형식 간단 설명(기록용)
*포인터 개념을 쉽게 이해하기 위해선 컴퓨터 메모리 개념을 먼저 숙지하시면 좋습니다.
그리고 아래는 설명하기위한 글이기 보단 기록용으로 작성함것임을 참고하세요.
참고로 p1 은 포인터형, a는 integer 형 변수입니다.
var
p1:pointer;
a:integer;
begin
p1:=@a; //a 변수 자체의 주소를 기억
//a 변수도 메모리에 할당 되어 있으므로, 메모리에 할당된 하나의 저장 공간 입니다.
p1:=ptr(a); //a 변수에 입력된 값을 주소로 기억
//만일 a 변수 값이 123 이라면, 이값을 주소값으로 사용합니다.
//a 에 특정 메모리의 주소 값이 들어 있을때 사용
p1^ //p1 에 기록되어 있는 주소 값을 참조해서 입출력,
var
p1:^integer; //integer 형 포인터 (같은 형식임 = p1:Pinteger; )
a,
b:integer
begin
p1:=@a; //p1 포인터에 a 변수 주소를 입력
p1^:=123; //입력 a=123 과 같음
b:=p1^; //출력 b=a 와 같음
a:=integer(@b); // a에 b 주소값을 받음 (a,b = integer)
a:=integer(p1); // a에 p1포인터 주소값을 받음
inc(p1); //p1에 설정된 포인터형에 따라 주소를 증가
//byte 형이면 1 바이트 주소 증가,
//word(2 바이트), integer(4바이트) 이면 그 크기에 맞추어 증가
//구조체 형 등은 구조체 크기에 맞게 주소가 증가합니다.
inc(p1,3); //식으로 주소 위치가 3배 증가되는 식으로도 사용 가능합니다.
inc(p1^); //식은 p1의 주소 값 번지 안에 있는 데이터 값을 1 증가하라는 뜻으로,
위와 헛갈릴 수 있으니 주의해야 합니다.
inc(p1^,4); 라면 p1의 주소 값 번지 안에 있는 데이터 값을 4 증가
integer 형 포인터에서,1byte 뒤 위치를 주소로 지정하기
ex)
var
a:integer;
p1:Pinteger; //여기서 :Pinteger = :^integer 과 뜻이 같음
pp:pointer; //어떤 형태로든 호환되는, 포인터 하나 더 설정
begin
p1:=@a; //p1에 a 변수의 주소를 받음
pp:=pchar(p1)+1; //pp는 a 주소의 + 1 byte 위치를 가르킴
//만일 p1(pinteger)에 위식을 대입하기 위해선 아래와 같이 함,
p1:=pointer(pchar(p1)+1); //+1 값을 조절 될수 있음
p1:=pp; //방식으로도 가능함
함수 호출시
//포인터 주소 에서, 한 바이트 뒤(+1 byte)를 어드레스로 지정하고 싶을떄
d3d.TxtOutP(0,0,pchar(pdata)+1); //pdata 에서 + 1 바이트 뒤 주소를 지정해서 d3d.TxtOutP 함수를 호출한다
ex)procedure TmyD3d.TxtOutP(zx, zy: integer; zp: pointer);
다른 타입의 포인터 끼리 주소 받기
포인터 타입이 다를때 주소 받기 입니다.
var
P1b : ^byte; // byte 형 포인터
P1i : ^integer; // integer 형 포인터
a:integer;
begin
P1b:=@a; //a 변수 주소를 byte 형 포인터에 받음
p1i:=pointer(P1b); //byte형 포인터 주소를 integer 형 포인터 주소로 받음
다른 타입의 포인터를 함수에서 받기
ex)
var
p1b:^byte;
begin
testx(p1b); //함수호출
procedure testx(zp1:pointer);
var
ap2:^TFloatRec;
begin
ap2:=zp1; //TFloatRec 구조체의 시작위치 포인터를 zp1 포인터로 설정함
//포인터 기준에서 +,- 어드레스 위치 조절하여 값 대입하기
var
p1:^integer;
begin
ex)
Pinteger(uint(p1)+8)^:=123; // p1에서 + 8 byte = 위치에 123 값(integer) 을 입력
델파이에서 포인터를 array 형으로 변형 사용하기
var
ap:Pinteger;
dp:array of integer;
begin
pointer(dp):=ap; //ap 는 이미 버퍼가 할당된 포인터일 경우 입니다.
dp[0]:=1; // <------ 같음 -------> ap^:=1;
'프로그램잉_기타 > 델파이' 카테고리의 다른 글
델파이 ( C++ 빌더) 커뮤니티 에디션 , 프리 버전 받기 (0) | 2020.05.13 |
---|---|
델파이 repeat, while 문 조건 부분 쉽게 이해하기 (0) | 2019.08.11 |
델파이에서 변수 선언 기본, 전역 변수 및 유닛간 참조 호출 방법 (0) | 2019.06.26 |
델파이에서 오브젝트,클래스 정의 방법및 상속 간단 설명 (기록용). (0) | 2019.04.23 |
델파이 6,7 컴파일 옵션 간단 설명(기록 보관용) (0) | 2019.02.09 |