메모리 모델 및 세그먼트에 따라 포인터는 세 가지 유형으로 분류됩니다 -
- 가까운 포인터
- 먼 포인터
- 큰 포인터
가까운 포인터
-
메모리의 64Kb 데이터 세그먼트 범위에서 작동하는 포인터입니다.
-
해당 데이터 세그먼트를 넘어서는 주소에 액세스할 수 없습니다.
-
근거리 포인터는 산술 연산자를 사용하여 주소 범위를 증가 또는 감소시킬 수 있습니다.
-
Near 키워드를 사용하면 모든 포인터를 Near 포인터로 만들 수 있습니다.
구문
구문은 다음과 같습니다 -
<data type> near <pointer definition> <data type> near <function definition>근처
다음 명령문은 변수 s
에 대한 가까운 포인터를 선언합니다.char near *string;
프로그램
다음 프로그램은 근거리 포인터의 사용법을 보여줍니다.
#include<stdio.h> int main(){ int number=50; int near* p; p=&number; printf("%d",sizeof(p)); return 0; }
출력
출력은 다음과 같습니다 -
2
먼 포인터
-
포인터가 다른 오프셋과 세그먼트 주소를 모두 저장하는 포인터입니다.
-
16개 세그먼트 모두에 액세스할 수 있습니다.
-
원거리 포인터 주소의 범위는 0~1MB입니다.
-
포인터가 증가하거나 감소할 때 오프셋 부분만 변경됩니다.
구문
구문은 다음과 같습니다 -
<data type> far <pointer definition> <data type> far <function definition>
다음 명령문은 변수 s
에 대한 원거리 포인터를 선언합니다.char far *s;
프로그램
다음 프로그램은 원거리 포인터의 사용법을 보여줍니다.
#include<stdio.h> int main(){ int number=50; int far *p; p=&number; printf("%d",sizeof number); return 0; }
출력
출력은 다음과 같습니다 -
4
거대한 포인터
-
포인터는 모두 32비트 주소이기 때문에 크기 면에서 원거리 포인터와 유사한 포인터입니다.
-
거대한 포인터는 세그먼트 작업 라운드를 통해 어려움 없이 증가할 수 있습니다.
프로그램
다음 프로그램은 거대한 포인터의 사용법을 보여줍니다.
#include<stdio.h> Int main(){ Char huge *far *ptr; Printf("%d%d%d",sizeof(ptr),sizeof(*ptr),sizeof(**ptr)); Return 0; }
출력
출력은 다음과 같습니다 -
4 4 1