JavaScript is required

What is the output of the following code? #include using namespace std; int main() { int a = 20; int &n = a; n = a++; a = n++; cout << a << "," << n << endl; system("pause"); }

A.

20,21

B.

20,20

C.

21, 22

D.

none of above

Trả lời:

Đáp án đúng: D


Đoạn mã C++ này sử dụng tham chiếu (reference) và toán tử tăng (increment). Ta sẽ phân tích từng bước: 1. `int a = 20;`: Khai báo biến `a` kiểu `int` và gán giá trị 20. 2. `int &n = a;`: Khai báo tham chiếu `n` đến biến `a`. `n` và `a` cùng trỏ đến một vùng nhớ. Mọi thay đổi trên `n` sẽ ảnh hưởng đến `a`, và ngược lại. 3. `n = a++;`: Toán tử `a++` là toán tử tăng hậu tố (post-increment). Giá trị của `a` (20) được gán cho `n` trước. Sau đó, `a` tăng lên 21. Vì `n` là tham chiếu của `a`, nên `n` cũng có giá trị 20 ở thời điểm gán. Do `n` và `a` cùng vùng nhớ nên lúc này cả `a` và `n` đều có giá trị là 21. 4. `a = n++;`: Toán tử `n++` (tăng hậu tố) cũng tương tự. Giá trị hiện tại của `n` (21) được gán cho `a` trước. Sau đó, `n` tăng lên 22. Vì `a` và `n` cùng vùng nhớ ban đầu, nên `a` nhận giá trị 21 trước khi `n` tăng lên. Sau khi `n` tăng thì `n` có giá trị 22. Giá trị của `a` là 21 và giá trị của `n` là 22. 5. `cout << a << "," << n << endl;`: In ra giá trị của `a` và `n`. `a` có giá trị là 21, và `n` có giá trị là 22. Vậy đáp án đúng là C. 21, 22

Câu hỏi liên quan