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 :sweat:

2 Likes

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

ơ sao lại vậy nhỉ ,mình cũng ko hiểu :sweat_smile: , 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.

4 Likes

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

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?