David J. MALAN: magsulat ng isang programa sa Hayaan kung saan sinusubukan naming magpalit ng mga halaga ng dalawang variable, x at y. Sa maaga, na naisulat ko magkano ng programang ito nagagawa. Una, Ipinahahayag ko sa isang variable, x, at mag-store sa loob nito ang halaga, 1. Pagkatapos Ipinahahayag ko na variable y at mag-imbak sa loob nito ang halaga, 2. Pagkatapos ay magpatuloy ako sa printf upang ipakita ang ang mga halaga ng mga dalawang variable. Pagkatapos ay inaangkin ko na may isa pang printf na pagpapalit mga variable. Pagkatapos ay tumawag ako ng isang function na tinatawag na swap. At pagkatapos ay i-claim ko na ang mga variable Na-swapped. At pagkatapos ay i-print out ko na kung ano ang inaangkin ko ay ang bagong mga halaga ng x at y. Ano Ngayon ay ang function ng swap? Ito ay hindi isang bagay na ay may C. Sa katunayan, kung tiningnan namin sa tuktok ng aking file, mapapansin mo na ang ipinahayag ko isang prototype para sa function na swap pagtukoy na ito ay tumatagal ng dalawang ints, nagkataon na tinatawag na isang at b, at ito function na hindi nagbabalik ng anumang bagay. Kaya siguro, ginagawa nito kung ano ang sinasabi nito sa swaps isang at halaga b ni. Ngayon ipatupad ni swap Hayaan. Una, ako pagpunta sa ipinapahayag ng pansamantalang variable at magtalaga dito ang halaga sa isang, bagaman maaari ko lang bilang madali na naka-imbak sa loob nito b. Pagkatapos Pupunta ako upang baguhin ang halaga ng isang upang maging katumbas na in b. At pagkatapos ay sa wakas, pupuntahan ko na baguhin ang halaga ng mga b na maging kung ano ang isang dating ngunit ay ngayon sa Temp. Ngayon inaangkin ko kung ano na lang tapos na ako ay lohikal na tama. Naka-imbak ako ng isang sa isang pansamantalang variable, Binago ang halaga ng isang upang maging b, at pagkatapos ay Binago ang halaga b na maging kung ano ang isang ni ay. Ngunit kapag ako sumulat ng libro at patakbuhin ang mga ito programa, mag-alala ako na hindi pagpunta kung ano ang nakikita ko. Gawing, walang swap. tuldok iwa, walang swap. At sa kasamaang-palad, ayon sa printf, ang halaga ng x at y, kahit pagkatapos i-claim namin na pagpapalit mga ito, ay pa rin ng 1 at 2. Ngayon kung bakit ay na? Well, ito ay lumiliko out na sa main, kung kailan namin tawagan ang function ng swap, pagpasa sa x at y bilang argumento, ito ay aktwal na mga kopya ng x at y na ang nakapasa sa swap. Lalo, ang kanilang mga halaga ng 1 at 2 ay pumasang sa magpalitan bilang isang at b. At ito ay isang at b na hindi kami sa huli pagpapalit sa pangunahing. Iyon ay, ang 1 ay nagiging 2, 2 naging 1. Ngunit dahil magpalitan ay walang halaga return at dahil nakatanggap ito ng mga kopya ng x at y, ito ay ang pag-uugali ay walang epekto sa x at y. Sa katunayan, isang at b ay scoped, kaya na magsalita, upang magpalit, samantalang ang x at y mananatiling scoped sa main. Kaya mayroon tayong problema. Ngunit kung paano ayusin ito?