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",

Hà Thu Thảo

New member
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();
}</blockquote>
What is output of following code?
A. 4#4
B. 4#5
C. 5#6
D. 4#6
 
Hướng dẫn
Chọn B là đáp án đúng
Xem lời giải
Xem lời giải
– Lệnh int a = ++*i1 + *i2++;, toán tử * và ++ cùng thứ tự ưu tiên nhưng có thứ tự kết hợp từ phải sang trái. i2++ sẽ được thực hiện trước nhưng i2 sẽ trỏ tới phần tử tiếp theo sau khi i2 được sử dụng( nghĩa là *(i2++) = 2). ++*i1 = ++(i*) = ints[1] = 2. a = 2 + 2 = 4. Sau lệnh này, i2 trỏ tới phần tử cuối cùng của mảng ints[],i1 trỏ tới phần tử thứ 2 của mảng ints[], giá trị ints[1] bị thay đổi (=2).
– Lệnh int b = *++i1 + *i2–;, toán tử * và — cùng thứ tự ưu tiên nhưng có thứ tự kết hợp từ phải sang trái. i2– được thực hiện trước nhưng i2 sẽ trỏ tới phần tử thứ 3 của mảng sau khi i2 được sử dụng( nghĩa là *(i2–) = 3). *++i1 = *(++i1) = ints[2] = 2. b = 2 + 3 = 5.