DAVID ลัน: สวัสดีและ ยินดีต้อนรับกลับไป CS50 ดังนั้นนี่คือจุดสิ้นสุดของสัปดาห์ที่สี่ เพียงหนึ่งในการประกาศครั้งแรก ที่เรียกว่าห้าจันทร์ดังนั้น ขึ้นมานี้มาจันทร์ นี่คือโอกาสที่จะเปลี่ยนจาก SAT / UNSAT ให้เกรดเป็นตัวอักษรหรือจาก เกรดเป็นตัวอักษร SAT / UNSAT annoyingly กระบวนการที่จะต้อง ลายเซ็นเพราะคุณต้องกรอก ออกหนึ่งในบรรดารูปแบบเพิ่ม / ลดลงสีชมพู เพราะในทางเทคนิค SAT / UNSAT รุ่นและรุ่นเกรดเป็นตัวอักษร มีตัวเลขที่แตกต่างกันแคตตาล็อก แต่ไม่มีเรื่องใหญ่ เพียงแค่มาถึงผมหรือร็อบ หรือลอเรนที่จุดใด ๆ หรือส่งอีเมลถึงเราถ้าคุณไม่ได้ชนิด ของเอกสารที่คุณต้องการในวันนี้และเรา จะต้องแน่ใจว่าจะช่วยให้คุณใช้ ดูแลว่าก่อนที่จันทร์ ขวาทั้งหมดดังนั้นวันนี้ - จริงมีบิตของการสะท้อนของ เราสามารถโทนฉันลงเล็กน้อย? ตกลง ดังนั้นวันนี้เราจะแนะนำหัวข้อ ที่รู้จักกันเป็นตัวชี้ และฉันจะยอมรับว่าเป็นหนึ่งใน หัวข้อที่ซับซ้อนมากขึ้นว่าเรามีแนวโน้มที่จะ ครอบคลุมในชั้นนี้หรือจริงๆใด ๆ หลักสูตรเบื้องต้นที่ใช้ C. แต่ใช้คำของฉันสำหรับมันโดยเฉพาะอย่างยิ่ง ถ้าใจของคุณรู้สึกก้มลงอีกเล็กน้อย ในวันนี้และในสัปดาห์ที่จะมาถึง มันไม่ได้เป็นตัวแทนของคุณได้รับ เลวร้ายใดที่นี้มันก็หมายความว่า มันเป็นหัวข้อที่มีความซับซ้อนโดยเฉพาะอย่างยิ่ง ฉันสัญญาว่าเพียงไม่กี่สัปดาห์ ด้วยเหตุนี้ดูเหมือนจะเกินไปอย่างยอดเยี่ยม ตรงไปตรงมาในการหวนกลับ ผมยังจำได้จนถึงทุกวันนี้ ผมกำลังนั่งอยู่ในเอลเลียต Dining Hall, นั่งถัดจาก TF Nishat ฉันเมธา ที่มีถิ่นที่อยู่ของเอลเลียตบ้านเป็น และด้วยเหตุผลบางอย่างนี้ หัวข้อการคลิกเพียง ซึ่งก็คือการบอกว่าฉันก็พยายามที่ กับมันสำหรับจำนวนของเวลาที่บาง แต่ฉัน จะทำของฉันดีที่สุดที่จะช่วยให้หลีกเลี่ยงการใด ๆ ดังกล่าว การต่อสู้กับหัวข้อว่าในท้ายที่สุด ที่มีประสิทธิภาพมาก ในความเป็นจริงหนึ่งในหัวข้อที่เราจะหารือเกี่ยวกับ ในสัปดาห์ที่จะมาถึงที่ รักษาความปลอดภัยของและวิธีที่คุณสามารถจริง ใช้ประโยชน์จากเครื่องในรูปแบบ ที่ไม่ได้ตั้งใจ และ exploitations เหล่านั้นมักจะมี ผลมาจากข้อบกพร่องผิดพลาดที่เรา ทำให้คนโดยไม่เข้าใจบางอย่าง ของการดำเนินงานพื้นฐาน รายละเอียดผ่านทางโปรแกรมที่จะทำ ตอนนี้เพื่อให้ดูเหมือนทั้งหมดของผู้ใช้มากขึ้น เป็นกันเอง, ฉันคิดว่าฉันเล่น 10 ตัวอย่างที่สองของ claymation เล็ก ๆ น้อย ๆ รูปที่ชื่อบิงกี้ที่ถูกนำไป ชีวิตโดยเพื่อนของเราที่ Stanford, Parlante ศาสตราจารย์นิค ดังนั้นให้ฉันเพื่อให้คุณนี้ ทีเซอร์ของบิงกี้ที่นี่ [เล่นภาพวิดีโอ] -เฮ้บิงกี้ ตื่นนอน ก็ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน มีอะไรที่? เรียนรู้เกี่ยวกับตัวชี้? โอ้ Goodie [เล่นวิดีโอจบ] DAVID ลัน: นั่นคือ Stanford สาขาวิชาวิทยาการคอมพิวเตอร์ ดังนั้นเพิ่มเติมเกี่ยวกับการที่จะมาถึง [APPLAUSE] DAVID ลัน: ขออภัยนิค ดังนั้นจำได้ว่าครั้งสุดท้ายที่เราสิ้นสุดเมื่อวันที่ นี้น่าตื่นเต้นที่น่าตื่นเต้นจริงๆ โดยฟังก์ชั่นนี้ เพียงแค่ไม่ได้ทำงาน อย่างน้อยอย่างสังหรณ์ใจมันให้ความรู้สึก เหมือนมันควรจะทำงาน เพียงแค่การแลกเปลี่ยนค่า ของจำนวนเต็มสองจำนวน แต่จำได้ว่าตอนที่เราพิมพ์ออกมา ค่าเดิมในหนึ่งหลักและ สองพวกเขาก็ยังคงเป็นหนึ่งและ สองและไม่ได้และเป็นหนึ่งในสอง เพื่อให้ฉันจริงสลับ ไปยังเครื่องใช้ไฟฟ้า และที่ผมเขียนขึ้นเล็กน้อยของรหัสโครงกระดูกใน ความก้าวหน้าของที่นี่ที่ผมอ้างว่า x จะเป็น 1, y จะเป็น 2 จากนั้นผมก็พิมพ์ออกมาทั้งสองของพวกเขา ค่า F กับการพิมพ์ จากนั้นผมก็เรียกร้องลงที่นี่ที่ เรากำลังจะเปลี่ยนพวกเขา ผมออกจากจุดที่ว่างเปล่าที่นี่สำหรับเราที่จะ กรอกข้อมูลลงในวันนี้ในเวลาเพียงสักครู่ จากนั้นฉันจะอ้างว่า ตัวแปรทั้งสองได้รับเปลี่ยน แล้วฉันจะพิมพ์ พวกเขาออกมาอีกครั้ง และเพื่อหวังว่าผมจะเห็น 1, 2 2, 1 ที่ง่ายสุดคือ เป้าหมายตอนนี้ ดังนั้นทำอย่างไรเราไปเกี่ยวกับการแลกเปลี่ยน ตัวแปรทั้งสอง? ดีถ้าผมเสนอนี่ที่ถ้วยเหล่านี้ อาจเป็นตัวแทนของหน่วยความจำในคอมพิวเตอร์ นี้เป็นเพียงไม่กี่กัดนี้ เป็นอีกหนึ่งกัดไม่กี่ อาจอาสาสมัครที่เราได้มาขึ้นและ ผสมเครื่องดื่มบางอย่างเราถ้าคุ้นเคย? มาขึ้น คุณชื่ออะไร? JESS: Jess DAVID ลัน: Jess มาขึ้น Jess ถ้าคุณไม่รังเกียจที่เราต้องใส่ Google แก้วกับคุณเพื่อให้เราสามารถ ทำให้เป็นอมตะนี้ ตกลงแก้ว บันทึกวิดีโอ และตกลงเราเป็นที่ดีที่จะ ไปกับเจนี่ ทั้งหมดขวา Nice to meet you ดังนั้นสิ่งที่ฉันอยากให้คุณทำที่นี่ - ถ้าคุณทำได้อย่างรวดเร็ว - เพียงแค่เราเทครึ่งแก้วสีส้ม น้ำครึ่งแก้วนม, ที่เป็นตัวแทนของตัวเลขที่มีประสิทธิภาพ 1 ในหนึ่งถ้วยและที่ 2 ในถ้วยอื่น ๆ นี้เป็นไปได้ภาพที่ดี JESS: ขออภัย DAVID ลัน: ไม่ไม่ ก็ OK ไนซ์ ขวาทั้งหมดเพื่อให้เรามีสี่ไบต์ มูลค่าของน้ำส้ม เราจะเรียกมันว่ามูลค่า 1 ตอนนี้อีกสี่ไบต์มูลค่าของนม จะเรียกว่า 2 มูลค่า ดังนั้น x และ y ตามลำดับ ทั้งหมดขวาดังนั้นตอนนี้ถ้างานในมือ - สำหรับคุณ Jess ในด้านหน้าของทั้งหมด เพื่อนร่วมชั้นของคุณ - คือการการสลับค่าของ x และ y ดังกล่าว ที่เราต้องการในน้ำส้ม ถ้วยอื่น ๆ และนมในถ้วยนี้วิธีการ อาจจะคุณ - ก่อนที่คุณจะทำจริง มัน - ไปเกี่ยวกับการทำเช่นนี้? ตกลงตัดสินใจที่ชาญฉลาด ดังนั้นคุณต้องมีหน่วยความจำมากขึ้นอีกนิด เพื่อขอจัดสรรชั่วคราว ถ้วยถ้าคุณจะ และตอนนี้ดำเนินการต่อไปสลับ x และ y ยอดเยี่ยม ทำอย่างนั้นได้เป็นอย่างดี ขอบคุณมากเจส นี่ไง ของที่ระลึกเล็ก ๆ น้อย ๆ OK เพื่อให้เห็นได้ชัดในความคิดง่ายสุด สมบูรณ์ใช้งานง่ายที่เราจำเป็นต้องบิต พื้นที่จัดเก็บมากขึ้น - ในรูปแบบนี้ ถ้วย - ถ้าเราจริงต้องการ สลับสองตัวแปรเหล่านี้ ดังนั้นขอทำตรงนั้น ขึ้นที่นี่ในระหว่างที่ฉันเรียกร้องฉัน จะต้องทำบางอย่างสลับฉันจะ ไปข้างหน้าและประกาศชั่วคราว และฉันจะตั้งค่าให้เท่ากับการพูด, x แล้วฉันจะเปลี่ยนค่าของ x เช่นเดียวกับเจสไม่ได้อยู่ที่นี่กับ นมและน้ำผลไม้สีส้ม ให้เท่ากับ y และฉันจะเปลี่ยน y จะเท่ากับ ที่จะไม่ x เพราะตอนนี้เราจะ ติดอยู่ในวงกลม แต่ค่อนข้าง temp ฉันชั่วคราว - หรือที่ Jess ชั่วคราวใส่น้ำส้ม ก่อนที่จะ clobbering ว่า ถ้วยด้วยนม เพื่อให้ฉันไปข้างหน้าในขณะนี้และทำให้เรื่องนี้ มันเรียกว่า noswap.c และตอนนี้ให้ฉันทำงานไม่มี Swap และอันที่จริงผมเห็นถ้าฉันขยาย หน้าต่างนิด ๆ หน่อย ๆ ว่า x 1, y คือ 2 แล้ว x 2, y 1 แต่จำได้ว่าในวันจันทร์เราทำสิ่งที่ น้อยแตกต่างกันอย่างไรครับ ดำเนินการแทนฟังก์ชันช่วยเหลือ, ถ้าคุณจะว่าจริง ๆ แล้วเป็นโมฆะ ผมเรียกมันว่า swap ผมให้มันสองพารามิเตอร์และฉันเรียกว่า พวกเขาและฉันเรียกพวกเขาว่าข ตรงไปตรงมาที่ฉันสามารถเรียกพวกเขาว่า x และ y ไม่มีอะไรที่จะหยุดอะไร ฉันจากการทำที่ แต่ผมจะเถียงมันแล้ว เล็ก ๆ น้อย ๆ ที่ไม่ชัดเจน เพราะการเรียกคืนวันจันทร์ที่เรา อ้างว่าพารามิเตอร์เหล่านี้ สำเนาของค่าที่ส่งเข้า ดังนั้นจึงเป็นเพียง messes กับของคุณ ใจผมคิดว่าถ้าคุณใช้ ว่าตัวแปรเดียวกัน ดังนั้นฉันแทนจะเรียกพวกเขา และ b เพียงเพื่อความชัดเจน แต่เราจะเรียกพวกเขามากที่สุด สิ่งที่เราต้องการ และฉันจะคัดลอกและวาง ได้อย่างมีประสิทธิภาพรหัสจากมีขึ้นนี้ ลงที่นี่ เพราะผมเพิ่งเห็นว่าการทำงาน ดังนั้นที่อยู่ในรูปร่างที่ดีงาม และฉันจะเปลี่ยนฉันไป x, x ของฉัน เพื่อ, y ขของฉันและ y ของฉันไปที่ข ดังนั้นในคำอื่น ๆ ตรรกะเดียวกันแน่นอน สิ่งเดียวที่แน่นอนว่าเจสได้ แล้วสิ่งหนึ่งที่ฉันต้องทำขึ้น ที่นี่แน่นอนคือตอนนี้เรียกนี้ ฟังก์ชั่นหรือเรียกใช้ฟังก์ชันนี้ ดังนั้นผมจึงจะเรียกฟังก์ชั่นนี้มีสอง ปัจจัยการผลิต, x และ y, และกดบันทึก ทั้งหมดขวาดังนั้นพื้นฐาน สิ่งเดียวกัน ในความเป็นจริงผมอาจจะทำโปรแกรม โดยไม่จำเป็นที่ซับซ้อนโดย การเขียนฟังก์ชั่นที่เพียงการ บางหกบรรทัดของรหัสในขณะที่ผม ก่อนหน้านี้ได้ดำเนินการ นี้ในเวลาเพียงสาม เพื่อให้ฉันไปข้างหน้าในขณะนี้และ remake นี้ทำให้ไม่มี Swap ทั้งหมดขวาฉันเมาขึ้นที่นี่ นี้ควรจะเป็นข้อผิดพลาดที่คุณอาจ ดูมากขึ้นทั่วไปว่าเป็นของคุณ โปรแกรมที่ได้รับความซับซ้อนมากขึ้น แต่มีการแก้ไขที่ง่ายที่สุด ผมขอเลื่อนกลับขึ้นไปที่นี่ และข้อผิดพลาดแรกที่ฉันเห็นคืออะไร ประกาศโดยปริยาย ที่ไม่ปกติจะระบุอะไร? โอ้ฉันลืมต้นแบบ ฉันลืมที่จะสอนคอมไพเลอร์ที่ swap จะไปอยู่แม้เขาจะ ไม่ได้อยู่ที่จุดเริ่มต้นมาก ของโปรแกรม ดังนั้นฉันแค่จะพูดเป็นโมฆะ swap, int, int b, อัฒภาค ดังนั้นฉันไม่ได้ไป reimplement มัน แต่ตอนนี้มันตรงกับสิ่งที่ลงไปที่นี่ แจ้งให้ทราบและขาดอัฒภาค ที่นี่ซึ่งไม่ได้เป็นสิ่งที่จำเป็นเมื่อ การดำเนินการ เพื่อให้ฉัน remake นี้ทำให้ไม่มี Swap รูปร่างที่ดีมาก เรียกใช้ swap ไม่ และด่ามัน ตอนนี้เรากลับว่าเราอยู่ที่ไหนในวันจันทร์ที่ สิ่งที่ไม่ได้สลับ และคำอธิบายที่ใช้งานง่ายเป็นสิ่งที่ สำหรับเหตุผลที่เป็นกรณีนี้? อ้าง? ลูกศิษย์: [ได้ยิน] DAVID ลัน: ว่า ดังนั้น a และ b เป็นสำเนาของ x และ y และในความเป็นจริงเวลาใด ๆ ที่คุณเคย เรียกใช้ฟังก์ชันป่านนี้ว่า ผ่านตัวแปรเช่น ints - เช่นเดียวกับการแลกเปลี่ยนคาดว่าจะอยู่ที่ - พวกคุณได้รับผ่านในสำเนา ตอนนี้นั่นหมายความว่ามันต้องใช้เวลานิด ๆ หน่อย ๆ ของเวลาเสี้ยววินาทีสำหรับ คอมพิวเตอร์เพื่อคัดลอกบิตจากที่หนึ่ง ตัวแปรเป็นบิตของอีกคนหนึ่ง แต่ที่ไม่ดังกล่าวเป็นเรื่องใหญ่ แต่พวกเขากระนั้นสำเนา และดังนั้นตอนนี้ในบริบทของการแลกเปลี่ยน, ผมประสบความสำเร็จในความเป็นจริง เปลี่ยน a และ b ในความเป็นจริงขอทำอย่างรวดเร็ว ตรวจสอบสติ ฉพิมพ์เป็น i%, บรรทัดใหม่ และเสียบขอใน ตอนนี้ขอทำสิ่งเดียวกันด้วย b และให้ทำสิ่งเดียวกันที่นี่ และตอนนี้ให้ฉันคัดลอกบรรทัดเดียวกันนั้น อีกครั้งที่ด้านล่างของฟังก์ชั่น หลังจากสามบรรทัดของฉันที่น่าสนใจ อาจมีการดำเนินการและ พิมพ์ A และ B อีกครั้ง ดังนั้นตอนนี้ขอให้นี้ทำให้ไม่มี Swap ผมขอให้หน้าต่าง terminal บิตสูงเพื่อให้เราสามารถมองเห็น มากกว่านั้นในครั้งเดียว และเรียกใช้ swap ไม่ x 1, y คือ 2 คือ 1 b คือ 2 แล้วเป็น 2 ข 1 ดังนั้นจึงมีการทำงานเช่นเดียวกับเจส ได้ที่นี่ภายในของ swap แต่แน่นอนว่ามันมีผลกระทบไม่ เกี่ยวกับตัวแปรในหลัก ดังนั้นเราจึงเห็นเคล็ดลับซึ่งให้เรา สามารถแก้ไขปัญหานี้ใช่มั้ย? เมื่อคุณต้องเผชิญกับการกำหนดขอบเขตนี้ ปัญหาคุณสามารถถ่อเพียงและทำให้ x และ y สิ่งที่ชนิดของตัวแปรแทน? คุณสามารถทำให้พวกเขาทั่วโลก วางไว้ที่ส่วนบนสุดของไฟล์ ในขณะที่เราไม่ได้แม้จะอยู่ในเกมจาก 15 เราใช้ตัวแปรทั่วโลก แต่ในบริบทของ 15 เกม, มันสมควรที่จะมีการทั่วโลก ตัวแปรที่เป็นตัวแทนของคณะกรรมการเพราะ ความสมบูรณ์ของ 15.c คือทั้งหมดที่ เกี่ยวกับการใช้เก​​มที่ นั่นคือแฟ้มที่มีอยู่ว่าจะทำอย่างไร แต่ในกรณีนี้ที่นี่ผม เรียกฟังก์ชั่นการแลกเปลี่ยน ผมต้องการที่จะสลับสองตัวแปร และมันควรจะเริ่มต้นที่จะรู้สึกเลอะเทอะเพียง ถ้าแก้ปัญหาทั้งหมดของเรา ปัญหาเมื่อเราทำงานในขอบเขต ประเด็นคือทำให้มันทั่วโลก เพราะอย่างรวดเร็วโปรแกรมของเราคือ จะกลายเป็นค่อนข้างเป็นระเบียบ และเราไม่ว่ามากเท่าที่จำเป็น ผลที่ตามมาใน 15.c. แต่ปรากฎว่ามี วิธีที่ดีกว่าออกไปโดยสิ้นเชิง ให้ฉันจริงไปกลับและลบ พิมพ์ของ f เพียงเพื่อลดความซับซ้อนของรหัสนี้ และแจ้งให้เราเสนอว่า นี้แน่นอนจะไม่ดี แต่ถ้าฉันแทนเครื่องหมายดอกจันเพิ่มในบางส่วน และดาวผมแทนสามารถเปิดการทำงานนี้ ฟังก์ชั่นเป็นหนึ่งที่ ในการปฏิบัติงานจริง เพื่อให้ฉันกลับไปที่นี่และยอมรับว่า เครื่องหมายดอกจันอยู่เสมอยาก ดังนั้นฉันจะบอกว่าดาว ฉันเพิ่งจะสารภาพถึงที่หนึ่ง ทั้งหมดขวา และตอนนี้สิ่งที่ฉันจะ ที่จะทำแทน? ดังนั้นก่อนอื่นผมจะต้องระบุ ว่าแทนที่จะผ่านเข้าไปใน int swap ฟังก์ชันที่ฉันแทน จะไปบอกว่าดาว int ตอนนี้ดาวอะไรบ่งชี้? นี่คือความคิดของตัวชี้ที่ว่า บิงกี้ตัวละคร claymation เป็น หมายถึงช่วงเวลาที่ผ่านมา ดังนั้นถ้าเราบอกว่า int ดาว, ความหมายของ ในตอนนี้ก็คือจะไม่เป็น ที่ผ่านมาโดยค่าของมัน มันจะไม่ได้คัดลอกมาค่ะ แต่ที่อยู่ของคือ จะต้องผ่านระบบ ดังนั้นจำภายในของคอมพิวเตอร์ของคุณที่ เป็นทั้งกลุ่มของหน่วยความจำอย่างอื่น ที่รู้จักกันเป็นแรม และ RAM ที่เป็นเพียง ทั้งกลุ่มของไบต์ ดังนั้นถ้า Mac หรือ PC ของคุณมี สองกิกะไบต์คุณมี 2 พันล้านไบต์ของหน่วยความจำ ตอนนี้ขอเพียงแค่คิดว่าเพียงเพื่อ เก็บสิ่งที่ดีและเป็นระเบียบเรา กำหนดที่อยู่ - จำนวน - เพื่อทุก byte ของ RAM ในคอมพิวเตอร์ของคุณ ไบต์แรกมากของคนเหล่านั้น 2 พันล้านเป็นเลขศูนย์ หนึ่งต่อไปคือจำนวนไบต์หมายเลขหนึ่ง สองทุกทางขึ้น, dot dot จุดประมาณ 2 พันล้าน ดังนั้นคุณจำนวนไบต์ที่สามารถ ของหน่วยความจำในคอมพิวเตอร์ของคุณ ดังนั้นสมมติว่านั่นคือสิ่งที่ เราหมายถึงที่อยู่ ดังนั้นเมื่อผมเห็น int ดาวมันเกิดอะไรขึ้น ที่จะผ่านเข้าไปในการแลกเปลี่ยนในขณะนี้คือ ที่อยู่ของ ไม่คุ้มค่า แต่สิ่งที่ไปรษณีย์ ที่อยู่เป็นเพื่อที่จะพูด - ทำเลที่ตั้งอยู่ในแรม และเช่นเดียวกันสำหรับ b, ฉันจะ ที่จะพูดในสิ่งเดียวกัน Int, ดาว, b เช่นกันในทางเทคนิคดาว อาจจะไปในสถานที่อื่น ๆ แต่เราจะมาตรฐานในการเป็นดาว ขวาถัดจากชนิดข้อมูล ดังนั้นสลับลายเซ็นในขณะนี้หมายความว่าให้ฉัน ที่อยู่ของ int และโทร ที่อยู่ และให้ฉันที่อยู่ของอีกคนหนึ่ง int และเรียก b ที่อยู่ที่ แต่ตอนนี้รหัสของฉันที่นี่มีการเปลี่ยนแปลง เพราะถ้าฉันประกาศชั่วคราว int - ซึ่งยังคงเป็นประเภท int - แต่ฉันเก็บอยู่ในนั้น, สิ่งที่ชนิดของค่า? ต้องมีความชัดเจนฉันวางกับ รหัสที่เขียนในตอนนี้? ผมวางในสถานที่ แต่ฉันไม่สนใจเกี่ยวกับ สถานที่ในขณะนี้ใช่มั้ย? อุณหภูมิที่มีอยู่เพียง Jess 'ถ้วยที่สาม มีตัวตนเพื่อวัตถุประสงค์อะไร? เพื่อเก็บค่า นมหรือน้ำผลไม้สีส้ม ไม่จริงเก็บที่อยู่ของ อย่างใดอย่างหนึ่งของสิ่งเหล่านั้นที่รู้สึก เล็ก ๆ น้อย ๆ ไร้สาระในความเป็นจริงนี้ บริบทโลกแล้ว ดังนั้นจริงๆสิ่งที่ฉันต้องการที่จะใส่ในอุณหภูมิ ไม่ได้เป็นที่อยู่ของ แต่ เนื้อหาของ ดังนั้นถ้าเป็นตัวเลขเช่น 123 นี้ 123 ไบต์ของหน่วยความจำที่เพียงแค่ เกิดขึ้นจะครอบครองว่าค่า ในเกิดขึ้นจะครอบครอง ถ้าผมต้องการที่จะไปอยู่ที่ ผมต้องบอกว่าดาว ในทำนองเดียวกันถ้ามีการเปลี่ยนแปลงอะไร ตามที่อยู่ที่ผมเปลี่ยน นี้จะเริ่มต้น ถ้าผมต้องการที่จะเก็บไว้ในสิ่งที่เป็นที่ สถานที่กับสิ่งที่อยู่ในที่ตั้ง ที่ b, b ดาวดาว ดังนั้นในระยะสั้นแม้ว่านี้ไม่มาก จมในยัง - และฉันจะไม่คาดหวัง ว่าจะอย่างรวดเร็ว - ตระหนักดีว่าทั้งหมดที่ฉันทำคือการ prefixing ดาวเหล่านี้ไปยังตัวแปรของฉัน คำกล่าวที่ว่าไม่คว้าค่า อย่าเปลี่ยนค่า แต่ให้ไปที่ที่อยู่เหล่านั้น และได้รับค่า ไปที่ที่อยู่ที่และการเปลี่ยนแปลง มูลค่าที่นั่น ดังนั้นตอนนี้ให้ฉันเลื่อนกลับขึ้นไปด้านบน เพียงเพื่อแก้ไขบรรทัดนี้ที่นี่เพื่อ เปลี่ยนต้นแบบเพื่อให้ตรงกับ แต่ตอนนี้ผมต้องการที่จะทำสิ่งหนึ่งที่อื่น ๆ โดยสัญชาตญาณถ้าฉันได้เปลี่ยนประเภท ของการขัดแย้งแลกเปลี่ยนที่คาดหวัง ผมทำในสิ่งที่คนอื่นต้องการ มีการเปลี่ยนแปลงในรหัสของฉัน? เมื่อผมเรียกว่า swap เพราะตอนนี้สิ่ง am ผมผ่านไปแลกยัง? ค่า x และค่า y หรือ นมและน้ำผลไม้สีส้ม แต่ฉันไม่ต้องการที่จะทำอย่างนั้น ผมแทนต้องการผ่านในอะไร สถานที่ตั้งของ x และ สถานที่ตั้งของ y อะไรที่อยู่ทางไปรษณีย์ของพวกเขา, เพื่อที่จะพูด ดังนั้นจะทำอย่างไรที่มีเครื่องหมายของ ชนิดสัญลักษณ์ของเสียงเช่นที่อยู่ ดังนั้น n, เครื่องหมาย, ที่อยู่ ของ x และที่อยู่ของ y ดังนั้นจึงเป็นเจตนาที่เราใช้ เครื่องหมายเมื่อเรียกฟังก์ชั่น, และดาวเมื่อประกาศและเมื่อ การใช้ฟังก์ชั่น และเพียงแค่คิดว่าเป็นเครื่องหมาย ที่อยู่ของผู้ประกอบการและเป็นดาว ไปที่นั่นประกอบ - หรือมากกว่าได้อย่างถูกต้อง ดำเนินการ dereference เพื่อให้เป็นจำนวนมากทั้งจากคำพูดเพียงเพื่ออะไร บอกว่าตอนนี้เราหวังว่าจะ swap ความถูกต้อง ให้ฉันไปข้างหน้าและทำ - ให้เปลี่ยนชื่อไฟล์จริงเกรงว่า โปรแกรมนี้ยังคงถูกเรียกว่า swap ไม่มี ผมเรียกร้องว่าเราจะเรียกมันว่า swap.c ขณะนี้ เพื่อให้สับเปลี่ยน Dot, เฉือน, swap และตอนนี้แน่นอน x เป็น 1, y คือ 2 แล้ว x 2, y เป็นหนึ่ง ดีขอดูว่าเราไม่สามารถทำเช่นนี้ แตกต่างกันเล็กน้อยเป็นสิ่งที่คน เกิดขึ้นที่นี่ แรกให้ฉันขยายของเรา วาดภาพหน้าจอที่นี่ และแจ้งให้เรานำเสนอสำหรับช่วงเวลาที่ - และ ทุกครั้งที่ผมวาดที่นี่จะได้รับการสะท้อน มีขึ้นตอนนี้ - ให้ฉันเสนอว่า ที่นี่ทั้งกลุ่มของหน่วยความจำของหรือ แรมภายในของคอมพิวเตอร์ของฉัน และจะเป็นจำนวนกัด สมมติว่า 1 นี้จะมีจำนวนไบต์ 2 และฉันจะทำทั้งกลุ่มมากขึ้นและ แล้วพวงของจุด dot dot ไป แสดงให้เห็นว่ามี 2 พันล้าน สิ่งเหล่านี้ 4, 5, และอื่น ๆ จึงมีห้าครั้งแรกไบต์ ของหน่วยความจำคอมพิวเตอร์ของฉัน ขวาทั้งหมด? น้อยมากจาก 2 พันล้าน แต่ตอนนี้ผมจะนำเสนอ ดังต่อไปนี้ ฉันจะเสนอว่า x เป็นไป เก็บหมายเลข 1 และ y เป็นไป ในการจัดเก็บหมายเลข 2 และแจ้งให้เราไปข้างหน้าในขณะนี้และเป็นตัวแทน ค่าเหล่านี้ดังต่อไปนี้ ขอทำดังต่อไปนี้ ให้ฉันเพียงแค่หนึ่งวินาที หนึ่งวินาที ตกลง ฉันต้องการที่จะทำให้เรื่องนี้เล็ก ๆ น้อย ๆ - ให้ทำเช่นนี้อีกครั้ง มิฉะนั้นฉันจะไปและการใช้ ตัวเลขเดียวกันโดยไม่ตั้งใจ, หลายครั้ง ดังนั้นเราจึงมีตัวเลขที่แตกต่างกัน พูดคุยเกี่ยวกับขอเรียกไบต์นี้ 123, 124, 125, 126, และ dot dot dot และเรียกร้องให้ฉันตอนที่ฉันกำลังจะไป ใส่ค่า 1 ที่นี่และมูลค่า 2 นี่หรือที่เรียกว่า x และ y ดังนั้นมันจึงเกิดขึ้นเพียงเพื่อ นี่คือ x, y นี้ และเพียงแค่มีโอกาสสุ่มบาง คอมพิวเตอร์ระบบปฏิบัติการ, ที่เกิดขึ้นในการวางตำแหน่งที่ x 123 และ y จบลงด้วยการที่สถานที่ 124 - เจ้ากรรมมัน ฉันควรจะมีการแก้ไขนี้ โอ้ฉันจริงๆต้องการทำเช่นนี้? ใช่ฉันต้องการการแก้ไขปัญหานี้และ b ที่เหมาะสมเกี่ยวกับเรื่องนี้ในวันนี้ ขออภัยใหม่นี้ 127, 131, และฉันไม่ต้องการที่จะเป็นนี้ ที่ซับซ้อน แต่ฉันไม่เปลี่ยนทำไม ตัวเลขที่มี? เพราะฉันต้องการ ints ไป ความเป็นจริงสี่ไบต์ ดังนั้นขอเป็นทางทวารหนั​​กสุดเกี่ยวกับเรื่องนี้ ดังนั้นถ้าหากเกิดขึ้น 1 จะ addressed 123, 2 เป็นไปได้ตามที่อยู่ 127 เพราะมันเป็นเพียงแค่ 4 ลาก่อนออกไป นั่นคือทั้งหมดที่ และเราจะลืมเกี่ยวกับทุก ที่อยู่อื่น ๆ ในโลก ดังนั้น x เป็นสถานที่ที่ 123, y อยู่ที่ 127 สถานที่ตั้ง และตอนนี้สิ่งที่ฉันทำจริง ต้องการจะทำอย่างไร? เมื่อผมเรียกว่า swap ขณะนี้สิ่งที่ จริงที่เกิดขึ้น? ดีเมื่อผมเรียกว่า swap ผมผ่านใน ที่อยู่ของ x และ y ที่อยู่ของ ดังนั้นสำหรับตัวอย่างเช่นถ้าทั้งสองชิ้น ของกระดาษในขณะนี้เป็นตัวแทนของทั้งสอง ข้อโต้แย้งและ b เพื่อแลกเปลี่ยนสิ่งที่ฉัน จะเขียนในวันแรกของเหล่านี้ ที่ฉันจะเรียกจะเรียกว่า? ตรง 123 ดังนั้นนี้ฉันเรียกร้องคือ นี้เป็นพารามิเตอร์ ผมใส่ที่อยู่ของ x ในนั้น ว่าคืออะไร? ว่าคืออะไร? ไม่ไม่ ไม่เป็นไร ยังดียังคงดี ดังนั้นนี่คือ และตอนนี้เมื่อชิ้นที่สองของกระดาษ, นี้เป็นไปได้ b และสิ่งที่ฉัน จะต้องเขียนบน ชิ้นส่วนของกระดาษนี้ 127 ดังนั้นสิ่งเดียวที่มีการเปลี่ยนแปลงตั้งแต่ บอกหน้าที่ของเราในเรื่องนี้คือ มากกว่าอักษร 1 และ 2 ผม จะผ่านใน 123 และ 127 และตอนนี้ฉันจะใส่ภายในเหล่านี้ ของกล่องนี้ไหม? เพื่อให้กล่องสีดำในขณะนี้แสดงให้เห็นถึง swap ฟังก์ชัน ในขณะที่ตอนนี้ขอมีใครสักคน ใช้ฟังก์ชั่นการแลกเปลี่ยน คนที่นี่จะ ต้องการอาสาสมัคร? มาขึ้น คุณชื่ออะไร? ชาร์ลี ขวาทั้งหมด, ชาร์ลี มาขึ้น ดังนั้นชาร์ลีจะไปเล่น บทบาทของกล่องดำของเรา ชาร์ลีและสิ่งที่ฉันต้องการให้คุณทำ ขณะนี้มีการดำเนินการแลกเปลี่ยนในลักษณะ ที่ให้ทั้งสองที่อยู่ คุณได้จริงที่เกิดขึ้น เพื่อเปลี่ยนแปลงค่า และฉันจะกระซิบในหูของคุณ วิธีการทำงานที่นี่ทีวี เพื่อไปข้างหน้าและคุณกล่องดำ ไปถึงที่นั่น สิ่งใดที่คุณมองเห็นค่าและ สิ่งที่คุณเห็นค่า B หรือไม่? CHARLIE: คือ 123 และ B 127 DAVID ลัน: ตกลงว่า ตอนนี้หยุดที่นั่นเพื่อรอสักครู่ สิ่งแรกที่คุณกำลังจะทำตอนนี้ ตามรหัส - ที่ ตอนนี้ผมจะดึงขึ้นบนหน้าจอ - เป็นไปได้ที่จะจัดสรรเล็ก ๆ น้อย ๆ บิตของหน่วยความจำที่เรียกว่าอุณหภูมิ ดังนั้นฉันจะไปข้างหน้าและ ให้หน่วยความจำที่ ดังนั้นนี้จะเป็นตัวแปรที่สาม ว่าคุณมีสามารถเข้าถึงได้ คุณเรียกว่าชั่วคราว และสิ่งที่คุณจะเขียน บนชิ้นส่วนอุณหภูมิของกระดาษ? CHARLIE: ชี้ขวา? DAVID ลัน: ตกลงกันไม่ได้ ชี้จำเป็นต้องมี ดังนั้นบรรทัดของรหัสที่ฉันได้ เน้นในด้านขวามือ, ขอเริ่มต้นมี มันบอกว่าดาว ดังนั้นในปัจจุบันคือการจัดเก็บ 123 และเพียงแค่สังหรณ์ใจอะไร ไม่ดาว 123 หมายความว่าอย่างไร แต่โดยเฉพาะถ้าเป็น 123, ดาวหมายความว่าอะไร ค่าของ หรือมากกว่าลวกไปที่นั่น เพื่อให้ฉันเสนอว่าถือใน มือของคุณไปข้างหน้าและรักษาที่ ราวกับว่ามันเป็นแผนที่ และเดินตัวเองไปยังคอมพิวเตอร์ หน่วยความจำและพบว่าสิ่งที่เป็นเรา ที่ 123 สถานที่ตั้ง อย่างแน่นอน ดังนั้นเราจะเห็นที่ 123 สถานที่ตั้ง เป็นสิ่งที่เห็นได้ชัด? ตกลงดังนั้นสิ่งที่มูลค่าตอนนี้คุณ ไปใส่ลงในอุณหภูมิ? อย่างแน่นอน ดังนั้นไปข้างหน้าและทำอย่างนั้น และเขียนหมายเลข 1 บนแผ่น กระดาษที่มีบรรดาศักดิ์ขณะนี้อุณหภูมิ และตอนนี้ขั้นตอนต่อไปว่า คุณกำลังจะดำเนินการ เป็นไปได้ว่า ดีทางด้านขวามือของ บรรทัดถัดไปของรหัสเป็นดาว b b ของ แน่นอนเก็บที่อยู่ ที่อยู่ 127 Star B หมายถึงอะไรลวกพูด? ไปยังตำแหน่งที่ เพื่อไปข้างหน้าและหาเราเกี่ยวกับสิ่ง ที่ 127 สถานที่ตั้ง ตกลง แน่นอนที่ 127 สถานที่, ยังคงเป็นค่า 2 ดังนั้นสิ่งที่คุณจะเก็บในขณะนี้ที่ สิ่งที่ตั้งอยู่ใน? ดังนั้นวิธีการที่ดาวไปที่สถานที่ สถานที่คืออะไร? อย่างแน่นอน ดังนั้นตอนนี้ถ้าคุณต้องการที่จะเปลี่ยน อยู่ที่ว่าสิ่งที่สถานที่ตั้ง - ฉันจะไปข้างหน้าและทำงาน ยางลบอยู่ที่นี่ และตอนนี้จะนำมันกลับมาอยู่บนแปรง สิ่งที่คุณจำนวนจะเขียน ในกล่องเปล่าที่ตอนนี้หรือไม่ อย่างแน่นอน ดังนั้นสายนี้ของรหัสจะชัดเจน - ให้ ฉันหยุดสิ่งชาร์ลีทำและ ชี้ออกจากที่นี่สิ่งที่เขาทำได้เพียง เขียนลงในกล่องที่ 123 สถานที่ตั้ง ค่าที่ก่อนหน้านี้ที่ B และเพื่อให้เราได้ดำเนินการในขณะนี้แน่นอน นี้บรรทัดที่สองของรหัส ตอนนี้โชคไม่ดีที่มี ยังคงเป็นหนึ่งสายที่เหลือ ตอนนี้สิ่งที่อยู่ในอุณหภูมิอย่างแท้จริง? มันเห็นได้ชัดว่าหมายเลขหนึ่ง ที่ไม่อยู่ มันเป็นเพียงตัวเลขการจัดเรียงของ ตัวแปรจากหนึ่งสัปดาห์ และตอนนี้เมื่อคุณบอกว่าดาว b นั่นหมายความว่า ไป b ที่อยู่ซึ่งเป็นของ แน่นอนที่นี่ ดังนั้นเมื่อคุณได้รับมี - ฉันจะไปข้างหน้าและลบสิ่งที่เป็นจริง มี - และสิ่งที่คุณ จะเขียนตอนที่ 127 สถานที่? CHARLIE: อุณหภูมิซึ่งเป็นหนึ่งใน DAVID ลัน: อุณหภูมิซึ่งเป็นหนึ่งใน และเกิดอะไรขึ้นกับอุณหภูมิสิ่งในที่สุด? ดีเราไม่ทราบจริงๆ เราไม่สนใจจริงๆ เวลาที่เราได้ดำเนินการฟังก์ชั่นใด ๆ ป่านนี้ใด ๆ ตัวแปรท้องถิ่นที่คุณมี เป็นท้องถิ่นอย่างแท้จริง และพวกเขาก็หายไป พวกเขากำลังยึดการดำเนินงาน ระบบในที่สุด ดังนั้นความจริงที่ว่าอุณหภูมิยังคงมี มูลค่า 1 เป็นประเภทพื้นฐาน ทึ่งกับเรา ทั้งหมดขวาดังนั้นรอบของการปรบมือ ถ้าเราสามารถชาร์ลี ทำได้ดีมาก ทั้งหมดขวาดังนั้นสิ่งที่มากขึ้นไม่ นี้หมายความว่าเราจะต้องทำอย่างไร ดังนั้นมันจึงกลับกลายเป็นว่าเราได้รับ โกหกสีขาวไม่กี่ สำหรับค่อนข้างบางเวลา จริงมันกลับกลายเป็นว่าสตริง, ทุกเวลานี้ไม่ได้จริงๆ ลำดับของตัวอักษรต่อ se ชนิดของมันคืออย่างสังหรณ์ใจ แต่พูดในทางเทคนิคสตริง ชนิดข้อมูลที่เราประกาศภายในของ CS50 ห้องสมุดเพื่อลดความซับซ้อนในโลก สำหรับสองสามสัปดาห์แรกของการเรียน อะไรสตริงจริงๆคือที่อยู่ ของตัวละครในบางส่วนของแรม สตริงเป็นจริงเป็นจำนวนมากเช่น 123 หรือ 127, ที่เกิดขึ้นปักปัน สตริงที่จะเริ่มขึ้นใน หน่วยความจำของคอมพิวเตอร์ของคุณ แต่มันก็ไม่ได้เป็นตัวแทน สตริงต่อ se ตัวเอง และเราจะได้เห็นดังต่อไปนี้ ให้ฉันไปข้างหน้าและเปิดขึ้น รหัสที่ในบางส่วน วันนี้ตัวอย่างรหัสแหล่งที่มา และฉันจะไปข้างหน้าและเปิด ขึ้นสมมติว่าการเปรียบเทียบ-0.c นี้เป็นโปรแกรมที่รถที่เป็นไป ที่จะดำเนินการดังต่อไปนี้ เป็นครั้งแรก ฉันจะพูดอะไรบางอย่าง แล้วฉันจะไปข้างหน้าและ รับสายจากผู้ใช้ ในบรรทัดถัดไปที่ แล้วฉันจะบอกอีกครั้ง แล้วฉันจะได้รับอีก สตริงจากผู้ใช้ และแจ้งให้ทราบว่าผมแสดงให้เห็นถึงหนึ่งใน สตริงในตัวแปรที่เรียกว่า s และ อีกคนหนึ่งของสายเหล่านี้ ในตัวแปรที่เรียกว่า T และตอนนี้ฉันจะไปเรียกร้องมาก เหตุผลว่าถ้า s เท่ากับเท่ากับ T, สตริงเหมือนกัน คุณพิมพ์ในสิ่งเดียวกัน อื่นสตริงเป็น ไม่ได้ในสิ่งเดียวกัน หลังจากที่ทุกคนถ้าใส่เราสอง ints สอง ตัวอักษรสองลอยสองคู่ใด ๆ เป็นชนิดข้อมูลที่เราได้พูดคุยเกี่ยวกับ ป่านนี้เพื่อเปรียบเทียบพวกเขา - จำได้ว่าเราทำชัดเจนมากในขณะที่ที่ผ่านมา ที่คุณไม่ทำเช่นนี้เพราะ เครื่องหมายเท่ากับเดียวเป็นของหลักสูตร ดำเนินการมอบหมาย เพื่อที่จะเป็นข้อผิดพลาด เราใช้เครื่องหมายเท่ากับเท่ากัน ซึ่งแน่นอนเปรียบเทียบ สิ่งเพื่อความเท่าเทียมกันจริง แต่ผมเรียกร้องนี้เป็นรถ ถ้าฉันไปข้างหน้าและทำให้การเปรียบเทียบศูนย์ และจุดเฉือนกันแล้วเปรียบเทียบศูนย์ และฉันพิมพ์ในสมมติว่าสวัสดี และจากนั้นเราจะมาทักทายอีกครั้ง แท้จริงสิ่งเดียวกันคอมพิวเตอร์ ผมเรียกร้องสิ่งที่แตกต่างที่พิมพ์ ตอนนี้บางทีฉันเพียงแค่พิมพ์ผิดบางสิ่งบางอย่าง ผมจะพิมพ์ชื่อของฉันในเวลานี้ ผมหมายถึงสวัสดี สวัสดี มันแตกต่างกันทุกครั้งเดียว ดีที่เป็นเหตุผลว่าทำไม? อะไรจริงที่เกิดขึ้น ภายใต้ฝากระโปรง? ดีสิ่งที่จริงที่เกิดขึ้นภายใต้ เครื่องดูดควันเป็นสตริงแล้ว ฉันพิมพ์ในครั้งแรกที่ยกตัวอย่างเช่น คำว่าสวัสดีของหลักสูตร แต่ถ้าเราเป็นตัวแทนที่อยู่ภายใต้ เครื่องดูดควัน, จำได้ว่า สตริงในอาร์เรย์ และเราได้กล่าวว่าเท่าในอดีตที่ผ่านมา ดังนั้นถ้าฉันวาดอาร์เรย์ที่เช่นนี้ฉัน จะไปเป็นตัวแทนของสิ่งที่ค่อนข้าง คล้ายกับสิ่งที่เราทำสักครู่ที่ผ่านมา และมีจริงอย่างที่ พิเศษที่นี่เกินไป เราทำในสิ่งที่ถูกที่กำหนด จุดสิ้นสุดของสตริงทุก? ใช่นี้เป็นศูนย์เครื่องหมายทับขวาซึ่งเป็น เพียงวิธีการที่เป็นตัวแทน, ตัวอักษร 00000000 0 แปดบิตในแถว ผมไม่ทราบว่าตรงไปตรงมา หลังจากนี้สิ่ง นั่นเป็นเพียงพวง RAM มากขึ้น ภายในของคอมพิวเตอร์ของฉัน แต่เรื่องนี้เป็นอาร์เรย์ เราได้พูดคุยเกี่ยวกับอาร์เรย์ก่อน และเรามักจะพูดคุยเกี่ยวกับอาร์เรย์ ในฐานะที่เป็นสถานที่ตั้งศูนย์, แล้วหนึ่งแล้วสอง แต่เพียงเพื่อความสะดวก และที่ว่าญาติทั้งหมด เมื่อคุณจริงได้รับหน่วยความจำจาก คอมพิวเตอร์ก็มีความแน่นอนใด ๆ 2 พันล้านไบต์บางแปลกที่อาจเกิดขึ้น ดังนั้นจริงๆภายใต้ประทุน, ทั้งหมดในเวลานี้ใช่ นี้เป็นอย่างดีอาจจะเป็นศูนย์วงเล็บ แต่ถ้าคุณขุดลึกใต้ เครื่องดูดควัน, ที่จริง จำนวนที่อยู่ 123 นี่คือที่อยู่ 124 นี่คือที่อยู่ 125 และฉันไม่ได้กรูขึ้นในเวลานี้ เหล่านี้เป็นหนึ่งไบต์ ห่างกันด้วยเหตุผลอะไร วิธีการใหญ่ถ่านคืออะไร? ถ่านเป็นเพียงหนึ่งไบต์ int โดยทั่วไปจะมีสี่ไบต์ เพื่อที่ว่าทำไมฉันทำมัน 123, 127, 131 และอื่น ๆ ตอนนี้ฉันสามารถเก็บคณิตศาสตร์ที่เรียบง่าย และเพียงแค่ทำบวก 1 และนี่คือตอนนี้สิ่งที่เกิดขึ้นจริง เมื่ออยู่ภายใต้ฝากระโปรง ดังนั้นเมื่อคุณประกาศอะไรเช่นนี้, สตริง s นี้เป็นจริง - มันจะเปิดออก - ดาวถ่าน ระดับของหลักสูตรหมายถึง ที่อยู่ตัวชี้ aka ดังนั้นจึงเป็นที่อยู่ของบางสิ่งบางอย่าง มันคืออะไรที่อยู่ของ? ดี - ฉันเป็นคนเดียวที่สามารถมองเห็นได้มาก จุดสำคัญที่ฉันทำหรือคิดว่า ฉันทำ สตริงดังนั้น - สิ่งที่น่าเศร้าคือผมมีจอภาพ มีสิทธิที่ฉัน จะได้เห็นว่า ขวาทั้งหมดดังนั้นสตริง s คือสิ่งที่ ผมประกาศไปก่อนหน้านี้ แต่ปรากฎขอบคุณเล็ก ๆ น้อย ๆ มายากลใน CS50 ห้องสมุดทั้งหมดนี้ สตริงมีเวลาอย่างแท้จริง รับดาวถ่าน ดาวอีกครั้งหมายถึง ตัวชี้หรือที่อยู่ ความจริงที่ว่ามันขนาบข้าง คำถ่านหมายความว่ามัน ที่อยู่ของตัวละคร ดังนั้นหากรับสายที่เรียกว่าและฉันพิมพ์ ใน H-E-L-L-O, นำเสนอในขณะนี้สิ่งที่ได้รับ สตริงตัวอักษรที่ได้รับการกลับมาของ เวลานี้แม้ว่าเราจะได้มากกว่า สมจริงสมจังโลก? สิ่งที่ไม่รับสายจริง กลับเป็นค่าตอบแทนหรือไม่? 123 ในกรณีนี้เช่น ก่อนหน้านี้เราได้กล่าวว่ารับสาย เพียงสตริงกลับลำดับ อักขระ แต่ที่บิตของการโกหกสีขาว วิธีรับสายจริงๆ ภายใต้ประทุนคือจะได้รับ สตริงจากผู้ใช้ มัน plops ตัวอักษรที่ เขาหรือเธอชนิดในหน่วยความจำ มันทำให้เป็นศูนย์เครื่องหมายทับขวาที่สิ้นสุด ลำดับของตัวอักษรเหล่านั้น แต่แล้วสิ่งที่ไม่รับสาย แท้จริงกลับ? แท้จริงมันส่งกลับที่อยู่ของ ไบต์แรกในแรมที่ มันถูกนำมาใช้เพื่อความแข็งแรงที่ และปรากฎว่าเพียงแค่กลับมา ที่อยู่คนเดียว ตัวอักษรตัวแรกในสตริงที่เป็น เพียงพอสำหรับการค้นหาทั้งหมดของ สตริง ในคำอื่น ๆ รับสายไม่ได้ ที่จะกลับมา 123 และ 124 และ 125 แต่ไม่ได้มีให้ฉันยาว รายการทั้งหมดของไบต์ที่ สตริงของฉันใช้ เพราะพวกเขากำลังทั้งหมดกลับไปด้านหลัง และสองตามที่อยู่แรกผม สามารถคิดออกว่าสตริงสิ้นสุด ได้อย่างไร null อักขระพิเศษ เครื่องหมายทับขวาเป็นศูนย์ในตอนท้าย ดังนั้นในคำอื่น ๆ ถ้า คุณผ่านรอบ - ภายในของตัวแปร - ที่อยู่ของถ่านและคุณสมมติ ที่จุดสิ้นสุดของสตริงใด ๆ ใด ๆ ลำดับของตัวอักษรที่เป็นมนุษย์เรา คิดของสตริงถ้าคุณคิดว่า ในตอนท้ายของสตริงดังกล่าวมี ศูนย์เครื่องหมายทับขวา, คุณทอง เพราะคุณสามารถหา จุดสิ้นสุดของสตริง ตอนนี้สิ่งที่จริงๆแล้วจะ ในโปรแกรมนี้ โปรแกรมนี้คือเหตุผลที่ เปรียบเทียบ-0.c, รถ? อะไรกันแน่ที่ถูกเปรียบเทียบ? อ้าง? ลูกศิษย์: [ได้ยิน] DAVID ลัน: ว่า มันเปรียบเทียบสถานที่ ของสตริง ดังนั้นหากผู้ใช้มีการพิมพ์ในสวัสดีครั้งเดียว เป็นฉันได้หน่วยความจำอาจท้าย มองเช่นนี้ หากผู้ใช้ประเภทแล้วในสวัสดีอีกครั้ง แต่โดยการเรียกรับสายอีกครั้ง c คือ ไม่ฉลาดโดยเฉพาะอย่างยิ่งถ้าคุณไม่ได้สอน มันจะฉลาดโดยการเขียนโค้ด C - คอมพิวเตอร์และอื่น ๆ โดยทั่วไป - ถ้าคุณพิมพ์ในคำว่าสวัสดีอีกครั้ง คุณรู้ว่าคุณกำลังจะได้รับ คุณเพิ่งจะได้รับแถวที่สอง หน่วยความจำที่ใช่จะเกิดขึ้น การจัดเก็บ H-E-L-L-O และอื่น ๆ มันจะมีลักษณะเดียวกันเพื่อ มนุษย์เรา แต่ที่อยู่นี้ อาจจะไม่ 123 มันอาจจะเกิดขึ้นเพียงเพื่อว่า ระบบปฏิบัติการมีบางส่วนที่มีอยู่ พื้นที่สำหรับกรณีที่สถานที่ตั้ง - ขอพูดอะไรโดยพลการ เช่นนี้เป็นสถานที่ตั้ง 200 และนี่คือสถานที่ตั้ง 201 และนี่คือสถานที่ตั้ง 202 เรามีความคิดที่ว่าไม่มี จะอยู่ในหน่วยความจำ แต่สิ่งที่นี้หมายถึงก็คือว่าสิ่งที่เป็น จะถูกเก็บไว้ในท้ายที่สุด s หรือไม่? 123 สิ่งที่จะถูกเก็บไว้ในที ในตัวอย่างนี้โดยพล? จำนวน 200 และสิ่งที่หมายถึงแล้วจะเห็นได้ชัด, 123 ไม่เท่ากับ 200 และดังนั้นนี้ถ้าเงื่อนไขไม่เคย ประเมินไปจริง เพราะสตริงได้รับคือการใช้ที่แตกต่างกัน ชิ้นของหน่วยความจำในแต่ละครั้ง ตอนนี้เราสามารถดูนี้อีกครั้ง ในอีกตัวอย่างหนึ่ง ให้ฉันไปข้างหน้าและเปิดสำเนา 0.c- ผมเรียกร้องว่าตัวอย่างนี้เป็นไป ลอง - แต่ล้มเหลว - เพื่อคัดลอกสองสตริง ดังต่อไปนี้ ฉันจะพูดอะไรบางอย่าง ให้กับผู้ใช้ ผมก็จะได้รับ สตริงและเรียกมัน และตอนนี้ฉันทำนี้ที่นี่ เรากล่าวถึงนี้ในขณะที่กลับ แต่เมื่ออาจได้รับผลตอบแทน null สตริง อีกตัวละครพิเศษหรือพิเศษ สัญลักษณ์สมมติว่า ถ้ามันออกมาจากหน่วยความจำ ตัวอย่างเช่นหากผู้ใช้ที่เป็นจริง เป็นเรื่องยากและชนิดที่เลวร้าย จำนวนตัวอักษรที่ แป้นพิมพ์และฮิตใส่ ถ้าจำนวนตัวอักษรที่เพียงแค่ไม่สามารถ พอดีในสิ่งที่แรมบ้า เหตุผลที่ดีอาจจะรับสาย ได้เป็นอย่างดีกลับมาเป็นโมฆะ หรือถ้าโปรแกรมของคุณเองจะทำมาก ของสิ่งอื่น ๆ และมีเพียง หน่วยความจำไม่พอสำหรับการรับสาย จะประสบความสำเร็จมันอาจสิ้นสุด ขึ้นโมฆะกลับ แต่ขอได้ถูกต้องแม่นยำมากขึ้น เป็นสิ่งที่นี้คือ อะไรคือสิ่งที่ชนิดข้อมูลของ s จริงเหรอ? ดาว Char ดังนั้นมันจะเปิดออกตอนนี้เราสามารถปอกเปลือก กลับชั้นของโมฆะ เปิดออกเป็นโมฆะ - ใช่, อย่างเห็นได้ชัด สัญลักษณ์พิเศษ แต่มันเป็นสิ่งที่เป็นจริง? จริงๆ null เป็นเพียงสัญลักษณ์ที่เรา มนุษย์ใช้เพื่อเป็นตัวแทนของศูนย์เช่นกัน ดังนั้นผู้เขียนของ C และคอมพิวเตอร์ มากกว่าปกติจึงตัดสินใจปีที่ผ่านมา ที่คุณรู้ว่าสิ่งที่ ทำไมเราไม่มั่นใจว่าผู้ใช้ไม่มี ข้อมูลเป็นสิ่งที่เคยเคยเคย เก็บไว้ที่ศูนย์ก่อน? ในความเป็นจริงแม้จะอยู่ในตัวอย่างของฉันโดยพลการ ก่อนที่ผมไม่ได้เริ่มต้นนับ ไบต์ที่ศูนย์ ผมเริ่มที่หนึ่ง เพราะผมรู้ว่าคนที่อยู่ในโลก ได้ตัดสินใจที่จะเป็นศูนย์สำรอง ไบต์ใน RAM ของทุกคนเป็น บางสิ่งที่พิเศษ เป็นเหตุผลที่ทุกเวลาที่คุณต้องการ ส่งสัญญาณว่าสิ่งที่ได้ไปผิด ในเรื่องเกี่ยวกับที่อยู่ที่คุณกลับมา null - หรือที่เรียกเป็นศูนย์ - และเพราะคุณรู้ว่าไม่มี legit ข้อมูลที่ศูนย์ที่อยู่อย่างเห็นได้ชัด นั่นหมายความว่าข้อผิดพลาด และที่ว่าทำไมเราโดยการประชุมตรวจสอบ สำหรับสิ่งที่เป็นโมฆะและผลตอบแทน หนึ่งเดียวในกรณีดังกล่าว ดังนั้นหากเราเลื่อนลงมาตอนนี้เป็นเพียง แล้วการตรวจสอบข้อผิดพลาดบางกรณีเพียงแค่ใน บางสิ่งบางอย่างที่ผิดพลาดไปด้วย [? ประกันตัว?] ทั้งหมดและออกจากโปรแกรม โดยการกลับเร็ว บรรทัดนี้ในขณะนี้อาจจะเขียนใหม่ เช่นนี้ซึ่งหมายความว่าอะไร เมื่อทางด้านซ้ายมือให้ฉันอีก ตัวชี้ไปที่ตัวอักษรและเรียกว่า T สิ่งที่ฉันจัดเก็บภายในของ T ขึ้น เกี่ยวกับเรื่องนี้หนึ่งบรรทัดของรหัส? ผมจัดเก็บสถานที่ โดยเฉพาะสถานที่ ที่อยู่ใน s ดังนั้นหากผู้ใช้มีการพิมพ์ในสวัสดีและ แรกที่เกิดขึ้นสวัสดีจะจบลง ที่นี่แล้ว 123 ตัวเลขคือ จะกลับมาจากการได้รับ สตริงและถูกเก็บไว้ - ในขณะที่เรากล่าวก่อนหน้านี้ - ใน s เมื่อตอนนี้ผมประกาศตัวชี้ไปอีก ถ่านและเรียกว่า T จำนวนคือสิ่งที่ แท้จริงจะจบลงใน ทีตามเรื่อง? ดังนั้น 123 ดังนั้นในทางเทคนิคในขณะนี้ของทั้งสองและ ทีจะชี้ไปที่แน่นอน ชิ้นเดียวกันของหน่วยความจำ ดังนั้นสังเกตเห็นสิ่งที่ฉันจะต้องทำตอนนี้เพื่อ พิสูจน์ให้เห็นว่าโปรแกรมนี้เป็นรถ ครั้งแรกที่ฉันจะไปเรียกร้องกับ ฉพิมพ์พะวง สำเนาของสตริง แล้วผมจะทำอะไรเล็ก ๆ น้อย ๆ การตรวจสอบข้อผิดพลาด ฉันจะให้แน่ใจว่า ขอให้แน่ใจว่า T สตริงที่ อย่างน้อยมากกว่าศูนย์ในระยะเวลา จึงมีตัวละครบางคนอยู่ที่นั่น ที่จริงการลงทุน และแล้วคุณอาจจำนี้ จากตัวอย่างก่อนหน้า 2 บน - ที่อยู่ใน ไฟล์ ctype.h T วงเล็บเป็นศูนย์ให้ฉันเป็นศูนย์ ลักษณะของสตริงที และ 2 บนของค่าเดียวกันว่าของ แน่นอนแปลงเป็นตัวพิมพ์ใหญ่ ดังนั้นอย่างสังหรณ์ใจนี้เน้นเส้น ของรหัสคือลงทุนครั้งแรก ตัวอักษร T แต่ไม่พะวง, สังหรณ์ใจ, ตัวอักษรตัวแรกใน s แต่ถ้าคุณกำลังคิดไปข้างหน้าสิ่งที่ฉัน เกี่ยวกับเพื่อดูว่าเมื่อผมรันโปรแกรมนี้ และพิมพ์ออกมาทั้งสองเดิม s และสำเนาที่เรียกว่า T? พวกเขากำลังจริงจะไม่เหมือนเดิม และทำไมพวกเขาจะเป็นเหมือนกันหรือไม่ พวกเขาทั้งสองชี้ไปที่ ตรงเดียวกัน ดังนั้นขอให้พวกนี้ทำ ให้เป็นศูนย์สำเนา มันจะสร้าง OK ผมขอใช้เป็นศูนย์คัดลอก ให้ฉันพิมพ์สิ่งที่ต้องการในสวัสดี ตัวพิมพ์เล็กทั้งหมดแล้วกด Enter และจะอ้างว่าทั้งสองของเดิม และสำเนาเป็นจริงเหมือนกัน ดังนั้นสิ่งที่เกิดขึ้นจริงที่นี่? ให้ฉันวาดภาพเพียงแค่นี้ เพื่อบอกเล่าเรื่องราวใน วิธีที่แตกต่างกันเล็กน้อย อะไรจริงที่เกิดขึ้นภายใต้ เครื่องดูดควันเมื่อฉันประกาศสิ่งที่ต้องการ ถ่านเริ่มต้น s หรือสตริง s, ฉันได้รับตัวชี้ - ซึ่งเกิดขึ้นเป็นไบต์ที่สี่ ใน CS50 เครื่องใช้ และในจำนวนมากของเครื่องคอมพิวเตอร์ และฉันจะเรียกนี้ และปัจจุบันนี้มี บางค่าที่ไม่รู้จัก เมื่อคุณประกาศตัวแปรเว้นแต่คุณ ตัวเองใส่ค่าที่นั่นที่ รู้ว่าสิ่งที่อยู่ที่นั่น มันอาจจะมีบางลำดับสุ่มของ บิตจากการปฏิบัติหน้าที่ ดังนั้นเมื่อผมในบรรทัดของฉันของรหัสจะได้รับ สตริงแล้วเก็บกลับมา ค่าในรับสายอย่างใด - และเราจะกลับในที่สุดเปลือกจะได้รับ งานสตริงจัดสรรอย่างใด อาร์เรย์ที่อาจมีลักษณะ บิตเช่นนี้ H-E-L-L-O, เครื่องหมายทับขวาเป็นศูนย์ ขอสมมติว่าเป็นที่อยู่ 123 เพียงแค่ครั้งแรกที่มั่นคง เพื่อให้ได้รับผลตอบแทนสตริงใน เน้นเส้นมีก็จะส่งกลับ จำนวนที่เรากล่าวว่า 123 ดังนั้นจริงๆสิ่งที่จะไปภายในของ s ที่นี่? ดีจริงๆไปสิ่ง ด้านในของ s 123 แต่ตรงไปตรงมาฉันได้รับเพียงเล็กน้อย สับสนโดยทั้งหมดของที่อยู่เหล่านี้, ทั้งหมดของตัวเลขเหล่านี้โดยพลการ 123, 124, 127 ดังนั้นขอจริงง่าย โลกนิด ๆ หน่อย ๆ เมื่อเราพูดคุยเกี่ยวกับตัวชี้ตรงไปตรงมาเพื่อ มนุษย์เราห่าใส่ใจที่ที่ สิ่งที่อยู่ในหน่วยความจำ? ที่โดยพลการอย่างสมบูรณ์ มันจะขึ้นอยู่กับวิธี แรมมากผู้ใช้ที่มี มันจะขึ้นอยู่กับเมื่อในวันที่ คุณเรียกใช้โปรแกรมบางทีและ สิ่งที่ผู้ใช้ป้อนจะช่วยให้คุณ เราอาศัยอยู่ในรายละเอียดที่ไม่สำคัญ ดังนั้นนามธรรมให้ออกไปและบอกว่า เมื่อคุณเรียกใช้บรรทัดของรหัสเช่นนี้ ถ่านดาว s ได้รับผลตอบแทน ค่าของสตริงการรับ ทำไมเราไม่แทนเพียงแค่วาดสิ่งที่เรา ให้เรียกตัวชี้ราวกับว่ามันเป็น ชี้ไปที่บางสิ่งบางอย่าง? ดังนั้นผมจึงเรียกร้องว่าขณะนี้ขึ้น มีตัวชี้เป็น - ภายใต้ฝากระโปรงมันอยู่ แต่มันก็เป็นเพียงแค่ชี้ไปที่ ไบต์แรกใน สตริงที่ถูกส่งกลับ ถ้าตอนนี้ผมกลับไปยังรหัสที่นี่ สิ่งที่เกิดขึ้นที่บรรทัดนี้ ทั้งในสายไฮไลท์ตอนนี้ ผมเห็นได้ชัดว่าการประกาศอื่น ตัวแปรที่เรียกว่า T แต่ก็ยังมีตัวชี้ดังนั้นฉันจะ การวาดเป็นในทางทฤษฎีที่แน่นอน กล่องขนาดเดียวกัน และฉันจะเรียกว่า T และตอนนี้ถ้าเรากลับไปยังรหัสอีกครั้ง เมื่อฉันเก็บอยู่ข้างในของที สิ่งที่ฉันในทางเทคนิค วางภายในของ T? ดีในทางเทคนิคนี้ 123 เป็นจำนวน ดังนั้นจริงๆที่ฉันควรจะเขียน 123 มีจำนวน แต่ขอเอามันระดับที่สูงขึ้น ทีถ้ามันเป็นเพียงตัวชี้, สัญชาตญาณเป็นเพียงที่ นั่นคือทั้งหมดที่ถูก ที่เก็บไว้ในนั้น ดังนั้นตอนนี้ในบรรทัดที่น่าสนใจล่าสุด ของรหัสเมื่อฉันจริงไปเกี่ยวกับ พะวงศูนย์อักขระ ในทีสิ่งที่เกิดขึ้น? ดีทีวงเล็บศูนย์อยู่ในขณะนี้ชี้ กับสิ่งที่ตัวละครสมมุติ? มันชี้ไปที่ H เพราะทีวงเล็บเป็นศูนย์ - จำนี้เป็นไวยากรณ์เก่า วงเล็บที ศูนย์เพียงแค่หมายความว่าถ้าเป็นสตริงทีที ศูนย์วงเล็บหมายถึงการเป็นศูนย์ ตัวละครในความแข็งแรงที่ ดังนั้นสิ่งที่จริงหมายถึง คือไปที่แถวนี้ - และใช่นี้อาจจะมี 123, นี้อาจจะมี 124 แต่มันคือทั้งหมดที่ญาติจำ เมื่อใดก็ตามที่พูดคุยเกี่ยวกับอาร์เรย์เรามี ข้อได้เปรียบของการพูดคุยเกี่ยวกับ ดัชนีญาติ และดังนั้นตอนนี้เราก็สามารถสันนิษฐานได้ว่า ที่ศูนย์ T วงเล็บคือ H ดังนั้นถ้าผมเรียก 2 บนที่มันว่าเป็นสิ่งที่ ทำจริงๆคือลงทุน ชั่วโมงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่เอช แต่แน่นอนสิ่งที่เป็น? มันชี้ไปยังสตริงสาปเดียวกัน ดังนั้นนี่คือสิ่งที่เกิดขึ้น ในรหัสนี้เพื่อให้ห่างไกล ดังนั้นแล้วสิ่งที่ความหมาย? ทำอย่างไรเราจะแก้ไขปัญหาเหล​​่านี้ปัญหาที่สอง? เราจะเปรียบเทียบกับสตริงที่เกิดขึ้นจริงได้อย่างไร กันอย่างสังหรณ์ใจว่าจะ คุณไปเกี่ยวกับการเปรียบเทียบสอง สตริงเพื่อความเท่าเทียมกันจริงหรือไม่? หมายความว่าถ้าสองคน สตริงมีค่าเท่ากัน? เห็นได้ชัดไม่ได้ว่าที่อยู่ของพวกเขา เท่ากับในหน่วยความจำเพราะที่ต่ำ รายละเอียดการปฏิบัติในระดับ ทุกตัวอักษรเดียวกัน เพื่อให้ฉันนำเสนอและให้ฉันแนะนำ หนึ่งในรุ่นของ compare.c ที่นี่จึงเปรียบเทียบ 1.C- ผมขอเสนอว่าเรายังคงได้รับ ตัวชี้ที่เรียกว่า s และร้านค้าที่อยู่ในนั้น ค่าตอบแทนของสตริงการรับ ขอทำสิ่งเดียวกันกับ T ดังนั้นไม่มีรหัสที่แตกต่างกัน ฉันจะเพิ่มเพียงเล็กน้อย ข้อผิดพลาดการตรวจสอบมากขึ้นในขณะนี้ ดังนั้นขณะนี้ที่เราเรียงลำดับของการปอกเปลือกกลับ ชั้นนี้ใน CS50 ของสิ่งที่สตริง จริงก็คือเราจะต้องมีทางทวารหนั​​กมากขึ้น เกี่ยวกับการทำให้แน่ใจว่าเราไม่ได้ละเมิด ค่าที่ไม่ถูกต้องเช่นโมฆะ ดังนั้นฉันแค่ไปตรวจสอบ ถ้าของไม่เท่ากับโมฆะและ T ไม่ โมฆะเท่ากับหมายความว่าเราตกลง รับสายไม่ได้กรูขึ้นรับ อย่างใดอย่างหนึ่งของสตริงเหล่านั้น และคุณอาจจะสามารถเดาตอนนี้สิ่งที่ ไม่ CMP STR คงจะทำอะไร? สตริงเปรียบเทียบ ดังนั้นถ้าคุณได้ในโปรแกรมจาวาก่อน นี้เป็นเหมือนวิธีการที่เท่ากับใน คลาสสตริง แต่สำหรับบรรดาของคุณที่ยังไม่ได้ โปรแกรมก่อน นี้เป็นเพียงฟังก์ชั่น C มันเกิดขึ้นมาใน ไฟล์ที่เรียกว่าสตริง นั่นคือสิ่งที่มันประกาศ และเปรียบเทียบสตริง - ที่จริงผมลืมการใช้งาน, แต่ไม่เคยทราบว่า จำได้ว่าเราสามารถทำได้ ชายคนหนึ่งลงไปผัดเปรียบเทียบ และนี้เป็นไปเพื่อนำมาขึ้น ใช้ลินุกซ์โปรแกรมเมอร์ และก็ตรงไปตรงมาเพียงเล็กน้อยคลุมเครือ แต่ฉันสามารถดูได้ที่นี่ที่, อ๋อ ฉันต้องรวมสตริง และกล่าวว่าที่นี่อยู่ภายใต้คำอธิบาย " ฟังก์ชั่นการเปรียบเทียบสตริงเปรียบเทียบ สองสาย S1 และ S2. "และ S1 S2 และเห็นได้ชัดทั้งสอง ข้อโต้แย้งผ่านระบบ ฉันไม่จำสิ่งที่ const เป็น แต่ตอนนี้แจ้งให้ทราบล่วงหน้า - และคุณอาจได้เห็นนี้แล้วในขณะที่ คุณได้ใช้หน้าผู้ชายคนนั้นถ้าคุณ มีทุกอย่าง - ว่าดาวถ่านมีความหมายเพียงแค่ กับสตริง ดังนั้นจะเปรียบเทียบสองสาย S1 และ S2 และจะส่งกลับจำนวนเต็มน้อย มากกว่าหรือเท่ากับหรือมากกว่าศูนย์ ถ้า S1 พบตามลำดับเพื่อเป็น น้อยกว่าหรือตรงหรือ จะมากกว่า S2 นั่นเป็นเพียงวิธีการที่ซับซ้อนมากที่บอก สตริงดังกล่าวจะเปรียบเทียบผลตอบแทน ศูนย์ถ้าสองสตริงเป็นอย่างสังหรณ์ใจ ตัวอักษรที่เหมือนกันสำหรับ ตัวอักษรสำหรับอักขระ มันกลับเป็นจำนวนลบถ้า s, ลำดับตามตัวอักษรที่ควร ก่อนที่จะมาที หรือผลตอบแทนเ​​ป็นจำนวนบวกถ้า s ควรจะมาหลังจากที ตามลำดับตัวอักษร ดังนั้นด้วยฟังก์ชั่นแบบนี้ได้ คุณตัวอย่างเช่นจัดเรียง ทั้งกลุ่มของคำ? ดังนั้นในรุ่นใหม่นี้ผมจะ ไปข้างหน้าและทำให้ compare1 Dot เฉือนเปรียบเทียบหนึ่ง ผมจะพิมพ์ในสวัสดีในกรณีที่ต่ำกว่าทั้งหมด ฉันจะพิมพ์ในสวัสดี ในตัวพิมพ์เล็กทั้งหมดอีกครั้ง และโชคดีที่ตอนนี้ก็รู้ตัวดีว่า ฉันพิมพ์สิ่งเดียวกัน ในขณะเดียวกันถ้าฉันพิมพ์ในสวัสดีในที่ต่ำกว่า กรณีและสวัสดีในกรณีที่ด้านบนและ เปรียบเทียบพวกเขาฉันพิมพ์ สิ่งที่แตกต่าง เพราะไม่เพียง แต่ที่อยู่เป็น ที่แตกต่างกัน แต่เรากำลังเปรียบเทียบ ตัวอักษรที่แตกต่างกันอีกครั้งและอีกครั้ง ดีขอไปและแก้ไขปัญหาหนึ่ง ปัญหาอื่น ๆ ในขณะนี้ ผมขอเปิดรุ่นหนึ่งของ สำเนาซึ่งขณะนี้อยู่ที่ ปัญหานี้ดังต่อไปนี้ และหนึ่งนี้จะไปดู เล็ก ๆ น้อย ๆ ที่ซับซ้อนมากขึ้น แต่ถ้าคุณคิดเกี่ยวกับสิ่งที่เรามีปัญหา ต้องแก้หวังว่านี้จะเป็น ล้างในเวลาเพียงสักครู่ในขณะนี้ ดังนั้นนี้บรรทัดแรก, ถ่านเริ่มต้นทีใน แง่ของคนธรรมดาคนสามารถนำเสนอ สิ่งบรรทัดนี้ที่นี่หมายถึง? Char ดาว T คือว่าทำในสิ่งที่? ดี สร้างตัวชี้ไปยังบาง จุดในหน่วยความจำ และแจ้งให้เราปรับแก้นิด ๆ หน่อย ๆ กำหนดตัวแปรที่จะเก็บ ที่อยู่ของถ่านบางส่วนในหน่วยความจำเพียง จะน้อยมากที่เหมาะสม ตกลงดังนั้นตอนนี้ทางด้านขวามือของฉันได้ ไม่เคยเห็นหนึ่งในฟังก์ชั่นเหล่านี้ ก่อนที่จะ malloc, แต่สิ่งที่อาจจะหมายความว่าอย่างไร การจัดสรรหน่วยความจำ จัดสรรหน่วยความจำ ดังนั้นมันจะเปิดออกจนถึงตอนนี้เรา ยังไม่ได้จริงๆมีวิธีที่มีประสิทธิภาพของ ขอให้ระบบปฏิบัติการ ให้ฉันหน่วยความจำบาง แต่ตอนนี้เรามีฟังก์ชันที่เรียกว่า malloc ที่ไม่ตรงกับที่ แม้ว่านี้เป็นบิตของ สิ่งที่ทำให้ไขว้เขวในขณะนี้พบว่าใน ระหว่างสองวงเล็บคือ ก็จะเป็นตัวเลข ที่ฉันได้พิมพ์ในคำถาม เครื่องหมายสามารถเป็นตัวเลข และตัวเลขที่หมายถึง ให้ฉัน 10 ไบต์ ให้ฉัน 20 ไบต์ ให้ฉัน 100 ไบต์ และ malloc จะทำอย่างดีที่สุดเพื่อ ถามระบบปฏิบัติการ - ลินุกซ์ในกรณีนี้ - เดี๋ยวก่อน 100 ไบต์ของพวกเขา ของ RAM ที่มีอยู่? ถ้าเป็นเช่นนั้นกลับไบต์เหล่านั้นให้ฉันโดย กลับมาอยู่ที่ของ ไบต์เหล่านั้นบางที? คนแรกมาก ดังนั้นที่นี่เกินไป - และนี่คือเด่น ใน C, เวลาคุณใด ๆ การจัดการที่มีที่อยู่? คุณมักจะจัดการกับ ที่อยู่ดังกล่าวเป็นครั้งแรกไม่ว่าใหญ่ ก้อนของหน่วยความจำคุณถูก ส่งกลับเพื่อที่จะพูด เพื่อให้นักดำน้ำที่นี่ ฉันพยายามที่จะจัดสรรอย่างไร ไบต์จำนวนมากว่า? ดี ความยาวสตริงของ S - ขอ ทำตัวอย่างที่เป็นรูปธรรม ถ้าเป็น Hello, H-E-L-L-O, คืออะไร ความยาวสตริงของ s เห็นได้ชัด? ดังนั้นจึงเป็นห้า แต่ที่ฉันทำบวก 1 เมื่อว่าทำไม? ฉันต้องการหกไบต์ทำไม แทนห้า? ตัวอักษรโมฆะ ฉันไม่ต้องการที่จะออกจากการทำงานนี้ออก null อักขระพิเศษ เพราะถ้าฉันทำสำเนาของสวัสดีและ เพียงแค่ทำ H-E-L-L-O แต่ผมไม่ได้ใส่ อักขระพิเศษที่เครื่องคอมพิวเตอร์ อาจไม่ได้โดยบังเอิญ, เครื่องหมายทับขวา ศูนย์มีสำหรับฉัน และดังนั้นถ้าฉันพยายามที่จะคิดออก ระยะเวลาของการคัดลอกที่ผมอาจจะคิดว่า มันยาว 20 อักขระหรือล้าน ความยาวอักขระถ้าฉันเพียงแค่ไม่เคยเกิดขึ้น ที่จะตีเป็นศูนย์เครื่องหมายทับขวา ดังนั้นเราจึงจำเป็นหกไบต์ในการจัดเก็บ H-E-L-L-O, เครื่องหมายทับขวาเป็นศูนย์ แล้วนี้เป็นเพียง จะทวารหนั​​กสุด สมมติว่าผมลืมสิ่งที่ ขนาดของถ่านคือ ที่เราต้องบอกว่ามันเป็นหนึ่งไบต์ และมักจะเป็น ในทางทฤษฎีแล้วมันอาจจะเป็นบางสิ่งบางอย่าง ที่แตกต่างกันที่แตกต่างกันบน Mac หรือ เครื่องคอมพิวเตอร์ที่แตกต่างกัน ดังนั้นมันจะเปิดออกมีดำเนินการนี​​้ เรียกว่า sizeof ว่าถ้าคุณผ่านมัน ชื่อของชนิดข้อมูลที่ชอบ - char, int หรือหรือลอย - มันจะบอกคุณแบบไดนามิกหลายวิธี ไบต์ถ่านจะขึ้นเกี่ยวกับเรื่องนี้ คอมพิวเตอร์โดยเฉพาะอย่างยิ่ง ดังนั้นนี่คือเพียงได้อย่างมีประสิทธิภาพ เช่นบอกว่า 1 ครั้งหรือ ไม่มีอะไรที่ทุกครั้ง แต่ฉันทำมันเพียงเพื่อให้ทางทวารหนั​​กสุด ที่เพียงแค่ในกรณีที่ถ่านแตกต่างกัน บนเครื่องคอมพิวเตอร์ของคุณเมื่อเทียบกับเหมืองด้วยวิธีนี้ คณิตศาสตร์เสมอไปที่จะตรวจสอบ สุดท้ายลงที่นี่ผมตรวจสอบเป็นโมฆะ ซึ่งมักจะปฏิบัติที่ดี - อีกครั้ง เวลาที่เรากำลังจัดการกับตัวชี้ใด ๆ ถ้า malloc ไม่สามารถที่จะให้ ฉันลาก่อนหก - ซึ่งเป็น ไม่ แต่เพียงในกรณีที่ - กลับหนึ่งทันที และตอนนี้ไปข้างหน้าและคัดลอก สตริงดังต่อไปนี้ และนี่คือรูปแบบที่คุ้นเคย แม้ว่าในบทบาทที่แตกต่างกัน ฉันจะไปข้างหน้าและรับสาย ความยาวของและเก็บไว้ใน n แล้วผมจะไปย้ำจาก i เท่ากับ ศูนย์และรวมถึง n, มากกว่าหรือเท่ากับ เพื่อให้แต่ละย้ำฉันใส่ ตัวอักษรที่ i ของในบอด ลักษณะของ T ดังนั้นสิ่งที่จริงที่เกิดขึ้นภายใต้ เครื่องดูดควันที่นี่? ดีถ้านี้เช่นเป็น s - และฉันได้พิมพ์ไว้ในคำว่า H-E-L-L-O และมีศูนย์เครื่องหมายทับขวาของ และอีกครั้งคือครั้งนี้ชี้ให้เห็นที่นี่ และที่นี่ตอนนี้คือ t และนี่คือการชี้ตอนนี้ สำเนาของหน่วยความจำใช่มั้ย? malloc ยังทำให้ฉันมีทั้ง หน่วยความจำอัน ผมไม่ทราบว่าต้นอะไร ในใด ๆ ของสถ​​านที่เหล่านี้ ดังนั้นฉันจะคิดว่าของเหล่านี้เป็น ทั้งกลุ่มของเครื่องหมายคำถาม แต่ทันทีที่ฉันเริ่มต้นจากศูนย์วนลูป เมื่อผ่านความยาวของ s t, วงเล็บเป็นศูนย์และ T วงเล็บ 1 - และฉันจะใส่ในตอนนี้ ค่าใช้จ่าย - T วงเล็บศูนย์และ s วงเล็บหมายถึงศูนย์ ที่ฉันจะได้รับการคัดลอก ซ้ำชั่วโมงที่นี่ E-L-L-O นอกจากนี้เพราะว่าผมทำบวก 1 ศูนย์เครื่องหมายทับขวา ดังนั้นตอนนี้ในกรณีของการเปรียบเทียบ 1.C-, ในท้ายที่สุดถ้าผมพิมพ์ออกมา โครงสร้างเงินทุนของทีเราควร เห็นว่าเป็นไม่เปลี่ยนแปลง ให้ฉันไปข้างหน้าในขณะนี้และทำเช่นนี้ เพื่อให้ copy1 copy1 Dot เฉือน ฉันจะพิมพ์ในสวัสดีใส่ และตอนนี้สังเกตเห็นเพียงสำเนา ได้รับทุน เพราะผมมีสองอย่างแท้จริง ชิ้นของหน่วยความจำ แต่น่าเสียดายที่คุณสามารถทำสวยบาง สิ่งเลวร้ายและอันตรายที่นี่สวย ผมขอดึงตัวอย่างที่นี่ตอนนี้ ที่ทำให้เรามีตัวอย่างของการไม่กี่ เส้นที่แตกต่างกัน ดังนั้นเพียงแค่สังหรณ์ใจที่นี่บรรทัดแรก ของรหัส int x ดาวเป็นประกาศ ตัวแปรที่เรียกว่า x และชนิดของข้อมูลเป็นสิ่งที่ ของตัวแปรที่ ชนิดข้อมูลของตัวแปรที่อะไร? ที่ไม่ได้น่าตื่นเต้น ชนิดข้อมูลเป็นดาว int ดังนั้นสิ่งที่หมายความว่า? x จะ เก็บที่อยู่ของ int ง่ายเหมือนที่ Y จะไปเก็บ ที่อยู่ของ int บรรทัดที่สามคืออะไร ของรหัสมีการทำ? มันจัดสรรหลายวิธี ไบต์มากที่สุด? สี่ เพราะขนาดของ int คือ สี่ทั่วไป malloc สี่ให้ ฉันกลับไปที่อยู่ของก้อน หน่วยความจำแรกของไบต์ที่มีคือ ตอนนี้เก็บไว้ใน x ตอนนี้เรากำลังย้ายเล็ก ๆ น้อย ๆ ได้อย่างรวดเร็ว สตาร์ x หมายถึงอะไร? มันหมายถึงการไปที่ที่อยู่ที่ และใส่จำนวนสิ่งมี? ใส่หมายเลข 42 มี ระดับ y หมายถึงไปว่ามีอะไรที่ y และใส่หมายเลข 13 มี แต่รอสักครู่ อยู่ใน y อะไรในขณะนี้? อะไรที่อยู่คือการจัดเก็บ y? เราไม่ทราบว่าใช่มั้ย? เราไม่เคยใช้งาน ดำเนินการที่เกี่ยวข้องกับ y ดังนั้น y เป็นประกาศในบรรทัดที่สองของ รหัสเป็นเพียงค่าขยะบางอย่างที่ยิ่งใหญ่ เครื่องหมายคำถามเพื่อที่จะพูด มันอาจจะชี้สุ่ม กับสิ่งใดในหน่วยความจำซึ่ง ไม่ดีโดยทั่วไป ดังนั้นทันทีที่เราตีบรรทัดที่มี ดาว y เท่ากับ 13, สิ่งที่ไม่ดี, บางสิ่งบางอย่างที่ไม่ดีมากเป็นเรื่องเกี่ยวกับ จะเกิดขึ้นกับบิงกี้ ดังนั้นเรามาดูสิ่งที่เกิดขึ้นจะจบลง ที่เกิดขึ้นกับบิงกี้ที่นี่ในนาทีนี้ หรือเพื่อให้มอง [เล่นภาพวิดีโอ] -เฮ้บิงกี้ ตื่นนอน ก็ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน มีอะไรที่? เรียนรู้เกี่ยวกับตัวชี้? โอ้ Goodie ดีในการเริ่มต้นผมคิดว่าเรา จะต้องมีตัวชี้คู่ OK- รหัสนี้จัดสรรสองชี้ ซึ่งสามารถชี้ไปที่จำนวนเต็ม -ตกลงกันผมเห็นสองตัวชี้ แต่พวกเขาไม่ได้ดูเหมือนจะ ชี้ไปที่ใด -ที่เหมาะสม ในขั้นต้นชี้ทำไม่ได้ ชี้ไปที่ใด สิ่งที่พวกเขาชี้ไปที่จะเรียกว่า pointees และการตั้งค่าพวกเขาขึ้นเป็น ขั้นตอนที่แยกต่างหาก -Oh, ขวา, ขวา ฉันรู้ว่า pointees จะแยก ดังนั้นคุณจึงจัดสรร pointee อย่างไร OK- ดีรหัสนี้จัดสรรจำนวนเต็มใหม่ pointee และเป็นส่วนหนึ่งชุดนี้ x ให้ชี้ไปที่มัน -เฮ้ที่มีลักษณะที่ดีขึ้น เพื่อให้มันทำอะไรบางอย่าง OK- ผมจะ dereference x ตัวชี้ในการจัดเก็บ หมายเลข 42 ลง pointee ของ สำหรับเคล็ดลับนี้ฉันจะต้องมายากลของฉัน ดินแดนแห่ง dereferencing ของคุณไม้กายสิทธิ์ของ dereferencing? เอ่อที่ดี นี้คือสิ่งที่รหัสดูเหมือนว่า ฉันจะตั้งค่าจำนวนและ - -เฮ้มอง มีมันไป ดังนั้นการทำ dereference เมื่อ x ดังนี้ ลูกศรเพื่อเข้าถึง pointee ของ ในกรณีนี้การจัดเก็บที่ 42 ในมี hey ลองใช้มันเพื่อเก็บหมายเลข 13 ผ่านตัวชี้อื่น ๆ , y OK- ฉันจะไปกว่าที่นี่เพื่อ y และ ได้รับหมายเลข 13 ตั้งค่า แล้วนำดินแดนแห่ง dereferencing และเพียงแค่ - ว้าว! -Oh, hey ที่ไม่ทำงาน กล่าวว่าบิงกี้ฉันไม่คิดว่า dereferencing y เป็นความคิดที่ดี เพราะการตั้งค่า pointee เป็นขั้นตอนที่แยกต่างหากคือ และผมไม่คิดว่าเราเคยทำมัน -อืมม จุดดี -ใช่เราจัดสรร y ชี้ แต่เราไม่เคยตั้งค่าให้ ชี้ไปที่ pointee -อืมม ช่างสังเกตมาก -เดี๋ยวก่อนคุณกำลังมองหา ดีมีบิงกี้ คุณสามารถแก้ไขได้เพื่อให้จุด y เพื่อ pointee เช่นเดียวกับ X? -Sure ฉันจะใช้ไม้กายสิทธิ์ของฉัน การกำหนดตัวชี้ ที่เป็นไปได้ที่จะเป็น ปัญหาเช่นมาก่อนหรือไม่ ไม่มี นี้ไม่ได้สัมผัส pointees มันก็มีการเปลี่ยนแปลงหนึ่งตัวชี้ไปชี้ เพื่อสิ่งเดียวกับที่อื่น -Oh, I see ตอนนี้จุด y ไปยังสถานที่เดียวกับ x ดังนั้นรอ ตอนนี้ y รับการแก้ไข มันมี pointee เพื่อให้คุณสามารถลองไม้เรียว จาก dereferencing อีกครั้ง ที่จะส่งผ่านไป 13 OK- ที่นี่จะไป -เฮ้มองว่า ตอนนี้ dereferencing ทำงานบน y และเนื่องจากตัวชี้จะร่วมกัน ที่หนึ่ง pointee พวกเขา ทั้งสองดู 13 อ้าง- แบ่งปัน อะไรก็ตาม เราจึงจะเปลี่ยนสถานที่ตอนนี้หรือไม่ -Oh มอง พวกเราไม่มีเวลา แต่ - -เพียงจำสาม กฎตัวชี้ จำนวนหนึ่งโครงสร้างพื้นฐาน คือการที่คุณมีตัวชี้ และมันชี้ไปยัง pointee แต่ตัวชี้และ pointee จะแยก และข้อผิดพลาดที่พบบ่อยคือการ ตั้งค่าตัวชี้ แต่จะ ลืมที่จะได้รับ pointee หมายเลขสอง, dereferencing ตัวชี้เริ่มต้น ที่ชี้และตามที่ ลูกศรไปยังเข้าถึง pointee ของ ในฐานะที่เราทุกคนรู้ว่านี้จะทำงานเฉพาะถ้ามี เป็น pointee ที่ได้รับกลับไป จำนวนกฎหนึ่ง หมายเลขสามตัวชี้จะใช้เวลาที่ได้รับมอบหมาย หนึ่งในตัวชี้และการเปลี่ยนแปลงมันให้ชี้ไปที่ pointee เดียวกันเป็นตัวชี้อื่น ดังนั้นหลังจากที่ได้รับมอบหมาย, ทั้งสองตัวชี้จะ ชี้ไปที่ pointee เดียวกัน บางครั้งที่เรียกว่าการแบ่งปัน และนั่นคือทั้งหมดที่มีให้มันจริงๆ Bye Bye ในขณะนี้ [เล่นวิดีโอจบ] DAVID ลัน: ดังนั้นข้อมูลเพิ่มเติมเกี่ยวกับตัวชี้ ข้อมูลเพิ่มเติมเกี่ยวกับบิงกี้สัปดาห์ถัดไป เราจะเห็นคุณในวันจันทร์