01/10/2018, 13:50
Vấn đề toán tử với con trỏ

Chào các bạn, các anh chị , em là sinh viên năm 1 đang học ngành Mạng máy tính và Truyền thông, em vừa được biết đến con trỏ 2 ngày thì đụng phải 1 vấn đề này mà em suy nghĩ cả chiều, nhờ bạn bè xung quanh tụi nó cũng ko suy nghĩ ra _" . Mong được các bậc đàn anh cứu trợ và giải thích vấn đề nan giải này giúp em ạ.
Xin cám ơn
Bài liên quan
Nếu mình đoán không nhầm:
Tương đương với việc định nghĩa “
*x chính là y
”Như vậy
*x=*x+(y++);
tương đương vớiy = y + (y++);
Cái này thuộc Undefined Behavior, một phép tính không thể dự đoán kết quả.y += (y++);
cũng tương tự.Cụ thể vấn đề bạn mắc phải là gì?
vấn đề em k biết tại sao 2 dòng đó lại ra 2 kết quả khác nhau , theo em biết thì nó có phép toán giống nhau ạ.
Như bác @noz1995 nói
Có lẽ do thứ tự ưu tiên của phép tính trong các toán tử khác nhau
Thực ra nếu
y == 2
thì sau khia = y++;
sẽ cóa == 2
vày == 3
. Nếu làa = ++y
thì mới cóa == 3
Xét đến dòng này:
Có thể compiler đã tính
y++ == 2
và đưa vào bộ nhớ tạm trước khi tínhy + 2
với y lúc bây giờ đã bằng 3Nhưng nếu đưa
y
vào bộ nhớ tạm trước (giống như trường hợpy += y++;
) thì kết quả sẽ là 4.Nói chung là kết quả không dự đoán được.
[spoiler]Thằng nào nghĩ ra cái trò return giá trị cho ++ với cả += thế hả trời, chỉ tổ hại não[/spoiler]
##Cám ơn sự giúp đỡ của các anh,
##em đã hiểu được vấn đề 1 phần nào ^^