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(); }
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`.