What will be the output of the following code? #include <stdio.h>

4 phương ánCó giải thích
Đề bài
void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}

int main() {
    int x = 5, y = 10;
    swap(&x, &y);
    printf("%d %d", x, y);
    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: "10 5". C truyền tham số theo giá trị, nên muốn hàm sửa được biến của nơi gọi thì phải truyền địa chỉ: lời gọi swap(&x, &y) đưa địa chỉ của x và của y vào hai con trỏ. Trong hàm, t giữ bản sao giá trị đầu là 5, rồi ô mà con trỏ thứ nhất trỏ tới nhận 10 nên x thành 10, cuối cùng ô của con trỏ thứ hai nhận t nên y thành 5. Mọi phép ghi đều qua dấu sao, tức ghi thẳng vào ô nhớ gốc, nên sau lời gọi printf in 10 rồi 5. Dãy "5 10" là thứ tự ban đầu, nó xảy ra nếu hàm nhận hai bản sao int thường và chỉ đổi chỗ bản sao. Dãy "0 0" sai vì không có chỗ nào gán 0. Kết luận "Compilation error" sai vì nguyên mẫu nhận con trỏ int, lời gọi truyền đúng địa chỉ, và phép gán qua dấu sao hoàn toàn hợp lệ.

Cùng phần 5

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