Một biến pointer có thể được cộng trừ với một số nguyên (int, long) để cho kết quả là một pointer chỉ đến một vùng nhớ khác.
Ví dụ 5.14: int *ptr, *p1;
int num = 10; ptr = # p1 = ptr + 2;
68
Việc cộng hoặc trừ pointer với một số nguyên n thì pointer sẽ chỉ đến một địa chỉ mới hay nói cách khác là chỉ đến một biến khác nằm cách biến đó n vị trí.
Ví dụ 5.15:
int v[10]; // mảng 10 phần tử lin tiếp .
int * p ; // Biến pointer chỉ đến một số int .
p= & v[0]; // p là địa chỉ phần tử đầu tiên của mảng for( i =0; i<10 ; i++)
{
*p= i * i; // gán cho phần tử mà p đang chỉ đến p ++ ;// p được tăng lên để chỉ đến phần tử kế tiếp }
Lưu ý :
Do cộng một pointer với một giá trị nguyên cho ta một pointer, nên phép trừ hai pointer vẫn được coi là hợp lệ, kết quả cho ta một giá trị int biểu thị khoảng cách (số phần tử) giữa 2 pointer đó.
Phép cộng 2 pointer là không hợp lệ.
Không thể nhân, chia , hoặc lấy dư của một pointer với bất kì một số nào. Đối với các phép toán khác, pointer được xử lý như một biến bình thường
(gán, so sánh …), các toán hạng phải cùng kiểu pointer và cùng kiểu đối tượng của chúng. Mỗi sự chuyển kiểu tự động luôn được cân nhắc và xác nhận từ trình biên dịch.
Địa chỉ của một biến được xem là một pointer hằng và ngôn ngữ lập trình C cho phép thực hiện các phép toán mà pointer chấp nhận trên nó, trừ phép gán lại và phép tăng giảm vì ta không thể gán lại một giá trị hằng bằng một giá trị khác được.
Ví dụ 5.16:
int p, *px, num;
px= &num ;//lấy địa chỉ của num gán vào biến: ĐÚNG px++; //tăng giảm trên một biến pointer: ĐÚNG
&p = px; //gán lại một địa chỉ hằng: SAI &p++; //tăng giảm một địa chỉ hằng: SAI.
69