>> [เล่นเพลง]
>> DOUG LLOYD: ตัวชี้, ที่นี่เรามี
นี้อาจจะ เป็นหัวข้อที่ยากที่สุด
ที่เราพูดถึงใน CS50
และถ้าคุณได้อ่าน อะไรเกี่ยวกับตัวชี้
ก่อนที่คุณอาจจะมีนิด ๆ หน่อย ๆ ข่มขู่จะเข้าไปในวิดีโอนี้
มันเป็นความจริงตัวชี้ จะช่วยให้คุณความสามารถในการ
บางทีอาจจะกรูขึ้น สวยไม่ดีเมื่อคุณอยู่
การทำงานร่วมกับตัวแปรและข้อมูล และก่อให้เกิดโปรแกรมของคุณที่จะผิดพลาด
แต่พวกเขากำลังจริงที่มีประโยชน์จริงๆ และพวกเขาช่วยให้เราเป็นวิธีที่ดีจริงๆ
เพื่อส่งผ่านข้อมูลไป มาระหว่างฟังก์ชั่น
ที่เราไม่สามารถที่จะทำอย่างอื่น
>> ดังนั้นสิ่งที่เราจริงๆ ต้องการที่จะทำนี่คือรถไฟ
ให้คุณมีวินัยในตัวชี้ที่ดีดังนั้น ที่คุณสามารถใช้ตัวชี้ได้อย่างมีประสิทธิภาพ
ที่จะทำให้โปรแกรมของคุณที่ดีมาก
ที่ผมกล่าวว่าชี้ให้เราแตกต่างกัน วิธีการส่งผ่านข้อมูลระหว่างการทำงาน
ตอนนี้ถ้าคุณจำได้จาก วิดีโอก่อนหน้านี้เมื่อ
เราได้พูดคุยเกี่ยวกับ ขอบเขตตัวแปรที่ผมกล่าวถึง
ว่าข้อมูลทั้งหมดที่เราผ่านระหว่าง ฟังก์ชั่นในซีจะผ่านค่า
และผมอาจจะไม่ได้นำมาใช้ว่า ระยะสิ่งที่ฉันมีความหมาย
คือการที่เราจะผ่านสำเนาของข้อมูล
เมื่อเราผ่านตัวแปรเพื่อฟังก์ชั่น เราไม่ได้จริงผ่านตัวแปร
ฟังก์ชั่นใช่มั้ย?
เรากำลังผ่านสำเนาของ ข้อมูลนั้นไปยังฟังก์ชั่น
ฟังก์ชั่นไม่ว่ามันจะ และคำนวณค่าบางอย่าง
และบางทีเราใช้ค่าที่ เมื่อมันให้มันกลับมา
>> มีอยู่คนหนึ่งที่จะได้รับการยกเว้น กฎนี้ผ่านโดยค่า
และเราจะกลับมากับสิ่งที่ เป็นเล็ก ๆ น้อย ๆ ในภายหลังในวิดีโอนี้
ถ้าเราใช้ตัวชี้แทน ของการใช้ตัวแปร
หรือแทนการใช้ตัวแปร ตัวเองหรือสำเนาของตัวแปร
ตอนนี้เราสามารถผ่านตัวแปรที่อยู่รอบ ๆ ระหว่างการทำงานในลักษณะที่แตกต่าง
ซึ่งหมายความว่าหากเราทำ การเปลี่ยนแปลงในฟังก์ชั่น
การเปลี่ยนแปลงที่จริงจะใช้เวลา ผลในการที่แตกต่างกันฟังก์ชั่น
อีกครั้งนี้เป็นสิ่งที่ เราไม่สามารถทำอะไรก่อนหน้านี้
และถ้าคุณได้เคยพยายามที่จะสลับ ค่าของตัวแปรสองตัวในฟังก์ชั่น
คุณสังเกตเห็นปัญหานี้ การเรียงลำดับของคืบคลานขึ้นใช่มั้ย?
>> ถ้าเราต้องการที่จะแลกเปลี่ยนและ y และเรา ผ่านไปยังฟังก์ชั่นที่เรียกว่าแลกเปลี่ยน,
สลับด้านในของฟังก์ชั่น ตัวแปรที่ทำค่าแลกเปลี่ยน
กลายเป็นหนึ่งในสองสองจะกลายเป็น หนึ่ง แต่เราทำไม่ได้จริง
เปลี่ยนแปลงอะไรในที่เดิม ฟังก์ชั่นในการโทร
เพราะเราไม่สามารถเราเท่านั้น การทำงานร่วมกับสำเนาของพวกเขา
กับคำแนะนำ แต่ที่เราสามารถทำได้ จริงผ่าน X และ Y เพื่อฟังก์ชั่น
ฟังก์ชั่นที่สามารถทำ บางสิ่งบางอย่างกับพวกเขา
และผู้ที่ค่าตัวแปร จริงสามารถเปลี่ยน
ดังนั้นที่ค่อนข้างการเปลี่ยนแปลงใน ความสามารถของเราในการทำงานกับข้อมูล
>> ก่อนที่เราจะดำน้ำใน ตัวชี้ผมคิดว่ามันคุ้มค่า
การไม่กี่นาที กลับไปพื้นฐานที่นี่
และมีลักษณะที่ว่า หน่วยความจำคอมพิวเตอร์งาน
เพราะทั้งสองเรื่องจะไป ที่จริงเป็นความสัมพันธ์สวย
ที่คุณอาจจะรู้ว่า ในระบบคอมพิวเตอร์ของคุณ
คุณมีฮาร์ดไดรฟ์หรือ บางทีอาจจะเป็นไดรฟ์ของรัฐที่มั่นคง,
การเรียงลำดับของสถ​​านที่จัดเก็บไฟล์บาง
ก็มักจะอยู่ที่ไหนสักแห่งใน ย่าน 250 กิกะไบต์
อาจจะคู่ของเทราไบต์ในขณะนี้
และมันคือสิ่งที่ทุกคนของคุณ ไฟล์ในท้ายที่สุดมีชีวิตอยู่
แม้ในขณะที่เครื่องคอมพิวเตอร์ของคุณถูกปิด ปิดคุณสามารถหันกลับไป
และคุณจะพบไฟล์ของคุณจะมี อีกครั้งเมื่อคุณรีบูตระบบของคุณ
แต่ดิสก์ไดรฟ์เช่นฮาร์ดดิสก์ไดรฟ์ ฮาร์ดดิสก์หรือไดรฟ์ของรัฐที่มั่นคงเป็น SSD,
เป็นเพียงพื้นที่จัดเก็บ
>> เราจะไม่ได้ทำอะไรกับ ข้อมูลที่อยู่ในฮาร์ดดิสก์
หรือในไดรฟ์ของรัฐที่มั่นคง
เพื่อที่จะเปลี่ยนจริง ข้อมูลหรือย้ายไปรอบ ๆ
เราต้องย้ายไป RAM, หน่วยความจำเข้าถึงโดยสุ่ม
ตอนนี้ RAM, คุณมีจำนวนมาก น้อยกว่าในเครื่องคอมพิวเตอร์ของคุณ
คุณอาจจะมีบางแห่งใน ย่าน 512 เมกะไบต์
ถ้าคุณมีคอมพิวเตอร์เก่า เพื่ออาจจะสองสี่แปด, 16,
อาจเป็นไปได้น้อย เพิ่มเติมกิกะไบต์แรม
ดังนั้นที่มีขนาดเล็กมาก แต่ที่ ซึ่งข้อมูลทั้งหมดที่มีอยู่มีความผันผวน
นั่นคือสิ่งที่เราสามารถเปลี่ยนแปลงสิ่งต่างๆ
แต่เมื่อเราเปิดเครื่องคอมพิวเตอร์ของเราออก ข้อมูลทั้งหมดในแรมจะถูกทำลาย
>> เพื่อที่ว่าทำไมเราต้องมีฮาร์ดดิสก์ สำหรับสถานที่ถาวรมากขึ้นของมัน
เพื่อที่จะ exists- มันจะ จะไม่ดีจริงๆถ้าทุกครั้งที่เรา
หันคอมพิวเตอร์ของเราออกทุก ไฟล์ในระบบของเราถูกทำลาย
ดังนั้นเราจึงทำงานภายในของแรม
และทุกครั้งที่เรากำลังพูดถึง หน่วยความจำที่สวยมากใน CS50,
เรากำลังพูดถึงเกี่ยวกับแรมไม่ฮาร์ดดิสก์
>> ดังนั้นเมื่อเราย้ายสิ่งในหน่วยความจำ มันจะขึ้นเป็นจำนวนหนึ่งของพื้นที่
ทั้งหมดของชนิดข้อมูลที่ เราได้รับการทำงานร่วมกับ
ใช้เวลาที่แตกต่างกัน ปริมาณของพื้นที่ในแรม
ดังนั้นเวลาที่คุณสร้างทุกจำนวนเต็ม ตัวแปรสี่ไบต์ของหน่วยความจำ
มีไว้ในแรมเพื่อให้คุณ สามารถทำงานร่วมกับจำนวนเต็มที่
คุณสามารถประกาศจำนวนเต็ม, เปลี่ยนกำหนด
10 ค่าเพิ่มขึ้น โดยหนึ่งอื่น ๆ และอื่น ๆ
ทุกความต้องการที่เกิดขึ้นใน RAM, และคุณได้รับสี่ไบต์
จะทำงานร่วมกับทุก จำนวนเต็มที่คุณสร้างขึ้น
>> ตัวละครทุกตัวคุณ สร้างได้รับหนึ่งไบต์
นั่นเป็นเพียงพื้นที่เท่าไหร่ ที่จำเป็นในการจัดเก็บตัวอักษร
ลอยทุกจริง จำนวนที่ได้รับสี่ไบต์
เว้นแต่จะเป็นคู่ ความแม่นยำจุดลอย
จำนวนซึ่งจะช่วยให้คุณ มีตัวเลขที่แม่นยำมากขึ้นหรือมากกว่า
หลังจุดทศนิยม โดยไม่สูญเสียความแม่นยำ
ซึ่งใช้เวลาถึงแปดไบต์หน่วยความจำ
longs ยาวจำนวนเต็มใหญ่จริงๆ นอกจากนี้ยังใช้เวลาถึงแปดไบต์หน่วยความจำ
วิธีการหลายไบต์หน่วยความจำ ไม่สายใช้เวลาถึง?
ดีขอใส่ขาในคำถามที่ว่า สำหรับตอนนี้ แต่เราจะกลับมาได้
>> ดังนั้นกลับไปที่ความคิดนี้เป็นของหน่วยความจำ อาร์เรย์ใหญ่ของเซลล์ไบต์ขนาด
ที่จริงทั้งหมดก็คือมัน เพียงอาร์เรย์ใหญ่ของเซลล์
เช่นเดียวกับอาร์เรย์อื่น ๆ ที่ คุณคุ้นเคยกับและเห็น
ยกเว้นทุกองค์ประกอบเป็นหนึ่งไบต์กว้าง
และเช่นเดียวกับอาร์เรย์ ทุกองค์ประกอบที่มีอยู่
องค์ประกอบของอาร์เรย์ทุก มีดัชนีและเรา
สามารถใช้ดัชนีที่จะทำสิ่งที่เรียกว่า เข้าถึงโดยสุ่มในอาร์เรย์
เราจะได้ไม่ต้องเริ่มต้นที่ จุดเริ่มต้นของอาร์เรย์
ย้ำผ่านทุก องค์ประกอบหนึ่งของมัน
เพื่อค้นหาสิ่งที่เรากำลังมองหา
เราก็สามารถพูดได้ว่าผมต้องการที่จะได้รับการ องค์ประกอบที่ 15 หรือองค์ประกอบที่ 100
และคุณก็สามารถผ่านในตัวเลขที่ และได้รับค่าที่คุณกำลังมองหา
>> ในทำนองเดียวกันทุกสถานที่ ในความทรงจำที่มีอยู่
ดังนั้นหน่วยความจำของคุณอาจ มีลักษณะบางอย่างเช่นนี้
นี่เป็นก้อนเล็ก ๆ ของ หน่วยความจำนี้เป็น 20 ไบต์ของหน่วยความจำ
ครั้งแรก 20 ไบต์เพราะฉัน มีที่อยู่ที่ด้านล่าง
เป็น 0, 1, 2, 3, และอื่น ๆ ในทุกทางถึง 19
และเมื่อผมประกาศตัวแปรและ เมื่อฉันเริ่มที่จะทำงานกับพวกเขา
ระบบจะไปตั้ง กันพื้นที่บางส่วนสำหรับฉัน
ในความทรงจำนี้ในการทำงาน กับตัวแปรของฉัน
ดังนั้นผมอาจจะบอกว่าคถ่านเท่ากับทุน เอชและสิ่งที่จะเกิดขึ้น?
ดีระบบเป็นไป การตั้งสำรองสำหรับฉันหนึ่งไบต์
ในกรณีนี้มันเลือกจำนวนไบต์ สี่ไบต์อยู่ที่สี่
และก็จะเก็บ H ทุนในจดหมายมีสำหรับฉัน
ถ้าฉันแล้วบอกว่าความเร็ว int วงเงินเท่ากับ 65 ก็
จะตั้งสำรองสี่ ไบต์หน่วยความจำสำหรับฉัน
และมันจะรักษาผู้ สี่ไบต์เป็นหน่วยเดียว
เพราะสิ่งที่เรากำลังทำงาน กับเป็นจำนวนเต็มที่นี่
และก็จะเก็บ 65 ในการมี
>> ตอนนี้แล้วผมชนิด บอกคุณบิตของการโกหก
ที่ถูกต้องเพราะเรารู้ว่า คอมพิวเตอร์ทำงานในไบนารี
พวกเขาไม่เข้าใจ สิ่งที่จำเป็นต้อง H ทุน
หรือสิ่งที่ 65 พวกเขาเท่านั้น เข้าใจไบนารีศูนย์และคน
และเพื่อให้สิ่งที่จริง เรากำลังมีการจัดเก็บใน
ไม่ได้เป็นตัวอักษร H และจำนวน 65, แต่การเป็นตัวแทนไบนารี
ดังกล่าวซึ่งมีลักษณะ บางสิ่งบางอย่างเล็ก ๆ น้อย ๆ เช่นนี้
และโดยเฉพาะอย่างยิ่งใน บริบทของตัวแปรจำนวนเต็ม,
มันจะไม่เพียงแค่คายลง ก็ไม่ได้ไปที่จะรักษามันเป็นหนึ่งในสี่
ก้อนไบต์จำเป็นต้อง มันจะจริง
ที่จะรักษามันเป็นสี่ชิ้นหนึ่งไบต์ ซึ่งอาจมีลักษณะบางอย่างเช่นนี้
และแม้ตอนนี้ไม่ได้ ความจริงอย่างสิ้นเชิงอย่างใดอย่างหนึ่ง
เพราะสิ่งที่เรียกว่า endianness ซึ่งเราไม่ได้
จะได้รับในขณะนี้ แต่ ถ้าคุณอยากรู้เกี่ยวกับ
คุณสามารถอ่านข้อมูลเกี่ยวกับเล็ก ๆ น้อย ๆ และ endianness ใหญ่
แต่เพื่อประโยชน์ของการโต้แย้งนี้ เพื่อประโยชน์ของว​​ิดีโอนี้
ขอเพียงแค่คิดว่าเป็นใน ความเป็นจริงว่าหมายเลข 65 จะ
จะเป็นตัวแทนใน หน่วยความจำในระบบทุก
แม้ว่ามันจะไม่เป็นความจริงอย่างสิ้นเชิง
>> แต่ขอเพียงแค่ได้รับจริง การกำจัดของไบนารีทุกอย่างสิ้นเชิง
และเพียงแค่คิดเกี่ยวกับการเป็น H 65 ก็มากขึ้น
คิดเกี่ยวกับมันเช่น ที่เป็นมนุษย์
สิทธิทั้งหมดจึงยังดูเหมือนว่าอาจจะเป็น เล็ก ๆ น้อย ๆ แบบสุ่มที่ I've- ระบบของฉัน
ไม่ให้ฉันไบต์ 5, 6, 7, และ 8 ในการจัดเก็บจำนวนเต็ม
มีเหตุผลที่เป็นเช่นกันซึ่ง เราจะไม่ได้รับในขณะนี้ แต่พอเพียง
มันจะบอกว่าสิ่งที่เป็น คอมพิวเตอร์ทำอะไรที่นี่
อาจจะเป็นความเคลื่อนไหวที่ดีในส่วนของตน
เพื่อไม่ให้ฉันหน่วยความจำที่เป็น จำเป็นต้องกลับไปกลับ
ถึงแม้ว่ามันจะทำตอนนี้ ถ้าผมต้องการที่จะได้รับสตริงอื่น
เรียกว่านามสกุลและฉันต้องการ ที่จะใส่ในการมีลอยด์
ฉันจะต้องพอดีกับอย่างใดอย่างหนึ่ง ตัวละครแต่ละตัวอักษรที่เป็น
จะต้องมีอย่างใดอย่างหนึ่ง ตัวละครหนึ่งไบต์ของหน่วยความจำ
ดังนั้นถ้าฉันสามารถใส่ลอยด์เป็น array ของฉัน เช่นนี้ฉันรักดีไปใช่มั้ย?
สิ่งที่ขาดหายไป?
>> โปรดจำไว้ว่าสตริงทุกครั้งที่เราทำงาน กับใน C ลงท้ายด้วยเครื่องหมายศูนย์
และเราไม่สามารถละเว้นที่นี่อย่างใดอย่างหนึ่ง
เราจำเป็นต้องตั้งสำรองหนึ่งไบต์ ของหน่วยความจำที่จะถือได้ว่าเพื่อให้เรา
ทราบว่าเมื่อสตริงของเราได้สิ้นสุดลง
ดังนั้นอีกครั้งข้อตกลงนี้ ของสิ่งที่ทาง
ปรากฏอยู่ในหน่วยความจำอาจ จะเป็นเพียงเล็กน้อยแบบสุ่ม
แต่จริง ๆ แล้วมันเป็นวิธีการที่ ระบบส่วนใหญ่ได้รับการออกแบบ
บรรทัดพวกเขาในหลาย สี่เหตุผลอีกครั้ง
ว่าเราไม่จำเป็นต้อง ได้รับในขณะนี้
แต่นี้จึงพอจะพูดได้ว่า หลังจากที่ทั้งสามสายรหัส
นี่คือสิ่งที่หน่วยความจำอาจมีลักษณะเช่น
ถ้าต้องการสถานที่หน่วยความจำ 4, 8 และ 12 เพื่อเก็บข้อมูลของฉัน
นี่คือสิ่งที่ทรงจำของฉันอาจจะมีลักษณะ
>> และเพียงแค่โดยเฉพาะอย่างยิ่ง อวดความรู้ที่นี่เมื่อ
เรากำลังพูดถึงหน่วยความจำ ที่อยู่ที่เรามักจะ
ทำได้โดยใช้สัญลักษณ์เลขฐานสิบหก
ดังนั้นทำไมเราไม่แปลงทั้งหมดของเหล่านี้ จากทศนิยมให้เป็นเลขฐานสิบหก
เพียงเพราะเห็นว่าโดยทั่วไป วิธีการที่เราหมายถึงหน่วยความจำ
ดังนั้นแทนที่จะเป็น 0 ถึง 19 สิ่งที่เรามีเป็นศูนย์
x ศูนย์ผ่านศูนย์ x1 สาม
เหล่านี้คือ 20 ไบต์ของหน่วยความจำที่เรา มีหรือที่เรากำลังมองหาที่ในภาพนี้
ที่นี่.
>> ดังนั้นทุกคนที่ถูกกล่าวว่าขอ ก้าวออกไปจากความทรงจำครั้งที่สอง
และกลับมาที่จะชี้
นี่คือสิ่งที่สำคัญที่สุด สิ่งที่ต้องจำ
ในขณะที่เราเริ่มต้นการทำงานกับคำแนะนำ
ตัวชี้อะไร มากกว่าที่อยู่
ผมจะบอกอีกครั้งเพราะ มันเป็นเรื่องที่สำคัญ
ตัวชี้อะไร มากกว่าที่อยู่
ชี้มีอยู่ไปยังสถานที่ ในความทรงจำที่ตัวแปรมีชีวิตอยู่
รู้ว่ามันจะกลายเป็นหวังว่า นิด ๆ หน่อย ๆ ง่ายต่อการทำงานกับพวกเขา
อีกสิ่งหนึ่งที่ผมชอบ จะทำคือการมีการจัดเรียง
แผนภาพสายตาที่เป็นตัวแทนของสิ่งที่ ที่เกิดขึ้นกับสายต่างๆของโค้ด
และเราจะทำเช่นนี้คู่ ครั้งในชี้
และเมื่อเราพูดคุยเกี่ยวกับแบบไดนามิก จัดสรรหน่วยความจำได้เป็นอย่างดี
เพราะผมคิดว่าแผนภาพเหล่านี้ จะมีประโยชน์โดยเฉพาะอย่างยิ่ง
>> ดังนั้นถ้าผมพูดเช่น int k ในรหัสของฉันสิ่งที่เกิดขึ้น?
ดีสิ่งที่เกิดขึ้นโดยทั่วไปคือ ฉันได้รับหน่วยความจำการตั้งสำรองสำหรับฉัน
แต่ฉันไม่ได้ต้องการที่จะ คิดเกี่ยวกับมันเช่นนั้นผม
ชอบที่จะคิดเกี่ยวกับมันเช่นกล่อง
ฉันมีกล่องและก็ สีเขียวสีเพราะผม
สามารถใส่จำนวนเต็มในกล่องสีเขียว
ถ้ามันเป็นตัวละครของฉัน อาจจะมีกล่องสีฟ้า
แต่ฉันมักจะบอกว่าถ้าฉันสร้าง กล่องที่สามารถถือจำนวนเต็ม
กล่องที่เป็นสีเขียว
และฉันจะใช้เครื่องหมายถาวร และที่ผมเขียน k ที่ด้านข้างของมัน
ดังนั้นผมจึงมีกล่องที่เรียกว่า k, เป็นที่ฉันสามารถวางจำนวนเต็ม
ดังนั้นเมื่อผมพูด int k ที่ สิ่งที่เกิดขึ้นในหัวของฉัน
ถ้าผมบอกว่า k เท่ากับห้าสิ่งที่ฉันทำ?
ดีฉันวางห้า ในกล่องขวา
นี่คือตรงไปตรงสวยถ้า ผมพูด int k, สร้างกล่องที่เรียกว่า k
ถ้าผมบอกว่า k เท่ากับ 5 ห้าใส่ลงในกล่อง
หวังว่าที่ไม่มากเกินไปของอธิกสุรทิน
นี่คือสิ่งที่ไป เล็ก ๆ น้อย ๆ ที่น่าสนใจว่า
ถ้าผมบอกว่า int * PK ดีแม้ว่าฉันทำไม่ได้ รู้ว่าสิ่งนี้จำเป็นต้องหมายความว่า
มันมีบางสิ่งบางอย่างได้อย่างชัดเจน จะทำอย่างไรกับจำนวนเต็ม
ดังนั้นฉันจะสี กล่องสีเขียว-ish,
ฉันรู้ว่ามันมีสิ่งที่ จะทำอย่างไรกับจำนวนเต็ม
แต่ก็ไม่ได้เป็นจำนวนเต็มตัวเอง เพราะมันเป็นดาว int
มีบางอย่างเล็กน้อย ที่แตกต่างกันเกี่ยวกับเรื่องนี้
ดังนั้นของจำนวนเต็มเกี่ยวข้อง แต่อย่างอื่นก็
ไม่มากเกินไปที่แตกต่างจาก สิ่งที่เรากำลังพูดถึง
มันเป็นกล่องมีป้ายชื่อของมัน มันสวม PK ฉลาก
และมันมีความสามารถในการถือ ดาว int สิ่งเหล่านั้น
พวกเขามีสิ่งที่ต้องทำ กับจำนวนเต็มอย่างเห็นได้ชัด
นี่คือบรรทัดสุดท้ายว่าเ​​ป็น
ถ้าผมพูด PK = & K, โอ้โฮ สิ่งที่เพิ่งเกิดขึ้นใช่มั้ย?
ดังนั้นจำนวนสุ่มสุ่ม จำนวนรับโยนลงไปในกล่องมี
สิ่งที่อยู่เป็น PK ได้รับอยู่ของเค
ดังนั้นฉันติดที่ k อาศัยอยู่ในหน่วยความจำ ที่อยู่ที่อยู่ของไบต์ของตน
ทั้งหมดที่ฉันทำคือการที่ฉันพูด ค่าที่เป็นสิ่งที่ฉันจะ
ที่จะใส่ในกล่องของฉันเรียกว่า PK
และเพราะสิ่งเหล่านี้เป็น คำแนะนำและเพราะมอง
ที่สายเช่นศูนย์เอ็กซ์ แปดศูนย์เจ็ดคสี่แปด
สองน่าจะเป็นศูนย์ ไม่ได้มีความหมายมาก
เมื่อเรามักเห็นภาพตัวชี้ เราจริงทำตามคำแนะนำ
Pk ทำให้เรามีข้อมูล เราต้องการที่จะหา k ในหน่วยความจำ
ดังนั้นโดยทั่วไปมีลูกศร PK ในนั้น
และถ้าเราเดินยาว ของลูกศรที่คิด
เป็นสิ่งที่คุณสามารถเดินบนถ้าเรา เดินไปตามความยาวของลูกศร
ที่ปลายสุดของลูกศรที่เรา จะหาสถานที่ในหน่วยความจำ
ชีวิตที่ k
และนั่นคือสิ่งที่สำคัญจริงๆ เพราะเมื่อเรารู้ว่ายังมีชีวิตอยู่ k,
เราสามารถเริ่มต้นการทำงานกับข้อมูล ภายในของสถ​​านที่ตั้งหน่วยความจำที่
ถึงแม้ว่าเราจะได้รับเล็ก บิตล่วงหน้าของตัวเองตอนนี้
>> ดังนั้นสิ่งที่เป็นตัวชี้?
ตัวชี้เป็นรายการข้อมูลที่มี ค่าที่อยู่หน่วยความจำ
นั่นคือการที่ศูนย์แปดศูนย์ x สิ่ง ที่เกิดขึ้นที่เป็นอยู่หน่วยความจำ
นั่นคือสถานที่ในหน่วยความจำ
และชนิดของตัวชี้ อธิบายชนิด
ของข้อมูลที่คุณจะพบที่ ที่อยู่หน่วยความจำ
เพื่อให้มีส่วนดาว int ที่เหมาะสม
ถ้าผมทำตามลูกศรที่มัน จะนำฉันไปยังสถานที่
สถานที่ตั้งว่าสิ่งที่ฉัน จะพบว่ามีในตัวอย่างของฉัน
เป็นกล่องสีเขียว
มันเป็นจำนวนเต็มนั่นคือสิ่งที่ฉัน จะพบว่าถ้าผมไปอยู่ที่
ประเภทของข้อมูล ตัวชี้อธิบายถึงสิ่งที่
คุณจะได้พบกับที่อยู่หน่วยความจำที่
ดังนั้นนี่คือสิ่งที่เจ๋งจริงๆแม้ว่า
ชี้ช่วยให้เราสามารถที่จะผ่าน ตัวแปรระหว่างการทำงาน
และที่จริงผ่านตัวแปร และไม่ผ่านสำเนาของพวกเขา
เพราะถ้าหากเรารู้ว่าที่ ในความทรงจำที่จะหาตัวแปร
เราไม่จำเป็นต้องทำสำเนาของ นั้นเราก็สามารถไปยังสถานที่ที่
และทำงานร่วมกับตัวแปรที่
ดังนั้นในการจัดเรียงตัวชี้สาระสำคัญ ทำให้สภาพแวดล้อมของเครื่องคอมพิวเตอร์
มากขึ้นเช่นเดียวกับโลกแห่งความจริงที่ถูกต้อง
>> ดังนั้นนี่คือความคล้ายคลึง
สมมติว่าผมมีโน๊ตบุ๊ค ถูกต้องและมันเต็มไปด้วยบันทึก
และฉันต้องการให้คุณสามารถปรับปรุงมัน
คุณอยู่ที่ฟังก์ชั่นที่ บันทึกการปรับปรุงขวา
ในวิธีที่เราได้รับ การทำงานเพื่อให้ห่างไกลสิ่งที่
ที่เกิดขึ้นคือคุณจะใช้โน๊ตบุ๊คของฉัน คุณจะไปที่ร้านคัดลอก
คุณจะทำสำเนาของซีร็อกซ์ ทุกหน้าของโน้ตบุ๊ค
คุณจะได้ออกจากสมุดบันทึกของฉันกลับ บนโต๊ะทำงานของฉันเมื่อคุณทำเสร็จแล้ว
คุณจะไปและข้ามจากสิ่งที่อยู่ในของฉัน โน๊ตบุ๊คที่จะออกจากวันที่หรือผิด
แล้วคุณจะผ่านกลับไป ฉันกองหน้าซีร็อกซ์
ที่เป็นแบบจำลองของโน้ตบุ๊คของฉันกับ การเปลี่ยนแปลงที่คุณได้ทำไป
และที่จุดนั้นมันขึ้นอยู่กับผมเป็น ฟังก์ชั่นการโทรในขณะที่โทร
การตัดสินใจที่จะใช้บันทึกย่อของคุณและ รวมพวกเขากลับเข้ามาในสมุดบันทึกของฉัน
ดังนั้นมีจำนวนมากของขั้นตอน เกี่ยวข้องกับที่นี่ขวา
เหมือนมันจะไม่ดีขึ้น ถ้าฉันเพียงแค่บอกว่าเดี๋ยวก่อนคุณสามารถ
อัปเดตโน๊ตบุ๊คของฉัน ผมมือคุณโน๊ตบุ๊คของฉัน
และใช้สิ่งที่คุณและ แท้จริงข้ามพวกเขาออก
และปรับปรุงบันทึกของฉันในสมุดบันทึกของฉัน
และจากนั้นให้ฉันโน๊ตบุ๊คของฉันกลับ
ที่ชนิดของสิ่งที่ ชี้ช่วยให้เราสามารถที่จะทำ
พวกเขาทำให้สภาพแวดล้อมนี้เป็นจำนวนมาก มากขึ้นเช่นวิธีการที่เราทำงานในความเป็นจริง
>> ทั้งหมดที่เหมาะสมเพื่อให้เป็นสิ่ง ตัวชี้จะให้มาพูดคุย
เกี่ยวกับวิธีการทำงานชี้ใน C และ วิธีการที่เราสามารถเริ่มต้นการทำงานกับพวกเขา
เพื่อให้มีตัวชี้ง่ายมาก ใน C เรียกว่าตัวชี้โมฆะ
จุดชี้โมฆะเพื่ออะไร
นี่อาจจะดูเหมือนว่ามันเป็น จริงไม่ได้เป็นสิ่งที่มีประโยชน์มาก
แต่ที่เราจะเห็น เล็ก ๆ น้อย ๆ ในภายหลังความจริงที่
ที่ชี้โมฆะนี้มีอยู่ จริงจริงๆสามารถเข้ามามีประโยชน์
และเมื่อใดก็ตามที่คุณสร้างตัวชี้และ คุณไม่ได้ตั้ง immediately- ค่าของมัน
ตัวอย่างของการตั้งค่า ค่าของมันทันที
จะเป็นภาพนิ่งคู่กลับ ที่ผมบอกว่า PK เท่ากับ & K,
PK k ได้รับอยู่ในขณะที่ เราจะเห็นสิ่งที่หมายความว่า
เราจะเห็นวิธีการรหัสที่ shortly- ถ้าเราไม่ได้ตั้งค่าของบางสิ่งบางอย่าง
ที่มีความหมายทันที คุณควรเสมอ
กำหนดตัวชี้ของคุณที่จะชี้ให้เป็นโมฆะ
คุณควรจะตั้งค่าให้ชี้ไปที่อะไร
>> นั่นคือแตกต่างกันมากกว่า เพียงแค่ออกจากค่าที่มันเป็น
แล้วประกาศ ตัวชี้และเพียงแค่สมมติ
มันเป็นโมฆะเพราะที่จริงไม่ค่อย
ดังนั้นคุณควรตั้งค่าเสมอ ค่าของตัวชี้
ให้เป็นโมฆะถ้าคุณไม่ได้ตั้งค่าของมัน บางสิ่งบางอย่างที่มีความหมายทันที
คุณสามารถตรวจสอบว่าค่าตัวชี้ของ เป็นโมฆะใช้ประกอบความเสมอภาค
(==) เช่นเดียวกับคุณเปรียบเทียบจำนวนเต็มใด ๆ ค่าหรือค่าใช้ตัวอักษร (==)
ได้เป็นอย่างดี
มันเป็นความพิเศษของการจัดเรียงอย่างต่อเนื่อง ค่าที่คุณสามารถใช้ในการทดสอบ
เพื่อให้เป็นที่ง่ายมาก ตัวชี้ตัวชี้ null
อีกวิธีหนึ่งที่จะสร้าง ตัวชี้คือการดึง
ที่อยู่ของตัวแปร คุณได้สร้างไว้แล้ว
และคุณทำเช่นนี้โดยใช้ & ผู้ประกอบการสกัดที่อยู่
ซึ่งวันนี้เราได้เห็นแล้วก่อนหน้านี้ ในตัวอย่างแผนภาพแรกที่ผมแสดงให้เห็นว่า
ดังนั้นถ้า x เป็นตัวแปรที่เราได้ ที่สร้างไว้แล้วของจำนวนเต็มชนิด
แล้วและ x เป็นตัวชี้ไปจำนวนเต็ม
และ x ล์จำและเป็นไปเพื่อดึง ที่อยู่ของสิ่งที่อยู่ด้านขวา
และเนื่องจากเป็นตัวชี้เป็นเพียงที่อยู่ กว่าและ x เป็นตัวชี้ไปจำนวนเต็ม
ที่มีค่าในหน่วยความจำที่ชีวิต x
มันเป็นที่อยู่ของ x
ดังนั้นและ x คือที่อยู่ของ x
ขอใช้เวลานี้ในขั้นตอนเดียว ต่อไปและเชื่อมต่อกับบางสิ่งบางอย่าง
ฉันพูดพาดพิงถึงในวิดีโอก่อน
หาก ARR เป็นอาร์เรย์ของคู่แล้ว และวงเล็บ ARR ตารางฉันเป็นตัวชี้
เพื่อคู่
ตกลง.
วงเล็บ arr ตารางฉันถ้า ARR เป็นอาร์เรย์ของคู่ที่
แล้วยึด arr ตารางฉันเป็น องค์ประกอบที่ i ของอาร์เรย์ที่
และ arr และวงเล็บเหลี่ยมเป็นที่ที่ฉันอยู่ใน หน่วยความจำองค์ประกอบที่ i ของ ARR อยู่
>> ดังนั้นสิ่งที่เป็นความหมายที่นี่?
ชื่ออาร์เรย์หมาย ของเรื่องทั้งหมดนี้
นั่นคือชื่อของอาเรย์คือ จริงตัวเองเป็นตัวชี้
คุณได้รับการทำงาน กับคำแนะนำตลอด
เวลาที่คุณใช้ทุกอาร์เรย์
โปรดจำไว้ว่าจากตัวอย่าง เกี่ยวกับขอบเขตตัวแปร
ใกล้ถึงจุดสิ้นสุดของวิดีโอที่ผมนำเสนอ ตัวอย่างที่เรามีฟังก์ชั่น
เรียกว่าชุด int และ ฟังก์ชั่นที่เรียกว่าอาร์เรย์ชุด
และความท้าทายของคุณเพื่อตรวจสอบ หรือไม่หรือว่า
ค่าที่เราพิมพ์ออกมา ในตอนท้ายของฟังก์ชั่นที่
ในตอนท้ายของโปรแกรมหลัก
>> ถ้าคุณจำจากตัวอย่างที่ หรือถ้าคุณได้ดูวิดีโอ
คุณรู้ไหมว่าเมื่อ you- เรียกร้องให้ int ชุดได้อย่างมีประสิทธิภาพไม่ทำอะไรเลย
แต่การเรียกร้องให้ตั้งอาร์เรย์ไม่
และจัดเรียงของฉันกลบเกลื่อนว่าทำไม ว่ากรณีที่เกิดขึ้นในเวลานั้น
ผมแค่บอกว่าดีก็อาร์เรย์ก็ พิเศษที่คุณรู้ว่ามีเหตุผล
เหตุผลก็คือว่าอาร์เรย์ของ ชื่อเป็นจริงเพียงตัวชี้
และมีความพิเศษนี้ ไวยากรณ์วงเล็บเหลี่ยมที่
ทำในสิ่งที่ดีกว่ามากที่จะทำงานกับ
และพวกเขาทำให้ความคิดของการที่ ตัวชี้มากข่มขู่น้อย
และที่ว่าทำไมพวกเขากำลังจัดเรียง นำเสนอในทางที่
แต่จริงๆอาร์เรย์เป็นเพียงคำแนะนำ
และที่ว่าทำไมเมื่อเรา ทำการเปลี่ยนแปลงไปยังอาร์เรย์ที่
เมื่อเราผ่านอาร์เรย์เป็นพารามิเตอร์ ฟังก์ชั่นหรือเป็นอาร์กิวเมนต์
ฟังก์ชั่นที่มีเนื้อหาของอาร์เรย์ การเปลี่ยนแปลงจริงทั้งใน callee
และในการโทร
ซึ่งสำหรับทุกชนิดอื่น ๆ ของ ตัวแปรที่เราเห็นไม่ได้กรณี
เพื่อให้เป็นเพียงแค่สิ่งที่จะเก็บไว้ใน ใจเมื่อคุณกำลังทำงานกับตัวชี้
คือชื่อของที่ อาร์เรย์จริงตัวชี้
ไปยังองค์ประกอบแรกของอาร์เรย์ที่
>> ตกลงดังนั้นตอนนี้เรามีทั้งหมดเหล่านี้ ข้อเท็จจริงขอให้ไปขวา
ทำไมเราดูแลเกี่ยวกับ บางสิ่งบางอย่างที่มีชีวิตอยู่
ดีชอบพูดว่ามันสวย ประโยชน์ที่จะทราบว่าสิ่งที่มีชีวิตอยู่
เพื่อให้คุณสามารถไปที่นั่นและเปลี่ยนมัน
ทำงานกับมันและจริง มีสิ่งที่คุณ
ต้องการที่จะทำอย่างไรเพื่อที่จะมีผลตัวแปร และไม่ได้มีผลในสำเนาของมันบาง
นี้เรียกว่า dereferencing
เราไปอ้างอิงและ เราเปลี่ยนค่ามี
ดังนั้นหากเรามีตัวชี้และก็เรียกว่า เครื่องคอมพิวเตอร์และมันชี้ไปที่ตัวอักษร
แล้วเราสามารถพูด * * * * * * * * เครื่องคอมพิวเตอร์และเครื่องคอมพิวเตอร์เป็น ชื่อของสิ่งที่เราจะพบว่าถ้าเราไป
ไปยังเครื่องคอมพิวเตอร์ที่อยู่
สิ่งที่เราจะพบว่ามีตัวอักษรและ * pc เป็นวิธีการที่เราหมายถึงข้อมูลที่ว่า
สถานที่
ดังนั้นเราอาจจะบอกว่าสิ่งที่ต้องการ * เครื่องคอมพิวเตอร์ = D หรือสิ่งที่ต้องการที่
และนั่นหมายความว่าสิ่งที่ อยู่ที่เครื่องคอมพิวเตอร์ที่อยู่ในหน่วยความจำ
สิ่งที่ตัวละครก่อนหน้านี้ มีอยู่ในขณะนี้ D ถ้าเราบอกว่าเครื่องคอมพิวเตอร์ * = D
>> ดังนั้นที่นี่เราไปอีกครั้งกับ สิ่งที่ C บางลางขวา
ดังนั้นเราจึงได้เห็น * ก่อนหน้านี้ในฐานะที่เป็น อย่างใดส่วนหนึ่งของชนิดข้อมูล
และตอนนี้ก็ถูกนำมาใช้ใน บริบทที่แตกต่างกันเล็กน้อย
ในการเข้าถึงข้อมูลที่สถานที่
ผมรู้ว่ามันเป็นความสับสนเล็กน้อยและ ที่จริงส่วนหนึ่งของทั้งหมดนี้
เช่นทำไมมีตัวชี้ตำนานนี้ รอบตัวพวกเขาในฐานะที่เป็นที่ซับซ้อนเช่นนั้น
เป็นชนิดของปัญหาทางไวยากรณ์ตรงไปตรงมา
* แต่ถูกนำมาใช้ในบริบทที่ทั้งสอง ทั้งสองเป็นส่วนหนึ่งของชื่อชนิด
และเราจะเห็นเพียงเล็กน้อย บางสิ่งบางอย่างในภายหลังอื่นมากเกินไป
และตอนนี้เป็น ผู้ประกอบการ dereference
ดังนั้นมันจะไปอ้างอิง มันเข้าถึงข้อมูล
ในสถานที่ของตัวชี้และ ช่วยให้คุณสามารถจัดการกับมันที่จะ
>> ตอนนี้จะคล้ายกับ เยี่ยมชมเพื่อนบ้านของคุณใช่ไหม
ถ้าคุณรู้ว่าคุณ อาศัยอยู่กับเพื่อนบ้านของคุณ
ไม่ได้ห้อยออกกับเพื่อนบ้านของคุณ
คุณจะรู้ว่าคุณจะเกิดขึ้น รู้ว่าพวกเขามีชีวิตอยู่
แต่นั่นไม่ได้หมายความว่าโดย อาศัยอำนาจตามความรู้ที่มี
คุณจะมีปฏิสัมพันธ์กับพวกเขา
ถ้าคุณต้องการที่จะติดต่อกับพวกเขา คุณต้องไปที่บ้านของพวกเขา
คุณต้องไปที่ที่พวกเขาอยู่
และเมื่อคุณทำอย่างนั้น จากนั้นคุณสามารถโต้ตอบ
กับพวกเขาเช่นเดียวกับที่คุณต้องการ
และในทำนองเดียวกันกับตัวแปร คุณจำเป็นต้องไปยังที่อยู่ของพวกเขา
ถ้าคุณต้องการที่จะมีปฏิสัมพันธ์กับพวกเขา คุณก็ไม่สามารถทราบที่อยู่
และวิธีที่คุณจะไปที่ที่อยู่ ที่จะใช้ * ผู้ประกอบการ dereference
คุณคิดว่าอะไรเกิดขึ้น ถ้าเราพยายาม dereference
ชี้ที่มีค่าเป็นโมฆะ?
จำได้ว่าเป็นโมฆะ จุดที่ชี้ไปยังไม่มีอะไร
ดังนั้นหากคุณพยายามและ dereference อะไรหรือไปอะไรที่อยู่
สิ่งที่คุณคิดว่าจะเกิดอะไรขึ้น?
ดีถ้าคุณเดาได้แบ่งส่วน ความผิดที่คุณจะได้รับสิทธิ
ถ้าคุณพยายามและ dereference ตัวชี้โมฆะ
คุณประสบการแบ่งส่วน ความผิด แต่รอ
ไม่ได้ผมบอกคุณว่า ถ้าคุณไม่ได้ไป
การตั้งค่าของของคุณ ตัวชี้ไปยังสิ่งที่มีความหมาย
คุณควรตั้งค่าให้เป็นโมฆะ?
ฉันไม่จริงและการแบ่งส่วน ความผิดพลาดเป็นชนิดของพฤติกรรมที่ดี
>> คุณเคยประกาศเป็นตัวแปรและ ไม่ได้กำหนดค่าของมันได้ทันทีหรือไม่
ดังนั้นคุณเพียงแค่พูดว่า int x; คุณทำไม่ได้ จริงกำหนดให้อะไร
และจากนั้นในภายหลังในรหัสของคุณ คุณพิมพ์ออกค่าของ x,
มียังไม่ ได้รับมอบหมายเพื่ออะไร
ที่พบบ่อยคุณจะได้รับ ศูนย์ แต่บางครั้งคุณ
อาจได้รับบางส่วนจำนวนสุ่มและ คุณมีความคิดมันมาจากไหนไม่มี
ในทำนองเดียวกันสิ่งที่สามารถ เกิดขึ้นกับตัวชี้
เมื่อคุณประกาศตัวชี้ int * PK ตัวอย่างเช่น
และคุณไม่ได้กำหนดให้ค่า คุณจะได้รับสี่ไบต์สำหรับหน่วยความจำ
สิ่งที่สี่ไบต์ หน่วยความจำระบบสามารถ
พบว่ามีบางส่วนที่มีความหมายค่า
และอาจจะมี บางสิ่งบางอย่างที่มีอยู่แล้ว
ไม่มีความจำเป็นอีก ฟังก์ชั่นเพื่อให้คุณเพียงแค่ต้อง
ข้อมูลใดที่นั่น
>> ถ้าคุณพยายามที่จะทำ dereference ที่อยู่บางอย่างที่คุณ don't- มี
แล้วไบต์และข้อมูลใน มีที่ตอนนี้อยู่ในตัวชี้ของคุณ
ถ้าคุณพยายามและ dereference ชี้ว่า คุณอาจจะล้อเล่นกับหน่วยความจำบาง
ที่คุณไม่ได้ตั้งใจ ไปยุ่งกับมันทั้งหมด
และในความเป็นจริงคุณสามารถทำ จริงๆสิ่งที่ทำลายล้าง
เช่นทำลายโปรแกรมอื่น หรือทำลายฟังก์ชั่นอื่น
หรือทำอะไรบางอย่างที่เป็นอันตรายที่ คุณไม่ได้ตั้งใจที่จะทำเลย
และนั่นเป็นเหตุผลที่มันเป็น จริงความคิดที่ดี
การตั้งตัวชี้ของคุณให้เป็นโมฆะถ้าคุณ ไม่ได้ตั้งค่าให้พวกเขาที่มีความหมาย
มันอาจจะดีกว่าที่ ในตอนท้ายของวันสำหรับโปรแกรมของคุณ
ที่จะผิดพลาดแล้วมันจะทำ สิ่งที่สกรูขึ้น
อีกหนึ่งโปรแกรมหรือฟังก์ชั่นอื่น
พฤติกรรมที่อาจจะเป็นแม้กระทั่ง เหมาะน้อยกว่าเพียงแค่การทำงานล้มเหลว
และนั่นเป็นเหตุผลที่มันเป็น จริงเป็นนิสัยที่ดี
จะได้รับในการตั้งตัวชี้ของคุณ ให้เป็นโมฆะถ้าคุณไม่ได้ตั้งพวกเขา
เป็นค่าที่มีความหมาย ทันทีค่าที่คุณรู้
และที่คุณสามารถได้อย่างปลอดภัย dereference
>> ดังนั้นขอกลับมาในขณะนี้และจะดู ที่ไวยากรณ์โดยรวมของสถ​​านการณ์
ถ้าผมบอกว่า int * พี ;, สิ่งที่ฉันเพิ่งทำ?
สิ่งที่ผมทำคือ
ฉันรู้ว่าค่าของ p เป็นอยู่ เพราะทุกตัวชี้เป็นเพียง
ที่อยู่
ฉันสามารถ dereference พี ใช้ประกอบการที่ *
ในบริบทนี้ที่นี่ที่มาก ด้านบน * จำได้เป็นส่วนหนึ่งของชนิด
Int * เป็นชนิดข้อมูล
แต่ผมสามารถ dereference พีใช้ประกอบการ * ที่
และถ้าผมทำเช่นนั้นถ้าผมไปอยู่ที่ สิ่งที่ฉันจะได้พบกับที่อยู่ที่?
ฉันจะได้พบกับจำนวนเต็ม
ดังนั้น int * พีเป็นพื้น บอกว่าพีเป็นที่อยู่
ฉันสามารถ dereference พีและถ้า ฉันฉันจะได้พบกับจำนวนเต็ม
ที่ตั้งหน่วยความจำที่
>> ตกลงดังนั้นผมจึงบอกว่ามีอีก สิ่งที่น่ารำคาญที่มีดาว
และนี่คือที่ว่า สิ่งที่น่ารำคาญที่มีดาวเป็น
คุณเคยพยายามที่จะประกาศ ตัวแปรหลายประเภทเดียวกัน
ในบรรทัดเดียวกันของรหัส?
ดังนั้นสำหรับสองแกล้งทำเป็นว่าเส้น รหัสที่จริงผมมีมีสีเขียว
ไม่ได้มีและมันก็บอกว่า int x, y, z ;.
สิ่งที่จะทำคือการสร้างจริง สามตัวแปรจำนวนเต็มสำหรับคุณ
อย่างใดอย่างหนึ่งที่เรียกว่า x หนึ่งที่เรียกว่า y, หนึ่งที่เรียกว่าซี
มันเป็นวิธีที่จะทำมันได้โดยไม่ต้อง ต้องแยกออกไปยังสามบรรทัด
>> นี่คือสิ่งที่ดาวได้รับ ที่น่ารำคาญอีกครั้งว่า
* เนื่องจากเป็นจริงส่วนหนึ่ง ชื่อของทั้งสองชนิดและเป็นส่วนหนึ่ง
ชื่อตัวแปร
ดังนั้นถ้าฉันพูด int * พิกเซล, PY, PZ สิ่งที่ฉัน ได้รับจริงเป็นตัวชี้ไปจำนวนเต็ม
เรียกว่าพิกเซลและสองจำนวนเต็ม PY และ PZ
และนั่นคือสิ่งที่อาจจะไม่ได้ เราต้องการที่ไม่ดี
>> ดังนั้นถ้าผมต้องการที่จะสร้างตัวชี้หลาย ในบรรทัดเดียวกันของประเภทเดียวกัน
และดาวสิ่งที่ฉันต้องการจริง ทำคือการพูด int * ต่อปี * PB * เครื่องคอมพิวเตอร์
ตอนนี้ต้องบอกเพียงแค่ว่า และตอนนี้บอกคุณนี้
คุณอาจจะไม่เคยทำเช่นนี้
และก็อาจจะเป็นสิ่งที่ดีตรงไปตรงมา เพราะคุณอาจจะไม่ได้ตั้งใจ
ละเว้นดาวสิ่งที่ต้องการที่
มันอาจจะดีที่สุดที่จะอาจจะประกาศ คำแนะนำเกี่ยวกับสายของแต่ละบุคคล
แต่มันก็เป็นเพียงอีกคนหนึ่ง ไวยากรณ์ของผู้ที่น่ารำคาญ
สิ่งที่มีดาวที่ทำให้ ตัวชี้จึงยากที่จะทำงานร่วมกับ
เพราะมันเป็นเพียงแค่ประโยคนี้ คุณมีระเบียบในการทำงานผ่าน
กับการปฏิบัติมันไม่ จริงๆเป็นธรรมชาติที่สอง
ฉันยังคงทำผิดพลาดกับมันยัง หลังจากที่การเขียนโปรแกรมเป็นเวลา 10 ปีที่ผ่านมา
จึงไม่ต้องอารมณ์เสียถ้าสิ่งที่เกิดขึ้น กับคุณก็รักกันตรงไปตรงมา
มันจริงๆชนิดของ ข้อบกพร่องของไวยากรณ์
>> ตกลงดังนั้นฉันชนิดของสัญญา ว่าเราจะทบทวน
แนวคิดของวิธีการที่มีขนาดใหญ่เป็นสตริง
ดีถ้าฉันบอกคุณว่า สตริงเราได้จริงๆชนิดของ
นอนอยู่กับคุณตลอดเวลา
มีชนิดข้อมูลไม่เรียกว่าเป็น สตริงและในความเป็นจริงฉัน
กล่าวถึงนี้เป็นหนึ่งในของเรา วิดีโอที่เก่าแก่ที่สุดในชนิดข้อมูล
สตริงที่เป็นชนิดข้อมูลที่ ถูกสร้างขึ้นสำหรับคุณในการ CS50.h.
คุณต้อง # รวม CS50.h เพื่อที่จะใช้มัน
>> ดีสตริงเป็นจริงเพียง นามแฝงสำหรับบางสิ่งบางอย่าง
* เรียกว่าถ่านที่เป็น ตัวชี้ไปยังตัวอักษร
ดีชี้การเรียกคืน เป็นเพียงที่อยู่
ดังนั้นสิ่งที่มีขนาด ไบต์ของสตริงหรือไม่?
ดีมันสี่หรือแปด
และเหตุผลที่ผมบอกว่าสี่หรือ แปดเป็นเพราะมันเป็นจริง
ขึ้นอยู่กับระบบหากคุณกำลังใช้ IDE CS50 * ถ่านคือขนาดของถ่านที่
* แปดมันเป็นระบบ 64 บิต
ที่อยู่ในความทรงจำทุกคนเป็น 64 บิตนาน
หากคุณกำลังใช้เครื่อง CS50 หรือโดยใช้เครื่อง 32 บิต
และคุณเคยได้ยินว่าในระยะ 32 บิต เครื่องสิ่งที่เป็นเครื่อง 32 บิต?
ดีมันก็หมายความว่าทุก ที่อยู่ในความทรงจำเป็น 32 บิตนาน
และอื่น ๆ 32 บิตสี่ไบต์
ดังนั้น * ถ่านสี่หรือแปด ไบต์ขึ้นอยู่กับระบบของคุณ
และแน่นอนชนิดข้อมูลใด ๆ และชี้ไปยังข้อมูลใด ๆ
พิมพ์ตั้งแต่ชี้ทั้งหมดเป็นเพียง ที่อยู่สี่หรือแปดไบต์
ดังนั้นขอทบทวนนี้ แผนภาพและขอสรุป
วิดีโอนี้กับการออกกำลังกายเล็ก ๆ น้อย ๆ ที่นี่
ดังนั้นนี่คือแผนภาพที่เราทิ้งไปด้วย ที่จุดเริ่มต้นของวิดีโอ
จึงเกิดขึ้นในขณะนี้สิ่งที่ถ้าผมพูด * PK = 35?
ดังนั้นจึงหมายความว่าเมื่อฉันพูด * PK = 35?
ใช้เป็นครั้งที่สอง
* PK
ในบริบทที่นี่ * คือ ผู้ประกอบการ dereference
ดังนั้นเมื่อ dereference ผู้ประกอบการมีการใช้
ที่เราจะไปยังที่อยู่ที่ชี้ไป โดย PK และเราเปลี่ยนสิ่งที่เราพบ
ดังนั้น * PK = 35 ได้อย่างมีประสิทธิภาพ ทำอย่างนี้ไปภาพ
ดังนั้นจึงเป็นพื้น syntactically เหมือนกับที่ได้กล่าว k = 35
>> อีกหนึ่ง.
ถ้าผมบอกว่า int เมตรสร้าง ตัวแปรใหม่ที่เรียกว่าม.
กล่องใหม่จะเป็นกล่องสีเขียวเพราะ ก็จะถือจำนวนเต็ม
และจะติดป้ายเมตร
ถ้าผมบอกว่าม. = 4 ผมใส่ จำนวนเต็มลงในช่องที่
ถ้าพูด PK = & M, วิธีการที่ไม่ การเปลี่ยนแปลงแผนภาพนี้?
Pk = & M, คุณจำได้ว่า และผู้ประกอบการจะเกิดขึ้นหรือที่เรียกว่า?
และจำไว้ว่าบางชื่อตัวแปร เป็นที่อยู่ของชื่อตัวแปร
ดังนั้นสิ่งที่เรากำลังจะบอกว่าเป็น PK ได้รับที่อยู่ของ m
และเพื่อให้มีประสิทธิภาพในสิ่งที่เกิดขึ้น แผนภาพคือจุด pk ไม่
กับ k แต่จุดที่จะม
>> ตัวชี้อีกครั้งเป็นอย่างมาก ยุ่งยากในการทำงานร่วมกับ
และพวกเขาใช้เวลามากของ ปฏิบัติ แต่เป็นเพราะ
ความสามารถในการช่วยให้คุณ เพื่อส่งผ่านข้อมูลระหว่างการทำงาน
และจะมีผู้ที่ การเปลี่ยนแปลงจะมีผล
ได้รับหัวของรอบ เป็นสิ่งสำคัญมาก
มันน่าจะเป็นที่ซับซ้อนมากที่สุด หัวข้อที่เราจะหารือใน CS50,
แต่ค่าที่คุณ ได้รับจากการใช้ตัวชี้
มากเมื่อเทียบกับภาวะแทรกซ้อน ที่มาจากการเรียนรู้ของพวกเขา
ดังนั้นผมจึงหวังว่าคุณที่ดีที่สุดของ เรียนรู้เกี่ยวกับโชคชี้
ฉันลอยด์ดั๊กนี้เป็น CS50