JavaScript is required

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);
};

A.
-4
B.
2
C.
5
D.
Không có kết quả đúng
Trả lời:

Đáp án đúng: A


Đoạn chương trình C này thực hiện các phép toán trên con trỏ. Ban đầu, `px` trỏ đến phần tử đầu tiên của mảng `a`, và `py` trỏ đến phần tử cuối cùng (a[5]). `px = a;` gán địa chỉ của `a[0]` cho `px`. `py = &a[5];` gán địa chỉ của `a[5]` cho `py`. `++px` tăng giá trị của con trỏ `px` lên một đơn vị. Vì `px` là con trỏ kiểu `int`, nó sẽ trỏ đến phần tử kế tiếp trong mảng (tức là `a[1]`). Biểu thức `++px - py` thực hiện phép trừ hai con trỏ. Kết quả là số lượng phần tử kiểu `int` giữa hai địa chỉ. Sau khi `px` tăng lên, `px` trỏ đến `a[1]` và `py` trỏ đến `a[5]`. Vậy số phần tử giữa `a[1]` và `a[5]` là 5 - 1 = 4. Tuy nhiên, vì biểu thức là `++px - py`, nên ta phải hiểu rằng `++px` trả về địa chỉ *sau khi* tăng. Vì vậy, `px` trỏ đến `a[1]`. Vậy nên, `px - py` sẽ bằng (địa chỉ của a[1] - địa chỉ của a[5])/sizeof(int), tức là (1 - 5) = -4. Vậy kết quả in ra sẽ là -4.

Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan