>> [เล่นเพลง]
เดวิดเจลัน: นี้เป็นเหมือน การสัมมนาครั้งแรกในวันนี้
ตกลง.
ฝนตกมากดังนั้นออก
นี้มีแนวโน้มที่จะเกิดขึ้นในวันพุธ แต่ทุกคนมีโอกาสมากขึ้น
สำหรับคำถามในวันนี้
ดังนั้นขอเริ่มต้นจริง กับภาพยนตร์เรื่องนี้ในเวลาเพียงครู่เดียว
แต่เราจะเริ่มต้นมโหฬารเช่นเคย
>> นี่คือ CS50 และนี้ เป็นจุดสิ้นสุดของสัปดาห์ที่ 4
ดังนั้นถ้าคุณเคยดู ทีวีหรือภาพยนตร์นั้น
มีผู้เชี่ยวชาญด้านคอมพิวเตอร์และ ตำรวจหรือเอฟบีไอหรือหน่วยงานบางส่วน
พยายามที่จะจับบาง ฝ่ายตรงข้ามดีคุณได้
อาจเคยได้ยินสำนวนที่ว่า "เพิ่ม" โดยช่างที่ใด
อย่างน่าอัศจรรย์ในตู้มเพียบ ไกลออกไปเห็นอาชญากร
ตัวตนหรือหมายเลขป้ายทะเบียน แม้ในระยับของกระจก
หรือแววตาของใครบางคน
ดังนั้นแน่นอนลองมาดูที่ ฉากดังกล่าวน้อยจากฮอลลีวู้ด
[วิดีโอเล่นภาพ]
-OK ตอนนี้ขอดูดีที่คุณ
>> -จับไว้.
วิ่งกลับไปที่
>> cmd- รอนาที
ไปทางด้านขวา
>> -There แช่แข็งที่
-เต็มจอ.
-OK แช่แข็งที่
-Tighten ขึ้นอยู่กับว่าคุณจะ?
เวกเตอร์ในที่ ผู้ชายโดยล้อหลัง
ใน -Zoom ขวาที่นี่ในจุดนี้
-With อุปกรณ์ที่เหมาะสมภาพ อาจจะมีการขยายและรุนแรงขึ้น
-นั่นอะไร?
-It โปรแกรมเพิ่มประสิทธิภาพ
-Can คุณชัดเจนว่าขึ้นหรือไม่?
-I ไม่ทราบ
ลองเพิ่มความมัน
>> ส่วน -Enhance A6
>> -I ปรับปรุงรายละเอียด and-- ผมคิดว่ามี
พอที่จะเพิ่ม ปล่อยให้หน้าจอของฉัน
-I ที่เพิ่มขึ้นสะท้อนให้เห็นในสายตาของเธอ
>> และกิจกรรมที่ได้ทำงานนี้ผ่าน การเพิ่มประสิทธิภาพวิดีโอ
-Edgar คุณสามารถเพิ่มประสิทธิภาพการนี​​้หรือไม่?
>> -รอก่อน.
>> -I've รับการทำงานในการสะท้อนนี้
>> สะท้อน -Someone ของ
-Reflection
-There เป็นภาพสะท้อนของใบหน้าของชายผู้นั้นมี
สะท้อน -The
-There สะท้อนเป็น
-Zoom ในกระจก
คุณสามารถเห็นภาพสะท้อน
คุณ -Can เสริมสร้างภาพลักษณ์จากที่นี่?
คุณ -Can เสริมสร้างเขาขวาที่นี่?
คุณ -Can เพิ่มความมันได้หรือไม่
คุณสามารถเพิ่มได้หรือไม่
>> เรา -Can เพิ่มการนี​​้หรือไม่?
>> คุณ -Can เพิ่มความมันได้หรือไม่
-hold ในครั้งที่สองผมจะเสริมสร้าง
-Zoom ในประตู
-Times 10
-Zoom
-ย้ายเข้า.
-มากกว่า.
cmd- รอหยุด
-STOP
-Pause มัน
-Rotate เรา 75 องศา รอบแนวตั้งโปรด
-STOP
กลับไปส่วนหนึ่ง เกี่ยวกับประตูอีกครั้ง
>> -Got เพิ่มภาพที่สามารถบิตแมปแล้ว?
>> -Hey บางทีเราสามารถใช้ Pradeep วิธีเซนมองเข้าไปในหน้าต่าง
ซอฟแวร์นี้เป็นรัฐของศิลปะ
>> eigenvalue -The ปิด
>> -With ที่เหมาะสม การรวมกันของ algorithm--
>> -He ของการดำเนินการกำจัด ขั้นตอนวิธีการในระดับต่อไป
และฉันสามารถใช้พวกเขาให้ เพิ่มประสิทธิภาพในการถ่ายภาพนี้
>> -Lock และขยายแกน Z
>> -Enhance
-Freeze และเพิ่ม
>> [จบเล่นภาพ]
>> เดวิดเจลันสิทธิทั้งหมดดังนั้น ทุกคนเป็นจริงคำ
พวกเขากำลังเครียดกันใน วิธีการที่ไม่เหมาะสมจริง
และในความเป็นจริง CS50 และหลักสูตรการเช่นนั้น มีแนวโน้มที่จะทำลายจำนวนมากของรายการโทรทัศน์และภาพยนตร์
สำหรับคุณ.
เพราะเมื่อบรรดาผู้เชี่ยวชาญด้านคอมพิวเตอร์ กำลังแสนยานุภาพออกข้อกำหนดและบอกว่า
สิ่งแฟนซีเช่น eigenvectors และแกน Z,
และจำนวนของคนอื่น ๆ จริงคำศัพท์ทางเทคนิคเพิ่มเติม
พวกเขากำลังจริงๆเพียงแค่คบ คำมารวมกันทั้งหมดบ่อยเกินไป
เป็นที่หนึ่งในความหวังของเราก็คือว่า เป็นผลข้างเคียงของการหลักสูตร
เช่นนี้จะผู้คนมากขึ้นใน โลกจริงจะสามารถที่จะมีน้ำหนักใน
และก็เคยมีอิทธิพลต่อเล็กน้อย ที่มีคุณภาพและความถูกต้องของภาพยนตร์เหล่านั้นหรือไม่
>> ในความเป็นจริงลองมาดูที่ความเป็นจริง
ดังนั้นนี่คือภาพของพนักงาน แมรี่ซึ่งเป็นหนึ่งในการเรียนการสอนของเราเพื่อน
และคิดว่าเธอเป็น บางสิ่งบางอย่างที่น่าสงสัยว่า
และยังมีริบหรี่ของ ชิ้นส่วนของหลักฐานในสายตาของเธอบาง
หรือในการสะท้อนของแว่นตาของเธอ
ดีถ้าเราทำตรงตามที่ภาพยนตร์ นำเสนอประเด็นที่เราซูมและ "เสริมสร้าง"
นี้เป็นวิธีที่ข้อมูลมาก อยู่ในใบหน้าของแมรี่
เมื่อคุณถ่ายภาพ กับว่ามติเดิม
>> และในความเป็นจริงคุณสามารถดูจุดเหล่านี้
และเหล่านี้คือสิ่งที่เป็น เรียกว่าพิกเซล, P-I-X-E-L-S
ซึ่งเป็นเพียงตารางโดยทั่วไป ที่เป็นจุดที่ประกอบด้วยภาพ
และกลับในวันและแม้จริง วันนี้มีบางส่วนของวันนี้ทีวี LED
หรือ LCD TV, ถ้าคุณได้มี หนึ่งในห้องของคุณหรือที่บ้าน
ถ้าคุณไปถึงสุดใกล้กับมันและ โดยเฉพาะอย่างยิ่งถ้าเป็นทีวีที่ค่อนข้างเก่า
คุณอาจจะได้เห็นจุดเหล่านี้ และนั่นคือสิ่งที่เขียนภาพ
>> และมีไม่มาก ข้อมูลกว่านี้
เราสามารถ "เพิ่มความ" ในความหมายของ สิ่งที่เรียบกว่าและการเรียงลำดับของ
อนุมานชนิดของการเรียงลำดับของสิ่งที่ สีที่ควรจะเป็นต่อไปที่ตาของแมรี่
เพื่อที่จะไม่จริงดังนั้นตัวหนังสือ
แต่ถ้าฉันให้ซูมในมี เป็นคนเลวในสายตาของเธอ
เช่นเดียวกับที่มีทั้งหมด ข้อมูลที่เรามี
คุณไม่สามารถสร้าง ข้อมูลออกมาจากอะไร
มีเพียงเป็นแน่นอน จำนวนบิตมี
>> ดังนั้นในปัญหาชุดที่ 4 ที่ คุณมีโอกาสที่
ที่จะเล่นกับชนิดของโลกนี้
ในปัญหาชุดที่ 4 คุณจะสำรวจ โลกของกราฟิกและนิติ
และที่จริงการเขียนโค้ด ที่กู้คืนภาพที่หายไป
คุณจะเขียนโค้ดที่ ปรุงแต่งภาพที่มีอยู่
และในที่สุดก็เข้าใจในสิ่งที่เป็น ที่เกิดขึ้นภายใต้ฝากระโปรง
>> และก็จะเปิดออกก็จริง ไม่ได้ทั้งหมดที่มีความซับซ้อน
ตัวอย่างเช่นถ้าเราต้องการที่จะ เป็นตัวแทนที่หน้ายิ้ม
มีจุดสีดำเหล่านี้ หรือเหล่านี้จุดสีดำ
ดีเราก็สามารถเป็นตัวแทนของ พวกเขาเป็นอย่างแท้จริงบิตแมป
และถ้าคุณเคยได้ยินว่า บิตแมปการแสดงออกอาจจะ
ตอนนี้เริ่มที่จะทำให้ เล็ก ๆ น้อย ๆ ความรู้สึกมากขึ้นในปัจจุบัน
>> เรารู้อยู่แล้วว่าสิ่งที่บิต
มันเป็น 0 หรือ 1
และแผนที่เป็นสิ่งที่เพียง เช่นชิ้นส่วนของกระดาษ
ที่ช่วยให้คุณมีทิศทางและ อาจจะเป็นตารางของ x และ y ที่พิกัด
ดังนั้นนี่คือบิตแมป
มันเป็นแผนที่ของบิต โดย 1 เห็นได้ชัดคือ
จะเป็นตัวแทนของพิกเซลสีขาวและ 0 จะไปเป็นตัวแทนของพิกเซลสีดำ
แต่แน่นอนเราสามารถพลิกไปรอบ ๆ
มันไม่ได้เรื่องจริงๆดังนั้น ตราบใดที่เรากำลังที่สอดคล้องกัน
และนี่คือวิธีการใน binary-- ภายใน ของหน่วยความจำของคอมพิวเตอร์หรือแม้กระทั่งภายใน
ของไฟล์ยากของคุณ drive-- คุณสามารถจัดเก็บ
ที่ง่ายที่สุดของภาพใบหน้าที่ยิ้ม
แต่สิ่งที่เรามีความแน่นอน ขาดในภาพนี้หรือไม่?
สีใช่มั้ย?
มันเป็นขั้นตอนต่อไปที่ชัดเจนหรือ การเพิ่มประสิทธิภาพในการปรับปรุงนี้กับสี
ดังนั้นน่าเสียดายที่มีเพียงหนึ่งเดียว บิต 0 หรือ 1 เราสามารถเป็นตัวแทนของสี
นั่นอาจจะเป็นสีแดงหรือสีฟ้าหรือ สีดำหรือสีขาวหรือสีเขียวหรือสีชมพู
หรือคู่สีใด ๆ
แต่เพราะความเรียบง่ายของเราจะ เพียง แต่คิดดำและสีขาว
>> ดังนั้นสิ่งที่เราจะต้องมีเหตุผลถ้าเรา ต้องการที่จะใช้สีในภาพ?
เราจะต้องทำอย่างไร?
เช่นถ้าปัจจัย จำกัด ที่นี่ เป็นที่ที่มีหนึ่งบิตที่คุณสามารถ
เป็นตัวแทนของทั้งสองรัฐ, 0 หรือ 1 สีขาว หรือสีดำสิ่งที่คุณต้องการจะทำอย่างไร?
ผู้ชม: ข้อมูลเพิ่มเติม
เดวิดเจลัน: บิตเพิ่มเติม ใช่ข้อมูลเพิ่มเติมบิตมากขึ้น
และแน่นอนที่ว่าวิธีการ ภาพสีที่เป็นตัวแทน
แทนที่จะใช้บิตเดียว 0 หรือ 1 สำหรับแต่ละพิกเซลแต่ละจุด
คุณเพียงแค่ใช้หลาย ๆ
บางทีใช้ 8 อาจจะมากกว่าปกติ ใช้ 24 และแน่นอนปัญหาในการตั้งค่า
4 คุณจะเล่นกับไฟล์ รูปแบบที่ใช้ 24 บิตโดยทั่วไป
>> แต่ส่วนใหญ่ของคุณอาจจะ คุ้นเคยกับ JPEGs
หากคุณเคยได้รับ ภาพบนโทรศัพท์มือถือของคุณ
หรืออัปโหลดหรือเห็นบางสิ่งบางอย่าง Facebook หรือ Flickr, หมายเลขใด
เว็บไซต์ภาพตามที่คุณได้ อาจจะเห็นภาพ JPEG ก่อน
และมันจะเปิดออกนี้เป็นไฟล์ รูปแบบที่เรากำลังจะใช้ในการ PSet 4
โดยคุณจะ ต้องกู้ภาพ
ที่ผมเคยลบโดยไม่ตั้งใจจาก การ์ดหน่วยความจำเสียหายในกล้อง
ถ้าคุณจะ.
>> และปรากฎว่าถึงแม้ JPEG สวย sophisticated--
มันซับซ้อนมากขึ้น กว่าจุดสีดำและสีขาว
เราเห็นช่วงเวลาที่ผ่านมาเพราะมี อัลกอริทึมแฟนซีจริงว่า
ถูกนำมาใช้ในการบีบอัดไฟล์ JPEG ดังนั้น ที่คุณสามารถมีความสุขจริงๆ
ภาพที่มีคุณภาพ แต่การใช้ บิตค่อนข้างน้อย
และเราจะกลับมาที่ การบีบอัดก่อนที่จะยาว
ปรากฎว่าเป็นครั้งแรก สามไบต์ใน JPEG image--
ไม่ว่าสิ่งที่คุณได้ถ่ายภาพ of-- เป็นค่า 255, 216, 255
>> ในคำอื่น ๆ ถ้าคุณเพียง เห็นรูปแบบของบิตที่
แสดงที่นี่เป็นสาม ไบต์หรือ 24 บิตรวม,
มีโอกาสสูงที่คุณสามารถสรุปว่า คุณกำลังมองหาที่มันนี้ครั้งแรกที่สาม
ไบต์แบบ JPEG
และนี่คือสิ่งที่เป็นที่รู้จักกัน เป็นลายเซ็นของ JPEG ที่
จำนวนมากของรูปแบบไฟล์ ออกมีแนวโน้มที่จะเริ่มต้น
ที่มีรูปแบบบางอย่างของ 0s และ 1s, เพื่อให้ของ Windows และ Mac OS และ iOS ของคุณ,
และ Android ทราบชนิดของไฟล์พวกเขา ที่นอกเหนือไปจากไฟล์ที่เรียกว่า
ส่วนขยายที่มากของไฟล์ที่มี
ถ้าคุณได้ .jpg ที่ เบาะแสไปยังคอมพิวเตอร์เครื่องอื่น
>> ดังนั้นตอนนี้ขอดูที่นี้ เล็ก ๆ น้อย ๆ ในทางเทคนิค
เรารู้ทศนิยม ระบบ 0 ถึง 9
เรารู้ว่าไบนารี 0 และ 1
และถ้าคุณคิดว่ากลับไป PSet 0 เรามีคุณต่อสู้กับ
นิด ๆ หน่อย ๆ บางสิ่งบางอย่าง เรียกว่าเลขฐานสิบหก
ที่คุณมี 16 หลัก แทน 10 หรือแทน 2
และตัวเลขเหล่านั้นโดยการประชุม 0 ถึง 9 แล้ว
ถึง f ที่แสดงให้เห็นถึงสิ่งที่ฉ เลขทศนิยมเช่นเดียวกับสติอย่างรวดเร็ว
ตรวจสอบ?
ดังนั้น 15
และต้องแสดง 10 เพียงแค่ ลักษณะของการสั่งซื้อที่ฉันได้รับ
มันเป็นเพียงการประชุมโดยพลการ แต่มันค่อนข้างมาตรฐาน
>> ดังนั้นถ้าเรามองไปที่รูปแบบนี้ สาม bytes-- ขอ
เพียงแค่เริ่มที่จะมองมันใน ลักษณะที่สอดคล้องกับวิธีการ
นักวิทยาศาสตร์คอมพิวเตอร์ทั่วไป ดูและคิดเกี่ยวกับไฟล์
แน่นอนคุณสามารถคิดเกี่ยวกับ ไฟล์ใน 0s และ 1s และทศนิยม
แต่ในความเป็นจริงเรามีแนวโน้มที่จะใช้เลขฐานสอง หรือมากกว่าปกติ hexadecimal--
กลับมาจาก PSet 0
เพื่อให้ฉันเสนอว่า 255, 216, และ 255 เป็นเพียงรูปแบบเหล่านี้ของ 0s และ 1s
และคุณสามารถตรวจสอบนี้หากคุณ ต้องการที่จะทำคณิตศาสตร์จากสัปดาห์ที่ 0
แต่สำหรับตอนนี้เพียง แต่คิด ว่านี่คือที่ถูกต้องแน่นอน
ผมเคยเขียนใหม่เพียงสามทศนิยม ตัวเลขเป็นสามค่าไบนารี
ตอนนี้สิ่งที่ผมจะทำคือ เพียงแค่เพิ่มพื้นที่สีขาว
เพียงเพื่อประโยชน์ของการอ่าน
และแจ้งให้ทราบล่วงหน้าฉันแค่ไป สิ่งที่จะย้ายออกจากกัน
ดังนั้นก่อนหลังก่อนหลัง
ฉันทำอะไรที่น่าสนใจอื่น ๆ มากกว่าเพียงแค่การแพร่กระจายสิ่งที่ออกเพื่อให้
แจ้งให้ทราบว่าชุดของแต่ละแปด บิตคือตอนนี้สองชุดของสี่บิต
นี้จะเป็นประโยชน์เพราะเลขฐานสิบหก เป็นแฟชั่นโดยเฉพาะอย่างยิ่ง
เพราะแต่ละหลักเลขฐานสิบหก 0 ถึง ฉหรือมากขึ้นโดยเฉพาะ 0 ถึง 15
สามารถแสดง ตรงกับสี่บิต
ในคำอื่น ๆ ในเลขฐานสิบหกถ้​​าคุณ ต้องการที่จะเป็นตัวแทนของ 0 ก็แค่ 0000
สี่ศูนย์
และถ้าคุณต้องการที่จะเป็นตัวแทนที่ 15 มันเป็น 1111 ซึ่งเป็นสี่ชิ้น
และถ้าคุณทำคณิตศาสตร์ ถ้านี้เป็นสถานที่ที่คน,
นี้เป็นสถานที่ 16s, ที่จะให้ you--
ค่อนข้างที่จะ to-- ขออภัยในไบนารี
ที่จะให้คุณ 15 สถานที่ที่คน, สถานที่เจ้าตัวสี่และแปดสถานที่
เพื่อให้ฉันเสนอว่า ชุดของสี่บิตด้านซ้าย
คือสิ่งที่เรากำลังจะเรียกฉ
มันเป็นตัวเลขที่ใหญ่ที่สุดที่คุณ สามารถเป็นตัวแทนที่มีสี่บิต
และเรารู้อยู่แล้วว่าจากเลขฐานสิบหก ฉเป็นหลักใหญ่ที่สุดในเลขฐานสิบหก
เรามีฉอื่นมี อีกสองคนที่นั่น
และสำหรับตอนนี้ใช้เวลาเพียงแค่ความเชื่อ ที่ฉันได้ทำถูกต้องทางคณิตศาสตร์
และที่ซีกซ้าย ของบิตเหล่านั้น 1101
เป็นสิ่งเดียวกับ d ในเลขฐานสิบหก
และพระหัตถ์ขวา 1000 เพียง 8
>> และที่เดียวเพื่อดูใช่มั้ย?
8 represents-- ที่ถูกต้อง ภายใต้สถานที่ที่แปด
ดังนั้นเราจึงมีหนึ่งในคอลัมน์แปด และไม่มีอะไรในสี่ของเจ้าตัวหรือคน
ดังนั้นตอนนี้มากขึ้นตามอัตภาพมนุษย์มีแนวโน้มที่ ที่จะเขียนตัวเลขฐานสิบหกเช่นนี้
คุณเพียงแค่ squish พวกเขาร่วมกัน และจากนั้นคุณนำหน้าพวกเขาด้วย 0x
มันหมายถึงอะไรอื่นนอกเหนือจาก เบาะแสภาพเพื่อ human--
มาที่นี่เพราะ value-- เลขฐานสิบหก มันอาจจะไม่เป็นอย่างอื่นจะเห็นได้ชัด
>> ซึ่งก็คือการพูดว่าในท้ายที่สุดว่า รูปแบบของศูนย์และคน,
หรือรูปแบบของเลขฐานสิบหก ตัวเลขเท่าที่คุณ
จะเริ่มต้นมองหา ในปัญหาชุด 4 เป็น this--
และชุดปัญหาที่ 4 สเปคจะเดิน คุณผ่านทางนี้ใน detail-- มากขึ้น
แต่ตระหนักถึงความเป็นจัดเรียงของความลับเป็น นี้อาจจะดูได้อย่างรวดเร็วก่อน
คุณกำลังจะเริ่มเห็นนี้มาก
และในความเป็นจริงแม้ใน GDB ที่ บั๊กที่เราแนะนำในวันจันทร์
และแดนแนะนำใน PSet 3 เป็นไป มักจะแสดงค่าเลขฐานสิบหก
เพียงเพราะพวกเขามีแนวโน้มที่จะมีมากขึ้น กว่าเดิมทศนิยมหรือเลขฐานสอง
ในโลกของคอมพิวเตอร์
ตอนนี้ขอวางนี้ในบริบท
หลายท่านอาจจะจำนี้ ภาพที่นี่ซึ่งมาจากอะไร?
Vista ดังนั้นแม้ก่อนหน้านี้กว่า ที่ใช้ Windows XP ได้เปิดตัวนี้
ดังนั้นนี้เป็นภูมิทัศน์ที่สวยงาม
และในความเป็นจริงถ้าคุณกระตุ้นรอบ online-- ฉันคิดว่ามันเป็นบทความวิกิพีเดีย
ประเด็นที่น่าอัศจรรย์ใจมากคนที่ออกไปข้างนอก พบสถานที่นี้ในโลกที่การตั้งค่า
กล้องของเขาหรือเธอใน แม่นยำกิจกรรมดังนั้นเล็กน้อยที่เหมาะสม
และในวันนี้มีลักษณะ like-- แต่ มันเป็นเหมือนการตั้งค่าเดียวกัน
ภาพนี้ แต่เป็นในแฟ้ม รูปแบบที่เรียกว่าบิตแมปขมพี
และเรากำลังจะใช้เวลาสุด อย่างรวดเร็วในสิ่งที่หมายถึง
>> แต่บิตแมปเป็นเพียงวิธีที่แตกต่างกันของ ที่เป็นตัวแทนของภาพยังคงใช้พิกเซล
ใน 0s และ 1s ที่สุด
แต่อย่างรวดเร็วก็มี ลายเซ็นน่าสนใจมากขึ้น
ที่จุดเริ่มต้นของไฟล์
มันไม่ใช่แค่สาม ไบต์ค่อนข้างมี
ทั้งกลุ่มของรูปแบบของไบต์ ที่มีความหมายที่กำหนดไว้
ยกตัวอย่างเช่นบางแห่งใน ไม่กี่ไบต์แรกของภาพบิตแมป
เป็นไปได้ขนาดของ ภาพความกว้างของภาพที่
ความสูงของภาพเพื่อให้ เมตาดาต้าที่มีประโยชน์ถ้าคุณจะ
ข้อมูลที่เป็นประโยชน์ที่ Photoshop หรือกราฟิกใด ๆ โปรแกรมที่คุณกำลังใช้
จริงๆแล้วอาจจะเกี่ยวกับการดูแล
>> เพื่อให้มากขึ้นเกี่ยวกับเรื่องนี้ใน ปัญหาชุดที่ 4 แต่ตอนนี้
เป็นเพียงที่จะบอกว่า ในตอนท้ายของวัน
ทุกรูปแบบไฟล์ที่คุณได้รับการใช้ สำหรับ years-- ไฟล์ Microsoft Word,
ไฟล์หมายเลขไฟล์ Excel, จำนวนของรูปแบบไฟล์ใด ๆ
ที่อาจจะมีบางส่วน ไฟล์นามสกุลที่รู้จักกัน
เป็นเพียง 0s และ 1s ใต้ฝากระโปรง
และมนุษย์ได้ตัดสินใจ สิ่งที่การประชุมที่มี
สิ่งที่รูปแบบของการ 0s และ 1s เป็นตัวแทน โปรแกรม Word ไฟล์เมื่อเทียบกับแฟ้ม Excel
เมื่อเทียบกับจำนวนของรูปแบบไฟล์อื่น ๆ
ดังนั้นใน PSet 4 คุณจะมี โอกาสที่จะเล่นกับ
>> แต่สิ่งที่ไม่ได้หมายถึงการที่จะมีโครงสร้าง
นี้เป็นจริงทำต่อดีในขณะนี้ เป็น C ซึ่งมีเพียงไม่กี่
คุณลักษณะเพิ่มเติมที่ เราไม่ได้มองที่ยัง
มันเป็นภาษาที่สวยขนาดเล็กและเป็นหนึ่งใน คุณสมบัติที่ดีเกี่ยวกับ C เป็น struct
ตัวอย่างเช่นถ้าคุณ อยากจะขอ represent--
ว่าคุณต้องการที่จะมีตัวแปรที่ แสดงให้เห็นถึงนักศึกษาในโปรแกรมบาง
บางทีคุณอาจจะเขียนหลักสูตร โปรแกรมการลงทะเบียนหรือช้อปปิ้งหลัก
เครื่องมือหรือสิ่งที่ต้องการ
อะไรคือชิ้นส่วนของข้อมูลที่เกี่ยวข้อง นักเรียนที่มาถึงใจหรือไม่?
เช่นเดียวกับนักเรียนเป็น เป็นตัวแทนกับสิ่งที่มีค่า?
ใช่?
คุณมีชื่อเป็นนักเรียน
อะไรที่ไม่เป็นนักเรียนปกติได้?
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: ดังนั้นขอโทษ
>> ผู้ชม: อายุ
>> เดวิดเจลัน: การหรืออายุ วันเกิดเท่ากันครับ
สิ่งอื่นใด
ผู้ชม: หมายเลขรหัส?
เดวิดเจลัน: ดังนั้นจำนวน ID อาจจะ หมายเลขโทรศัพท์อาจหอพักหรือบ้าน
หรือวิทยาลัยหรือสิ่งที่ต้องการ
หมายเลขใด ๆ ของชิ้นส่วนของข้อมูลที่ คุณอาจจะต้องอยู่ในรายชื่อผู้ติดต่อของคุณ
เป็นสิ่งที่อาจกำหนดนักเรียน
ดังนั้นถ้าเราต้องการที่จะทำเช่นนี้ในรหัส เราอาจจะทำสิ่งที่ง่ายเช่นนี้
เราอาจจะมีโปรแกรมเพื่อให้ ได้สมมติว่า int main (void)
และถ้าผมต้องการที่จะเป็นตัวแทน นักเรียนผมอาจจะมีเช่น
สตริงเรียกชื่อนักเรียนที่ สตริงที่เรียกว่าหอพักสำหรับนักศึกษาที่
บางทีเรียกว่า int ID สำหรับนักเรียนที่
และเนื่องจากผมใช้สตริงผม จำเป็นที่จะต้องกลับไปและนำขึ้น CS50.h.
บางทีฉันจะต้อง stdio.h
เพื่อให้ฉันทำ preemptively เหล่านั้นและฉัน จะเรียก student.c นี้ได้ในขณะนี้
และบันทึกนี้
>> และตอนนี้ฉันสามารถทำอะไรบางอย่าง กับตัวแปรเหล่านี้
และเรากำลังจะเขียน ที่เป็นความคิดเห็นในรหัสหลอก,
เพราะมันไม่น่าสนใจ สิ่งที่เราทำตอนนี้
ตกลงดังนั้นนี้เป็นโปรแกรมที่ อย่างใดเก็บนักเรียน
อะไรที่ฉันต้องการจะทำอย่างไรถ้าฉัน ต้องการเก็บนักเรียนสองคน?
ดังนั้นสัญชาตญาณแรกของฉันจะ จะเป็นสิ่งที่ถูกต้อง, รอสักครู่
ถ้ามีเหตุผลที่นักเรียนคนอื่นทำไม่ได้ฉัน เพียงแค่ทำชื่อสตริง 2 หอพักสตริง 2
int id2
และเราได้ทำไปแล้ว ลงที่ถนนก่อนหน้านี้
และสิ่งที่เป็นวิธีการแก้ปัญหาของเรากับสิ่งที่ดูเหมือนว่า จะเป็นชนิดของการวางสำเนา hackish
งานที่นี่?
ผู้ชม: อาร์เรย์
เดวิดเจลัน: ใช่ เราสามารถใช้อาร์เรย์
สิทธินี้ได้อย่างรวดเร็ว กลายเป็นเทอะทะ
คุณมีการเรียงลำดับของพล เริ่มต้นการตั้งชื่อตัวแปรทั้งหมดนี้
และคุณมนุษย์ที่จะต้องเก็บ ติดตามที่ตกลง name2 สอดคล้อง
กับ dorm2 สอดคล้องกับ id2
มันก็จะกลายเป็นระเบียบ
ดังนั้นจึงเป็นมากขึ้น, จำจากไม่กี่สัปดาห์ที่ผ่านมา
เพียงแค่มีการเรียกชื่อสตริง และอาจจะทำให้เราสามของคนเหล่านั้น
และแล้วบางทีเรามี หอพักสตริงและมีความ
สามเหล่านั้นหรือที่มีอย่างต่อเนื่อง int รหัสและมีสามของคนเหล่านั้น
แต่ตอนนี้รู้สึกแม้กระทั่ง เล็ก ๆ น้อย ๆ เลอะเทอะขวา
เรากำลังพูดถึงนักเรียนและยัง ฉันจริงๆที่อยู่อาศัยในระดับต่ำ
รายละเอียดการปฏิบัติ
นักเรียนเป็นชื่อและที่หอพักและบัตรประจำตัว
>> ทำไมฉันไม่สามารถเพียงแค่ประกาศตัวแปร เรียกว่านักเรียนและเรียกมัน
และถ้าผมต้องการที่นักเรียนคนอื่น, ทำไมฉันจึงไม่เพียงเรียกว่าเสื้อ
หรือถ้าเราต้องการทั้งกลุ่ม นักเรียนทำไมฉันไม่เพียง
บอกว่าผมได้เรียนทั้ง นักเรียนและก็สามของพวกเขา
ในคำอื่น ๆ เหตุผลที่ผมไม่สามารถมา ขึ้นกับชนิดข้อมูลของตัวเองที่เรียกว่า
นักศึกษาที่อยู่ภายในซึ่งเป็น ชื่อคือประชาชนเป็นหอพัก
คือจำนวนของสาขาอื่น ๆ
และปรากฎคุณ สามารถทำตรงนั้น
>> ดังนั้น C มีคุณสมบัติที่เรียกว่า struct
นั่นคือคุณลักษณะภาษาที่ ช่วยให้เราสามารถที่จะทำตรงนี้
ฉันจะไปข้างหน้า และเปิด structs.h
ที่เรากำลังจะได้เห็น ต่อไปนี้ความหมายของการเป็นนักศึกษา
มันจะเปิดออก - และหนึ่งนี้จะยิ่ง ง่ายกว่าหนึ่งที่เกี่ยวข้องกับ ID ที่
เมื่อครู่นี้
ถ้าคุณต้องการที่จะเกิดขึ้นกับ ชนิดข้อมูลโฮมเมดของคุณ
และนอกเหนือจากการ int และถ่านและ ลอยและอื่น ๆ ทั้งหมดเหล่านี้ที่มีอยู่
คุณสามารถทำได้โดยแท้จริง เขียน typedef struct,
แล้วบางวงเล็บปีกกา, ด้านในของที่คุณ
รายการตัวแปรที่คุณต้องการ เชื่อมโยงกับข้อมูลที่กำหนดเองใหม่นี้
พิมพ์เช่นชื่อและที่หอพักที่ และหลังจากนั้นวงเล็บปีกกา
คุณจะให้ชื่อให้กับชนิดข้อมูลใหม่
ดังนั้นสำหรับตัวอย่างเช่นนักศึกษา
>> และสิ่งที่ดีเกี่ยวกับเรื่องนี้ในขณะนี้ก็คือว่า ถ้าเราดูที่รหัสที่สอดคล้องกัน
การประชุมครั้งแรก ของทั้งหมดคือการใส่นี้
ในไฟล์ที่เรียกว่าบางสิ่งบางอย่างชั่วโมงจุด ไฟล์ส่วนหัวซึ่งเราไม่ได้
เริ่มใช้ตัวเองมากเกินไป
แต่เรากำลังจะเริ่มต้น ใช้ไม่น้อยในขณะนี้
และสิ่งที่เราสามารถทำอะไรกับเรื่องนี้ ท้ายที่สุดในไม่กี่บรรทัดนี้ของรหัส
มีการประกาศว่าที่ ชนิดข้อมูลนักเรียน
และตอนนี้เรามาใช้
>> ฉันจะไปลงในขณะนี้ ไฟล์ที่เรียกว่า structs1.c
และให้ดูที่หนึ่ง ลักษณะไม่กี่ที่นี่
ดังนั้นสิ่งที่เป็นที่นี่ คุ้นเคยเป็นส่วนใหญ่และเราจะ
กลับมาสิ่งที่ไม่ ที่คุ้นเคยในรอสักครู่
หลักสูตรนี้จะรวมถึงตัวฉันเอง ไฟล์ส่วนหัวซึ่งเป็นของใหม่เช่นกัน
ยกเว้น PSet 3 ที่ การเรียกคืนเรามี helpers.h
ดังนั้นคุณอาจจำ #include helpers.h
>> ทำไม แต่ฉันกำลังใช้คำพูด แทนวงเล็บมุม?
เมื่อฉันจะเลือกระหว่างพวกเขา?
เกือบตลอดเวลาฉันดูเหมือน ที่จะใช้วงเล็บมุม
แล้วทั้งหมดในทันทีใน สายหกผมใช้คำพูดสอง
ทำไมว่าอาจจะมี?
ใช่?
>> ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: นั่นเป็นจริงสิ่งที่?
ผู้ชม: นั่นคือใน IDE ของคุณ
เดวิดเจลัน: ใช่ ที่อยู่ใน IDE ของฉันจริง
และให้ไม่อาศัยอยู่ใน IDE เพราะ นั่นเป็นเพียงเครื่องมือที่ผมใช้
ที่อยู่ในปัจจุบันของฉัน ไดเรกทอรีเฉพาะ
structs.h ดังนั้นไฟล์ของตัวเอง ไม่ได้ติดตั้งใน IDE,
ในระบบปฏิบัติการของตัวเอง ค่อนข้างจะเป็นในไดเรกทอรีปัจจุบันของฉัน
ดังนั้นการประชุมคือถ้าคุณต้องการ ที่จะรวมไฟล์ส่วนหัวของคุณเอง
คุณเพียงแค่ใช้คำพูดสอง
>> เราทำอะไรเรียกสิ่งนี้ใน สายที่ 8 โดยทั่วไปพูด?
นี่คืออะไร?
บางสิ่งบางอย่าง #define
นี้เป็นค่าคงที่ใช่มั้ย?
หากคุณต้องการที่จะมี ค่าในโปรแกรมของคุณ
ที่คุณใช้ทั้งหมด พวงครั้งก็
การประชุมที่ดีที่จะเป็นปัจจัยมันออก ประกาศที่มีสัญลักษณ์กัญชา
กำหนดแล้วโดยการประชุมในทุก ตัวพิมพ์ใหญ่ word-- แม้ว่ามันจะไม่ได้
จำเป็นอย่างเคร่งครัด แต่ มันเป็นเรื่องการประชุมของมนุษย์
จะใช้ประโยชน์จากค่าคงที่ เพื่อให้พวกเขากระโดดออก
ที่คุณ visually-- พื้นที่และ แล้วค่าที่คุณต้องการที่จะเป็น
เทียบเท่ากับชื่อคงที่
อัฒภาคไม่มี แต่คุณก็ ตามรูปแบบที่มี
>> ดังนั้นสิ่งที่ฉันทำในรหัสจริง
ดังนั้นลองมาดูที่ โปรแกรมหลักที่นี่
ในบรรทัดที่ 12 เพราะผม ได้รวม structs.h,
ตอนนี้ผมมีที่น่าอัศจรรย์ของฉัน กำจัดชนิดข้อมูลใหม่
ผมไม่เพียงแค่มีการเข้าถึง int, และถ่านและลอยและสตริง
และสีฟ้าและอื่น ๆ
ตอนนี้ผมมีการเข้าถึง ชนิดข้อมูลนักเรียน
ดังนั้นในบรรทัดที่ 12 ผมรวมสอง ideas-- หนึ่งชนิดข้อมูลที่กำหนดเองและสอง
โดยใช้อาร์เรย์
ดังนั้นถ้าในโปรแกรมนี้ ฉันต้องการที่จะสนับสนุนจริง
สามนักเรียนที่แตกต่างกัน ในโปรแกรมของฉันฉัน
ก็สามารถบอกให้ฉันตัวแปร เรียกว่านักเรียนแต่ละที่
เป็นนักเรียนประเภทซึ่ง เป็นชนิดข้อมูลที่กำหนดเองของฉัน
และโดยเฉพาะอย่างยิ่งให้ฉัน สามของผู้ที่อยู่ในอาเรย์ของฉัน
>> ดังนั้นตอนนี้สิ่งที่เราจะทำในโปรแกรมนี้หรือไม่?
นี่เป็นเพียงสำหรับวง iterating 0-3 เพราะนั่นคือ
สิ่งที่มีค่าของนักเรียนคือ
ฉันแค่แจ้งผู้ใช้ ให้ฉันชื่อของนักเรียน
และแล้วในสายที่ 17 เรา มีสายส่วนใหญ่คุ้นเคย
เรามีเพื่อนเก่าของเรา getString ด้านขวา
และสิ่งที่ชิ้นส่วนของไวยากรณ์ ใหม่เห็นได้ชัด
ถ้าคุณไม่เคยตั้งโปรแกรมใน C ก่อน และไม่เคยใช้ structs หรือไม่
ใช่?
>> ผู้ชม: .name
เดวิดเจลัน: .name
แต่นี้ไม่ได้มากเกินไปของอธิกสุรทิน เพราะตอนนี้ผมยึดนักเรียน
ช่วยให้คุณมีนักศึกษาที่ i
และถ้าคุณต้องการที่จะดำน้ำ ภายในของโครงสร้างนั้น
คุณเพียงแค่ใช้เป็นระยะเวลาเดียวและ แล้วชื่อของตัวแปรภายใน
หรือทรัพย์สินที่อยู่ภายในว่า คุณต้องการที่จะได้รับการเข้าถึง
ในทำนองเดียวกันแล้วถ้าฉันแล้วแจ้งให้ ผู้ใช้ให้ฉันหอพักนักเรียน
คุณสามารถจัดเก็บในทำนองเดียวกันว่า สตริงในตัวแปรหอพักภายใน
โครงสร้างของนักเรียนที่
>> และตอนนี้สิ่งได้รับแฟนซีเล็ก ๆ น้อย ๆ
และนี่จะไปดู ที่อาจจะมากค่อนข้างเร็ว ๆ นี้
แต่คุณจะเห็นนี้ไกลมากขึ้นใน PSet 4 เพื่อให้เพียงเหลือบมันในขณะนี้
ปรากฎว่าในสาย 23 ผ่าน 38 สิ่งที่คุณคิดว่าฉันอาจจะทำอะไร?
ผมได้ลบความคิดเห็น สำหรับในวันนี้ แต่รุ่น
รหัสออนไลน์สำหรับ มีการอ้างอิงความคิดเห็นทั้งหมด
ฉันจะทำอะไรดูเหมือนจะทำ?
>> ผู้ชม: บันทึกไฟล์ที่มีทั้งหมด ข้อมูลที่ผู้ใช้ป้อน
>> เดวิดเจลัน: ใช่ ตรงนี้เป็นวิธีการใหม่
ที่เราเห็นสอง คุณลักษณะของ C อีก
โดยผมสามารถสร้างไฟล์ของตัวเอง
ป่านนี้เกือบทุกโปรแกรม ที่คุณเขียนเป็นไร้สัญชาติ
เร็วที่สุดเท่าที่จะทำทำงานที่มัน
มีหน่วยความจำไม่ได้หรือความทรงจำของมัน
มีไฟล์ที่บันทึกไว้ไม่ได้
แต่ถ้าคุณไม่ต้องการที่จะ บันทึกการป้อนข้อมูลที่มี
ที่เกิดขึ้นเหมือนในเกมหรือโปรแกรมที่ เช่นนี้ก็จะเปิดออกที่เราสามารถทำได้
และคุณจะเห็นมากขึ้น ใน PSet ที่ 4 และในส่วนที่
แต่ตอนนี้สาย 23 หลัก สร้างไฟล์ที่เรียกว่า students.csv
และคุณอาจจะได้เห็นแบบนี้มาก่อน
แม้ว่าคุณจะไม่เคยศึกษา CS ก่อน CSV เป็นตัวแปรคั่นด้วยเครื่องหมายจุลภาค
มันเหมือนเป็นคนที่ดีมากของ รุ่นของแฟ้ม Excel
ซึ่งหมายความว่ามันสามารถเปิด ใน Excel และหมายเลขแอปเปิ้ล
และมีแถวและคอลัมน์
แต่มันไม่ได้เป็นเจ้าของ รูปแบบเช่น Microsoft หรือแอปเปิ้ล
มันเป็นเพียงเครื่องหมายจุลภาคแยก ค่าที่เราจะได้เห็นในช่วงเวลาที่
>> และใช้เวลาเพียงแค่คาดเดา
ในบรรทัดที่ 23 ที่มาก สิ้นสุดอาร์กิวเมนต์ที่สองของฉัน
ฟังก์ชั่นใหม่นี้เรียกว่า ฉเปิดให้บริการสำหรับเปิดไฟล์น้ำหนัก
สิ่งที่อาจหมายถึงน้ำหนัก?
ใช่?
>> ผู้ชม: มันช่วยให้คุณสามารถเขียนไฟล์หรือไม่
>> เดวิดเจลัน: มันช่วยให้ คุณเขียนไปยังแฟ้ม
ดังนั้นจึงมีคู่ของสายพันธุ์ ที่เราสามารถเชื่อมต่อที่นี่
แต่ถ้าคุณเพียงต้องการที่จะอ่าน ไฟล์ที่มองไปที่มัน
และอ่านมันในหน่วยความจำคุณ เพียงแค่ใช้คำพูดที่นำมาอ้าง "r"
หากคุณต้องการที่จะเขียนถึง ไฟล์ที่คุณใช้คำพูดที่นำมาอ้าง "W"
นอกจากนี้ยังมีผนวกและ คู่ของสิ่งอื่น ๆ
ถ้าคุณต้องการที่จะแก้ไขไฟล์ที่มีอยู่
ตอนนี้เรากำลังจะเก็บที่เห็นนี้ สิ่งที่แล้วเราจะกลับมาที่เส้น 24
โมฆะก็จะเปิดออกเป็น ค่าพิเศษที่
สามารถส่งกลับโดยฟังก์ชั่นบางอย่าง ถ้าสิ่งที่ได้ไป wrong--
ถ้าไฟล์ไม่อยู่ ถ้าคุณได้ทำงานออกจากหน่วยความจำ
หรือพวงของข้อผิดพลาดอื่น ๆ
แต่ตอนนี้ขอเพียงแค่คิดว่านี้ เป็นเพียงการตรวจสอบข้อผิดพลาดแบบเดิม
ที่นี่ในสายที่ 26 ฉันทำซ้ำ 0-3 มากกว่านักเรียนทุกคนของฉัน
และนี่คือชนิดของการจัดเรียง ของฟังก์ชั่นใหม่ fprintf,
แต่เพียงแค่ใช้เวลาคาดเดา
หาก printf เป็นเพียงการพิมพ์ สตริงรูปแบบ
สิ่งที่ไม่ fprintf อาจหมายความว่าอย่างไร
ผู้ชม: พิมพ์ไปยังแฟ้ม
เดวิดเจลัน: พิมพ์ สตริงรูปแบบไฟล์
นั่นคือสิ่งที่เพิ่มเติม วิธีฉไฟล์
และอาร์กิวเมนต์แรกใหม่จะต้องมี ตัวแปรที่แสดงถึงไฟล์ของคุณ
จากนั้นเราก็มีรูปแบบ สตริงเช่นเดียวกับ printf
และแม้ว่านี้ ไวยากรณ์ใหม่เพียงแค่นี้
หมายถึงการเชื่อมต่อในนามของนักเรียน plug-in หอพักนักศึกษาแล้ว
กับ fclose ปิดแฟ้ม
และแล้ว lastly-- นี้ใหม่ และเราจะกลับมาที่นี้
ก่อนที่จะ long-- ฉันพ้น นักเรียนด้วยเหตุผล
ที่เกิดขึ้นข้างต้นมีขึ้น
แต่เราจะกลับมา การว่าก่อน long--
นั่นเป็นเพราะวิธีการที่เป็น GetString จริงการทำงานภายใต้ฝากระโปรง
>> ดังนั้นลองมาดูอย่างรวดเร็วที่นี่
ถ้าผมพิมพ์คำสั่ง ls ในไดเรกทอรีของฉัน สังเกตเห็นว่าฉันทำไม่ได้
มีไฟล์ที่เรียกว่า students.csv, เพียงแค่ไม่ได้มีไม่ได้อยู่
ดังนั้นถ้าตอนนี้ผมรวบรวมโปรแกรมนี้ ทำให้ structs-1 / structs-1
และฉันจะไปข้างหน้าและพิมพ์ใน Andi ที่อาศัยอยู่ในเบิร์กลีย์ที่มหาวิทยาลัยเยล
เรากำลังจะมีร็อบที่ เธเออร์อาศัยอยู่ในวันนี้
และให้เกิดขึ้นกับที่ คือผมคิดว่ามาเรียอยู่ในท้อง
ถ้าผมจำได้อย่างถูกต้อง
>> ดังนั้นดูเหมือนจะไม่มีอะไรเกิดขึ้น
แต่ถ้าผมพิมพ์คำสั่ง ls ตอนนี้ มี students.csv
ลองไปข้างหน้าและเปิด students.csv
นี่คืออีกมาก รูปแบบไฟล์ที่มีน้ำหนักเบา
แต่ฉันเพียงแค่นำมาใช้การประชุม ที่ฉันมีสองแถวและคอลัมน์ที่นี่
คอลัมน์แรกคือ ผู้คนชื่อแรก
คอลัมน์ที่สองเป็นนักเรียน หอพักหรือวิทยาลัยหรือบ้านหรือ whatnot
และตอนนี้ฉันได้บันทึกไว้นี้ ถาวรในแฟ้ม
>> ดังนั้นจึงไม่ได้ทั้งหมดที่น่าสนใจที่
แต่นี่เป็นเพียงก้าวหินในขณะนี้ ความสามารถในการยังคงมีข้อมูล
อย่างถาวร
ดังนั้นเรามาดูตอนนี้สิ่งที่เราสามารถทำได้มากขึ้น ทำอย่างไรกับเหล่านี้และคุณสมบัติอื่น ๆ
แต่ก่อนคำถามใด ๆ ?
นั่นเป็นจำนวนมากและที่เป็นไปอย่างรวดเร็ว
แต่คุณจะเห็นจำนวนมาก ใน PSet 4 เช่นกัน
ใช่?
>> ผู้ชม: มีวิธีการ ยังคงเพิ่มชื่อไฟล์ที่?
>> เดวิดเจลัน: เป็นคำถามที่ดี
มีวิธีที่จะดำเนินการต่อ การเพิ่มชื่อไฟล์ที่?
ใช่
และในความเป็นจริงถ้าคุณท้าย ขึ้นอีกครั้งเปิดแฟ้ม
คุณจะใช้คำพูด ได้นำมาอ้าง "เป็น" สำหรับผนวก
ซึ่งก็จะเพิ่มบรรทัดใหม่ บรรทัดใหม่อีกครั้งและอีกครั้งว่า
คำถามที่ดี.
คำถามอื่น ๆ ?
ใช่?
ผู้ชม: ถ้าคุณวิ่ง โปรแกรมอีกครั้งในขณะนี้
มันจะเก็บเพิ่มชื่อไป ยื่นหรือมันจะเปิดไฟล์ใหม่?
>> DAVID ลันเจ: อาคำถามที่ดี
ถ้าคุณวิ่งโปรแกรมอีกครั้งทางด้านขวา ตอนนี้อาจจะพิมพ์ในชื่อใหม่
มันจะเพิ่มไปยังแฟ้ม หรือเขียนทับไฟล์?
หลังเพราะฉัน ไม่ได้ใช้โหมดผนวก
และเพราะฉันแค่สุ่มสี่สุ่มห้า เปิดไฟล์สำหรับการเขียน
มันเป็นเพียงแค่จะไปเขียนทับไฟล์
ดังนั้นผมจึงแน่นอนจะต้องทำคือการผนวก ถ้าผมต้องการที่จะมีในระยะยาว
ฐานข้อมูล
>> ตอนนี้ CSV เป็นประโยชน์อย่างตรงไปตรงมาแม้ สำหรับเช่นถ้าคุณ writing--
และในที่สุดเราก็จะได้เห็นนี้ ต่อไปในภาคการศึกษาเมื่อ
เราใช้ CSVs เพื่อวัตถุประสงค์อื่น ๆ
ถ้าคุณต้องการที่จะเก็บทุกคน ที่ได้ลงทะเบียนสำหรับเหตุการณ์บางอย่าง
หรือลงทะเบียนสำหรับนักเรียนของคุณ กลุ่มหรือสิ่งที่ต้องการที่
การจัดเก็บข้อมูลในประเภทนี้ รูปแบบที่มีความสะดวกสุด
เพราะแท้จริงถ้าฉัน มีการดาวน์โหลดไฟล์นี้
ฉันจะ double-- และ ขอจริงลองนี้
ถ้าฉันมี Excel หรือเบอร์ที่นี่
>> ฉันจะคลิกขวา หรือการควบคุมคลิกที่ไฟล์ของฉัน
ขออภัย
คลิกขวาหรือควบคุมคลิกที่ไฟล์ของฉัน
Come on, เมาส์ของฉันจะไม่ให้ความร่วมมือ
Download-- ฉันจะ ดาวน์โหลดไฟล์ทั้งหมดที่นี่เพื่อ
เพียงเพื่อให้ฉันสามารถคว้าหนึ่งนี้
และให้ดูว่าการทำงานนี้ ครั้งแรก students.csv--
ผมได้เปิดใช้งาน
ตอนนี้พวกเขาต้องการที่จะเห็นรายชื่อของฉัน
ตอนนี้ผมจำเป็นต้องลงทะเบียน
ดูวิธีการที่ง่ายก็คือการใช้ CSVs?
ใช่ให้มันถึงวันที่
ตกลงตอนนี้เราพร้อมสำหรับการเรียน
ตกลงโอ้มีอะไรใหม่?
ตกลงใกล้
นั่นคือที่มีมนต์ขลัง
ตกลงตอนนี้เรามีการปรับปรุง
และตอนนี้ก็ลืมสิ่งที่ ยื่นฉันเดิมเปิด
แต่สิ่งที่มี a-- ที่เราจะไป
ตกลงดังนั้นตอนนี้เรามีแฟ้ม Excel
ขอขอบคุณ.
>> ตกลงดังนั้นสิ่งที่ฉันได้เป็นส่วนที่ง่าย
แน่นอนฉันจะได้ติดตั้ง Excel หรือตัวเลขหรือสิ่งที่โปรแกรม
แต่นี้เป็นสิ่งที่ดีเพราะ ตอนนี้ฉันสามารถจัดการ
ข้อมูลในรูปแบบมาตรฐาน
>> ดังนั้นบริบทตอนนี้ขอ สลับไปที่เราออก
เวลาที่ผ่านมาซึ่งคือการเริ่มต้น ถอดล้อการฝึกอบรม
แต่ก่อนอื่นคุณไม่ได้ เห็นนี้อาหารกลางวันก่อนหน้านี้
เป็นอีกครั้งที่เกิดขึ้นที่นี่ที่ไฟไหม้และ น้ำแข็งในเคมบริดจ์ Sitar ในนิวเฮเวน
ลงทะเบียนบนเว็บไซต์ CS50s โดยเร็ว นักเรียนที่จะเข้าร่วม CS50 และพนักงาน
>> ดังนั้นเราจึงเอาล้อการฝึกอบรม ปิดในวันจันทร์เป็น follows--
ได้รับการประกาศสตริงใน ห้องสมุด CS50s บางครั้ง
และมันก็เป็นเรื่องดีเพราะจะช่วยให้ เราพูดคุยเกี่ยวกับตัวแปรในฐานะที่เป็น
คำและประโยคที่สมบูรณ์และอื่น ๆ
แต่มันกลับกลายเป็นสตริงไม่อยู่
นั่นเป็นเพียงคำพ้องหรือนามแฝง ที่เราได้สร้างขึ้นสำหรับสิ่งที่
เป็นจริงน้อยมาก เทคนิคที่เรียกว่าถ่าน *
>> และแน่นอนเราเห็นตัวอย่าง ของโปรแกรมในวันจันทร์
ที่ไม่ได้มีพฤติกรรมค่อนข้างเป็นที่เราคาดหวัง
นี่เป็นไฟล์เปรียบเทียบ-0
และจำได้ว่าเปรียบเทียบ-0 ถ้า ผมคอมไพล์โปรแกรมวันจันทร์
และเรียกใช้เปรียบเทียบ-0 และพิมพ์แม่ใน ตัวพิมพ์เล็กและแม่ในตัวพิมพ์เล็กอีกครั้ง
โปรแกรมที่ผมยืนยัน พิมพ์สิ่งที่แตกต่างกัน
แม้ว่าแม่ทั้งหมดใน พิมพ์เล็กเป็นเหมือนสายตา
ดังนั้นสิ่งที่เป็นคำตอบสั้น ๆ สำหรับสาเหตุที่คอมพิวเตอร์คิด
ทั้งสองสายจะแตกต่างกัน?
ใช่?
>> ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ขวา
ดังนั้นแม่เป็นครั้งแรก ฉันพิมพ์ในจะเป็น
เก็บไว้ที่อื่นในคอมพิวเตอร์ของฉัน หน่วยความจำ แต่ในสถานที่ที่แตกต่างกัน
กว่าครั้งที่สองที่ผมพิมพ์ในแม่
ตอนนี้มันแน่นอนอาจจะเพิ่มประสิทธิภาพ
คอมพิวเตอร์อาจจะเป็นสมาร์ทและ ตระหนักถึงทั้งสองสายเดี๋ยวก่อน
พวกเขากำลังเหมือนกัน
ขออย่าให้เราเก็บไว้เกินความจำเป็น
แต่คอมพิวเตอร์ไม่ทำอย่างนั้น การเพิ่มประสิทธิภาพจนกว่าคุณจะบอกให้พวกเขา
ดังนั้นโดยเริ่มต้นที่พวกเขากำลัง เพิ่งจะจบลง
ในสองสถานที่ที่แตกต่างกันในความทรงจำ
และเพื่อที่จะมีความชัดเจนมากขึ้นเมื่อ เราเมื่อเทียบกับทั้งสองสาย
ครั้งแรกที่ถูกเรียกว่าวินาที, ที่สองถูกเรียกว่า
ทีเฉพาะสิ่งที่เป็นฉัน เปรียบเทียบที่นี่ในบรรทัดที่ 13?
ใช่
>> ผู้ชม: มันเป็นสถานที่ในหน่วยความจำ ตัวแปรที่จะชี้ไปที่
>> เดวิดเจลัน: แน่นอนผม เปรียบเทียบสถานที่ในหน่วยความจำ
ตัวแปรเหล่านั้นชี้ไปที่
ดังนั้นโดยเฉพาะถ้าแม่อยู่ที่ จำนวนไบต์ที่ 1 และ 2 และ 3
และ 4-- เพราะจำได้ว่าเครื่องหมาย 0 จะต้องมีทุกทางที่สิ้นสุด
และตัวอย่างอื่น ๆ ของแม่, M-o-เมตร เป็นที่อยู่ที่ 10, 11, 12, และ 13
ผมได้รับการเปรียบเทียบที่ 1 อยู่ที่ สถานที่ในหน่วยความจำ
กับ 10 ซึ่งเป็น เห็นได้ชัดว่าไม่เหมือนกัน
1 ไม่ได้ 10
>> ดังนั้นนี่เป็นสิ่งที่ดีในการที่ มันตรงไปตรงสวย
แต่มันเป็นปัญหาตราบเท่าที่ เราไม่สามารถดูเหมือนจะเปรียบเทียบสตริง
fundamentally-- ดังนั้น และอยู่ในระดับที่ต่ำนี้
ถ้าคุณต้องการที่จะดำเนินการ โปรแกรมที่จะเปรียบเทียบ
สองแยกคำว่า ผู้ใช้พิมพ์ลงในคุณภาพ
พวกเขาบรรทัดขึ้นสำหรับถ่าน ถ่านเพียงในแง่ทั่วไป
ทำในสิ่งที่เราต้องทำเห็นได้ชัด?
มันไม่เพียงพอเพียงเพื่อ มองไปที่ทั้งสองอยู่
เราต้องทำอย่างไร?
ใช่?
>> ผู้ชม: ย้ำผ่าน สตริง [ไม่ได้ยิน]
>> เดวิดเจลัน: ใช่ขอ ย้ำผ่านสตริง
ลองใช้สำหรับห่วงห่วงในขณะที่หรือ สิ่งที่คุณกำลังสบายที่สุดด้วย
และถ้าเรามีสองสายที่ใดที่หนึ่ง ในหน่วยความจำให้ดูที่แต่ละ
ตัวอักษรตัวแรกแล้วแต่ละเรื่องที่สอง ตัวอักษรแล้วที่สามและสี่
และห้าจนกว่าเราจะตี สิ่งที่มีค่าแมวมองพิเศษหรือไม่?
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ใช่ทับขวา ศูนย์ที่จุดในสตริงอย่างใดอย่างหนึ่ง
เราสามารถตัดสินใจที่มัน
พวกเราจับคู่ทุกตัวอักษรเดียว?
ถ้าไม่กลับเท็จ
ถ้าเป็นเช่นนั้นกลับจริง
และเพื่อที่ว่าสิ่งที่รุ่นนี้ ของโปรแกรมเปรียบเทียบ-1.c ไม่
มันเป็นเหมือนสิ่งที่เรา มองไปที่จันทร์ยกเว้นได้ผมว่า
อากาศกำจัด string-- คำว่า ที่ไม่มี impact-- ทำงานทั้งหมด
ที่ฉันทำตอนนี้คือการเอา บางล้อการฝึกอบรมภาพ
แต่เพื่อให้เห็นได้อย่างชัดเจนว่า และเสื้อที่มีอยู่
และนั่นคือสิ่งที่เป็นดาว เครื่องหมายดอกจันหมายถึง
เป็นที่อยู่หรือที่เรียกว่า มากขึ้นในทางเทคนิคเป็นตัวชี้
>> ดังนั้นเมื่อผมประกาศบน สาย 9 และพูด char * s,
ไม่ได้หมายความว่าให้ฉันสตริง
นั่นหมายความว่าให้ฉันตัวแปรที่มี จุดมุ่งหมายในชีวิตคือการเก็บที่อยู่
เพราะฉันจะใส่ ที่อยู่ของสตริงเป็นมัน
และแน่นอน GetString ที่จะ ชัดเจนไม่กลับสตริง
มันไม่ได้กลับแม่ เครื่องหมายศูนย์ต่อ
ไม่ getString อะไรโดยเฉพาะ และแม่นยำกลับ?
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: อยู่ที่ ที่อยู่ของตัวอักษรตัวแรก
ในสตริงบางคนก็มีอากาศ
ดังนั้นตอนนี้เรากำลังเห็น คำหลักที่พิเศษอีกครั้ง
และผมพูดพาดพิงถึงก่อนหน้านี้
นี้เป็นไปได้ที่การประชุมที่ดี ที่เราจะได้เห็นอีกครั้งและอีกครั้งในขณะนี้
ผมตรวจสอบเพื่อให้แน่ใจว่า คือไม่เป็นโมฆะและเสื้อไม่เป็นโมฆะ
เพราะขึ้นอยู่กับของฉันจริงๆ กล่าวถึงอย่างรวดเร็วก่อนหน้านี้
สิ่งที่อาจหมายถึงถ้า GetString ผลตอบแทนไม่ได้ ที่อยู่ แต่ N-U-L-L ซึ่งเป็นอีกครั้ง
บางค่าพิเศษหรือไม่?
>> ผู้ชม: ข้อผิดพลาด
>> เดวิดเจลัน: มันเป็นข้อผิดพลาด
บางอย่างผิดปกติ.
และสิ่งที่มักจะ ที่อาจเกิดขึ้นโดยเฉพาะอย่างยิ่ง
กับ strings-- ซึ่งอาจจะเป็น ความยาวไม่รู้จักใน advance--
บางทีคอมพิวเตอร์ ' หน่วยความจำอาจจะ
คุณพิมพ์ลงในดังกล่าว คำหรือประโยคยาว
หรือวางเช่นเรียงความขนาดใหญ่ มีเพียงหน่วยความจำไม่พอ
และเพื่อ GetString ไม่สามารถกลับ ที่อยู่ของสิ่งที่ทั้ง
ดังนั้นมันจึงเป็นเพียงผลตอบแทนอะไร
และกล่าวว่ามีข้อผิดพลาดเกิดขึ้น โดยการกลับค่าโมฆะพิเศษ
มันอยู่ศูนย์เพื่อที่จะพูด
>> ตอนนี้ก็จะเปิดออก C มาพร้อมกับ ฟังก์ชั่นที่ไม่ซ้ำที่
เราไม่ได้มีการดำเนินการนี​​้กับ สำหรับห่วงหรือห่วงตัวเองในขณะที่
เราสามารถใช้ฟังก์ชั่น เรียกว่ารัดกุม
คน comp หรือสตริงเปรียบเทียบซึ่ง จุดมุ่งหมายในชีวิตคือการทำตรงนั้น
คุณให้มันสองตัวชี้สองที่อยู่, และมันจะไปอยู่เหล่านั้น
แล้วเปรียบเทียบจดหมาย จดหมายหนังสือคุณภาพ
หยุดเฉพาะเมื่อสิ่งที่เป็นจริงหรือไม่?
เมื่อสังหรณ์ใจควรผัดคอมพ์ หยุด iterating เพียงเพื่อจะชัดเจน?
เมื่อมันฮิตเครื่องหมาย 0 ในการอย่างใดอย่างหนึ่ง สตริงจุดที่จะสามารถตัดสินใจ
มีทุกอย่างที่จับคู่หรือ ได้มีความแตกต่างหรือไม่?
>> ดังนั้นถ้าเราทำงานนี้ในขณะนี้และพยายาม เกมของเราเป็นทุนเล็ก ๆ น้อย ๆ
เพื่อให้เปรียบเทียบ-1 ./compare-1 และ พิมพ์แม่ในตัวพิมพ์เล็กทั้งสองครั้ง
ตอนนี้มันเป็นสิ่งเดียวกัน
และถ้าผมทำมันอีกครั้งกับ ตัวพิมพ์เล็กและพิมพ์ใหญ่แล้วบางที
ตอนนี้มันแตกต่างแน่นอน ระหว่างบนและตัวพิมพ์เล็ก
ดังนั้นไม่ได้ทั้งหมดที่แข็งหรือ ที่มีมนต์ขลัง แต่ตอนนี้มันไม่อธิบาย
สิ่งที่เกิดขึ้นภายใต้ฝากระโปรง
>> ดังนั้นสิ่งที่เราสามารถดึง จากชนิดของบทเรียนนี้?
ดังนั้นลองมาดูที่นี้
ฉันจะไปข้างหน้าและเขียน โปรแกรมอย่างรวดเร็วนี่เรียกว่าคัดลอก 0
และตอนนี้ขอไปข้างหน้าและเป็นจริง ขอทำสำเนา this---0,
มาดูสิ่งที่ฉันมีที่นี่
ครั้งแรกที่ผมบอกผู้ใช้พูดอะไรบางอย่าง
แล้วฉันจะได้รับสตริง และฉันเก็บไว้ใน s
แล้วฉันจะตรวจสอบว่าของมีค่าเท่ากับ เท่ากับโมฆะเพียง 1 กลับ
ดังนั้นนี้เป็นเพียงการตรวจสอบข้อผิดพลาดมาตรฐาน
ที่น่าสนใจไม่มีอะไรเกิดขึ้น
และในความเป็นจริงถ้าเรากำจัดข้อผิดพลาด ตรวจสอบลักษณะนี้เช่นสัปดาห์ที่ 1 รหัส
ในขณะนี้
แต่ผมได้เริ่มต้นที่จะได้รับ เล็ก ๆ น้อย ๆ เกี่ยวกับการที่ดีขึ้น
>> ตอนนี้อยู่ในสายที่ 16 สัปดาห์ที่ผ่านมาอาจจะ แม้สองสามวันหรือนาทีที่ผ่านมา,
คุณอาจจะบอกว่าสาย 16 สร้างตัวแปรที่เรียกว่าที
และการคัดลอก s เป็นมัน
และที่เป็นได้อย่างสมบูรณ์แบบ Takeaway ที่เหมาะสม
แต่จะแม่นยำมากขึ้นในขณะนี้
สิ่งที่เกิดขึ้นในสาย 16?
สิ่งที่จะได้รับการคัดลอก จากขวาไปซ้าย?
ใช่?
ผู้ชม: เป็นเสื้อที่ได้รับอยู่ของ s อยู่แล้ว?
>> เดวิดเจลัน: ว่าที จะได้รับที่อยู่ของ s
ดังนั้นเพื่อให้มีความชัดเจนตอนนี้ถ้าผมไป กลับไปที่ตัวอย่างเช่นก่อนหน้านี้
และผมก็วาดออกสิ่งที่ผมเคยพิมพ์ใน
และสิ่งที่ผมได้พิมพ์ in-- นี่ s และที่นี่
คือสิ่งที่ฉันได้พิมพ์ในที่ไหนสักแห่งใน หน่วยความจำแม่แล้วเครื่องหมาย
0 ที่เพิ่มสำหรับฉัน
สิ่งที่ฉันเก็บไว้ในที่นี่จำ นี้เป็นสถานที่ 1, 2, 3, 4,
นี้คือสิ่งที่เป็นอยู่ในปัจจุบันของ
ดังนั้นหากในบรรทัดที่ 16 ผมบอกว่าให้ฉัน ตัวแปรอื่นที่เรียกว่าเสื้อและจัดเก็บ
ในมูลค่าของสิ่งที่ ได้รับการเก็บไว้ที่นี่จะไม่ได้แม่
แต่เพียงหมายเลข 1
>> ดังนั้นหากเรามองไปข้างหน้าในโปรแกรมนี้ ตอนนี้สิ่งที่จะเกิดขึ้น?
ดังนั้นสังเกตเห็นว่ามี ฟังก์ชั่นนี้คุณอาจจะ
นี้ได้ใช้เวลาที่ผ่านมาสำหรับซีซาร์ หรือ Vigenere หรืออาจจะไม่ได้ทั้งหมด
ฉันเรียกร้องกับ printf ของฉันฉัน ไปใช้ประโยชน์ทีสำเนา
ครั้งแรกในสาย 19, สติอย่างรวดเร็ว ตรวจสอบการตรวจสอบความยาวของ strlen ที
เพราะผมไม่ต้องการที่จะ พยายามที่จะใช้ประโยชน์จากบางสิ่งบางอย่าง
ถ้ามีสตริงไม่มี
หากผู้ใช้เพียงแค่กด Enter, ไม่มีอะไรที่จะลงทุน
ดังนั้นผมจึงไม่ต้องการที่จะทำสาย 21
ดังนั้นสาย 21 พะวง ซึ่งตัวอักษรที่เห็นได้ชัดในเ?
>> ผู้ชม: m?
เดวิดเจลัน: มันดู เหมือนมันคัดลอกที่หนึ่ง?
ผู้ชม: ม.
เดวิดเจลัน: เอ่อ, ม.
ตกลงดังนั้นเมตรแรก เพราะแจ้งให้ทราบว่าผม
ผ่านไป ToUpper ซึ่ง ถ้าคุณไม่เคยเห็นมันก็
เพียงฟังก์ชั่นที่จะ ประโยชน์เป็นปัจจัยการผลิต
เสื้อยึดศูนย์หมายถึงให้ ฉันศูนย์ลักษณะของเสื้อ
ดังนั้นวิธีการที่ไม่นี้ การเปลี่ยนแปลงของภาพที่จะชัดเจน?
สิ่งที่ต้องได้รับการเขียนใหม่หรือมีการเปลี่ยนแปลง ด้วยความเคารพและเสื้อและแม่
ศูนย์เครื่องหมาย
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: ใช่ ดังนั้นหนึ่งที่นี่เพียง
ต้องได้รับการเปลี่ยนแปลงแก้ไข this-- to-- ต้องได้รับการเปลี่ยนแปลงไปยังเมืองหลวงเมตร
แต่ตอนนี้มองไปในภายหลัง โปรแกรมถ้าผมพิมพ์ออกมา
และเสื้อเป็นฉันทำความสะอาดที่นี่ดูสิ่งที่เป็น ที่จะเกิดขึ้นการพิมพ์ออกและเสื้อ
เพื่อให้คัดลอก 0, ./copy-0
ให้ฉันไปข้างหน้าและพิมพ์ ในแม่ในพิมพ์เล็กทั้งหมด
ขอให้สังเกตทั้งต้นฉบับและ สำเนาที่ได้รับทุน
ทำไม?
ดีและทีมีทั้งชี้ไป, ถ้าคุณจะอันเดียวกันของหน่วยความจำ
และตรงไปตรงนี้จะได้รับ จริงๆ uninteresting-- ความเป็นจริง
ที่เรากำลังใช้อยู่ที่นี่เป็นศูนย์
ฉันหมายความว่าฉันไม่สนใจจริงๆ สิ่งที่อยู่ในหน่วยความจำ
ขออภัยฉันลบน้อยมากเกินไป
แต่ผมไม่สนใจจริงๆ สิ่งที่เป็นในหน่วยความจำ
ดังนั้นสิ่งที่แน่นอน โปรแกรมเมอร์มีแนวโน้มที่จะคิดเกี่ยวกับ
คือว่าเมื่อคุณพูดคุยเกี่ยวกับ ที่อยู่หรือตัวชี้
ที่ใส่ใจที่มันเป็นในหน่วยความจำ
ผมไม่สนใจว่ามันจะอยู่ที่ ไบต์หนึ่งหรือหนึ่งพันล้าน
ฉันเพียงแค่สนใจว่านี้ ตัวแปรที่มีประสิทธิภาพ
ชี้ไปที่ก้อนของหน่วยความจำที่
ดังนั้นต่อจากนี้ไปมากกว่าเล่นลิ้น มากกว่าอยู่หน่วยความจำโดยพลการขอ
เพียงแค่เริ่มต้นการวาดตัวชี้ เป็นตัวชี้เป็นลูกศร
ดังนั้นสิ่งที่ s และเสื้อเป็นจริง ตามโปรแกรมนี้
เนื่องจากวิธีการที่ฉันสร้างที มันเป็นเพียงตัวแปรทั้งสองแยกจากกัน
ชี้ไปที่ก้อนเดียวกันของหน่วยความจำ
และเราไม่ได้ดูแลพวกเขาอยู่ที่ไหน
ดังนั้นเราจึงสามารถสรุปรายละเอียดที่อยู่ห่างออกไป
>> ดังนั้นฉันจะแก้ไขปัญหานี้
ถ้าผมอยากจะเขียนรุ่นของสำเนาที่ โปรแกรมที่จริงสำเนาสตริง
และ capitalizes เท่านั้น คัดลอกเพียงสังหรณ์ใจ
สิ่งที่ได้รับจะเป็น ส่วนผสมในการแก้ปัญหาของเรา?
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: เราจำเป็นต้องมีสิ่งที่?
ผู้ชม: ก้อนของหน่วยความจำ
เดวิดเจลัน: เราจำเป็น ก้อนของหน่วยความจำอีกใช่มั้ย?
เราไม่ทราบวิธีการ ทำมันยังจำเป็นต้อง
แต่ชนิดของฉันต้องการนี​​้จะเกิดขึ้นเพื่อให้ ว่าแม่ต้นฉบับในกรณีที่ต่ำกว่า
จะสิ้นสุดลงในที่อันพิเศษของหน่วยความจำ
และแล้วเมื่อฉันเปลี่ยนสำเนาที่ฉัน ไม่ต้องการที่จะเปลี่ยนสำเนาที่นี่
ฉันแทนต้องการที่จะเปลี่ยนเพียงแค่นี้ สำเนาเพื่อที่เดิมไม่เปลี่ยนแปลง
>> ดังนั้นเรามาดูวิธีการที่เราจะทำเช่นนี้
ในการคัดลอก-1 ซึ่งมีอยู่แล้ว ถูกปลดออกจากการแสดงความคิดเห็น
แต่แสดงความคิดเห็นออนไลน์
เราแทนที่จะทำ following-- เหล่านี้ เส้นเหมือนกันได้รับฉันสตริง
และเรียกมัน
แต่ตอนนี้ให้ดูที่หนึ่งในที่สุดของเรา ซับซ้อน แต่สุดท้ายของความซับซ้อน
สำหรับประเดี๋ยวสาย 16 ไม่ตรงนี้
ดังนั้นหากอุ่นหนาฝาคั่งของคุณด้วย ภาพเราก็ drew--
ให้ฉันเป็นก้อนใหม่ของหน่วยความจำ คัดลอกทุกอย่างในนั้น
เรามาดูวิธีที่เราแปลรหัส
>> ดังนั้นสาย 16 ทางด้านซ้ายมือ ถ่าน * t ให้ฉันกล่องนี้มากกว่าที่นี่
นั่นคือทั้งหมดที่มันไม่
ในด้านขวามือ ม. alloc หรือ malloc,
เป็นจัดสรรหน่วยความจำแฟนซีสุด เป็นวิธีที่เป็นความลับของเพียง แต่พูดว่า
ให้ฉันก้อนของหน่วยความจำ
หน่วยความจำเท่าใดเราจะต้อง?
ดีเป็นชนิดของการแสดงออกใหญ่
แต่ขอดูสิ่งที่มันพูดว่าที่นี่
ดังนั้นนี่ของหลักสูตรคือการให้ ฉันมีความยาวสตริงของ s
ดังนั้นคุณแม่ควรจะเป็นอะไร?
ดังนั้นเพียงแค่สามใช่มั้ย? แม่เป็นตัวละครทั้งสาม
คุณไม่ได้นับ เครื่องหมายศูนย์เมื่อคุณ
พูดคุยเกี่ยวกับความยาวของสตริงก็มี จริงตัวอักษรที่มองเห็นมนุษย์
ดังนั้นแม่จึงให้ฉัน 3
แต่รอสักครู่ผมตอนนี้เพิ่ม 1
ทำไมฉันไม่จริงต้องการ จัดสรร 4 ไบต์และไม่เพียง 3 หรือไม่?
ใช่?
>> ผู้ชม: สำหรับค่าแมวมองหรือไม่
>> เดวิดเจลัน: แน่นอน, สำหรับค่าแมวมองที่
สำหรับเครื่องหมายศูนย์, ฉันจำเป็นต้องรวม 4 ไบต์
ดังนั้นผมจึงจำเป็นต้องมีความยาว ของสตริงบวก 1
แล้วก็สำหรับ measure-- ดี แม้ว่าในระบบนี้
มันมักจะเป็น 1- ที่ฉันพูด คูณนี้โดยขนาดของถ่านที่
เปิดออก sizeof คือ ผู้ประกอบการใน C ที่
เพียงแค่บอกคุณ จำนวนไบต์ที่
จำเป็นสำหรับชนิดข้อมูลบางอย่าง
มันไม่ได้ผลสำหรับอาร์เรย์ โดยทั่วไปจะมีบางครั้งที่มันไม่
แต่ในกรณีทั่วไปไม่มี
แต่มันจะบอกฉันว่าหลายไบต์ ถ่านซึ่งปรากฎอยู่เสมอ 1
ดังนั้นนี้เป็นเหมือนการคูณด้วย 1
>> ดังนั้นความลับสุดสายที่ดูรหัส
แต่ทั้งหมดมันไม่สามารถให้ ฉันก้อนของหน่วยความจำ
แต่ก็ไม่ดูเหมือนจะคัดลอก อะไรในหน่วยความจำที่?
ยัง.
และเพื่อให้สิ่งที่ผมทำในบรรทัดที่ 22 และ 23, 24, 25, ดี, ผมก็ทำเช่นนี้
และนี่คือการจัดเรียงของ สิ่งที่โรงเรียนเก่าตอนนี้
นี้เป็นเหมือน PSet ที่ 2 ซึ่ง คุณเพียงแค่ย้ายสิ่ง
รอบในหน่วยความจำหรือมากกว่าในสตริง
>> ดังนั้นฉันทำซ้ำจาก 0 ถึง ความยาวของสตริง s
และฉันคัดลอกตัวอักษร I-น้ำงา ใน s เข้าไปในตัวละครที่ i ในเ
และเพราะผมโปรแกรมเมอร์ที่ทำ เพื่อให้แน่ใจว่าการจัดสรรไบต์ว่าเป็นจำนวนมาก
ในฐานะที่ฉันต้องการมันสมบูรณ์แบบ แบบหนึ่งต่อหนึ่งความสัมพันธ์
และผมคัดลอกแม่ใน ตัวพิมพ์เล็กไปใหม่
และแล้วในที่สุดฉันทำสายนี้
และเพื่อให้มีผลบังคับใช้เป็นเพียง ที่จะใช้ประโยชน์ทีนี่
ดังนั้นจำนวนมากที่จะดูดซับ แต่ ถ้าคุณเพียงแค่พิจารณา
สิ่งที่เกิดขึ้นจริงๆ ในใต้ฝากระโปรง
เป็นเพียงการย้ายเหล่านี้ ไบต์ทั่วทุกที่
ที่จำเป็นในการแก้ปัญหานี้คือ เพียงเพื่อให้เราก้อนของหน่วยความจำนี้
ตอนนี้ที่มีความเสี่ยงของ ที่ครอบงำให้ฉันแสดง
หนึ่งในตัวอย่างอื่น ๆ ที่เกือบจะ เหมือนกันยกเว้นคนนี้
บรรทัดของรหัส
ดังนั้นนี่คือรุ่นแฮ็กเกอร์ ของโปรแกรมนี้ถ้าคุณจะ
แต่ขอเพียงแค่กลั่น มันกลายเป็นสิ่งที่เกิดขึ้น
สาย 24 ที่เคยเป็นเสื้อนี้ ฉันได้รับวงเล็บวงเล็บของฉัน
ตอนนี้ผมเปลี่ยนนี้ เสื้อดาวลับอื่น ๆ อีกมากมาย
บวก 1 เท่ากับดาว s บวก 1
>> ดังนั้นสิ่งที่เกิดขึ้นและทำไม เราจะมีตัวอักษรดาว?
เราได้เห็นดาวมาก่อนและ มันถูกใช้แตกต่างกันที่นี่
ก่อนหน้านี้เราได้เห็นถ่าน * ตอนนี้ฉันเห็น เป็นดาวที่จุดเริ่มต้นและที่ตกลง
เพราะมันจะเปิดออกเรา สามารถชนิดของการสรุปเพียง
จากครั้งแรกที่เหล่านั้น หลักการสิ่งที่เกิดขึ้น
ดังนั้นเพียงแค่ต้องมีความชัดเจนคืออะไรหรือไม่?
สัปดาห์ที่ผ่านมามันเป็นสตริง
ที่ไม่พอเพียงอีกต่อไป
เป็น s โดยเฉพาะอะไร?
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: มันเป็นตัวชี้
มันเป็นที่อยู่ของ ตัวอักษรตัวแรกที่เราพิมพ์ลงใน
ตกลงสิ่งที่เป็นเสื้อ?
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลันที่: ที่อยู่ของไบต์แรก
ใน t, ก้อนของหน่วยความจำที่จัดสรร
ดังนั้นจึงปรากฎว่าเมื่อเรา ย้ำจาก 0 ได้ถึงสตริง
length-- แรกของทั้งหมดที่ฉัน เริ่มต้นที่ 0 เพราะ
ของโรงเรียนเก่าสำหรับสิ่งที่ห่วง
ดังนั้นเพียงแค่สำหรับความเรียบง่ายให้ของ สมมติว่าบรรทัดแรกของรหัส
เป็นจริงเพียงขวา
ถ้าฉันเป็นศูนย์การเพิ่มศูนย์ บางสิ่งบางอย่างที่จะสันนิษฐานว่า
ไม่ได้จะมีผลกระทบ
>> ดังนั้นสิ่งที่เป็นคำกล่าวที่ว่านี้หรือไม่?
แต่กลับกลายเป็นว่าดาว ผู้ประกอบการในบริบทนี้
เป็น dereference ผู้ประกอบการซึ่งเป็นเพียง
วิธีแฟนซีที่บอกไป ไปยังที่อยู่ดังต่อไปนี้
ดังนั้นถ้า s เป็นที่อยู่ของแรก ตัวละครในก้อนของหน่วยความจำนี้
* s หมายถึงไปที่นั่น
และเนื่องจากเราได้วาด ภาพในลักษณะนี้
คุณสามารถนำมาใช้ ต่อไปนี้รูปแบบจิต
ถ้าเป็น s และคุณพูด ​​ s * s ชนิดเช่นปล่องและบันได
ถ้าคุณจำเกมจากวัยเด็ก เป็นเหมือนตามลูกศรและไปที่
ไปยังที่อยู่
>> * t เป็นสิ่งเดียวกัน
ดังนั้นเริ่มต้นที่นี่ให้ไปที่ก้อนของมัน
ฉันไม่สามารถเพียงแค่วาดบน หน้าจอนี้วิธีการที่
* t หมายถึงการไปที่นี่
แล้วสำหรับวงเป็นเพียง บอกว่าย้ายตัวละครตัวนี้ที่นี่
ย้ายตัวละครตัวนี้ที่นี่ ย้ายตัวละครตัวนี้ที่นี่
แต่วิธีการที่ฉันจะทำ incrementation ที่?
ฉันต้องการที่จะยกเลิกสิ่งที่ฉันเพิ่งลบ
นี่คือสิ่งที่เรียกกันโดยทั่วไป คำนวณตัวชี้ที่
หมายความว่าคณิตศาสตร์ที่มีที่อยู่
>> ถ้าในนี้ห่วง การเพิ่มฉันให้ฉัน
และคือที่อยู่และทีเป็น ที่อยู่ถ้าฉันเพียงแค่เก็บเพิ่ม 1,
ก็หมายความว่าให้ก้าวไปข้างหน้า และส่งต่อและส่งต่อในหน่วยความจำ
มันเหมือนฟอร์ดถนน ถนนที่อาคารบริการลูกค้าที่อยู่ใน
อาคาร CS อยู่ที่ 33 ถนน Oxford
ดังนั้นถ้าคุณทำ 33 Oxford Street บวก 1,
ที่จะนำคุณไปยังฟอร์ด 34 ถนนแล้ว 35 Oxford Street,
แล้ว 36 Oxford Street สิ่งเหล่านั้น อาคารจริง - ถ้าพวกเขามีอยู่
ดังนั้นนั่นคือทั้งหมดที่เรากำลังทำ ที่นี่มีตัวชี้เลขคณิต
>> ดังนั้นมันเป็นวิธีที่เป็นความลับสุดยอด การแสดงตัวเอง
แต่ทั้งหมดที่เกิดขึ้น ใต้ฝากระโปรง
ต่อไปนี้เป็นเพียงที่อยู่เหล่านี้ ต่อไปนี้เช่นแผนที่ถ้าคุณจะ
หรือลูกศรดังต่อไปนี้เช่น เราได้วาดบนหน้าจอ
ตกลงมากที่จะแยกแยะ
คำถามใด ๆ เกี่ยวกับไวยากรณ์แนวคิด ตัวชี้ malloc หรือชอบ
ใช่มากกว่าที่นี่ครั้งแรก
>> ผู้ชม: เพ​​ื่อที่ว่า กล่าว * t เท่ากับ toupper * t,
คือการที่จะใช้ประโยชน์ ทุกตัวอักษรหรือ just--
>> DAVID ลันเจ: อา คำถามที่ดีจริงๆ
ดังนั้นในสายนี้ที่นี่, 31, นี้เป็นไปเพื่อประโยชน์
ตัวอักษรตัวแรกหรือทั้งหมดของตัวอักษร
ดังนั้นขอตอบว่าโดยไป กลับไปที่หลักการแรก
และหลักการที่นี่เป็นครั้งแรกที่ผมหมายถึง เพียงแค่ไปที่คำจำกัดความพื้นฐาน
ของสิ่งที่เกี่ยวข้อง
ดังนั้น toupper เป็นฟังก์ชั่น ที่ capitalizes ถ่าน
นั่นคือทั้งหมดที่
* t หมายความว่าไป first-- ไปที่ที่อยู่ในที
ดังนั้นในภาพถ้าเป็นก้อน ของหน่วยความจำที่เราจัดสรร malloc,
และนี่คือทีที * หมายความว่าไปที่นี่
>> ในขณะที่คุณผ่าน ค่าที่เล็กม.
เพื่อ toupper, คุณจะได้รับกลับมา ทุน M ที่คุณใส่มันได้หรือไม่
คุณกำลังวางไว้ในสถานที่เดียวกับที่
ดังนั้นโดยตรรกะของผู้ที่ คำนิยามพื้นฐานเป็นเพียง
พะวงตัวอักษรตัวแรก จนกว่าคุณจะย้ำกับผมหรือ
สำหรับวงหรือวงในขณะที่มันจะไม่ ที่จะทำอะไรได้มากกว่าที่คุณขอ
คำถามที่ดี.
ใช่?
>> ผู้ชม: ทำไมคุณใช้ dereference วิธีการมากกว่า
อาร์เรย์?
>> DAVID ลันเจ: อาคำถามที่ดี
ทำไมคุณจะใช้ dereference วิธีการแทนวิธีอาร์เรย์?
ไม่มีเหตุผลใดที่จะซื่อสัตย์
และในความเป็นจริงของเรื่องนี้ ชนิดของตัวอย่างที่ถูกต้อง
ฉันแค่เถียงทำ โปรแกรมที่ซับซ้อนมากขึ้น
ตามากขึ้นมีการเคลือบมากกว่า คนที่ได้รับการตรวจสอบจาก
เพราะมีลักษณะที่เป็นความลับสุด แต่ แม้ว่าจะทำในสิ่งเดียวกัน
และเพื่อให้ตรงไปตรงนี้เป็น โดยไม่จำเป็นแก้ปัญหาที่ซับซ้อนทางสายตา
ในการแก้ไขปัญหา
>> ก็ยังคงการออกแบบที่ดี ห้าห้าสำหรับการออกแบบ
ไม่ว่าจะเป็นในวงเล็บ สัญกรณ์หรือสัญกรณ์ชี้
But-- โดยเฉพาะอย่างยิ่งเมื่อเราได้รับ ต่อไปในการเรียนการสอนใน PSet 5
เมื่อเราใช้พจนานุกรมที่ ผมเคยกล่าวถึงคู่ของ times--
เราจริงจะดูแลเกี่ยวกับ ในระดับต่ำอยู่หน่วยความจำ
ที่เราเข้าใจจริงๆ เกิดอะไรขึ้น.
>> แต่สำหรับตอนนี้มันกลับกลายเป็นว่านี้ บรรทัดของรหัสที่นี่วงเล็บ
ไม่ได้จริงๆอยู่
พวกเขามีสิ่งที่เรียกว่า น้ำตาลประโยคซึ่ง
เป็นเพียงวิธีที่เย็นวิจิตรพิสดารของคำกล่าวที่ว่า คอมไพเลอร์จะแปลงวงเล็บจะเป็น
ว่าการแสดงออกทางคณิตศาสตร์
ดังนั้นจึงเป็นที่ประชุมของมนุษย์ เพื่อให้สามารถเพียงแค่เขียน
วงเล็บเหล่านี้ใช้ง่ายมาก
แต่สิ่งที่คอมไพเลอร์, เสียงดังกราว, จริงๆจะทำเมื่อใดก็ได้
คุณเขียนสิ่งที่เน้นในสาย 24 ที่อยู่ใต้ฝากระโปรงเป็นจริง
แปลงไปนี้
มันเป็นเพียงความพึงพอใจมากขึ้นเป็นมนุษย์ การอ่านและการเขียนโค้ดเช่นสาย 24
แต่ในที่สุดเหล่านั้น ล้อการฝึกอบรมออกมามากเกินไป
เมื่อความสะดวกสบายของตัวเองได้รับที่แข็งแกร่ง
>> สิทธิทั้งหมดเพื่อให้จำได้แล้วที่นี้ คือการจัดเรียงของปัญหาที่ใหญ่ที่สุด
เราวิ่งเข้าไป
และนั่นคือสิ่งที่จุดประกายนี้ทั้งหมด สนทนาแช่งเกี่ยวกับตัวชี้
และที่อยู่และสิ่งที่คัดลอก
มันเป็นเพราะเราสะดุด นี้โง่โง่ปัญหาโดย
ผมดำเนินการ logically-- กับลอเร ขึ้นที่นี่ในการสาธิตและน้ำผลไม้สีส้ม
ใน milk-- อย่างสมบูรณ์ ฟังก์ชั่นที่ถูกต้องอัลกอริทึม
สำหรับการแลกเปลี่ยนสองตัวแปร ' ค่า แต่สิ่งที่แช่ง
ไม่ได้มีถาวรใด ๆ หรือ ถาวรผลต่อรหัสของฉัน
>> และทำไมเป็นอย่างนั้น?
สรุปว่าทำไมเป็นแบบนี้ การดำเนินงานของการแลกเปลี่ยน
เหตุผลที่ถูกต้อง แต่ไม่มีผลกระทบ กับตัวแปรที่จะถูกส่งผ่านไป
เช่น x และ y สำหรับหลัก?
สิ่งที่เป็นส่วนสำคัญของปัญหาหรือไม่
ใช่?
ผู้ชม: เพ​​ราะตัวแปรทำ สำเนาของตัวแปรในการส่งผ่าน
ผ่านการทำงาน
>> เดวิดเจลัน: ว่าเมื่อคุณผ่าน ตัวแปรในการทำงานหรือการขัดแย้ง
เข้าสู่ฟังก์ชั่นที่พวกเขากำลัง โดยผ่านการคัดลอกซึ่ง
หมายความว่าคุณจะได้รับเหมือนกันมอง รูปแบบของบิตทั้ง x และ y,
นี่เรียกว่า a และ b
และคุณสามารถทำอะไรได้ ที่คุณต้องการด้วยสำเนาเหล่านั้น
แต่พวกเขากำลังจะมีไม่มี ผลกระทบต่อการเรียกฟังก์ชั่น
และในความเป็นจริงเราดึงที่ ภาพบนหน้าจอการเรียกคืน
ครั้งสุดท้ายโดยถ้าคุณ คิดเกี่ยวกับสิ่งที่
ที่เกิดขึ้นภายใต้ hood-- ถ้า นี้เป็นหน่วยความจำของคอมพิวเตอร์ของคุณ
และลงที่นี่เป็นก้อนของ หน่วยความจำที่ใช้สำหรับการหลัก
นี้เป็นก้อนของ หน่วยความจำที่ใช้สำหรับการแลกเปลี่ยน
และดังนั้นแม้ว่าหลักมี สองตัวแปร x และ y,
แลกเปลี่ยนอาจจะมีเหมือนกันมอง ค่าซึ่งทั้งสองเป็นที่ 1 และ 2
แต่พวกเขากำลังสมบูรณ์ ชิ้นที่แตกต่างกันของหน่วยความจำ
>> ดังนั้นเราจึงจำเป็นที่จะแก้ปัญหานี้
และตรงไปตรงก็จะดูเหมือนว่าตอนนี้เรา มีวิธีการแก้ปัญหานี้ใช่มั้ย
ถ้าตอนนี้เรามีความสามารถที่จะ จัดการกับสิ่งที่โดยวิธีการที่อยู่
และการจัดเรียงของปล่องและบันได รูปแบบการทำตามลูกศรเหล่านี้
และไปได้ทุกที่ที่เราต้องการ ในหน่วยความจำที่เราทำไม่ได้
การแก้ปัญหานี้ ผ่านจากหลักที่จะแลกเปลี่ยน
ไม่ได้ค่าที่เราต้องการ แลกเปลี่ยน แต่เพียงอย่างสังหรณ์ใจ
สิ่งที่เราสามารถผ่านการแลกเปลี่ยนแทน?
>> [interposing VOICES]
>> เดวิดเจลัน: ทำไมเราไม่เพียง ผ่านมันอยู่ใช่มั้ย?
ทำไมเราไม่ให้แลกเปลี่ยน แผนที่สมบัติถ้าคุณจะ
ที่นำไปสู่​​ไปยัง ค่าที่แท้จริง x และ y
แลกเปลี่ยนให้เป็นจริงเปลี่ยน ผู้บิตเดิมมากกว่า
เพียงแค่ผ่านสำเนาของบิต
ดังนั้นในความเป็นจริงว่าเป็นสิ่งที่เป็น จะเป็นวิธีการแก้ปัญหา
รุ่นนี้ที่นี่ก็คือ เห็นได้ชัดว่าไม่ดีและสมบูรณ์
และตอนนี้ได้อย่างรวดเร็วก่อนมันก็มีลักษณะ เหมือนอย่างที่เราเพิ่มพวงของดาวแบบสุ่ม
และข้ามนิ้วมือข​​องเรา ว่ามันจะรวบรวม
แต่ตอนนี้จะรวบรวม
>> แต่เรามาดูว่าสิ่งเหล่านี้หมายถึง
และโชคไม่ดีที่ผู้เขียนของ C สามารถเลือกสัญลักษณ์อื่น
เพื่อให้เล็ก ๆ น้อย ๆ นี้ ชัดเจน แต่ผู้ประกอบการที่ดาว
มีความหมายที่แตกต่างกัน สองบริบทที่แตกต่าง
และเราได้เห็นทั้งสอง แต่ขอแยกความแตกต่าง
>> ดังนั้นขึ้นที่ด้านบนนั่น เมื่อฉันมีการเปลี่ยนแปลงและ b
จากการถูกของ int ในที่ไม่ดี รุ่น int ดาว a และ b
ก่อนหน้านี้เป็นจำนวนเต็ม
สิ่งที่ A และ B อยู่ในขณะนี้ ดีรุ่นสีเขียว?
พวกเขากำลังอยู่
ที่อยู่ของสิ่งที่จะชัดเจน?
ที่อยู่ของจำนวนเต็ม
ดังนั้นความจริงที่ว่าฉันเป็น บอกวิธี int ดาว
นี้เป็นที่อยู่ของ จำนวนเต็มเป็นเฉพาะ
>> ดังนั้นตอนนี้ทราบในสายของรหัส สิ่งอื่นที่มีการเปลี่ยนแปลงมากเกินไป
tmp อยู่เหมือนกันเพราะ มันเป็นเพียงแค่จำนวนเต็มชั่วคราว
ไม่มีหน่วยความจำที่มีความมหัศจรรย์
แต่ขณะนี้ความต้องการดาว
และในความเป็นจริงทุก กล่าวถึงอื่น ๆ ของ a และ b
สังเกตเห็นว่าทุกสิ่งที่เป็น เปลี่ยนจากสีแดงเป็นสีเขียว
คือว่าผมกำลัง prefixing ตัวแปรที่มีดาว
เพราะผมไม่ต้องการที่จะคัดลอกและ b
เพราะถ้าฉันเพียงแค่คัดลอกและ b และแลกเปลี่ยน และ b สิ่งที่ฉันจริงแลกเปลี่ยน?
เพียงแค่อยู่ผมต้องการที่จะแลกเปลี่ยน สิ่งที่ที่อยู่เหล่านั้น
ฉันต้องการที่จะไปที่นั่น
และเพื่อให้ผู้ประกอบการที่ดาว ภายในของฟังก์ชั่นของฉัน
ไม่ได้อยู่ในรายชื่อของพารามิเตอร์ หมายถึงการที่คุณจะไปอยู่เหล่านั้น
และที่จริงเปลี่ยนค่าเหล่านั้น
>> ดังนั้นสิ่งที่ไม่ภาพ ในขณะนี้มีลักษณะเหมือนแทน
ดีถ้าแทนฉันผ่าน ใน A และ B ไม่ได้ที่ 1 และ 2--
ที่จริงผมต้องเพิ่ม หนึ่งในความหมายอื่น ๆ ที่นี่
ดังนั้นคิดว่าอันนี้ ของหน่วยความจำที่สถานที่ตั้ง 10
>> นี่คือสถานที่ที่ 11 แต่นี่ เป็นบิตของความเรียบง่าย,
ตอนนี้ผมมีสองทางเลือกทำฉันผ่าน x และ Y หรือฉันจะผ่านอยู่ของพวกเขา?
ถ้าผมผ่านอยู่ของพวกเขา เช่นนี้ผมเพียงแค่
ตอนนี้จำเป็นต้องใช้ แลกเปลี่ยนตามรหัสสีเขียว
เพื่อที่ว่าเมื่อมันเห็นและเมื่อมัน เห็นขก็ไม่ได้คัดลอกและ b
และย้ายนมและน้ำผลไม้สีส้ม
นมและน้ำผลไม้สีส้ม อุปมาในขณะนี้แบ่งลง
เพราะผู้ที่มีถ้วย ของของเหลวและไม่แผนที่
เราแทนที่จะต้องไป ไปยังที่อยู่ที่ 10 และเรา
ต้องไปอยู่ที่ 11 และ แล้วดำเนินการตรรกะแลกเปลี่ยนที่
>> ดังนั้นตรรกะเหมือนกัน แต่ เราต้องมีวิธีการที่แตกต่างกันเล็กน้อย
ในการเข้าถึงตัวแปรเหล่านั้น
และในท้ายที่สุดว่า โปรแกรมที่มีให้มีลักษณะเหมือนเป็นแบบนี้
ใน swap.c คัดลอกตัวอักษร และวางรุ่นสีเขียว
แต่ผมต้องการที่จะทำให้การเปลี่ยนแปลงอย่างใดอย่างหนึ่ง
มันไม่เพียงพอที่จะเปลี่ยนเพียงแค่แลกเปลี่ยน
สิ่งที่สายอื่น ๆ ของรหัส ฉันจะต้องเปลี่ยน?
ใช่?
>> ผู้ชม: อยู่ที่ไหนก็จะใช้เวลาการขัดแย้ง
>> เดวิดเจลัน: ที่ไหน มันจะใช้เวลาโต้แย้ง
ดังนั้นถ้าผมเลื่อนขึ้นไปหลักผม ก็ไม่สามารถผ่านใน x และ y,
และผมสัญญาว่าสุดท้าย ชิ้นส่วนของไวยากรณ์ใหม่ในวันนี้
ฉันต้องการที่จะผ่านในไม่ x และ แต่ y ที่อยู่ของ x และ y
และปรากฎสัญลักษณ์ ที่ผู้เขียนของ C เลือก
คือถ้าคุณใช้เครื่องหมายที่นี่จะไม่ จะสับสนกับเครื่องหมายค่าที่เหมาะสมที่
ถ้าคุณใช้เครื่องหมาย & นี่และเครื่องหมายที่นี่
ตัวเลขนี้สำหรับคุณ สิ่งที่อยู่ของ x,
บางทีมันอาจจะ 10 สิ่งที่ ที่อยู่ของ y ที่อาจจะเป็น
11 และผ่านผู้ที่อยู่ในแทน
>> ดังนั้นจำนวนมากที่จะดูดซับทั้งหมดในครั้งเดียว
แต่เรามาดูได้อย่างรวดเร็วในขณะนี้ เราเหลืออีกสี่นาที
สิ่งที่สามารถไปเป๋
และเป็นกันจริง ผมเอาภาพนี้
TF เอาภาพนี้ปีหรือสองปีที่ผ่านมา
ดังนั้นนี่คือมุมด้านหลัง ของเอเลียตฮอลล์ในการรับประทานอาหาร
ชี้อาจจะยากที่สุด หัวข้อที่เราจะกล่าวถึงใน CS50
ดังนั้นหากคุณกังวลการจัดเรียง ของความลาดชันเป็นเหมือนบางทีมันอาจจะ
เพิ่มเติมของไม้ฮอกกี้ เช่นนี้ตระหนักถึง
เรากำลังชนิดของใกล้จุดสูงสุดใน แง่ของความซับซ้อนของความคิด
>> และผมนำมาขึ้นนี้ ภาพเพราะผมสาบาน
กับพระเจ้าในฤดูใบไม้ร่วงปี 1996 เมื่อฉันเอา CS50 การเรียนการสอนกับเพื่อนของฉัน
Nishat เมธาเขานั่งฉันลงใน มุมของเอเลียตดีฮอลล์ในช่วงกลางวัน
หรืออาหารเย็นหรือบางสิ่งบางอย่างที่จะลอง จะช่วยให้ฉันเข้าใจตัวชี้
และนี่คือที่ผมเป็นสัปดาห์หลังจาก มันถูกนำมาใช้ในการบรรยายเมื่อ
ในที่สุดผมก็เข้าใจตัวชี้
และฉันหวังว่านี้ จะคลิกไกลเร็วสำหรับคุณ
แต่ตระหนักถึงนี้อย่างแน่นอนในหมู่ หัวข้อที่ซับซ้อนมากขึ้น
เราได้มองไปที่
แต่มันเป็นในหมู่ผู้ที่มีประสิทธิภาพมากที่สุด
และเมื่อคุณได้รับมันก็เป็นจริงทั้งหมด เพียงแค่จะมาร่วมกันในที่สุด
ดังนั้นมั่นใจได้ก็ไม่ได้ ต้องอ่างล้างมือในวันนี้ทั้งหมด
>> ดังนั้นนี่คือโปรแกรมที่ผ่านมา เรากำลังจะไปดูที่
และเรากำลังจะจบลงด้วยการ รวดเร็วสามนาทีของ claymation
ทำโดยเพื่อนของเรานิค Parlante
นี่คือโปรแกรมที่อยู่บนชั้นสอง สายการประกาศตัวแปร x และ y ที่
ทั้งสองที่มีอยู่ ของจำนวนเต็มตัวชี้ AKA
จากนั้นเราจะจัดสรรพอ หน่วยความจำในการจัดเก็บเป็น int
และจัดเก็บอยู่ ของหน่วยความจำใน x ที่
ดังนั้นจึงได้ง่าย กว่าตัวอย่างเช่นก่อน
ให้ฉันสี่ไบต์ของหน่วยความจำ ที่ขนาดของ int ที่,
และวางอยู่ในที่ x
บรรทัดนี้ที่นี่หมายถึง ไปที่ที่อยู่ในเอ็กซ์
และนำความหมายของ ชีวิตจำนวน 42 มี
แต่บรรทัดนี้ผมกังวล
ดาว y ที่หมายถึงการไปที่ที่อยู่ใน Y, และใส่หมายเลข 13 มีโชคร้าย
ทำไมมันจึงเป็นอันตรายที่จุดนี้ ใน story-- แม้จะบอกอย่างรวดเร็ว
ในนาทีที่ลดลงของเรา here-- ว่าทำไมมันจะไม่ดี
สำหรับผมที่จะบอกว่าไปที่ที่อยู่ในปีนี้?
>> ผู้ชม: ท่านยังไม่ได้ [ไม่ได้ยิน]
เดวิดเจลัน: ฉันไม่ได้ ใส่อะไรในปี
ดังนั้นสิ่งที่คุ้มค่าของ y, ที่จุดในเรื่องนี้หรือไม่?
เราไม่มีความคิด
มันเป็นค่าขยะบางอย่าง และบิงกี้หรือไม่ทราบ
ถ้าเราจะจบในบันทึกนี้
>> [วิดีโอเล่นภาพ]
>> -Hey, บิงกี้ตื่นขึ้นมา
ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน
>> -นั่นอะไร?
เรียนรู้เกี่ยวกับตัวชี้?
โอ้สิ่งที่ดี
>> -Well เพื่อเริ่มต้นผมคิดว่าเรากำลัง จะต้องมีตัวชี้คู่
>> -ตกลง.
รหัสนี้จัดสรรสองตัวชี้ ซึ่งสามารถชี้ไปที่จำนวนเต็ม
>> -OK ดีฉันเห็น สองตัวชี้ แต่พวกเขา
ดูเหมือนจะไม่ได้รับการชี้ไปที่อะไร
>> -ถูกตัอง.
ในขั้นต้นชี้ ไม่ได้ชี้ไปที่ใด
สิ่งที่พวกเขาชี้ไปที่มี เรียกว่า pointees และการตั้งค่าพวกเขาขึ้น
เป็นขั้นตอนที่แยกต่างหาก
>> โอ้ขวาขวา
ฉันรู้ว่า.
pointees จะแยก
ดังนั้นวิธีที่คุณจัดสรร pointee หรือไม่?
>> -OK ดีจัดสรรรหัสนี้ pointee จำนวนเต็มใหม่
และเป็นส่วนหนึ่ง x ชุดนี้จะชี้ไปที่มัน
>> -Hey ที่ดูดีกว่า
เพื่อให้มันทำอะไรบางอย่าง
>> -OK ฉันจะ dereference ตัวชี้ x ไป เก็บหมายเลข 42 ลง pointee ของ
สำหรับเคล็ดลับนี้ผมจะต้องของฉัน ไม้กายสิทธิ์ของ dereferencing
>> ไม้กายสิทธิ์ของ dereferencing ด์ของคุณ?
เอ่อที่ที่ดี
>> นี้เป็นสิ่งที่รหัสดูเหมือนว่า
ฉันเพิ่งจะตั้งค่าจำนวน and--
>> [POP SOUND]
>> -Hey ดูมีมันไป
ดังนั้นการทำ dereference บน x ดังต่อไปนี้ ลูกศรในการเข้าถึงของ pointee
ในกรณีนี้การจัดเก็บ 42 ในการมี
เฮ้ลองใช้มันในการจัดเก็บจำนวน 13 ถึงตัวชี้อื่น ๆ , y
>> -ตกลง.
ฉันเพิ่งจะไปกว่าที่นี่เพื่อ Y, และได้รับจำนวน 13 ตั้งขึ้น
และจากนั้นใช้ไม้กายสิทธิ์ของ dereferencing และ just--
>> [BUZZER SOUND]
>> โอ้เดี๋ยวก่อนที่ไม่ทำงาน
พูดเอ่อบิงกี้, ฉันทำไม่ได้ คิด dereferencing
y ที่เป็นความคิดที่ดีเพราะการตั้งค่า ขึ้น pointee เป็นขั้นตอนที่แยกต่างหาก
และผมไม่คิดว่าเราเคยทำมัน
>> -Hmm, จุดที่ดี
>> -Yeah เราจัดสรรตัวชี้, y แต่ เราไม่เคยตั้งค่าให้ชี้ไปที่ pointee
>> -Hmm ช่างสังเกตมาก
-Hey คุณกำลังมองหาที่ดีมีบิงกี้
คุณสามารถแก้ไขได้เพื่อให้จุด Y ไป pointee เดียวกับ x
>> -Sure ผมใช้ไม้กายสิทธิ์ของฉัน ของการกำหนดตัวชี้
>> -is ว่าจะเป็น ปัญหาที่เกิดขึ้นเช่นก่อนหรือไม่
>> ไม่มีนี้ไม่ได้สัมผัส pointees
มันก็เปลี่ยนแปลงตัวชี้หนึ่ง ให้ชี้ไปที่เดียวกัน thing--
>> [ส่งเสียง]
--as อื่น
>> -อ้อเข้าใจแล้ว.
ตอนนี้จุด Y ไปยังสถานที่เดียวกับ x
ดังนั้นรอตอนนี้ y ที่ได้รับการแก้ไข
มันมี pointee
ดังนั้นคุณสามารถลองไม้กายสิทธิ์ของ dereferencing อีกครั้งเพื่อส่งมากกว่า 13
>> โอ้, OK, ที่นี่จะไป
>> -Hey ดูที่ว่า
ตอนนี้ dereferencing งานในปี
และเนื่องจากตัวชี้จะร่วมกัน ว่าหนึ่ง pointee พวกเขาทั้งสองเห็น 13
>> -Yeah ร่วมกันเอ่อสิ่งที่
ดังนั้นเราจะไปที่จะเปลี่ยนสถานที่ตอนนี้หรือไม่
>> โอ้มองเราออกจากเวลา
>> -But--
>> -Just จำกฎสามตัวชี้
จำนวน 1, โครงสร้างพื้นฐาน คือการที่คุณมีตัวชี้
และชี้ไปยัง pointee
แต่ตัวชี้และ pointee แยก
และข้อผิดพลาดทั่วไป คือการตั้งค่าตัวชี้
แต่ที่จะลืมที่จะให้มัน pointee
>> จำนวน 2 ตัวชี้ dereferencing เริ่มต้นที่ตัวชี้
และต่อไปนี้ลูกของมันมากกว่า ในการเข้าถึง pointee ของ
ในฐานะที่เราทุกคนรู้ว่านี้จะทำงานเฉพาะถ้ามี เป็น pointee ซึ่งชนิดของการได้รับกลับ
ที่จะครองอันดับ 1
>> จำนวน 3 ตัวชี้ การกำหนดตัวชี้จะใช้เวลาหนึ่ง
และการเปลี่ยนแปลงมันให้ชี้ไปที่ pointee เดียวกับตัวชี้อีก
ดังนั้นหลังจากที่ได้รับมอบหมาย, ทั้งสองตัวชี้
จะชี้ไปที่ pointee เดียวกัน บางครั้งที่ใช้งานร่วมกันที่เรียกว่า
และนั่นคือทั้งหมดที่มีให้มันจริงๆ
ลาก่อนตอ​​นนี้
>> [จบเล่นภาพ]
>> เดวิดเจลัน: นั่นมันสำหรับ CS50
ขอบคุณที่ศาสตราจารย์นิค Parlante
เราจะเห็นคุณในสัปดาห์ถัดไป
>> [เล่นดนตรีอิเล็กทรอนิ]