Hỏi về phép toán với con trỏ trên mảng trong C++
Các anh chị đi qua cho em hỏi với ạ .Theo em tìm hiểu thì toán tử ++ được ưu tiên trước *,nhưng thầy dạy em thì lại nói là * ưu tiên trước .=> vậy khi thao thao tác với con trỏ trên mảng thì phép toán *p++ theo ý hiểu nào là đúng ạ ?
Cụ thể như là :
TH 1 : ưu tiên * trước
int a [3] = {1,4,3};
int *p = a ;(<=> p = &a[0] =1)
=>*p++ = a[0]++;
=>*p++ sẽ nhận giá trị 2
TH2 : ưu tiên ++ trước
int a[3] = {1,4,3};
int *p = a;
=>*p++ = a[1];
=>*p++ sẽ nhận giá trị 4
Vậy theo ý hiểu nào là đúng ạ,em mới học xong con trỏ nên chưa rõ ràng lắm.mong anh chị chỉ giáo





HI Tung Nguyen.
Code thư xem. @_@!
http://en.cppreference.com/w/cpp/language/operator_precedence
a++ưu tiên hàng 2,*aưu tiên hàng 3.cả 2 trường hợp em phân tích đều sai…
*p++hiểu là:nên
*p++sẽ có giá trị y như*plà 1. 2 với 4 gì ở đây ~.~cho 1 chuỗi C-string
const char* src = "hello";và 1 chuỗi rỗngchar dst[10];, muốn copysrcvàodstthì ta có thể viết 1 dòng:while (*dst++ = *src++);Em hiểu được dòng copy này là hiểu được*p++.ngược lại:
++*pmới trả về giá trị 2.++pvà*ptheo cái bảng trên đều là ưu tiên hàng 3, nhưng thứ tự phép toán được tính từ phải sang trái, nên*pđược đánh giá trước, rồi mới tới++. Như vậy++*phiểu là:cám ơn anh,em đã hiểu vấn đề rồi .
Cái này có cách nhớ đó bạn (xem hàm strcpy) nhưng người ta sẽ để dấu ngoặc khi viết những câu ntn.