Theo bảng ưu tiên toán tử C++, ưu tiên tăng sau cao hơn toán tử dereference (*) và toán tử tăng trước và dereference có cùng mức ưu tiên. Ngoài ra toán tử pre-increment và dereference là liên kết từ phải sang trái.
Vì vậy, trong dòng đầu tiên (cout<<++*p<<std::endl;
), * và ++ được đánh giá từ phải sang trái (dereference đầu tiên, sau đó tăng). Bây giờ p
vẫn trỏ đến mảng đầu tiên (vì nó không thay đổi), nhưng (* p) trỏ đến chữ cái thứ hai của chuỗi đầu tiên (đầu ra cho thấy thực tế này).
Trong dòng thứ hai (cout<<*p++<<std::endl;
) tuy nhiên sau tăng được đánh giá đầu tiên (sau khi lấy các giá trị cũ của p
) và p
được tăng lên và bây giờ chỉ vào mảng thứ hai. Nhưng trước khi tăng, giá trị của p được sử dụng trong biểu thức và đầu ra của dòng thứ hai là chính xác như dòng đầu tiên.
Trong dòng thứ ba, đầu tiên p
bị hủy tham chiếu (trỏ tới chữ cái thứ nhất của mảng thứ hai), sau đó được tăng lên (trỏ tới chữ cái thứ hai của mảng thứ hai) và giá trị được in.
Nguồn
2012-02-20 10:49:52
điều hành được ưu tiên. Thêm một số dấu ngoặc đơn và nó sẽ trở nên rõ ràng ... – jrok