Haizzzz
[spoiler]Mình thấy bạn lên đây hỏi bài tập hơi nhiều à :))[/spoiler]
Đoạn đó không chạy, bạn thấy đấy 3 dấu “{” mà chỉ có 1 dấu “}”.
Nếu nói chính xác, “a” sẽ không trở lại giá trị 1.
Bạn hiểu khái niệm biến toàn cục và biến cục bộ chứ? Trong ví dụ bạn đưa, “a” được KHAI BÁO đồng thời KHỞI TẠO bên trong vòng lặp “while”, đóng vai trò của một biến cục bộ và không thể truy cập từ phía ngoài vòng lặp, khác với “i” được KHAI BÁO bên ngoài vòng lặp nên có thể truy cập ở ngoài.
=> Mỗi khi vòng lặp chạy thêm 1 lần, một biến “a” MỚI được KHAI BÁO, và được KHỞI TẠO với một ô nhớ nào đó với giá trị (int) 1. Mỗi lần KHỞI TẠO, “a” sẽ được gán vào một ô nhớ mới, trong khi ô nhớ cũ không được giải phóng. Vì bạn KHAI BÁO “a” trong vòng lặp, thế nên khi vòng lặp kết thúc 1 vòng, compiler sẽ hoàn toàn quên luôn biến cục bộ đó, không còn một biến nào tên là “a”. Bước vào vòng lặp mới thì 1 biến cục bộ mới được sinh ra, và do câu lệnh int a = 1
, một biến mới được KHỞI TẠO, và đặt tên là “a”. Vòng lặp sẽ tiếp tục đến khi không còn thoả mãn điều kiện (i ≥ 1000).
Mình không thạo về con trỏ nên mình cũng không biết cách để lấy giá trị của ô nhớ chưa bị free. Nhưng mình nghĩ là nếu chưa bị free thì những ô nhớ đã từng dùng để khởi tạo “a” sẽ còn lưu giá trị (int) 2.