>> 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 ลัน: ดังนั้นข้อมูลเพิ่มเติมเกี่ยวกับตัวชี้ ข้อมูลเพิ่มเติมเกี่ยวกับบิงกี้สัปดาห์ถัดไป
เราจะเห็นคุณในวันจันทร์