Computer >> Máy Tính >  >> Lập trình >> lập trình C

Giải thích con trỏ gần xa rất lớn bằng ngôn ngữ C

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

  • Con trỏ gần
  • Con trỏ xa
  • Con trỏ khổng lồ

Con trỏ gần

  • Nó là một con trỏ hoạt động với phạm vi phân đoạn dữ liệu 64Kb của bộ nhớ.

  • Nó không thể truy cập địa chỉ ngoài phân đoạn dữ liệu đó.

  • Con trỏ gần có thể được tăng hoặc giảm phạm vi địa chỉ bằng cách sử dụng toán tử số học.

  • Với từ khóa gần, chúng ta có thể biến bất kỳ con trỏ nào thành con trỏ gần.

Cú pháp

Cú pháp như sau -

<data type> near <pointer definition>
<data type> near <function definition>

Câu lệnh sau khai báo một con trỏ gần cho biến s

char near *string;

Chương trình

Chương trình sau đây cho thấy cách sử dụng con trỏ gần.

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

Đầu ra

Kết quả như sau -

2

Con trỏ xa

  • Nó là một con trỏ lưu trữ cả địa chỉ offset và phân đoạn mà con trỏ đang phân biệt.

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

  • Địa chỉ con trỏ ở xa nằm trong khoảng từ 0 đến 1MB.

  • Khi con trỏ được tăng hoặc giảm, chỉ phần bù là thay đổi.

Cú pháp

Cú pháp được đưa ra bên dưới -

<data type> far <pointer definition>
<data type> far <function definition>

Các câu lệnh sau khai báo một con trỏ xa cho biến s

char far *s;

Chương trình

Chương trình sau đây cho thấy cách sử dụng con trỏ xa.

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

Đầu ra

Kết quả như sau -

4

Con trỏ khổng lồ

  • Nó là một con trỏ tương tự như con trỏ xa về kích thước vì cả hai đều là địa chỉ 32 bit.

  • Con trỏ khổng lồ có thể được tăng lên mà không bị ảnh hưởng bởi vòng làm việc phân đoạn.

Chương trình

Chương trình sau đây cho thấy cách sử dụng con trỏ khổng lồ.

#include<stdio.h>
Int main(){
   Char huge *far *ptr;
   Printf("%d%d%d",sizeof(ptr),sizeof(*ptr),sizeof(**ptr));
   Return 0;
}

Đầu ra

Kết quả như sau -

4 4 1