>> DAVID เจลัน: ให้เขียนโปรแกรมใน ซึ่งเราพยายามที่จะเปลี่ยนค่านิยมของ
สองตัวแปร x และ y
ล่วงหน้าฉันได้เขียนมาก ของโปรแกรมนี้อยู่แล้ว
ครั้งแรกผมประกาศตัวแปร, x, และจัดเก็บอยู่ในนั้นค่า 1
แล้วฉันจะประกาศตัวแปร y และ เก็บอยู่ในนั้นค่า 2
>> แล้วฉันจะดำเนินการกับ printf เพื่อแสดง ค่านิยมของทั้งสองตัวแปร
แล้วฉันจะเรียกร้องด้วย printf อื่น ที่จะแลกเปลี่ยนตัวแปรเหล่านั้น
แล้วฉันจะเรียกใช้ฟังก์ชันที่เรียกว่าการแลกเปลี่ยน
แล้วฉันอ้างว่าตัวแปร ได้รับการเปลี่ยน
แล้วฉันพิมพ์ออกมาว่าสิ่งที่ฉันเรียกร้อง เป็นค่าใหม่ของ x และ y
>> ตอนนี้สิ่งที่เป็นฟังก์ชั่นการแลกเปลี่ยนนี้
มันไม่ใช่สิ่งที่มาพร้อมกับ C. อันที่จริงถ้าเรามองที่ด้านบนของฉัน
แฟ้มคุณจะสังเกตเห็นว่าได้มีการประกาศ แบบอย่างที่ดีสำหรับการแลกเปลี่ยนฟังก์ชั่นนี้
ระบุว่าจะใช้เวลาสอง ints, เรียกพลและ b และนี่
ฟังก์ชั่นไม่ได้กลับอะไร
ดังนั้นสันนิษฐานว่ามันไม่สิ่งที่กล่าว ในการแลกเปลี่ยนและค่า b ของ
ตอนนี้ขอใช้แลกเปลี่ยน
>> ครั้งแรกที่ฉันจะประกาศชั่วคราว ตัวแปรและกำหนดให้กับมัน
ค่าใน แต่ฉันได้เพียงแค่ เก็บไว้ได้อย่างง่ายดายในนั้นข
แล้วฉันจะเปลี่ยนค่า ของจะเท่ากับว่าในข
แล้วสุดท้ายที่ฉันจะเปลี่ยน ค่าของ b จะเป็นสิ่งที่เป็น แต่
ขณะนี้อยู่ในอุณหภูมิ
>> ตอนนี้ผมเรียกร้องสิ่งที่ฉันได้ทำเพียงแค่ ถูกต้องมีเหตุผล
ฉันได้เก็บไว้ในตัวแปรชั่วคราว เปลี่ยนค่าเป็นของ b และจากนั้น
ค่าที่มีการเปลี่ยนแปลงขจะเป็นสิ่งที่เป็น
แต่เมื่อผมรวบรวมและใช้นี้ โปรแกรมที่ผมกังวลว่าไม่
ไปสิ่งที่ฉันเห็น
>> ทำให้ไม่มีการแลกเปลี่ยน
จุดเฉือนแลกเปลี่ยนไม่
และโชคร้ายที่ตาม printf, ค่าของ x และ y แม้
หลังจากที่เราเรียกร้องให้มีการแลกเปลี่ยน พวกเขายังคงเป็นที่ 1 และ 2
>> ตอนนี้ทำไมจึงเป็นเช่นนั้น
ดีก็ปรากฎว่าในหลักเมื่อเรา แลกเปลี่ยนเรียกฟังก์ชั่นนี้ผ่านใน
x และ y เป็นอาร์กิวเมนต์ก็จริง สำเนาของ x และ y ที่
จะผ่านเข้าไปในการแลกเปลี่ยน
คือค่าของพวกเขาที่ 1 และ 2 เป็น ผ่านเข้าไปแลกเป็นและข
และมันก็เป็นและ b ว่าเราในที่สุด การแลกเปลี่ยนในหลัก
>> นั่นคือ 1 กลายเป็น 2, 2 กลายเป็น 1
แต่เนื่องจากมีการแลกเปลี่ยนค่าตอบแทนใด ๆ และเพราะมันได้รับสำเนาของ x
และ y ก็พฤติกรรมได้ ผลกระทบต่อ x และ y ไม่มี
แท้จริงและ b จะถูกกำหนดขอบเขตเพื่อที่จะพูด เพื่อแลกเปลี่ยนในขณะที่ x และ y ยังคงอยู่
กำหนดขอบเขตที่จะหลัก
>> ดังนั้นเราจึงมีปัญหา
แต่วิธีการที่จะแก้ไขมันได้หรือไม่