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