Các phép tính số học với pointer
Việc thực hiện các phép tính số học với con trỏ hơi khác so với các kiểu dữ liệu
số nguyên khác. Trước hết, chỉ phép cộng và trừ là được phép dùng. Nhưng cả
cộng và trừ đều cho kết quả phụ thuộc vào kích thước của kiểu dữ liệu mà biến
con trỏ trỏ tới.
Chúng ta thấy có nhiều kiểu dữ liệu khác nhau tồn tại và chúng có thể chiếm
chỗ nhiều hơn hoặc ít hơn các kiểu dữ liệu khác. Ví dụ, trong các kiểu số
nguyên, char chiếm 1 byte, short chiếm 2 byte và long chiếm 4 byte.
Giả sử chúng ta có 3 con trỏ sau:
char *mychar;
short *myshort;
long *mylong;
và chúng lần lượt trỏ tới ô nhớ
1000
,
2000
and
3000
.
Nếu chúng ta viết
mychar++;
myshort++;
mylong++;
mychar
- như bạn mong đợi - sẽ mang giá trị
1001
. Tuy nhiên
myshort
sẽ mang
giá trị
2002
và
mylong
mang giá trị
3004
. Nguyên nhân là khi cộng thêm 1 vào
một con trỏ thì nó sẽ trỏ tới phần tử tiếp theo có cùng kiểu mà nó đã được định
nghĩa, vì vậy kích thước tính bằng byte của kiểu dữ liệu nó trỏ tới sẽ được cộng
thêm vào biến con trỏ.
Điều này đúng với cả hai phép toán cộng và trừ đối với con trỏ. Chúng ta cũng
hoàn toàn thu được kết quả như trên nếu viết:
mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;