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

Hỏi về phép toán với con trỏ trên mảng trong C++
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à:
//p++ ưu tiên trước
old = p;
p = p + 1;
return old;
//sau đó tới *, mà lúc này là deref giá trị cũ của p
return *old;
nên *p++ sẽ có giá trị y như *p là 1. 2 với 4 gì ở đây ~.~
cho 1 chuỗi C-string const char* src = "hello"; và 1 chuỗi rỗng char dst[10];, muốn copy src vào dst thì 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: ++*p mới trả về giá trị 2. ++p và *p theo 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 ++*p hiểu là:
//*p được đánh giá trước
return *p;
//rồi tới ++ của *p
*p = *p + 1;
return *p;
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.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?