Hiển thị kết quả từ 11 đến 20 / 53
Chủ đề: i++ và ++i
-
27-02-2011 00:51 #11
DDTH.com
- Tham gia
- 15-10-2007
- Bài viết
- 1,720
- Like
- 27
- Thanked 135 Times in 89 Posts
-
27-02-2011 03:10 #12
Registered User
- Tham gia
- 26-02-2011
- Bài viết
- 4
- Like
- 0
- Thanked 0 Times in 0 Posts
cac a lam giup e di
(
-
27-02-2011 17:02 #13
Registered User
- Tham gia
- 07-10-2009
- Bài viết
- 33
- Like
- 0
- Thanked 0 Times in 0 Posts
-
27-02-2011 17:18 #14
phép toán ++, -- là cái hay của c++ nhưng mình nghĩ có lẽ trên thực tế, trên dự án lớn thì hạn chế xài và hạn chế xài những cái mà người ta hay đưa ra để chứng minh c++ "tài năng" hơn các ngôn ngữ khác.
đây có lẽ là 1 ví dụ tuyệt vời nhất để chứng minh điều này.
-
27-02-2011 19:12 #15
DDTH.com
- Tham gia
- 15-10-2007
- Bài viết
- 1,720
- Like
- 27
- Thanked 135 Times in 89 Posts
-
27-02-2011 20:49 #16
Registered User
- Tham gia
- 26-06-2010
- Bài viết
- 16
- Like
- 2
- Thanked 0 Times in 0 Posts
--Kết quả chính xác là : 22 13 13 13
--Vì trước lệnh "printf("%d %d %d %d",b,a++,a,++a);" giá trị của a = 12, b= 22 (cái này không ai bàn cãi gì đúng không). Mấu chốt thứ 1 của vấn đề là: print(a++) <=> print(a) sau đó a mới tăng lên 1 đơn vị, còn print(++a) thì a tăng lên 1 rồi mới in ra màn hình. Thứ 2 là trong lệnh "printf("%d %d %d %d",b,a++,a,++a);" trật tự thực hiện sẽ là ++a, a, a++, b sau khi có được kết quả thì sẽ được in theo chiều ngược lại (nói đúng hơn là hệ thống sẽ xử dụng stack (FILO) trong trường hợp này).
Cụ thể trong trường hợp này các bạn hình dung ta có stack như sau:
-----------------------------------------------------
|print(++a)=13|print(a)=13|print(a++)=13|print(b)= 22 ->
-----------------------------------------------------
--Cuối cùng thì chương trình sẽ lần lượt in ra theo chiều mũi tên và được kết quả là 22 13 13 13
--Nếu các bạn thay "b" = "a" trong lệnh printf trên thì kết quả sẽ là:
14 13 13 13
--Đôi dòng chia sẻ, nếu có gì sai mong nhận được sự góp ý chân thành từ mọi người.
-
27-02-2011 22:45 #17
Registered User
- Tham gia
- 16-02-2011
- Bài viết
- 8
- Like
- 0
- Thanked 0 Times in 0 Posts
-
28-02-2011 12:33 #18
Registered User
- Tham gia
- 26-06-2010
- Bài viết
- 16
- Like
- 2
- Thanked 0 Times in 0 Posts
-
28-02-2011 12:39 #19
Bạn nhìn bài do mình post đấy. Chạy bằng Turbo C++
Mình nghĩ cái nì do biên dịch thôi. Mình thử code bằng C# 2010
Thì có kết quả: 22 12 13 14. Nghĩ cũng hãi thậtPHP Code:int a = 10, b;
b = a++ + ++a;
Console.WriteLine("{0}-{1}-{2}-{3}",b,a++,a,++a);
Nhưng mình vẫn nghĩ kết quả: 22 13 13 13 là hợp lý.
Vấn đề này rất quan trọng nếu ai muốn có chứng chỉ Java, PHP,...
-
01-03-2011 13:17 #20
Chào cả nhà,mình thấy topic sôi nổi vì 1 vấn đề nho nhỏ mà không hề nhỏ,mình cũng mạo muội góp vui có gì ko phải thì cả nhà lượng thứ!
Chúng ta nhắc lại 1 số khái niệm Base trước trong C Standard nhá:
i++ : Sử dụng giá trị của i trước rồi +1.
++i : Sử dụng giá trị i+1 luôn.
OK tiếp theo là phân tích từng đoạn code nhé:
các giá trị ban đầu chúng ta có là a=10,b.
b=a++ + ++a Ở đoạn này giá trị của a++=10 đọc xong a++ rồi thì giá trị được +1 tức là 11,tiếp theo là ++a=12 vì a đã được cập nhật lại là 11 và tăng thêm 1=12 ----> b=10+12.
printf("%d %d %d %d",b,a++,a,++a) Trong câu lệnh này thì b=22 ko nói rồi.Nối tiếp dòng lệnh trên thì a++=12 vì sử dụng giá trị trước khi +1,sau khi dùng giá trị rồi thì ngay lập tức a được +1=13.Cuối cùng là ++a được sử dụng giá trị a+1 luôn tức là 14.
Phù...Sau 1 hồi Debug bằng tay,sử dụng ngôn ngữ Việt để biên dịch thì mình cho ra kết quả là b=22 a++=12 a=13 ++a=14 //Không dựa trên IDE nào cả chỉ dùng các chuẩn của C Standard để Debug thôi ---> Java cho kết quả đúng.Các bạn đối chiếu xem sao nhé! Nếu bạn nào cho ra kết quả khác thì các bạn phải chứng minh bằng C Standard để mọi người cùng tham khảo.Mình xin hết.



Quote

Bookmarks