Ba biểu thức liên quan đến con trỏ ptr có thứ tự ưu tiên (precedence) khác nhau:
++*ptr≡++(*ptr)– Tăng giá trị trỏ tới (prefix ++ ưu tiên hơn dereference *).*ptr++≡*(ptr++)– Lấy giá trị hiện tại, sau đó tăng con trỏ (postfix ++ ưu tiên cao nhất).*++ptr≡*(++ptr)– Tăng con trỏ trước, rồi lấy giá trị mới (prefix ++ ưu tiên hơn *).
Ví dụ 1: ++*ptr
char arr[] = "Hello World"; char *ptr = arr; ++*ptr; cout << *ptr; // Output: I
ptr trỏ đến 'H' (ASCII 72). ++*ptr tăng thành 'I' (73).
Ví dụ 2: *ptr++
char arr[] = "Hello World"; char *ptr = arr; *ptr++; cout << *ptr; // Output: e
*ptr++ lấy giá trị 'H' (bỏ qua), rồi ptr trỏ đến 'e'. In ra 'e'.
Ví dụ 3: *++ptr
char arr[] = "Hello World"; char *ptr = arr; *++ptr; cout << *ptr; // Output: e
++ptr di chuyển con trỏ sang 'e' trước, sau đó * lấy giá trị 'e'.
Tóm tắt
| Biểu thức | Ý nghĩa | Kết quả (với "Hello") |
|---|---|---|
++*ptr | Tăng giá trị tại con trỏ | 'I' |
*ptr++ | Lấy giá trị, rồi tăng con trỏ | 'e' (con trỏ dịch chuyển) |
*++ptr | Tăng con trỏ, rồi lấy giá trị | 'e' (con trỏ dịch chuyển) |