What is the output of the following code snippet?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
int change(int a)
{
    a =10;
    return a;
}
void main()
{
    int i=5;
    i = change(i);
    printf("%d",i);
}

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". Tham số của hàm trong C là một bản sao: lời gọi change(i) đẩy giá trị 5 vào biến cục bộ a, trong thân hàm a bị đặt lại thành 10 rồi trả về 10, còn biến i của hàm chính không hề bị hàm đụng tới. Thứ làm i đổi giá trị là phép gán ở ngoài, vì i = change(i) ghi giá trị trả về vào i, nên lệnh in xuất ra 10. Giá trị "5" là kết quả nếu bỏ phép gán và chỉ gọi change(i) rồi in i, vì khi đó mọi thay đổi chết theo bản sao lúc hàm kết thúc. Giá trị "15" cần một phép cộng dồn, trong khi hàm gán thẳng 10 cho tham số. Kết luận "Compiler error" không đúng: hàm có đầy đủ kiểu trả về và kiểu tham số, giá trị trả về khớp kiểu của i; riêng việc viết void cho hàm chính là không chuẩn nhưng các trình biên dịch quen dùng chỉ cảnh báo chứ vẫn dịch được.

Cùng phần 4

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