JavaScript is required

What is output of following code? void main() { int ints[] = { 0, 1, 2, 3 }; int* i1 = ints + 1; int* i2 = ints + 2; int a = ++*i1 + *i2++; int b = *++i1 + *i2--; printf("%d#%d", a, b); getch(); }

A.

4#4

B.

4#5

C.

5#6

D.

4#6

Trả lời:

Đáp án đúng: B


Đầu tiên, mảng `ints` được khởi tạo là `{0, 1, 2, 3}`. `i1` trỏ tới `ints[1]` (giá trị 1), `i2` trỏ tới `ints[2]` (giá trị 2). `a = ++*i1 + *i2++;` - `++*i1`: Tăng giá trị mà `i1` trỏ tới (tức `ints[1]`) lên 1 trước khi sử dụng. `ints[1]` trở thành 2. Do đó, `*i1` bây giờ là 2. - `*i2++`: Lấy giá trị mà `i2` trỏ tới (tức `ints[2]`, giá trị 2) và sau đó tăng `i2`. Giá trị của `*i2` trong biểu thức này là 2. Sau phép toán, `i2` trỏ tới `ints[3]`. - `a = 2 + 2 = 4` `b = *++i1 + *i2--;` - `++i1`: Tăng `i1` lên trước khi sử dụng. `i1` bây giờ trỏ tới `ints[2]` (giá trị hiện tại là 2). - `*++i1`: Lấy giá trị mà `i1` trỏ tới (tức `ints[2]`, giá trị 2). Do đó, `*++i1` là 2. - `i2--`: Giảm `i2` sau khi sử dụng. Hiện tại, `i2` đang trỏ tới `ints[3]` (giá trị 3). Phép toán này lấy giá trị 3, gán cho `*i2` trong biểu thức rồi giảm `i2` để `i2` trỏ về `ints[2]`. - `b = 2 + 3 = 5` Vậy, `a = 4` và `b = 5`. Output sẽ là `4#5`.

Câu hỏi liên quan