What will be printed when the following code is executed?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
int main() {
    int a[] = {1,2,3,4,5,6};
    int* p = a;
    p += 3;
    printf("%d, %d",*(a+3), *(p++));
    return 0;
}

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "4 4". Mảng a chứa 1,2,3,4,5,6 nên a[3] bằng 4; biểu thức *(a+3) đúng là a[3], in ra 4. Con trỏ p ban đầu trỏ a[0], lệnh p += 3 đưa p tới a[3]; trong *(p++), phép tăng hậu tố trả về giá trị con trỏ trước khi tăng nên phép lấy nội dung đọc đúng a[3], cũng ra 4, chỉ sau đó p mới nhích sang a[4] và không còn được dùng nữa. Vì vậy chương trình in 4 4. "3 3" nhầm chỉ số với giá trị: cộng 3 vào con trỏ cho địa chỉ của phần tử thứ tư, không cho số 3. "4 5" là kết quả nếu phép tăng trả về giá trị sau khi tăng, tức viết *(++p); dạng hậu tố thì không như vậy. "3 4" đọc sai vế đầu thành a[2], mà hai vế đều trỏ vào cùng một phần tử nên hai số in ra phải giống nhau.

Cùng phần 5

Xuất hiện trong 1 bộ đề