Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

So sánh *ptr++, *++ptr và ++*ptr trong C++


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ĩaKết quả (với "Hello")
++*ptrTă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)
*++ptrTăng con trỏ, rồi lấy giá trị'e' (con trỏ dịch chuyển)