01/10/2018, 00:34
Hỏi về phép ++i và i++
Chào mọi người, mình thấy trên mạng có bài test này, mình không nắm rõ được trình tự nó thực hiện ra sao, mọi người có thể giải thích giúp được không?
Ques 10 : what is the output of following program?
void main(){
int a=1;
void xyz(int , int);
xyz(++a,a++);
xyz(a++,++a);
printf("%d",a);
}
void xyz(int x, inty){
printf("%d%d",x,y);
}
Đáp án là 3 1 4 4 5
Bài liên quan
i++ ++i về cơ bản sau 2 lệnh này giá trị i nó như nhau.
Giá trị cuối cùng giống nhau, khác nhau duy nhất là ++i thì tăng trước rồi muốn làm gì thì làm. Còn i++ thì làm cái gì cứ làm đi rồi tăng i sau.
i++ là cưới đi rồi chén, ++i là chén đi rồi cưới.,
kết quả vẫn là cưới.
Sao code của bạn mình lại ra
31455
nhỉ?Output: 0 2
Theo mình trường hợp này là thuộc dạng “undefined behavior” - không xác định được cách hoạt động vì ngôn ngữ không quy định thứ tự truyền tham số vào hàm nên kết quả ra tùy thuộc vào compiler. Đây là kết quả test sử dụng các compiler khác nhau:
Do đó những cấu trúc lệnh không xác định rõ ràng và không giống nhau ở mỗi Compiler thì tốt nhất là không dùng.
Và trong thực tế rất hiếm thấy dùng ++i.