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

PropellerAds

Giờ chúng ta sẽ xem phép cộng con trỏ được thực hiện như thế nồi nào.

Hai câu lệnh ở hình trên thì đều thực hiện cộng 1 vào con trỏ ptr2. Hoạt động này được giải thích như sau:

  • Đầu tiên là xác định xem kiểu dữ liệu mà con trỏ trỏ đến là kiểu gì (ở ví dụ này là kiểu int)
  • Xác định xem kiểu dữ liệu đó chiếm bao nhiêu byte bộ nhớ (ở ví dụ này sẽ là sizeof (int))
  • Giá trị mà chúng ta muốn cộng vào con trỏ sẽ được nhân với size của kiểu dữ liệu
  • Địa chỉ đươc lưu trong con trỏ sẽ được cộng thêm với kết quả của phép nhân bên trên

Như vậy con trỏ sẽ di chuyển đến giá trị kiểu int tiếp theo trong bộ nhớ. Kết quả của phép cộng các bạn có thể thấy rõ trong hình bên trên.

Vậy chuyện gì sẽ xảy ra nếu chúng ta cộng 2 thay vì cộng 1 ? Khi đó con trỏ ptr2 sẽ tăng thêm (2 * sizeof(int)) và ptr2 sẽ di chuyển qua 2 giá trj int và trỏ vào phần tử thứ 3 của array

Khi đó phép so sánh sau

ptr1 == ptr2

sẽ cho kết quả false, trong khi phép so sánh

ptr1 != ptr2

sẽ cho kết quả true