1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> 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 3 00:00:02,700 --> 00:00:04,970 hai biến, x và y. 4 00:00:04,970 --> 00:00:07,490 Trước, tôi đã viết nhiều của chương trình này đã. 5 00:00:07,490 --> 00:00:11,130 Trước tiên, tôi khai báo một biến, x, và lưu trữ trong nó giá trị, 1. 6 00:00:11,130 --> 00:00:14,120 Sau đó, tôi khai báo biến y và lưu trữ trong nó giá trị, 2. 7 00:00:14,120 --> 00:00:17,700 >> Sau đó, tôi tiến hành printf để hiển thị các giá trị của hai biến. 8 00:00:17,700 --> 00:00:21,090 Sau đó, tôi yêu cầu bồi thường với printf khác được trao đổi các biến. 9 00:00:21,090 --> 00:00:23,690 Sau đó, tôi gọi một chức năng được gọi là trao đổi. 10 00:00:23,690 --> 00:00:26,100 Và sau đó tôi cho rằng các biến đã được đổi chỗ. 11 00:00:26,100 --> 00:00:30,610 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. 12 00:00:30,610 --> 00:00:32,030 >> Bây giờ chức năng trao đổi này là gì? 13 00:00:32,030 --> 00:00:34,970 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 14 00:00:34,970 --> 00:00:38,850 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 15 00:00:38,850 --> 00:00:42,750 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 16 00:00:42,750 --> 00:00:44,300 chức năng không trả lại bất cứ điều gì. 17 00:00:44,300 --> 00:00:48,370 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. 18 00:00:48,370 --> 00:00:50,170 Bây giờ chúng ta thực hiện trao đổi. 19 00:00:50,170 --> 00:00:53,820 >> Đầu tiên, tôi sẽ tuyên bố một tạm thời biến và gán cho nó 20 00:00:53,820 --> 00:00:57,260 giá trị trong một, mặc dù tôi có thể chỉ như dễ dàng lưu giữ trong nó b. 21 00:00:57,260 --> 00:01:00,925 Tôi sau đó sẽ thay đổi giá trị một là tương đương với trong b. 22 00:01:00,925 --> 00:01:04,849 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à 23 00:01:04,849 --> 00:01:06,340 bây giờ ở nhiệt độ. 24 00:01:06,340 --> 00:01:08,910 >> Bây giờ tôi lấy lại những gì tôi vừa làm là logic đúng. 25 00:01:08,910 --> 00:01:12,780 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 đó 26 00:01:12,780 --> 00:01:15,580 thay đổi giá trị của b là những gì một là. 27 00:01:15,580 --> 00:01:18,620 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à 28 00:01:18,620 --> 00:01:20,140 đi những gì tôi nhìn thấy. 29 00:01:20,140 --> 00:01:21,625 >> Thực hiện, không trao đổi. 30 00:01:21,625 --> 00:01:24,350 dot dấu gạch chéo, không trao đổi. 31 00:01:24,350 --> 00:01:27,560 Và thật không may, theo printf, giá trị của x và y, thậm chí 32 00:01:27,560 --> 00:01:31,560 sau khi chúng tôi yêu cầu để được trao đổi họ, vẫn còn 1 và 2 là. 33 00:01:31,560 --> 00:01:32,630 >> Tại sao lại như vậy? 34 00:01:32,630 --> 00:01:36,160 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 35 00:01:36,160 --> 00:01:39,960 x và y như các đối số, nó thực sự bản sao của x và y là 36 00:01:39,960 --> 00:01:41,310 được thông qua vào trao đổi. 37 00:01:41,310 --> 00:01:45,430 Cụ thể, giá trị của họ 1 và 2 thông qua vào trao đổi như a và b. 38 00:01:45,430 --> 00:01:48,590 Và đó là a và b rằng chúng tôi cuối cùng trao đổi trong chính. 39 00:01:48,590 --> 00:01:50,810 >> Đó là, 1 trở thành 2, 2 thành 1. 40 00:01:50,810 --> 00:01:54,630 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 41 00:01:54,630 --> 00:01:58,220 và y, đó là hành vi đã không ảnh hưởng đến x và y. 42 00:01:58,220 --> 00:02:02,610 Thật vậy, a và b là scoped, có thể nói, để trao đổi, trong khi đó x và y vẫn 43 00:02:02,610 --> 00:02:03,990 scoped để chính. 44 00:02:03,990 --> 00:02:05,070 >> Vì vậy, chúng tôi có một vấn đề. 45 00:02:05,070 --> 00:02:06,320 Nhưng làm thế nào để sửa chữa nó? 46 00:02:06,320 --> 00:02:08,312