What does the following program print?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>

int main()
{
    int a = 4;
    int *b = &a;

    a -= 1;
    *b -= 1;
    printf("%d %d", a, *b);

    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: "2 2". Câu int *b = &a cho b giữ địa chỉ của a, nên từ đó a và *b là hai cách gọi cùng một ô nhớ chứ không phải hai bản sao. Lệnh a -= 1 hạ ô đó từ 4 xuống 3, rồi *b -= 1 hạ tiếp chính ô đó xuống 2; vậy cả hai cách đọc đều cho 2 và printf in hai số giống nhau. Dãy "2 1" giả định *b có ô riêng cũng bắt đầu từ 4 rồi chỉ bị trừ một lần, tức hiểu con trỏ thành bản sao. Dãy "3 1" giả định a chỉ chịu phép trừ thứ nhất còn phép trừ thứ hai tác động lên một vùng khác. Dãy "3 3" chỉ đúng nếu phép trừ qua con trỏ không có tác dụng gì, trong khi *b -= 1 ghi thẳng vào ô mà b trỏ tới.

Cùng phần 5

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