30/09/2018, 17:21
Printf (i++và ++i)
em có cái code này
int i=1;
printf("%d %d %d",++i,i++,++i); //2 3 2
printf("%d %d %d",i,i++,++i); //2 2 2
cho em hỏi là nó in theo trình tự nào vậy
Bài liên quan
sao lạ nhỉ. khác đáp án của bạn.
ơ sao lại vậy nhỉ ,mình cũng ko hiểu , mình dùng code block nó ra vậy , đã kiểm tra lại kết quả và ko đổi
đây gọi là các hành vi bất định (undefined behavior). Nên có thể ra các kết quả khác nhau.
stackoverflow.com
Why are these constructs using pre- and post-increment undefined behavior?
Cái này bạn nào học hệ điều hành chắc sẽ rõ
++i và i++ đứng một mình thì vai trò như nhau
nhưng khi gán nó vào một biến thì khác nhau nên cẩn thận.
ví dụ n = ++i thì tăng i lên 1 rồi mới gán giá trị mới tăng cho n.
n = i++ thì gán i vào n trước rồi mới tăng i lên 1.
Ví dụ n = 9, i = 1;
n = ++i; // i tăng lên 1 là 2, rồi gán cho n => n = 2.
n = i++; // i gán cho n trước => n = 1, rồi i tăng lên 1, n không bị ảnh hưởng.
cách giải thích hợp lý nè
Rok_Hoang là chuẩn không cần chỉnh rồi rồi xD
Undefined behavior
Tùy trình biên dịch mà nó ra kq khác nhau