>> დევიდ ჯ Malan: მოდით დავწეროთ პროგრამა რომელიც ჩვენ ვცდილობთ, რომ სვოპ ფასეულობები
ორი ცვლადი, x და y.
წინასწარ, მე დაწერილი ბევრი ამ პროგრამის უკვე.
პირველი, მე განაცხადოს ცვლადი, x, და ჩაწეროთ ის ღირებულება, 1.
მაშინ მე ვაცხადებ ცვლადი y და მაღაზიის ის ღირებულება, 2.
>> მერე გააგრძელოს printf ცარიელია ღირებულებები ამ ორი ცვლადები.
მერე აცხადებენ მეორე printf უნდა შევცვალე იმ ცვლადების.
მაშინ მე მოვუწოდებ ფუნქცია მოუწოდა swap.
და მერე ამბობენ, რომ ცვლადები უკვე გაცვალეს.
და მერე ამობეჭდოთ, რომ რასაც მე ვამბობ არის ახალი ღირებულებებს x და y.
>> ახლა რა არის ეს ფუნქცია swap?
ეს არ არის რაღაც, რომ მოდის C. მართლაც, თუ დავაკვირდებით ზევით ჩემი
ფაილი, თქვენ შეამჩნევთ, რომ მე განაცხადა პროტოტიპი ამ ფუნქციის swap
მიუთითებს, რომ ეს ხდება ორი ints, თვითნებურად მოუწოდა და ბ, და ამ
ფუნქცია არ დააბრუნებს არაფერი.
ასე რომ, სავარაუდოდ, ის აკეთებს რასაც ამბობს ამ გაცვლებს და b ღირებულებებს.
მოდით ახლა განხორციელება swap.
>> პირველი, მე ვაპირებ განაცხადოს დროებითი ცვლადი და მივანიჭოთ მას
ღირებულების, თუმცა მე მხოლოდ ადვილად ინახება ეს ბ.
მე მაშინ შეიცვლება ღირებულება ერთი უნდა იყოს ტოლი რომ ბ.
და მერე ბოლოს, მე ვაპირებ შეცვლას ღირებულება b უნდა იყოს, თუ რა იყო, მაგრამ არის
ახლა temp.
>> ახლა კი ამბობენ, რაც მე უბრალოდ გაკეთდეს ლოგიკურად სწორი.
მე ინახება დროებითი ცვლადი, შეიცვალა ღირებულების უნდა იყოს ბ, შემდეგ კი
შეცვლილია ბ ღირებულების იყოს რა ის იყო.
მაგრამ როდესაც მე კომპილირდება და აწარმოებს ამ პროგრამა, მე შიშობენ, რომ არ არის
აპირებს, რაც მე ვხედავ.
>> რათა, არ swap.
dot სლეში, არ swap.
და სამწუხაროდ, შესაბამისად printf, ღირებულება x და y, მაშინაც კი,
შემდეგ ჩვენ ვამბობთ, უნდა შევცვალე მათ, ჯერ კიდევ 1 და 2.
>> ახლა რატომ არის, რომ?
ასევე, ირკვევა, რომ მთავარი, როდესაც ჩვენ დარეკეთ ამ ფუნქციის swap, გადადის
x და y როგორც არგუმენტები, სინამდვილეში ასლები x და y, რომ
რომლებიც შევიდა swap.
კერძოდ, მათი ღირებულებები 1 და 2 შევიდა swap როგორც და ბ.
და ეს A და B, რომ ჩვენ საბოლოოდ შევცვალე მთავარ.
>> რომ არის, 1 ხდება 2, 2 ხდება 1.
არამედ იმიტომ, რომ swap ვიზიტორების დაბრუნების ღირებულება და რადგან ეს მიღებული ასლები x
და y, ეს ქცევა ეფექტი x და y.
მართლაც, A და B scoped, ასე ვთქვათ, სვოპ, მაშინ x და y რჩება
scoped to main.
>> ასე რომ ჩვენ გვაქვს პრობლემა.
მაგრამ როგორ გაასწორონ ის?