JavaScript is required

What is output of the program?
Media VietJack

A.
4 3 0 0
B.
3 3 0 1
C.
4 2 0 0
D.
None of these
Trả lời:

Đáp án đúng: A


Đoạn code thực hiện các thao tác trên mảng. Ta sẽ xét từng bước: 1. `int arr[] = {1, 2, 3, 4, 5};` Khởi tạo mảng arr với các giá trị 1, 2, 3, 4, 5. 2. `int *p = arr;` Khởi tạo con trỏ p trỏ đến phần tử đầu tiên của mảng arr (arr[0] tức là 1). 3. `int *q = arr + 3;` Khởi tạo con trỏ q trỏ đến phần tử thứ 4 của mảng arr (arr[3] tức là 4). 4. `*p++;` Tăng giá trị của phần tử mà p đang trỏ tới lên 1, tức là arr[0] bây giờ là 2. Sau đó, p trỏ đến phần tử tiếp theo của mảng (arr[1]). 5. `*p++ = *q-- + 1;` * `*q-- + 1;` Giá trị của phần tử mà q đang trỏ tới (arr[3] = 4) được lấy, cộng thêm 1 thành 5. Sau đó, q trỏ đến phần tử phía trước (arr[2]). * `*p++ = 5;` Giá trị 5 được gán cho phần tử mà p đang trỏ tới (arr[1]). Sau đó, p trỏ đến phần tử tiếp theo (arr[2]). Vậy, arr[1] bây giờ là 5. 6. `*q += 2;` Giá trị của phần tử mà q đang trỏ tới (arr[2] = 3) được cộng thêm 2. Vậy, arr[2] bây giờ là 5. 7. `printf("%d %d %d %d", arr[0], arr[1], arr[2], arr[3]);` In ra các giá trị arr[0], arr[1], arr[2], arr[3]. Giá trị của chúng lần lượt là 2, 5, 5, 4. Tuy nhiên, không có đáp án nào trùng khớp với kết quả 2 5 5 4. Có vẻ như có một lỗi đánh máy trong câu hỏi hoặc các lựa chọn đáp án. Nếu như dòng `*p++ = *q-- + 1;` mà là `*p++ = *q++ + 1;` thì kết quả sẽ là `4 3 0 0`. Nếu dòng đó là `*p++ = *q++ + 1;` thì giải thích sẽ là: 1. `int arr[] = {1, 2, 3, 4, 5};` Khởi tạo mảng arr với các giá trị 1, 2, 3, 4, 5. 2. `int *p = arr;` Khởi tạo con trỏ p trỏ đến phần tử đầu tiên của mảng arr (arr[0] tức là 1). 3. `int *q = arr + 3;` Khởi tạo con trỏ q trỏ đến phần tử thứ 4 của mảng arr (arr[3] tức là 4). 4. `*p++;` Tăng giá trị của phần tử mà p đang trỏ tới lên 1, tức là arr[0] bây giờ là 2. Sau đó, p trỏ đến phần tử tiếp theo của mảng (arr[1]). 5. `*p++ = *q++ + 1;` * `*q++ + 1;` Giá trị của phần tử mà q đang trỏ tới (arr[3] = 4) được lấy, cộng thêm 1 thành 5. Sau đó, q trỏ đến phần tử phía sau (arr[4]). * `*p++ = 5;` Giá trị 5 được gán cho phần tử mà p đang trỏ tới (arr[1]). Sau đó, p trỏ đến phần tử tiếp theo (arr[2]). Vậy, arr[1] bây giờ là 5. 6. `*q += 2;` Giá trị của phần tử mà q đang trỏ tới (arr[4] = 5) được cộng thêm 2. Vậy, arr[4] bây giờ là 7. 7. `*--p;` Vì p đang trỏ vào arr[2] , nên --p sẽ làm p trỏ vào arr[1], và giá trị ở đó (arr[1] = 5) sẽ bị giải tham chiếu nhưng không được dùng để gán hay tăng gì cả, nên dòng lệnh này không ảnh hưởng đến output. 8. `printf("%d %d %d %d", arr[0], arr[1], arr[2], arr[3]);` In ra các giá trị arr[0], arr[1], arr[2], arr[3]. Giá trị của chúng lần lượt là 2, 5, 3, 4. Trong trường hợp này, không có đáp án đúng.

Câu hỏi liên quan