Chương trình sau cho kết quả là gì?
#include
void main() {
int *px, *py;
int a[] = {1, 2, 3, 4, 5, 6};
px = a;
py = &a[5]
printf(“%d”, ++px - py);
};
Trả lời:
Đáp án đúng: A
Đầu tiên, `px` được gán địa chỉ của phần tử đầu tiên của mảng `a`, tức là `a[0]`. Sau đó, `py` được gán địa chỉ của phần tử cuối cùng của mảng `a`, tức là `a[5]`.
Tiếp theo, `++px` tăng giá trị của `px` lên một đơn vị (tức là di chuyển `px` đến phần tử kế tiếp trong mảng, `a[1]`). Do đó, biểu thức `++px - py` tính hiệu giữa địa chỉ của `a[1]` và địa chỉ của `a[5]`. Trong C, khi trừ hai con trỏ cùng kiểu, kết quả là số lượng phần tử giữa hai địa chỉ đó.
Vậy, `++px - py` tương đương với `&a[1] - &a[5]`, kết quả là `1 - 5 = -4`.
Do đó, chương trình in ra giá trị -4.