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ư*p
là 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 copysrc
vàodst
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à: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.