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: C


Đ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 của mảng `a`. `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 `px` lên 1, tức là `px` trỏ đến `a[1]`. `printf("%d", ++px - py);` in ra hiệu giữa `px` và `py`. Vì `px` đã tăng lên một lần trước đó nên `px` đang trỏ tới `a[1]`. Phép trừ hai con trỏ sẽ cho ra số lượng phần tử giữa hai con trỏ đó. Trong trường hợp này, `px` trỏ đến `a[1]` và `py` trỏ đến `a[5]`. Vì vậy, `px - py` sẽ là 1 - 5 = -4. Tuy nhiên, do có phép `++px` nên `px` trỏ tới `a[1]` trước khi tính toán, do đó kết quả của `px - py` là `1 - 5 = -4`. Vậy `++px - py` sẽ là 1 - 5 = -4. Vậy đáp án đúng là A: -4

Câu hỏi liên quan