Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Giải thích con trỏ Near, Far, Huge trong C


Tùy theo mô hình bộ nhớ và đoạn, con trỏ được phân thành ba loại:

  • Con trỏ Near (gần)
  • Con trỏ Far (xa)
  • Con trỏ Huge (lớn)

Con trỏ Near

  • Là con trỏ hoạt động trong phạm vi 64KB đoạn dữ liệu của bộ nhớ.

  • Không thể truy cập địa chỉ vượt quá đoạn dữ liệu đó.

  • Con trỏ near có thể tăng/giảm địa chỉ bằng toán tử số học.

  • Với từ khóa near, ta có thể làm cho bất kỳ con trỏ nào thành near pointer.

Cú pháp

Cú pháp như sau:

<kiểu dữ liệu> near <định nghĩa con trỏ>
<kiểu dữ liệu> near <định nghĩa hàm>

Câu lệnh sau khai báo con trỏ near cho biến s:

char near *string;

Chương trình

Chương trình sau minh họa dùng con trỏ near:

#include <stdio.h>
int main() {
    int number = 50;
    int near *p;
    p = &number;
    printf("%d", sizeof(p));
    return 0;
}

Kết quả

Kết quả như sau:

2

Con trỏ Far

  • Là con trỏ lưu cả offset và địa chỉ đoạn mà con trỏ tham chiếu.

  • Có thể truy cập tất cả 16 đoạn.

  • Địa chỉ far pointer từ 0 đến 1MB.

  • Khi con trỏ tăng/giảm, chỉ phần offset thay đổi.

Cú pháp

Cú pháp như sau:

<kiểu dữ liệu> far <định nghĩa con trỏ>
<kiểu dữ liệu> far <định nghĩa hàm>

Câu lệnh sau khai báo con trỏ far cho biến s:

char far *s;

Chương trình

Chương trình sau minh họa dùng con trỏ far:

#include <stdio.h>
int main() {
    int number = 50;
    int far *p;
    p = &number;
    printf("%d", sizeof number);
    return 0;
}

Kết quả

Kết quả như sau:

4

Con trỏ Huge

  • Là con trỏ tương tự far pointer về kích thước vì cả hai đều là địa chỉ 32-bit.

  • Con trỏ huge có thể tăng mà không gặp vấn đề vòng đoạn (segment wrap-around).

Chương trình

Chương trình sau minh họa dùng con trỏ huge:

#include <stdio.h>
int main() {
    char huge *far *ptr;
    printf("%d %d %d", sizeof(ptr), sizeof(*ptr), sizeof(**ptr));
    return 0;
}

Kết quả

Kết quả như sau:

4 4 1