What does the following program print?

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

int main() {
    int a = 4, *b = &a;
    a--;
    *b=*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". Con trỏ b được gán địa chỉ của a nên từ đó a và *b là hai tên gọi của cùng một ô nhớ. Lệnh a-- hạ ô đó từ 4 xuống 3, rồi *b = *b - 1 đọc chính ô đó được 3, trừ đi 1 và ghi lại 2; khi printf chạy, cả a lẫn *b đều lấy từ ô duy nhất ấy nên hai số in ra buộc phải giống nhau. Ý "3 1" sai vì nó coi a và *b là hai biến riêng, mỗi biến bị giảm đúng một lần; đây cũng là khuyết điểm phải công bố của câu này, bộ khoá đi kèm đề ghi đúng cặp số ấy trong khi mã nguồn không thể sinh ra hai giá trị khác nhau. Ý "2 1" sai vì nó cộng cả hai lần giảm vào a nhưng chỉ tính một lần cho *b, điều không thể xảy ra với hai tên của cùng một ô nhớ. Ý "3 3" sai vì nó bỏ quên một trong hai lệnh giảm, chỉ hạ giá trị từ 4 xuống 3.

Cùng phần 5

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