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 == 2thì sau khia = y++;sẽ cóa == 2vày == 3. Nếu làa = ++ythì mới cóa == 3Xét đến dòng này:
Có thể compiler đã tính
y++ == 2và đưa vào bộ nhớ tạm trước khi tínhy + 2với y lúc bây giờ đã bằng 3Nhưng nếu đưa
yvà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 ^^