3.2.4 Phép toán số học trên pointer (3)

Bây giờ hãy thử trừ 2 con trỏ theo cách sau →

Phép trừ này cho kết quả kiểu int, vậy nó được tính như thế nào ?

  • Kiểm tra kiểu dữ liệu mà các con trỏ trỏ đến (ở đây là kiểu int), các con trỏ phải trỏ đến cùng một kiểu dữ liệu, trình biên dịch sẽ kiểm tra điều này
  • Địa chỉ được lưu trong các pointer sẽ được trừ đi nhau
  • Kết quả của phép trừ sẽ được chia cho kích thước của kiểu dữ liệu được trỏ bởi các con trỏ

Kết quả cuối cùng cho bạn biết rằng có bao nhiêu biến (trong ví dụ này là kiểu int) nằm giữa 2 địa chỉ được lưu bởi 2 con trỏ này. Trong ví dụ của chúng ta thì kết quả sẽ là 1 và nó sẽ được gán cho biến i. Kết quả sẽ lớn hơn 0 nếu ptr2 trỏ đến vùng nhớ đặt sau ptr1 và ngược lại.


Giả sử chúng ta thực hiện phép toán sau → thì đây là kết quả
Nếu chúng ta thực hiện phép trừ như sau → thì kết quả sẽ như sau   ===> Lúc đó ptr1 – ptr2 sẽ bằng 2