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

FORM.08: Bộ 130+ Biểu Mẫu Thống Kê Trong Doanh Nghiệp

FORM.07: Bộ 125+ Biểu Mẫu Báo Cáo Trong Doanh Nghiệp

FORM.06: Bộ 320+ Biểu Mẫu Hành Chính Thông Dụng

FORM.05: Bộ 330+ Biểu Mẫu Thuế - Kê Khai Thuế Mới Nhất

FORM.04: Bộ 240+ Biểu Mẫu Chứng Từ Kế Toán Thông Dụng
