-
28-09-2014, 02:21 PM #1
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thắc mắc về hoạt động của hàm x++,x--....
em viết đoạn chương trình như sau:
#include <stdio.h>
#include <conio.h>
main()
{
int x=10,y=11;
int a=10,b=11;
printf("x-- * ++y = %d
x-- - --y = %d
",x-- * ++y,x-- - --y);
printf("a-- * ++b = %d
",a-- * ++b);
printf("a-- - --b = %d",a-- - --b);
getch();
}
trong chương trình trên thì theo em nghĩ là hàm printf thứ nhất <=> với 2 hàm printf còn lại và chỉ khác là thay biến x thành a và y thành b (với x=a=10, y=b=11) nhưng sao lại cho ra các kết quả khác nhau ạ?View more random threads:
- Mong mọi người giúp đỡ viết chương trình bằng C++
- Cách vế kế thừa hướng đối tượng trong c++ của bài này?
- Xử lý chuỗi thành số
- Kinh nghiệm học lập trình c++
- Tạo tiêu đề trong C như thế nào?
- Lập trình C++ dùng phần mềm nào.
- Nhờ giúp đỡ về đoạn code vẽ đồ thị sinx với khoảng chia n
- bt tìm số "thú vị".khởi tạo biến ở ngoài và trongvòng lặp for khác nhau như thế nào?giải thích dùm?
- In ra màn hình :
- hàm trả về xâu sau có vấn đề ở chỗ nào ?
-
28-09-2014, 03:51 PM #2
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Dòng printf đầu là undefined behavior nhé [IMG]images/smilies/smile.png[/IMG]
Có đến 2 vấn đề:
- Không phải tham số đứng trước là tính trước
- Thay đổi 1 biến 2 lần
-
28-09-2014, 04:13 PM #3
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi prog10
vậy thì trong hàm printf đầu tiên thì nó sẽ chạy như thế nào? nó tính cái gì trước ạ?
-
29-09-2014, 09:54 AM #4
Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
function(a, b, c) thì thứ tự xét là a -> b -> c hay là c -> b -> a?
ko quan trọng thứ tự, hay thứ tự ko xác định rõ ràng (undefined). Tùy mỗi trình dịch xử lý, có trình dịch đọc từ phải qua trái, có trình dịch đọc từ trái qua phải. Vì vậy mới gọi là undefined behavior.
bài trên thì dòng printf đầu nó dịch từ phải qua trái, còn bạn thì ngỡ là nó dịch từ trái qua phải nên viết 2 dòng dưới theo thứ tự đó.
khi truyền tham số vào hàm thì tham số thứ i ko nên làm ảnh hưởng tới giá trị / kết quả của tham số thứ j, mỗi tham số độc lập lẫn nhau... Ở đây tham số thứ 1 (x-- * ++y) làm ảnh hưởng tới giá trị của tham số thứ 2 (x-- - --y) nên ra kết quả ko xác định như trên.
còn tại sao nó lại đọc từ phải qua trái mà ko phải từ trái sang phải thì các tham số khi truyền vào hàm được push lên stack rồi pop ra xét từ từ => tham số ở cuối sẽ được xét đầu tiên, tham số đầu tiên sẽ được xét cuối cùng. Đẩy lên queue thì sẽ ra thứ tự trái sang phải, nhưng queue chậm/viết phức tạp hơn stack nhiều.
NGUỒN SỈ ÁO KHOÁC DENIM NỮ TPHCM CHẤT LƯỢNG CAO Bạn muốn nhập sỉ áo khoác denim nữ để bắt đầu việc buôn bán Online phong cách nhưng lại chưa có kinh nghiệm, muốn sắm xưởng sỉ xống áo vừa có thể giải...
Xưởng sỉ áo khoác jeans denim giá...