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

Sáng Béo viết 19:23 ngày 30/09/2018

sao lạ nhỉ. khác đáp án của bạn.

Killua viết 19:37 ngày 30/09/2018

ơ 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

Minh Hoàng viết 19:30 ngày 30/09/2018

đâ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
PiX

Why are these constructs using pre- and post-increment undefined behavior?

c, increment, undefined-behavior, order-of-evaluation
asked by PiX on 09:17AM - 04 Jun 09

Nhật Cao Khánh viết 19:37 ngày 30/09/2018

Cái này bạn nào học hệ điều hành chắc sẽ rõ

viết 19:22 ngày 30/09/2018

++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.

Nguyễn Minh Hải viết 19:29 ngày 30/09/2018

cách giải thích hợp lý nè

*grab popcorn* viết 19:28 ngày 30/09/2018

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

Bài liên quan
0