What does the following code print?

6 phương ánCó giải thích
Đề bài
#include <stdio.h>
void swap(int a, int *b) {
    int temp = a;
    a = *b;
    *b = temp;
}
int main() {
    int x = 5;
    int y = 10;
    swap(x, y);
    printf("x = %d, y = %d\n", 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: "Compiler error.". Tham số thứ hai của swap khai báo là con trỏ int, nhưng lời gọi swap(x, y) lại đưa vào y là một int. C không chuyển ngầm int sang con trỏ, đó là vi phạm ràng buộc kiểu khi đã có nguyên mẫu, nên trình dịch báo lỗi và không có chương trình nào được sinh ra để chạy. Lựa chọn "Runtime error." sai vì sự cố xảy ra lúc dịch, chưa tới lượt thực thi. Lựa chọn "x = 5, y = 10" là kết quả nếu mã dịch được và hàm không chạm tới hai biến, nhưng ở đây không dòng nào được in. Lựa chọn "x = 10, y = 5" giả định một phép đổi chỗ hoàn chỉnh, điều thân hàm này không làm nổi vì tham số thứ nhất chỉ là bản sao của x. Lựa chọn "x = 10, y = 10" đòi x nhận giá trị của y, trong khi phép gán bên trong chỉ sửa bản sao. Lựa chọn "x = 5, y = 5" đòi y nhận 5 qua con trỏ, nhưng muốn vậy phải truyền địa chỉ của y chứ không phải giá trị của nó.

Cùng phần 5

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