ขึ้นอยู่กับ Memory model (16-bit systems เช่น Turbo C) Pointers แบ่ง 3 ประเภท
1. Near Pointer
- ทำงานใน 64KB data segment เดียว
- ไม่เข้าถึงนอก segment ได้
- Size: 2 bytes (16-bit offset)
- Keyword:
near
char near *str;
2. Far Pointer
- เก็บ segment + offset (32-bit)
- เข้าถึงได้ทั้ง 16 segments (1MB)
- Increment/decrement เปลี่ยนแค่ offset
- Keyword:
far
char far *str;
3. Huge Pointer
- คล้าย Far pointer (32-bit)
- Increment/decrement ปรับ segment+offset อัตโนมัติ (ไม่มีปัญหา segment wrap)
- Keyword:
huge
โปรแกรมทดสอบขนาด
#include <stdio.h>
int main() {
int num = 50;
int near *np = #
int far *fp = #
int huge *hp = #
printf("near pointer size: %zu\n", sizeof(np)); // 2
printf("far pointer size: %zu\n", sizeof(fp)); // 4
printf("huge pointer size: %zu\n", sizeof(hp)); // 4
return 0;
}
ผลลัพธ์ (16-bit compiler)
near pointer size: 2
far pointer size: 4
huge pointer size: 4
หมายเหตุ: ใน 32/64-bit ระบบสมัยใหม่ ไม่มี near/far/huge แล้ว (flat memory model)