DAVID J. Malan: Hãy viết một chương trình trong mà chúng tôi cố gắng để trao đổi các giá trị của hai biến, x và y. Trước, tôi đã viết nhiều của chương trình này đã. Trước tiên, tôi khai báo một biến, x, và lưu trữ trong nó giá trị, 1. Sau đó, tôi khai báo biến y và lưu trữ trong nó giá trị, 2. Sau đó, tôi tiến hành printf để hiển thị các giá trị của hai biến. Sau đó, tôi yêu cầu bồi thường với printf khác được trao đổi các biến. Sau đó, tôi gọi một chức năng được gọi là trao đổi. Và sau đó tôi cho rằng các biến đã được đổi chỗ. Và sau đó tôi in ra rằng những gì tôi yêu cầu bồi thường là những giá trị mới của x và y. Bây giờ chức năng trao đổi này là gì? Nó không phải là một cái gì đó mà đi kèm với C. Thật vậy, nếu chúng ta nhìn vào đầu của tôi tập tin, bạn sẽ nhận thấy rằng tôi đã khai báo một nguyên mẫu cho các chức năng trao đổi này xác định rằng phải mất hai ints, tùy tiện gọi là a, b, và điều này chức năng không trả lại bất cứ điều gì. Vì vậy, có lẽ, nó những gì nó nói trong giao dịch hoán đổi của các giá trị và b của. Bây giờ chúng ta thực hiện trao đổi. Đầu tiên, tôi sẽ tuyên bố một tạm thời biến và gán cho nó giá trị trong một, mặc dù tôi có thể chỉ như dễ dàng lưu giữ trong nó b. Tôi sau đó sẽ thay đổi giá trị một là tương đương với trong b. Và sau đó cuối cùng, tôi sẽ thay đổi giá trị của b là những gì một là nhưng là bây giờ ở nhiệt độ. Bây giờ tôi lấy lại những gì tôi vừa làm là logic đúng. Tôi đã được lưu trữ trong một biến tạm thời, thay đổi giá trị của một là b, và sau đó thay đổi giá trị của b là những gì một là. Nhưng khi tôi biên dịch và chạy này chương trình, tôi lo lắng đó không phải là đi những gì tôi nhìn thấy. Thực hiện, không trao đổi. dot dấu gạch chéo, không trao đổi. Và thật không may, theo printf, giá trị của x và y, thậm chí sau khi chúng tôi yêu cầu để được trao đổi họ, vẫn còn 1 và 2 là. Tại sao lại như vậy? Vâng, nó quay ra rằng trong chính, khi chúng tôi gọi hàm trao đổi này, đi qua trong x và y như các đối số, nó thực sự bản sao của x và y là được thông qua vào trao đổi. Cụ thể, giá trị của họ 1 và 2 thông qua vào trao đổi như a và b. Và đó là a và b rằng chúng tôi cuối cùng trao đổi trong chính. Đó là, 1 trở thành 2, 2 thành 1. Nhưng vì trao đổi không có giá trị trả về và bởi vì nó nhận được bản sao của x và y, đó là hành vi đã không ảnh hưởng đến x và y. Thật vậy, a và b là scoped, có thể nói, để trao đổi, trong khi đó x và y vẫn scoped để chính. Vì vậy, chúng tôi có một vấn đề. Nhưng làm thế nào để sửa chữa nó?