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 Тады я выклікаць функцыю названую swap. 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