>> Дејвид Џ MALAN: Да се ​​напише програма во која се обидуваме да се разменуваат вредностите на
две променливи, x и y.
Однапред, што сум напишал многу на оваа програма веќе.
Прво, јас декларирате променлива, x, и чување во него вредноста, 1.
Тогаш Изјавувам променлива y и чувате во тоа вредноста, 2.
>> Тогаш јас се продолжи со printf за да се прикаже вредностите на овие две променливи.
Тогаш тврдам со друг printf да се менуваат овие променливи.
Тогаш јас го нарекувам функција наречена swap.
А потоа тврдам дека променливи се заменети.
А потоа јас печати од она што го тврдат се новите вредности на x и y.
>> Сега што е оваа функција swap?
Тоа не е нешто што доаѓа со C. Всушност, ако се погледне на врвот на мојата
датотека, ќе забележите дека јас сум прогласи прототип за оваа функција swap
прецизирајќи дека тоа се потребни двајца ints, произволно нарекува и b, и овој
функција не се врати ништо.
Па веројатно, тоа го прави она што го кажува во свопови на a и вредности на b.
Ајде сега се имплементира, swap.
>> Прво, јас одам да се прогласи привремен променлива и додели на тоа
на вредноста во, иако можев само како лесно да се чуваат во него б.
Јас сум тогаш ќе се смени вредноста на да се биде еднаква на онаа во б.
А потоа на крај, јас ќе одам да се промени вредноста на b за да биде она што беше, но е
сега во Temp.
>> Сега тврдам она што јас сум само направено е логично точни.
Сум чуваат во привремена променлива, промени вредност да биде b, а потоа
промени вредноста на b да биде она што беше.
Но, кога ќе ги собере и да ја стартувате овој програма, јас се загрижени дека не е
ќе она што го гледам.
>> Направи, без swap.
точка коса црта, без swap.
И за жал, според printf, вредноста на x и y, дури и
откако ќе тврдат дека се Замена нив, се уште е 1 и 2.
>> Сега, зошто е тоа така?
Па, излегува дека во главниот, кога ќе јавете се на оваа функција, swap, поминува во
x и y како аргументи, тоа е, всушност, копии на x и y дека
се пренесуваат во трампа.
Имено, нивните вредности 1 и 2 се донесен во трампа како и b.
И тоа е a и b, дека ние сме конечно Замена на главниот.
>> Тоа е, 1 станува 2, 2 станува 1.
Туку затоа трампа нема враќање вредност и поради тоа што добиле примероци од x
и y, тоа е однесување нема ефект врз x и y.
Навистина, a и b се scoped, така да се каже, да се разменуваат, додека x и y остане
scoped до главна.
>> Па ние имаме проблем.
Но, како да го поправам?