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)