>> Дэвід Дж. Малан: Давайце напішам праграму ў якія мы спрабуем памяняць значэнні
дзве зменныя, х і у.
Загадзя, я напісаў шмат гэтай праграмы ўжо.
Па-першае, я абвясціць зменную, X, і захоўваць у ім значэнне, 1.
Тады я абвяшчаю зменную у і захоўваць у ім значэнне, 2.
>> Тады я працягнуць Printf для адлюстравання значэння гэтых двух зменных.
Тады я сцвярджаю, з другога Printf быць замены гэтыя зменныя.
Тады я выклікаць функцыю названую swap.
А потым я сцвярджаю, што зменныя былі абмяняны.
І тады я раздрукаваць тое, што я сцвярджаю, з'яўляюцца новыя значэнні х і у.
>> Цяпер тое, што гэтая функцыя падпампоўкі?
Гэта не тое, што прыходзіць з С. На самай справе, калі мы паглядзім на верхняй частцы маёй
файл, вы заўважыце, што я абвясціў Прататып для гэтай функцыі абмену
паказаўшы, што ён прымае два цэлых, ўмоўна назваць і б, і гэта
Функцыя нічога не вяртае.
Так, як мяркуецца, гэта тое, што ён кажа у свопов пяцёркі і каштоўнасцяў Б.
Давайце зараз рэалізаваць своп.
>> Па-першае, я збіраюся абвясціць часовы зменнай і прысвоіць яму
значэнне ў, хоць я мог бы проста як лёгка захоўваць у ім б.
Я тады збіраўся змяніць значэнне з роўным што ў б.
А потым, нарэшце, я збіраюся змяніць значэнне Ь, тое, што было, але гэта
цяпер у тэмп.
>> Цяпер я сцвярджаю, што я толькі што зрабіў з'яўляецца лагічна правільным.
Я захоўваюцца ў часовай зменнай, змяніў значэнне, каб быць B, а затым
змяніў значэнне B, каб быць тым, што было.
Але калі я скампіляваць і запусціць гэты Праграма, я хвалююся, што не
збіраецца, што я бачу.
>> Не рабіце, ня своп.
кропка не слэш, ня своп.
І, на жаль, у адпаведнасці з Printf, значэнне х і у, нават
пасля таго як мы сцвярджаць, што абмен ім, па-ранейшаму 1 і 2.
>> Цяпер, чаму гэта?
Ну, атрымліваецца, што ў асноўным, калі мы Выклікайце гэтую функцыю падпампоўкі, перадаючы
х і ў ў якасці аргументаў, гэта на самай справе копіі х і у, што
перадаюцца у частку падпампоўкі.
А менавіта, іх значэння 1 і 2 перайшла ў своп як і Коммерсанта.
І гэта і б, што мы ў канчатковым выніку перапампоўкі ў асноўны.
>> Гэта значыць, адзін становіцца 2, 2 становіцца 1.
Але з-за падпампоўкі не мае вяртаецца значэння і таму, што ён атрымаў копіі х
і ў, гэта паводзіны няма эфекту ад х і у.
На самай справе, і б знаходзяцца ў вобласці бачнасці, так бы мовіць, памяняць, тады як х і ў застаюцца
ў галіне бачнасці асноўнай.
>> Таму ў нас ёсць праблемы.
Але, як гэта выправіць?