Các phép toán trên con trỏ:

Một phần của tài liệu Bài Giảng C++ (Trang 90 - 92)

Có 4 phép toán liên quan đến con trỏ và đại chỉ là: Phép gán.

Phép tăng giảm địa chỉ. Phép truy cập bộ nhớ. Phép so sánh.

Phép gán: Phép gán chỉ thực hiện với các con trỏ cùng kiểu. Muốn gán các con trỏ khác kiểu phải dùng phép ép kiểu như ví dụ sau:

int x;

char *pc;

pc=(char*)(&x);

Phép tăng giảm địa chỉ: Để minh hoạ chi tiết cho phép toán này, ta xét ví dụ sau:

Các câu lệnh:

float x[30],*px; px=&x[10];

cho con trỏ px là con trỏ float trỏ tới phần tử x[10]. Ta có: px+i trỏ tới phần tử x[10+i]

px-i trỏ tới phần tử x[10-i]

Phép truy cập bộ nhớ: Con trỏ float trỏ tới địa chỉ dài 4 byte, con trỏ int trỏ tới địa chỉ dài 2 byte, con trỏ char trỏ tới địa chỉ dài 1 byte. Giả sử ta có cá khai báo:

float *pf; int *pi; char *pc;

Khi đó ta có các nhận xét sau:

Nếu trỏ pf trỏ đến byte thứ 100 thì *pf biểu thị vùng nhớ 4 byte liên tiếp từ byte 100 đến 103.

Nếu trỏ pi trỏ đến byte thứ 100 thì *pi biểu thị vùng nhớ 2 byte liên tiếp từ byte 100 đến 101.

Nếu trỏ pc trỏ đến byte thứ 100 thì *pc biểu thị vùng nhớ 1 byte chính là byte 100.

Phép so sánh: Cho phép so sánh các con trỏ cùng kiểu, ví dụ nếu p1 và p2 là các con trỏ cùng kiểu thì nếu:

p1<p2 nếu địa chỉ p1 trỏ tới thấp hơn địa chỉ p2 trỏ tới. p1=p2 nếu địa chỉ p1 trỏ tới cũng là địa chỉ p2 trỏ tới. p1>p2 nếu địa chỉ p1 trỏ tới cao hơn địa chỉ p2 trỏ tới. Ví dụ 1:

float a[100],*p,*pcuoi,tong=0.0;

pcuoi=(float*)(a+99); /* Địa chỉ cuối dãy*/ for (p=(float*)a;p<=pcuoi;++p)

tong+=*p; Ví dụ 2:

Dùng con trỏ char để tách các byte của một biến nguyên, ta làm như sau:

Giả sử ta có biến nguyên n được khai báo như sau: unsigned int n=0xABCD; /* Số nguyên hệ 16*/ char *pc;

pc=(char*)(&n); Khi đó:

*pc=0xAB (byte thứ nhất của n) *(pc+1)=0xCD (byte thứ hai của n)

Một phần của tài liệu Bài Giảng C++ (Trang 90 - 92)