Đầu ra của đoạn mã sau là gì? void main() { int x=0; { int x = 0, y = 0; y++; x++; } printf("%d", x); getch(); }
Trả lời:
Đáp án đúng: C
Đoạn mã này minh họa phạm vi của biến trong C/C++. Biến `x` được khai báo ở hai phạm vi khác nhau: một ở bên ngoài hàm `main` (mặc dù trong trường hợp này nó được khai báo bên trong hàm main nhưng bên ngoài block bên trong), và một ở bên trong một khối lệnh (block) bên trong hàm `main`.\n\n1. `int x = 0;` (dòng 2): Khai báo biến `x` trong phạm vi của hàm `main`.\n2. `{ int x = 0, y = 0; y++; x++; }` (dòng 3-6): Khai báo một biến `x` *khác* và biến `y` trong một phạm vi hẹp hơn (block). Biến `x` này chỉ tồn tại và có giá trị trong block này. Khi khối lệnh này kết thúc, biến `x` này sẽ bị hủy.\n3. `printf("%d", x);` (dòng 7): Lệnh `printf` in giá trị của biến `x` được khai báo ở dòng 2, tức là biến `x` trong phạm vi của hàm `main`. Giá trị của biến `x` này không bị ảnh hưởng bởi biến `x` bên trong block.\n\nVì vậy, giá trị của `x` được in ra là 0, vì nó không bị thay đổi bởi khối lệnh bên trong.





