1 00:00:00,000 --> 00:00:00,320 2 00:00:00,320 --> 00:00:02,700 >> Девід Дж. Малан: Давайте напишемо програму в які ми намагаємося змінити значення 3 00:00:02,700 --> 00:00:04,970 дві змінні, х і у. 4 00:00:04,970 --> 00:00:07,490 Заздалегідь, я написав багато цієї програми вже. 5 00:00:07,490 --> 00:00:11,130 По-перше, я оголосити змінну, X, і зберігати в ньому значення, 1. 6 00:00:11,130 --> 00:00:14,120 Тоді я оголошую змінну у і зберігати в ньому значення, 2. 7 00:00:14,120 --> 00:00:17,700 >> Тоді я продовжити Printf для відображення значення цих двох змінних. 8 00:00:17,700 --> 00:00:21,090 Тоді я стверджую, з іншого Printf бути заміни ці змінні. 9 00:00:21,090 --> 00:00:23,690 Тоді я викликати функцію названу підкачки. 10 00:00:23,690 --> 00:00:26,100 А потім я стверджую, що змінні були обміняні. 11 00:00:26,100 --> 00:00:30,610 І тоді я роздрукувати те, що я стверджую, є нові значення х і у. 12 00:00:30,610 --> 00:00:32,030 >> Тепер те, що ця функція підкачки? 13 00:00:32,030 --> 00:00:34,970 Це не те, що приходить з С. Справді, якщо ми подивимося на верхній частині моєї 14 00:00:34,970 --> 00:00:38,850 файл, ви помітите, що я оголосив Прототип для цієї функції обміну 15 00:00:38,850 --> 00:00:42,750 вказавши, що він приймає два цілих, умовно назвати і б, і це 16 00:00:42,750 --> 00:00:44,300 Функція нічого не повертає. 17 00:00:44,300 --> 00:00:48,370 Так, імовірно, це те, що він говорить в свопів п'ятірки і цінностей Б. 18 00:00:48,370 --> 00:00:50,170 Давайте тепер реалізувати своп. 19 00:00:50,170 --> 00:00:53,820 >> По-перше, я збираюся оголосити тимчасовий змінної і присвоїти йому 20 00:00:53,820 --> 00:00:57,260 значення в, хоча я міг би просто як легко зберігати в ньому б. 21 00:00:57,260 --> 00:01:00,925 Я тоді збирався змінити значення з рівним що в б. 22 00:01:00,925 --> 00:01:04,849 А потім, нарешті, я збираюся змінити значення Ь, то, що було, але це 23 00:01:04,849 --> 00:01:06,340 зараз в темп. 24 00:01:06,340 --> 00:01:08,910 >> Тепер я стверджую, що я тільки що зробив є логічно правильним. 25 00:01:08,910 --> 00:01:12,780 Я зберігаються в тимчасовій змінної, змінив значення, щоб бути B, а потім 26 00:01:12,780 --> 00:01:15,580 змінив значення B, щоб бути тим, що було. 27 00:01:15,580 --> 00:01:18,620 Але коли я скомпілювати і запустити цей Програма, я хвилююся, що ні 28 00:01:18,620 --> 00:01:20,140 збирається, що я бачу. 29 00:01:20,140 --> 00:01:21,625 >> Не робіть, що не своп. 30 00:01:21,625 --> 00:01:24,350 крапка не слеш, що не своп. 31 00:01:24,350 --> 00:01:27,560 І, на жаль, відповідно до Printf, значення х і у, навіть 32 00:01:27,560 --> 00:01:31,560 після того як ми стверджувати, що обмін їм, як і раніше 1 і 2. 33 00:01:31,560 --> 00:01:32,630 >> Тепер, чому це? 34 00:01:32,630 --> 00:01:36,160 Ну, виходить, що в основному, коли ми Викликайте цю функцію підкачки, передаючи 35 00:01:36,160 --> 00:01:39,960 х і у як аргументи, це насправді копії х і у, що 36 00:01:39,960 --> 00:01:41,310 передаються в розділ підкачки. 37 00:01:41,310 --> 00:01:45,430 А саме, їх значення 1 і 2 перейшла в своп як і газети. 38 00:01:45,430 --> 00:01:48,590 І це і б, що ми в кінцевому підсумку перекачування в основний. 39 00:01:48,590 --> 00:01:50,810 >> Тобто, один стає 2, 2 стає 1. 40 00:01:50,810 --> 00:01:54,630 Але через підкачки не має значення, що повертається й тому, що він отримав копії х 41 00:01:54,630 --> 00:01:58,220 і у, це поведінка немає ефекту від х і у. 42 00:01:58,220 --> 00:02:02,610 Справді, і б знаходяться в області видимості, так сказати, поміняти, тоді як х і у залишаються 43 00:02:02,610 --> 00:02:03,990 в області видимості основною. 44 00:02:03,990 --> 00:02:05,070 >> Тому у нас є проблеми. 45 00:02:05,070 --> 00:02:06,320 Але, як це виправити? 46 00:02:06,320 --> 00:02:08,312