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