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

Khác biệt giữa ++*p, *p++ và *++p trong C++


Khi p là con trỏ, thứ tự ưu tiên: postfix ++ > prefix ++ > dereference *.

  • *p++ ≡ *(p++): Lấy giá trị tại p, sau đó tăng con trỏ p.
  • *++p ≡ *(++p): Tăng con trỏ p trước, rồi lấy giá trị tại vị trí mới.
  • ++*p ≡ ++(*p): Tăng giá trị mà p trỏ đến, con trỏ không đổi.

Ví dụ minh họa

#include <iostream>
using namespace std;

int main() {
    char arr[] = "Hello World";
    char *p = arr;

    cout << "Ban dau: *p = " << *p << endl; // H

    ++*p;  // Tăng giá trị 'H' -> 'I'
    cout << "Sau ++*p: *p = " << *p << endl; // I

    p = arr; // reset
    *p++;    // Lấy 'H', rồi p trỏ 'e'
    cout << "Sau *p++: *p = " << *p << endl; // e

    p = arr;
    *++p;    // Tăng p trỏ 'e', lấy 'e'
    cout << "Sau *++p: *p = " << *p << endl; // e
    return 0;
}

Kết quả

Ban dau: *p = H
Sau ++*p: *p = I
Sau *p++: *p = e
Sau *++p: *p = e