Assume we have a function such as:
void swap(int a, int b){
int t = a;
a=b;
b=t;
}What is the problem with a and b after executing the swap (a, b) function?
Các phương án trả lời
Chọn một phương ánLời giảiChọn phương án để mở
Đáp án đúng: "a and b do not change values.". C truyền tham số theo giá trị: lúc gọi hàm, hai đối số được sao chép vào hai biến cục bộ trùng tên bên trong swap. Mọi phép đổi chỗ sau đó chỉ xáo trộn bản sao, và khi hàm kết thúc các bản sao biến mất, hai biến ở chỗ gọi vẫn nguyên như trước. Muốn đổi thật thì tham số phải là con trỏ và thân hàm phải làm việc qua phép lấy nội dung. Ý "cannot execute the swap(a,b) function." sai vì hàm hoàn toàn hợp lệ, nó dịch được và chạy được, chỉ là không có tác dụng ra bên ngoài. Ý "a has the old value of b, and b has the new value of t." sai vì điều đó chỉ đúng với hai bản sao cục bộ và chỉ tới thời điểm trước khi hàm trả về. Ý "a and b change values for each other; " sai vì đó chính là ngộ nhận mà câu hỏi muốn phá: việc đổi chỗ có xảy ra nhưng không chạm tới ô nhớ của hai biến gốc.