>> [เล่นเพลง]
เดวิดเจลัน: ทั้งหมดขวา
นี้เป็น CS50 และนี่ เป็นจุดสิ้นสุดของสัปดาห์ที่สี่
และหนึ่งในหัวข้อในวันนี้ เป็นที่ของนิติดิจิตอล
ศิลปะของการกู้คืนข้อมูล
และแน่นอนแม้ว่า คุณอยู่ในท่ามกลาง
ตอนนี้สันติภาพที่สาม และฝ่าวงล้อมสัปดาห์หน้า
โฟกัสจะอยู่ใน ได้อย่างแม่นยำโดเมนนี้
>> ดังนั้นหนึ่งในงานที่เจ๋งที่สุดที่ฉันเคย ได้กลับมาอยู่ในโรงเรียนระดับบัณฑิตศึกษา
ตอนที่ผมทำงานให้กับท้องถิ่น มิดเดิลอัยการเขต
สำนักงานงานนิติทำ
เพื่อเป็นหลัก, แมสซาชูเซต รัฐตำรวจในบางโอกาส
เมื่อทำงานในกรณีที่จะ นำมาในสิ่งที่ต้องการฮาร์ดไดรฟ์
และฟลอปปี้ดิสก์และ การ์ดหน่วยความจำและไม่ชอบ
และพวกเขาจะส่งพวกเขา ให้ฉันและผู้ให้คำปรึกษาของฉัน
และเป้าหมายของเราคือการหาหลักฐาน ถ้ามีใด ๆ ที่เกี่ยวกับสื่อเหล่านี้
มองเห็นตอนนี้คุณอาจได้เห็น ของโลกของนิตินี้
ในสื่อทีวีและภาพยนตร์
แต่งานที่ฉันมีและ daresay โลกว่า
ไม่มากเหมือนที่คุณจะได้เห็นมัน
ลองมาดูสิ่งที่ คุณอาจจะได้เห็น
[วิดีโอเล่นภาพ]
-OK
ตอนนี้ขอได้รับดูดีที่คุณ
>> [เล่นเพลง]
>> -hold มัน
วิ่งกลับไปที่
>> cmd- รอนาที
ไปขวา
-There
แช่แข็งที่
เต็มหน้าจอ
>> -OK
แช่แข็งที่
-Tighten ขึ้นไปบนนั้นคุณจะ?
>> เวกเตอร์ในที่ คนที่แต่งตัวประหลาดโดยล้อหลัง
>> ซูมในที่นี่ในจุดนี้
>> Global- ด้วยอุปกรณ์ที่เหมาะสม ภาพที่สามารถขยายและรุนแรงขึ้น
>> อะไรที่?
>> แต่ก็เป็นโปรแกรมเพิ่มประสิทธิภาพ
>> เลือกแขวนคุณที่ชัดเจนว่าขึ้นหรือไม่
>> -I ไม่ทราบ
ลองเพิ่มความมัน
>> -Enhance มาตรา A6
ผมเพิ่มรายละเอียดที่ and--
-I คิดว่ามีมากพอที่จะเพิ่ม
ปล่อยให้หน้าจอของฉัน
>> -I เพิ่มการสะท้อนในสายตาของเธอ
และกิจกรรมที่กลุ่มที่ทำงานนี้ผ่าน เพิ่มประสิทธิภาพวิดีโอ
>> -Edgar คุณสามารถเพิ่มนี้
>> -Hang ที่
>> -I've รับการทำงานในการสะท้อนนี้
>> ภาพสะท้อนของคน -There ของ
>> -Reflection
-There เป็นภาพสะท้อนของใบหน้าของชายคนนั้น
>> -The สะท้อน!
-There สะท้อน
ซูมในกระจก
คุณสามารถเห็นภาพสะท้อน
>> คุณเลือกแขวนเสริมสร้างภาพลักษณ์จากที่นี่?
คุณเลือกแขวนเพิ่มมันได้หรือไม่
เราเลือกแขวนเพิ่มนี้
คุณเลือกแขวนเพิ่มมันได้หรือไม่
-hold ที่สอง
ฉันจะเพิ่ม
ซูมในประตู
-Times 10
ซูม
-Move ใน
พูดถึงมากที่สุด
cmd- รอหยุด
แบบครบวงจร
มันหยุดชั่วคราว
-Rotate เรา 75 องศา รอบแนวตั้งโปรด
>> แบบครบวงจร
กลับไปส่วนหนึ่ง เกี่ยวกับประตูอีกครั้ง
>> -Got เพิ่มภาพที่สามารถบิตแมป?
>> -Maybe เราสามารถใช้ปราดีปซิงห์ วิธีการที่จะมองเข้าไปในหน้าต่าง
>> ซอฟแวร์ -The เป็นรัฐของศิลปะ
>> eigenvalue กรุออก
>> Global- ด้วยขวา การรวมกันของ algorithms--
>> แสงสว่างนำของพระองค์จึง ขั้นตอนวิธีการในระดับต่อไป
และฉันสามารถใช้พวกเขาเพื่อ เพิ่มรูปนี้
>> -Lock และขยายแกน Z
>> -Enhance
เพิ่ม
-Enhance
ทำให้แข็งตัวและเพิ่ม
[จบการเล่นวิดีโอ]
เดวิดเจลัน: ดังนั้นผู้ที่มี ทุกคำ แต่พวกเขาไม่ได้
ที่ใช้ในประโยคที่ถูกต้อง
และแน่นอนในอนาคตเวลาใด ๆ โปรดที่คุณได้ยินคนพูดคำว่า
"เพิ่ม" หัวเราะเพียงเล็กน้อย
เพราะเมื่อคุณพยายามที่จะเพิ่มประสิทธิภาพ เช่นนี้เป็นสิ่งที่เกิดขึ้น
>> ดังนั้นนี่คือภาพที่งดงาม
นี้เป็นของตัวเอง CS50 Daven
และคิดว่าเราต้องการที่จะ มุ่งเน้นในการกระพริบตาในดวงตาของเขา
หรือภาพสะท้อนของ คนเลวที่เห็นได้ชัดว่า
จับโดยกล้องรักษาความปลอดภัย
นี่คือสิ่งที่เกิดขึ้นเมื่อ คุณซูมในภาพที่
มีเพียงจำนวน จำกัด ของบิตที่เกี่ยวข้องกับมัน
>> นั่นคือสิ่งที่คุณจะได้รับ
และแน่นอนในสายตาของ Daven แต่สี่อาจจะหกพิกเซล
ที่ประกอบด้วยสิ่งที่ ก็มีเสน่ห์มี
เพื่อหาชุดที่สี่ในที่สุดจะมี คุณสำรวจโลกนี้โดยเฉพาะอย่างยิ่ง
โดยธรรมชาติของสิ่งที่ ที่เราเรียกฉันแฟ้ม / o ที่
I / O เป็นเพียงวิธีที่จินตนาการของ อินพุทและเอาท์พุบอกว่า
>> ดังนั้นป่านนี้ทั้งหมดของการมีปฏิสัมพันธ์ ที่เราเคยมีกับคอมพิวเตอร์
ได้รับส่วนใหญ่ของคุณด้วย แป้นพิมพ์และหน้าจอ
แต่ไม่มากกับฮาร์ดดิสก์ หรือบันทึกไฟล์ที่เกินกว่าคนที่คุณ
ตัวเองเขียน
โปรแกรมของคุณป่านนี้มี ไม่ได้รับการสร้างและประหยัด
และการอัพเดตไ​​ฟล์ของตัวเอง
>> ดีสิ่งที่เป็นไฟล์ได้หรือไม่
ดีบางสิ่งบางอย่างเช่น JPEG
นี่คือภาพที่คุณอาจจะ มีหรืออัปโหลดไปยัง Facebook,
หรือดูทุกที่บนเว็บ
อันที่จริงภาพเราที่เพียงแค่ เลื่อยของ Daven เป็น JPEG
และสิ่งที่น่าสนใจ เกี่ยวกับไฟล์เช่น JPEGs
คือว่าพวกเขาสามารถระบุ มักจะโดยรูปแบบบางอย่างของบิต
>> ในคำอื่น ๆ ก็เป็นสิ่งที่ แตกต่างจาก JPEG GIF
จากปิงจาก Word เอกสารจากแฟ้ม Excel?
ดีก็แตกต่างกันเพียง รูปแบบของบิต
และรูปแบบที่แตกต่างกันเหล่านี้ ปกติจะอยู่ที่จุดเริ่มต้นของไฟล์เหล่านั้น
>> เพื่อที่ว่าเมื่อเปิดเครื่องคอมพิวเตอร์ของคุณคำ หมอหรือเมื่อคอมพิวเตอร์เปิด JPEG,
มันก็ดูปกติท​​ี่ หลายบิตแรกในแฟ้ม
และถ้ามันตระหนักถึงรูปแบบ มันบอกว่าโอ้นี้เป็นภาพ
ผมขอแสดงให้ ผู้ใช้เป็นกราฟิก
หรือโอ้นี้ดูเหมือนว่าหมอคำ
ผมขอแสดงให้ผู้ใช้เป็นเรียงความ
>> ดังนั้นสำหรับตัวอย่างเช่นภาพ JPEG, มันจะเปิดออกมี
ที่มีความซับซ้อนอย่างเป็นธรรม ภายใต้เครื่องดูดควัน
แต่สามไบต์ครั้งแรกในทุกส่วน JPEG เริ่มต้นด้วยตัวเลขเหล่านี้สาม
ดังนั้นไบต์ศูนย์หนึ่งและสองมีใน ทุก JPEG, 255 แล้วจำนวนมากที่สุด
216 แล้วจำนวน 255
>> และสิ่งที่คุณจะสามารถ จะเริ่มต้นทำในสัปดาห์หน้า
เป็นจริงโผล่ใต้ เครื่องดูดควันของไฟล์เช่น JPEGs
และเช่นไฟล์บิตแมปและเห็น สิ่งที่เคยมีมานานเป็น
ในขณะที่คุณได้ใช้คอมพิวเตอร์
>> แต่สิ่งที่มีอยู่ไม่ปกติ เขียนเหมือนเลขทศนิยมเช่นนี้
นักวิทยาศาสตร์คอมพิวเตอร์ไม่ได้ มีแนวโน้มที่จะพูดในทศนิยม
พวกเขาไม่ได้จริงๆพูดในไบนารี
โดยปกติแล้วเมื่อเราต้องการ ในการแสดงตัวเลข
เราจะใช้เลขฐานสิบหก ที่คุณอาจจำ
จากการพูดการตั้งปัญหา หนึ่งที่ท้าทาย
คุณจะคิดเกี่ยวกับระบบที่แตกต่างกัน
>> เราแน่นอนมีความคุ้นเคย กับทศนิยมศูนย์ถึงเก้า
เราได้พูดคุยเกี่ยวกับไบนารี
และเราไม่ได้จริงๆมี การใช้ที่มากที่นี่
ที่ออกมาเพราะเครื่องคอมพิวเตอร์ที่จะใช้ว่า
แต่โปรแกรมเมอร์จะมาก บ่อยครั้ง แต่ไม่เสมอไป
ใช้เลขฐานสิบหกซึ่งก็หมายความว่า คุณมี 16 ตัวอักษรในตัวอักษรของคุณ
เมื่อเทียบกับสองคนหรือ 10
>> ดังนั้นวิธีที่คุณนับถึงสูง กว่าเก้าในเลขฐานสิบหก?
คุณไป 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, , b, c, D, E, F, เพียงโดยการประชุม
แต่สิ่งที่สำคัญคือว่าแต่ละ ของเหล่านี้เป็นสัญลักษณ์เดียว
ไม่มี 10
ไม่มี 11 ต่อ se เพราะแต่ละ จากตัวเลขของคุณเช่นเดียวกับในทศนิยม
และเช่นเดียวกับในไบนารีควรเพียง จะเป็นตัวละครตัวเดียวโดยการประชุม
>> เพื่อที่ว่านั้นเป็นตัวอักษรที่เรามี ในการกำจัดของเราสำหรับเลขฐานสิบหก
ดังนั้นสิ่งที่จะ JPEG ลักษณะเหมือนถ้าคุณ เขาจะเขียนออกครั้งแรกที่สามผู้
ไบต์ไม่เป็นทศนิยม แต่ เช่นเป็นเลขฐานสิบหก?
และเหตุผลที่เป็นฐานสิบหกได้ทั้งหมดที่มีประโยชน์ที่?
>> ดีดูอย่างรวดเร็วที่ยกตัวอย่างเช่น
ดังนั้นถ้าผมเขียนออกบิตที่ เป็นตัวแทน numbers-- ทศนิยมเหล่านี้
นี้อาจจะมีสนิมเล็กน้อย ในขณะนี้จากไม่กี่สัปดาห์หลัง
แต่คนเดียวที่เหลือและ หนึ่งที่เหมาะสมเป็นเรื่องง่ายสวย
255 เป็นเราจำนวนที่ใหญ่ที่สุด จะเป็นตัวแทนที่มีแปดบิต
มันเป็นทุกคน
ดังนั้นเพียงคนเดียวที่เป็นอย่างอ่อนโยน ที่น่าสนใจคือหนึ่งกลาง
และถ้าคุณทำชนิดของออก คณิตศาสตร์, คุณจะได้ข้อสรุปที่แน่นอน
รูปแบบของการหนึ่งที่และ ศูนย์แสดงถึง 216
เพื่อให้เพียงกำหนดสำหรับ ตอนนี้ที่เหล่านี้ถูกต้อง
แต่ทำไมนี้เป็นที่น่าสนใจ?
>> ดีไบต์แน่นอนแปดบิต
และปรากฎว่าถ้าคุณคิดว่า ของไบต์เป็นสองชิ้นสี่บิต,
เช่นนี้
ผมขอเพียงแค่เพิ่มพื้นที่บางส่วน
ดังนั้นก่อนที่หลังจาก
ฉันได้เพิ่มเพียงพื้นที่สีขาวบาง เพื่อประโยชน์ในการมองเห็นของที่นี่
เราอาจจะทำอย่างไรตอนนี้เป็นตัวแทนใน กล่าวว่าเลขฐานสิบหกรูปสี่เหลี่ยมของบิตแต่ละ
ชุดของสี่บิตแต่ละ
>> ดังนั้นสำหรับตัวอย่างเช่นทางด้านซ้าย ตอนนี้เรามี 1111 ในไบนารี
อะไรคือสิ่งที่ตัวเลขในทศนิยมที่ ถ้าคุณทำออกคณิตศาสตร์หรือไม่
คุณมีสถานที่ที่คนที่เจ้าตัว, สถานที่ที่สี่และเป็นสถานที่ที่แปด
>> ผู้ชม: 15
เดวิดเจลัน: มันเป็น 15
ดังนั้นหากเราทำแปดบวกสี่ บวกสองบวกหนึ่งที่เราได้รับ 15
เพื่อที่ผมจะเขียนลง 15 ด้านล่าง 1111 แต่จุดทั้งที่นี่
เป็นเลขฐานสิบหกไม่ทศนิยม
ดังนั้นแทนที่จะเขียนลง 15, 1-5 ฉันจะเขียนว่าในฐานสิบหก,
ซึ่งถ้าคุณกลับคิดว่าถ้าคุณมี ศูนย์ผ่านฉสิ่งที่ 15 จะเป็นอย่างไร
ผู้ชม: ฉ
เดวิดเจลัน: ดังนั้นมันจะเปิดออกมันฉ
และคุณสามารถทำงานที่ออกมาด้วยการพูดว่า ดีถ้าเป็น 10 แล้วตกลงฉ 15
ดังนั้นแน่นอนเราสามารถเขียน ชุดเดียวกันนี้ของตัวเลขที่ฉฉ
แล้วถ้าเราทำบิตของคณิตศาสตร์ เราจะได้ข้อสรุปว่าที่ง
แปดเป็นเรื่องง่ายสวยเพราะเรา มีหนึ่งในสถานที่ที่แปด
แล้วเรามีฉฉคู่มากขึ้นของ
>> ดังนั้นสิ่งที่มนุษย์มักจะทำโดยการประชุม เมื่อพวกเขาใช้เลขฐานสิบหกคือพวกเขาเพียงแค่
เขียนนี้น้อยมากรัดกุม กำจัดส่วนใหญ่ของพื้นที่สีขาวที่
และเพียงเพื่อเป็นซุปเปอร์ที่ชัดเจนในการ ผู้อ่านว่านี้เป็นเลขฐานสิบหก
การประชุมง่ายในหมู่ มนุษย์จะถูกคุณเขียนเป็นศูนย์
x ซึ่งมีความหมายอื่น กว่าตัวระบุภาพของ
ที่นี่มาจำนวนฐานสิบหก
>> แล้วคุณใส่ตัวเลขสองหลัก, ฉ ฉในกรณีนี้แล้ว d แล้วฉฉ
ดังนั้นเรื่องยาวสั้น เลขฐานสิบหกก็มีแนวโน้มที่
จะเป็นประโยชน์เพราะแต่ละคนของ ตัวเลขศูนย์ผ่านฉเส้นอย่างสมบูรณ์แบบ
ขึ้นกับรูปแบบของสี่บิต
>> ดังนั้นถ้าคุณมีตัวเลขสองหลักเลขฐานสิบหก ศูนย์ผ่าน F อีกครั้งและอีกครั้ง
ที่ช่วยให้คุณได้อย่างสมบูรณ์แบบ แปดบิตหรือหนึ่งไบต์
ดังนั้นที่ว่าทำไมมันมีแนวโน้มที่จะ เป็นประโยชน์ตามอัตภาพ
ไม่มีทางปัญญาเป็น เนื้อหาจริงๆถัดจากนั้น
ยูทิลิตี้อื่น ๆ นอกเหนือจากที่เกิดขึ้นจริงของ
>> ตอนนี้ภาพ JPEG ไม่เพียง แต่ รูปแบบไฟล์สำหรับกราฟิก
คุณอาจจะจำได้ว่ามี ไฟล์เช่นนี้ในโลก
อย่างน้อยจากไม่กี่ปีหลัง
>> ดังนั้นนี้เป็นจริง ที่ติดตั้งใน Windows XP
ในล้านของคอมพิวเตอร์ทั่วโลก
และนี่คือแฟ้มบิตแมป, BMP
และแฟ้มบิตแมปที่คุณจะได้เห็นต่อไป สัปดาห์เพียงหมายถึงรูปแบบของจุดที่
พิกเซลที่พวกเขากำลังเรียกว่า แผนที่ในบิตจริงๆ
>> ดังนั้นสิ่งที่น่าสนใจแม้ว่า เกี่ยวกับรูปแบบไฟล์นี้, BMP, เป็น
ที่อยู่ใต้ฝากระโปรงก็ มีมากกว่าเพียงแค่สามไบต์
ที่ประกอบด้วยส่วนหัวของตนเพื่อ ที่จะพูดไม่กี่กัดครั้งแรก
จริง ๆ แล้วมันดูเล็กน้อย ความซับซ้อนได้อย่างรวดเร็วก่อน
และคุณจะเห็นนี้อยู่ในชุด P
และได้รับบางสิ่งบางอย่าง ออกมาโดยเฉพาะอย่างยิ่งในเรื่องนี้ตอนนี้
ไม่ได้ให้ความสำคัญเช่นเดียวกับความเป็นจริง ว่าที่จุดเริ่มต้นของทุกบิตแมป
ไฟล์รูปแบบกราฟิก, มีทั้งกลุ่มของตัวเลข
>> ตอนนี้ไมโครซอฟท์ ผู้เขียนของรูปแบบนี้
มีแนวโน้มที่จะเรียกคนเหล่านั้น สิ่งที่ไม่ ints และตัวอักษร
และลอย แต่คำพูดและง คำและปรารถนาและไบต์
ดังนั้นพวกเขากำลังชนิดข้อมูลที่แตกต่างกันเพียงแค่
พวกเขากำลังชื่อที่แตกต่างกัน สำหรับสิ่งเดียวกัน
แต่คุณจะเห็นว่าใน P ชุดสี่
>> แต่นี้เป็นเพียงการบอกว่าถ้ามนุษย์ ดับเบิลคลิกที่ไฟล์บาง .BMP ของเขา
หรือฮาร์ดไดรฟ์ของเธอและหน้าต่างเปิด ขึ้นแสดงให้เขาหรือเธอภาพที่
ที่เกิดขึ้นเนื่องจากการดำเนินงาน ระบบน่าจะสังเกตเห็นไม่เพียง แต่
นามสกุลไฟล์ .BMP ในชื่อไฟล์
แต่ยังมีความจริงที่ว่ามีบาง การประชุมกับรูปแบบของบิต
ที่จุดเริ่มต้นมาก ของไฟล์บิตแมปที่
>> แต่ตอนนี้ขอมุ่งเน้นไปที่ เช่นไฟล์ที่มีความซับซ้อน
แต่ในสิ่งที่เช่นนี้
สมมติว่าที่นี่ใน gedit ผม เพียงแค่จุดเริ่มต้น
ของโปรแกรมที่ง่ายสวย
ฉันมีบางอย่างรวมถึงการขึ้นด้านบน
ตอนนี้ผมได้มี #include "structs.h" แต่ ฉันจะกลับมาที่ว่าในช่วงเวลา
แต่เรื่องนี้จะเป็นประโยชน์สำหรับในตอนนี้
ดังนั้นนี่คือโปรแกรม ที่จะดำเนินการ
เช่นฐานข้อมูลของนายทะเบียน
ดังนั้นฐานข้อมูลของนักเรียน และนักเรียนทุกคนในโลก
มีชื่อและบ้านและอาจจะบาง สิ่งอื่น ๆ แต่เราจะให้มันง่าย
นักเรียนทุกคนมีชื่อและบ้าน
>> ดังนั้นถ้าผมอยากจะเขียน โปรแกรมที่มีจุดมุ่งหมายในชีวิต
เป็นเพียงการย้ำจาก เป็นศูนย์ได้ถึงสาม
ถ้ามีสามนักเรียน ที่มหาวิทยาลัยฮาร์วาร์
และฉันก็ต้องการที่จะได้รับใช้ GetString, ชื่อของนักเรียนแต่ละคนและบ้าน
และจากนั้นเพียงแค่พิมพ์เหล่านั้นออก
>> นี่คือการจัดเรียงของชอบสัปดาห์ หนึ่งสิ่งที่สัปดาห์ที่สองตอนนี้
ที่ฉันต้องการเพียงแค่สำหรับ ห่วงหรือสิ่งที่ต้องการ
และฉันต้องการที่จะเรียก GetString ไม่กี่ ครั้งแล้วพิมพ์ฉไม่กี่ครั้ง
ดังนั้นวิธีที่ฉันอาจจะทำเช่นนี้แม้ว่า เมื่อทั้งสองชื่อและบ้าน
มีส่วนร่วมสำหรับนักเรียนแต่ละคน?
>> ดังนั้นสัญชาตญาณแรกของฉันอาจจะ จะทำอะไรเช่นนี้
ครั้งแรกที่ฉันอาจจะบอกว่าดีให้ฉัน บอกว่าอาเรย์ของสตริงที่เรียกว่าชื่อ
และฉันไม่ต้องการ hardcode สามที่นี่
สิ่งที่ฉันต้องการที่จะนำมี?
ดังนั้นนักเรียนเพราะนั่นเป็นเพียง คงประกาศที่ด้านบน
เพียงเพื่อให้ฉันจะได้ไม่ต้อง hardcode สามในสถานที่หลาย
วิธีนี้จะสามารถเปลี่ยนได้ที่เดียว และมันมีผลต่อการเปลี่ยนแปลงทุก
และจากนั้นผมอาจจะทำ นักเรียนบ้านสตริง
>> และตอนนี้ฉันอาจจะทำสิ่งที่ชอบ สำหรับ (int i = 0; ฉัน <นักเรียน; i ++
ดังนั้นฉันพิมพ์ได้อย่างรวดเร็ว แต่นี้เป็น ไวยากรณ์อาจคุ้นเคยตอนนี้
>> และตอนนี้เป็นมากขึ้นล่าสุด
ถ้าผมต้องการที่จะใส่ใน i-th ชื่อของนักเรียน, ผมคิดว่าผมทำเช่นนี้
แล้วไม่ได้ชื่อ แต่ยึดบ้านฉัน
ผมทำเช่นนี้ GetString และปล่อยให้ ฉันกลับไปแก้ไขบรรทัดนี้
เห็นด้วย?
ไม่เห็นด้วย?
มันไม่ใช้ง่ายมาก
ฉันยังไม่ได้บอกผู้ใช้ว่าจะทำอย่างไร
>> แต่ตอนนี้ถ้าฉันยัง ต้องการที่จะต่อมาให้
พูดพิมพ์สิ่งเหล่านี้ ดังนั้นสิ่งที่ต้องทำแทนดูในภายหลัง
ฉันจะทำมากขึ้นด้วย เจ้านี่นี้เนื้อหาคือ
การดำเนินการที่ถูกต้องของ ได้รับชื่อและที่บ้านสาม
ของพวกเขารวมของแต่ละจากผู้ใช้
>> แต่นี่ไม่ใช่การออกแบบที่ดีมากใช่มั้ย?
เกิดอะไรขึ้นหากนักเรียนไม่ได้เพียงแค่ชื่อ และบ้าน แต่ยังมีจำนวน ID,
และหมายเลขโทรศัพท์ และที่อยู่อีเมล
และอาจจะหน้าบ้านและ อาจจะจับ Twitter,
และจำนวนของรายละเอียดอื่น ๆ ที่เกี่ยวข้องกับนักเรียนหรือบุคคลที่
มากขึ้นโดยทั่วไป
วิธีการที่เราจะเริ่มต้นที่จะเพิ่ม ฟังก์ชันการทำงานกับโปรแกรมนี้
>> ดีฉันรู้สึกเหมือนวิธีที่ง่ายที่สุดอาจจะ จะทำสิ่งที่ต้องการให้พูดว่า
นักศึกษารหัส int
ดังนั้นผมจึงสามารถใส่รหัสของพวกเขาทั้งหมดในที่นั่น
แล้วบางสิ่งบางอย่าง เช่นหมายเลขโทรศัพท์
ฉันไม่แน่ใจว่าวิธีการ รับรองว่าเพียง แต่
จึงขอไปข้างหน้าและเพียงแค่โทร นี้ twitters นักเรียนซึ่ง
เป็นเพียงเล็กน้อยแปลก but--, และสาขาพวงมากขึ้น
>> ผมได้เริ่มต้นได้อย่างมีประสิทธิภาพ คัดลอกและวางที่นี่
และนี่คือที่จะเติบโตสวย เทอะทะสวยได้อย่างรวดเร็วใช่มั้ย?
มันจะไม่ดีถ้ามี ในโลกโครงสร้างข้อมูลที่รู้จักกัน
ไม่เป็น int หรือสตริง แต่สิ่งที่ ระดับที่สูงขึ้นเป็นนามธรรมดังนั้น
ที่จะพูดเป็นที่รู้จักกันเป็นนักเรียนหรือไม่
C ไม่ได้มาด้วยในตัว ฟังก์ชั่นสำหรับนักเรียน
แต่สิ่งที่ถ้าผมต้องการที่จะให้มันดังกล่าวหรือไม่
>> ดีก็จะเปิดออกฉันจะไป เปิดไฟล์ที่เรียกว่า structs.h ที่นี่
และคุณสามารถทำตรงนั้น
และเรากำลังจะเริ่มต้นการทำเช่นนี้ตอนนี้
และภายใต้ประทุนของ P ชุดสาม, คุณได้รับการทำอยู่แล้วในขณะนี้
ไม่มีสิ่งเช่นกรัมดูแลรักษาหรือ รูปไข่กรัมในการเขียนโปรแกรมภาษาซี
>> คนที่ Stanford ดำเนินการเหล่านั้น ชนิดข้อมูลโดยใช้วิธีการนี​​้ที่นี่
ประกาศข้อมูลใหม่ของตัวเอง ประเภทโดยใช้คำหลักใหม่
เรียกว่า struct และอีก เรียกว่า typedef หนึ่ง
และแน่นอนแม้ว่าไวยากรณ์ มีลักษณะเล็ก ๆ น้อย ๆ ที่แตกต่างจากสิ่งที่
ที่เราเคยเห็นมาก่อนใน หลักการมันง่ายสุด
>> เพียงแค่นี้ก็หมายถึง "กำหนดประเภท".
ที่เป็นไปได้ โครงสร้างและโครงสร้าง
เป็นเหมือนภาชนะ สำหรับสิ่งที่หลาย ๆ
และโครงสร้างที่เป็นไป ที่จะมีสายเรียกชื่อ
และบ้านสายที่เรียกว่า
และขอเรียกเพียงเพื่อความสะดวก นี้นักเรียนโครงสร้างข้อมูลทั้ง
>> ดังนั้นช่วงเวลาที่คุณจะได้รับการ อัฒภาคที่คุณมีในขณะนี้
สร้างข้อมูลของคุณเอง ชนิดที่เรียกว่านักเรียน
ที่ตอนนี้ยืนอยู่ข้าง int, และลอยและถ่านและสตริง
และดูแลรักษากรัมและกรัมรูปไข่และหมายเลขใด ๆ ในสิ่งที่คนอื่น ๆ ได้คิดค้น
>> ดังนั้นสิ่งที่เป็นประโยชน์เกี่ยวกับเรื่องนี้ ขณะนี้คือว่าถ้าฉันกลับไป
เพื่อ struct 0 และจบนี้ การดำเนินการที่ฉันเขียน
ล่วงหน้าที่นี่สังเกตได้ว่าทุก ของ messiness หลีกเลี่ยงไม่ได้
เป็นเรื่องเกี่ยวกับที่จะเริ่มต้นสิ่งที่เกิดขึ้นขณะที่ผมเพิ่ม หมายเลขโทรศัพท์และที่ twitters และทุก
สิ่งอื่น ๆ เหล่านี้เพื่อ ความหมายของนักเรียนที่
ตอนนี้ก็ห่อรัดกุมขึ้น เป็นเพียงหนึ่งในแถวของนักเรียน
>> และแต่ละของนักเรียนที่ขณะนี้ มีหลายสิ่งภายในของมัน
เพื่อให้เพียงใบหนึ่งคำถาม
คุณจะได้รับที่ชื่อ และบ้านและ ID,
และสิ่งอื่นที่เป็น ด้านในของนักเรียนหรือไม่
ง่ายสุดเช่นกัน
ไวยากรณ์ใหม่ แต่เป็นความคิดที่เรียบง่าย
>> คุณเพียงแค่ดัชนีลงในอาร์เรย์ ที่เราได้เมื่อสัปดาห์ที่แล้วและ
และสิ่งที่เห็นได้อย่างชัดเจน ชิ้นใหม่ของไวยากรณ์?
เพียง. ซึ่งหมายความว่า "ไปภายใน โครงสร้างและได้รับข้อมูลที่เรียกว่า
ชื่อที่ได้รับข้อมูลที่เรียกว่าบ้าน ได้รับข้อมูลที่เรียกว่านักเรียน ".
>> ดังนั้นใน P ชุดสามถ้าคุณ ยังคงทำงานอยู่ในนั้น
และคนส่วนใหญ่ยังคง จะตระหนักดีว่าในขณะที่คุณ
เริ่มใช้สิ่งที่ต้องการ rects กรัมกรัมและนิ้วก้อย
และสิ่งอื่น ๆ ที่ดูเหมือนจะไม่ มาจากสัปดาห์ที่ศูนย์หนึ่งหรือสอง
ตระหนักดีว่านั่นเป็นเพราะ Stanford ประกาศบางชนิดข้อมูลใหม่
>> และแน่นอนที่ว่าสิ่งที่เราจะ ทำเช่นเดียวกับใน P ชุดสี่เมื่อ
เราเริ่มที่จะจัดการกับสิ่ง เช่นภาพบิตแมปและอื่น ๆ
เพื่อให้เป็นเพียงแค่ทีเซอร์และ รูปแบบจิตสำหรับสิ่งที่จะมา
ตอนนี้ผม procrastinated เล็กน้อยในเช้าวันนี้
ฉันเป็นชนิดของความอยากรู้อยากเห็นสิ่งที่ วอลล์เปเปอร์ไมโครซอฟท์จริง
ดูเหมือนว่าวันนี้
และมันจะเปิดออกคนในปี 2006 จริงไปเกือบได้อย่างแม่นยำ
จุดเดียวกันในการถ่ายภาพในความเป็นจริง สิ่งที่ดูเหมือนว่าวันนี้
ข้อมูลนี้เป็นรกน้อย
>> ดังนั้นการพูดตอนนี้ของภาพ ให้นำกลับมา Daven ที่นี่
บนหน้าจอและนิโคลัส และเพียงแค่เตือนให้คุณ
ว่าถ้าคุณต้องการที่จะเข้าร่วมกับเราเพื่อรับประทานอาหารกลางวัน นี้วันศุกร์ที่หัวไปยัง URL ตามปกติของเรา
ที่นี่
>> ดังนั้นเราจึงไม่ที่ปล่อยออกในวันจันทร์ที่?
เราได้นำปัญหานี้ใช่มั้ย?
นี้ดูเหมือนจะถูกต้อง การดำเนินการแลกเปลี่ยน
โดยที่คุณสละสอง ints, หนึ่งที่เรียกว่าอย่างใดอย่างหนึ่งที่เรียกว่าข
สลับพวกเขาเช่นเดียวกับลอร่าได้ที่นี่ บนเวทีกับนมและน้ำ
โดยใช้ชั่วคราว ตัวแปรหรือถ้วยที่ว่างเปล่า
เพื่อให้เราสามารถนำขในและใน ขโดยไม่ทำให้ระเบียบของสิ่งที่
เราใช้ตัวแปร
มันเรียกว่าอุณหภูมิ
>> แต่สิ่งที่เป็นพื้นฐาน ปัญหากับรหัสนี้ในวันจันทร์ที่?
สิ่งที่เป็นปัญหาที่นี่?
ใช่
>> ผู้ชม: มันต้องใช้พื้นที่มากขึ้น
>> เดวิดเจลัน: ใช้เวลามากขึ้น พื้นที่เพราะฉันใช้ตัวแปร
และที่ตกลง
ที่เป็นจริง แต่ฉัน จะบอกว่าที่ตกลง
มันเป็นเพียง 32 บิตในแกรนด์ รูปแบบของสิ่งจึงไม่เป็นเรื่องใหญ่
ความคิดอื่น ๆ
ผู้ชม: มันแลกเปลี่ยน ตัวแปรในท้องถิ่น
เดวิดเจลัน: แน่นอน
มันเป็นเพียงสัญญาแลกเปลี่ยนตัวแปรท้องถิ่น
เพราะเวลาที่คุณเรียกฟังก์ชัน เมื่อฉันมีถาดจาก Annenberg
ครั้งสุดท้ายที่คุณจะมีหลักที่อยู่ด้านล่าง
เร็วที่สุดเท่าที่คุณเรียกฟังก์ชันที่เรียกว่า แลกเปลี่ยนแลกเปลี่ยนไม่ได้รับ x และ y,
ค่าเดิม
ไม่ได้รับสิ่งแลกเปลี่ยนที่เราได้เรียกร้อง?
ผู้ชม: สำเนา
เดวิดเจลันดังนั้นสำเนาของพวกเขา
จึงได้รับหนึ่งและสองถ้าคุณ จำตัวอย่างจากครั้งสุดท้าย
แต่สำเนาของหนึ่งและสอง ที่จะสลับที่ประสบความสำเร็จ
แต่โชคร้ายที่ในท้ายที่สุด ค่าเหล่านี้จะยังคงเหมือนเดิม
เพื่อให้เราสามารถเห็นสิ่งนี้กับเรา เพื่อนใหม่หวังว่า GDB,
ที่คุณหรือ TFS และ Ca มี ได้รับการแนะนำให้คุณไปดังต่อไปนี้
>> จึงไม่มีการเรียกคืนการแลกดู like-- ให้ เปิดเจ้านี่มีลักษณะเช่นนี้
เราเริ่มต้นได้ x เพื่อหนึ่งถึงสองปี
มีพวงของการพิมพ์ของฉ
แต่แล้วการเรียกร้องที่สำคัญ นี่คือการสลับที่
เป็นสิ่งที่เรารหัส เพิ่งเห็นช่วงเวลาที่ผ่านมา
ซึ่งเป็นที่ถูกต้องในครั้งแรก อย่างรวดเร็ว แต่หน้าที่
โปรแกรมนี้ไม่ได้ทำงานเพราะ ก็ไม่ได้สลับ x และ y อย่างถาวร
>> ดังนั้นเรามาดูนี้อบอุ่นอย่างรวดเร็ว ขึ้นที่นี่กับ GDB, ./noswap
พวงของข้อมูลเป็นอย่างดีว่า ฉันจะได้รับการกำจัดด้วยการควบคุม L สำหรับในตอนนี้
และตอนนี้ฉันกำลังจะไป ไปข้างหน้าและเรียกใช้
และโชคร้ายที่ ไม่ได้มีประโยชน์ที่
มันวิ่งโปรแกรมภายในนี้ โปรแกรมที่เรียกว่า GDB ดีบัก,
แต่มันก็ไม่ให้ฉันกระตุ้นรอบ
>> ดังนั้นวิธีการที่จริงผมสามารถหยุดชั่วคราว ดำเนินการภายในโปรแกรมนี้
ดังนั้นการหยุดพัก
และผมสามารถทำลายใด ๆ จำนวนบรรทัดหนึ่ง, 10, 15
แต่ผมยังสามารถทำลายสัญลักษณ์ โดยกล่าวว่าการหยุดพักเป็นหลัก
และที่จะตั้งพัก จุดที่เห็นได้ชัดที่เส้น 16 ในหลัก
และสถานที่ที่เป็นสาย 16?
ให้ขึ้นไปยังรหัส และไปถึง noswap
และแน่นอนสาย 16 ครั้งแรกในโปรแกรม
>> ดังนั้นตอนนี้ถ้าผมไปข้างหน้าและประเภท ใช้เวลานี้ใส่ก็หยุดชั่วคราว
จึงขอกระตุ้นรอบ
พิมพ์ค่า x ทำไม x ศูนย์?
และไม่สนใจเครื่องหมายดอลลาร์
นั่นเป็นเพียงสำหรับนักเล่น การใช้งานของโปรแกรม
ทำไม x เป็นศูนย์ในขณะนี้คืออะไร?
ใช่
>> ผู้ชม: มันหยุดขวาก่อนที่ สาย 16, ไม่จริงในบรรทัด 16
เดวิดเจลัน: แน่นอน
GDB โดยค่าเริ่มต้นได้หยุดชั่วคราว ดำเนินการก่อนที่จะสาย 16
ดังนั้นจึงยังไม่ได้ดำเนินการซึ่ง หมายถึง x มีค่าที่ไม่รู้จักบาง
และเรามีโชคดีว่ามันเป็น สิ่งที่สะอาดเช่นศูนย์
ดังนั้นตอนนี้ถ้าผมพิมพ์ต่อไป ตอนนี้ก็ดำเนินการ 16
มันรอสำหรับผมที่จะดำเนินการ 17
ให้ฉันไปข้างหน้าและพิมพ์ x
มันเป็นหนึ่งใน
ให้ฉันไปข้างหน้าและพิมพ์ปี
สิ่งที่ฉันควรจะเห็นตอนนี้หรือไม่
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: ดังน้อย
>> ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ไม่ค่อนข้างเป็นเอกฉันท์
ดังนั้นใช่เราจะเห็นค่าขยะบาง
ตอนนี้, y เป็น 134514064 มี
ดีก็เป็นเพียงบางค่าขยะ
โปรแกรมของฉันจะใช้แรม เพื่อวัตถุประสงค์ที่แตกต่างกัน
มีฟังก์ชั่นอื่น ๆ ที่เป็น
คนอื่น ๆ เขียนในคอมพิวเตอร์ของฉัน
ดังนั้นบิตเหล่านั้นได้ถูกนำมาใช้ ค่าอื่น ๆ และสิ่งที่ฉันเห็น
เป็นเศษของบาง ก่อนการใช้งานหน่วยความจำที่
>> ดังนั้นไม่มีเรื่องใหญ่เพราะทันที ขณะที่ผมพิมพ์ต่อไปแล้วพิมพ์ Y,
มันเริ่มต้นได้ที่ ค่าที่ฉันต้องการ
ดังนั้นตอนนี้ขอไปข้างหน้าเร็วขึ้นเล็กน้อย
ยังไม่มีการต่อไป
ลองทำมันอีกครั้ง
แต่ฉันไม่ต้องการที่จะตี ได้ที่นี่เพราะถ้าฉัน
ต้องการที่จะเห็นสิ่งที่เกิดขึ้นภายใน การแลกสิ่งที่เป็นคำสั่งหรือไม่
>> ผู้ชม: ขั้นตอน
>> เดวิดเจลัน: ขั้นตอน
ดังนั้นขั้นตอนนี้ฉันเป็น ฟังก์ชั่นมากกว่าที่มากกว่านั้น
และตอนนี้มันเป็นความลับเล็ก ๆ น้อย ๆ ตรงไปตรงมา แต่นี้เป็นเพียงแค่
บอกฉันฉันอยู่ในสาย 33 ขณะนี้
และขอให้ทำเช่นนี้อีกครั้ง
อุณหภูมิพิมพ์
ค่าขยะลบเวลานี้ แต่นั่นเป็นเพียงยังคงค่าขยะ
ดังนั้นขอให้ทำต่อไปอุณหภูมิพิมพ์
มันเริ่มต้นได้ที่ 1 ซึ่ง คือค่าของ x อาคา
>> ตอนนี้ที่เป็นของเราและ x มาจากไหน?
ดีทราบในหลักของเรา เรียกว่าค่าเหล่านี้ x และ y
จากนั้นเราจะผ่านพวกเขาที่จะแลกเปลี่ยนดังต่อไปนี้
X มาก่อนจุลภาคปี
แล้วแลกเปลี่ยนสามารถเรียกพวกเขา x และ y
แต่เพื่อความชัดเจนก็ เรียกพวกเขาและข
แต่ A และ B อยู่ในขณะนี้จะเป็น สำเนาของ x และ y ตามลำดับ
>> ดังนั้นถ้าผมกลับไป GDB ไปชั่วคราว เป็นหนึ่งและเป็นหนึ่ง
แต่ถ้าผมทำต่อไปและตอนนี้ทำพิมพ์ , ได้ถูกย้ายไปแล้วกว่า
นมที่ได้รับการเทลงไปในอดีต แก้วหรือในทางกลับกันน้ำผลไม้สีส้ม
>> และถ้าผมทำต่อไปอีกครั้งและตอนนี้ ถ้าผมพิมพ์ออกมาในขณะที่การตรวจสอบสติ,
ยังคงเป็นสอง แต่ขเป็นหนึ่ง
ตรงไปตรงมาก็ยังคงมี
ฉันไม่สนใจสิ่งที่อุณหภูมิเป็น
แต่ทันทีที่ผมพิมพ์สมมุติว่า ดำเนินการต่อไปจะกลับไปตอนนี้ฉันในตอนท้าย
โปรแกรม
และโชคไม่ดีที่ x เป็น ยังคงเป็นหนึ่งและ y ยังคงสอง
>> ดังนั้นสิ่งที่เป็นยูทิลิตี้ของ GDB มี?
มันไม่ได้ช่วยแก้ไข ปัญหาต่อ se
แต่ก็หวังว่าจะช่วยให้ฉัน เข้าใจได้โดยตระหนักถึง
ว่าใช่ตรรกะของฉันที่ถูกต้อง แต่ รหัสของฉันไม่ได้ในท้ายที่สุดมี
ผลกระทบอย่างถาวร
นั่นคือปัญหาที่เรากำลัง ไปตอนนี้แก้วันนี้
>> แต่ขอให้ได้มีโดยวิธีการนี​​้
สตริงเป็นเรื่องโกหก
มันเกินไปไม่ชนิดข้อมูล ที่มีอยู่ใน C. มัน
เป็นคำพ้องความหมายสำหรับบางคน เวลาสำหรับสิ่งอื่น
และเราสามารถที่จะเปิดเผยว่าดังนี้
>> ให้ฉันไปข้างหน้าและเปิดขึ้น โปรแกรมที่เรียกว่าเปรียบเทียบ-0
และมากกว่าการพิมพ์หนึ่งออกนี้ เราจะเริ่มต้นที่จะเดินผ่านรห​​ัส
ฉันได้เขียน แต่ เป็นเพียงไม่กี่บรรทัด
ดังนั้นนี่คือการเปรียบเทียบ-0
และสิ่งแรกที่ฉันทำ จะได้รับบรรทัดของข้อความ
>> แต่สังเกตเห็นสิ่งที่ฉัน ทำครั้งแรก
จะแตกต่างกันอย่างเห็นได้ชัดเกี่ยวกับสาย 21 คืออะไร?
ที่จริงแล้วรอสักครู่
นี้เป็นสำเนาสอง
ที่ไม่ได้แม้กระทั่งโปรแกรมที่เหมาะสม
ขวาแจ้งเตือนสปอยเลอร์ทั้งหมด
ขวาทั้งหมดดังนั้นจึงไม่ทราบว่า
นั่นเป็นคำตอบให้กับคำถามในอนาคต
>> นี่คือเปรียบเทียบ-0, และฉัน เกี่ยวกับการที่จะได้รับบรรทัดของข้อความ
โปรแกรมที่ง่ายมาก
ดังนั้นนี่คือตรงไปตรงมา
นี้เป็นเหมือนสัปดาห์หนึ่งสิ่งที่สัปดาห์ที่สอง ในขณะนี้ สตริง s = GetString
ตอนนี้ผมบอกว่ามันลงที่นี่อีกครั้ง
สตริง t = GetString
และแล้วสิ่งสุดท้ายที่อยู่ในนี้ โปรแกรมเป็นชื่อของมันบ่งบอก
คือผมจะพยายามที่จะเปรียบเทียบพวกเขา
>> ดังนั้นถ้าวินาที, สตริงแรก เท่ากับ = t แล้วฉัน
จะบอกว่าคุณพิมพ์สิ่งเดียวกัน
อื่นผมจะบอกว่า คุณพิมพ์สิ่งที่แตกต่าง
จึงขอรวบรวมและเรียกใช้โปรแกรมนี้
เพื่อให้เปรียบเทียบเป็นศูนย์
ดูดี
ไม่มีข้อผิดพลาดการรวบรวม
>> ให้ฉันไปข้างหน้าขณะนี้ และพิมพ์ ./compare-0
ให้ฉันไปข้างหน้าและพูดอะไรบางอย่าง : Daven และบางสิ่งบางอย่างร็อบ
และฉันพิมพ์สิ่งที่แตกต่าง
เพื่อให้ห่างไกลที่ดีเพื่อให้
โปรแกรมที่ดูเหมือนว่าจะมีความถูกต้อง
>> แต่ขอเรียกใช้อีกครั้ง
พูดอะไรบางอย่าง: เกบ
ขวาทั้งหมด
บางทีฉันอาจจะตีแถบพื้นที่ หรือสิ่งที่ขี้ขลาด
ลองทำมันอีกครั้ง
ดังนั้น Zamyla
Zamyla
สิ่งที่แตกต่าง
ดังนั้นสิ่งที่เกิดขึ้น?
>> ดังนั้นเราจึงมีทั้งสองสาย รหัส GetString ถูกเรียกว่าเป็นครั้งที่สอง
และจากนั้นผมก็ พยายามที่จะเปรียบเทียบและเสื้อ
แต่สิ่งที่จริงๆแล้วที่เกิดขึ้น?
ดีเขียนด้วยลายมือของฉันเกี่ยวกับการที่ เนื้อตัวอย่างนี้บ้าง
และขอให้จริงโยน นี้ขึ้นกว่าที่นี่เป็นอย่างดี
>> ดังนั้นเราจึงมีสายเช่น สตริง s = GetString
เพื่อให้เป็นเพียงแค่ครั้งแรก สายที่น่าสนใจจากโปรแกรมที่
แต่สิ่งที่ทุกเวลานี้ได้รับการ ที่เกิดขึ้นภายใต้กระโปรงหน้ารถหรือไม่
ดีที่ซ้ายมือด้านเป็นสตริง ซึ่งเป็นชนิดของตัวแปรบาง
และก็เรียกว่าร้าน
ดังนั้นผมรู้ว่านี่คือการใช้หน่วยความจำ หรือแรมในคอมพิวเตอร์ของฉันอย่างใด
ดังนั้นฉันจะเป็นนามธรรม วาดที่เป็นรูปสี่เหลี่ยม
32 บิตก็จะเปิดออก แต่ เพิ่มเติมว่าในอนาคต
และแล้วสิ่งที่เกิดขึ้นที่นี่?
>> ดี GetString เห็นได้ชัด ได้รับสายจากผู้ใช้
และ GetString ได้ Zamyla หรือเกบหรือ Daven
จึงขอเลือกแรก ของผู้ซึ่งเป็น Daven
เพื่อให้มีประสิทธิภาพสิ่งที่ GetString ได้ ผมในกรณีแรกที่ D--V-E-n
และแล้วสิ่งที่คนอื่นทำ มันให้ฉันแอบ?
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ใช่ / 0 หรือ null ตัวอักษร
ดังนั้นมันได้อย่างมีประสิทธิภาพให้ฉันสตริง
แต่เรารู้อยู่แล้วว่าก่อนนี้ ดูเหมือนว่าสตริงเป็นเพียงอาร์เรย์
ของตัวละครและจะยกเลิกโดย ตัวอักษรแมวมองพิเศษนี้ / 0
>> แต่ถ้าเรื่องนี้เป็นความจริง และนี่คือตาราง,
นี้เห็นได้ชัดว่ารูปสี่เหลี่ยมผืนผ้าขนาดใหญ่มาก
และแน่นอนนี้คือ ฉันเรียกร้องเพียง 32 บิต
และนี่คือชัดเจนกว่า 32 บิตเพราะนี่อาจจะเป็น
แปดบวกแปดบวกแปด บวกแปดบวกแปด
เพียงเพราะไบต์ใน ASCII
วิธี heck เราจะไปพอดี Daven ลงในกล่องเล็ก ๆ น้อย ๆ ที่นี่?
>> ดีสิ่งที่ GetString ทำจริง?
ดีตารางที่นี่แสดงให้เห็นถึง หน่วยความจำของคอมพิวเตอร์ของฉันหรือแรม
จึงขอพลบอกว่าถ้า แต่ละเหล่านี้แสดงให้เห็นถึงไบต์,
แล้วเราสามารถคิดของแต่ละ ไบต์ที่มีที่อยู่
เช่น 33 Oxford Street, หรือ 34 Oxford Street หรือ 35 Oxford Street
>> ดังนั้นเช่นเดียวกับบ้านที่มีที่อยู่ และอาคารที่มีอยู่
เพื่อทำแต่ละไบต์ของ หน่วยความจำมีที่อยู่หรือหมายเลข
ที่ระบุตัวตนของพวกเขา
ตอนนี้เป็นพล
แต่การที่จะให้มันง่ายที่ฉันจะ ใช้เลขฐานสิบหกเพียงแค่การประชุม
แต่ 0x หมายถึงอะไรอื่น ๆ กว่า "นี่คือเลขฐานสิบหก".
และฉันจะอ้างว่า "D" จบลงด้วยการที่ Byte หนึ่งในความทรงจำ
>> ผมไม่มีอะไรอื่นที่เกิดขึ้นใน หน่วยความจำเพื่อ Daven ได้จุดแรก
Byte ที่หนึ่ง
นี้นั้นเป็นไปได้ 0x2
นี้เป็นไป 0x3
นี้เป็นไปได้ 0x4
นี้เป็นไป 0x5
นี้เป็นไปได้ 0x6
>> แต่เมื่อคุณเริ่มคิด เกี่ยวกับสิ่งที่กระทำของคอมพิวเตอร์
ภายใต้กระโปรงหน้ารถ คุณสามารถเริ่มต้นเพื่อสรุป
วิธีการที่คุณบางปีที่ผ่านมาก็จะ ได้ดำเนินการ C ตัวเอง
เป็น GetString อาจเป็นสิ่งที่ returning-- เพราะมัน
รู้สึกเหมือนมันไม่ กลับ Daven ต่อ se
เพราะเขาก็ไม่ได้ไป ให้พอดีกับ box-- เล็ก ๆ นี้
ดังนั้นสิ่งที่ GetString อาจกลับมา?
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: สถานที่ตั้งของ Daven
และจะได้รับการทำเช่นนี้ นับตั้งแต่สัปดาห์หนึ่ง
สิ่งที่ GetString เป็นจริง กลับไม่ได้รับสายต่อ se
นั่นเป็นหนึ่งในคำโกหกสีขาวเล็ก ๆ น้อย ๆ
ก็กลับมาที่อยู่ของ สตริงในหน่วยความจำที่อยู่ไม่ซ้ำกัน
Daven อาศัยอยู่ที่ 33 Oxford Street
แต่ชัดถ้อยชัดคำ, กาวินมีชีวิตอยู่ ที่ 0x1, ที่อยู่หมายเลขหนึ่ง
>> ดังนั้นสิ่งที่ได้รับอยู่ในนี้ กล่องเล็ก ๆ นั้นจะมีความชัดเจน
เป็นเพียงที่อยู่ของสตริงที่
ดังนั้นตลอดเวลานี้นี้ ได้รับไปเมื่อวันที่
แต่สิ่งที่นี้คำว่า ขณะนี้คือว่าถ้าทุก s มี
คือหมายเลขภายในของมันที่เป็น ที่จะหยุดคุณ, โปรแกรมเมอร์
จากการวางตัวเลขใด ๆ ใน ใด ๆ ตัวแปรและเพียงแค่กระโดด
ที่จะรับรู้ของหน่วยความจำที่?
และแน่นอนเราจะได้เห็น ที่เป็นภัยคุกคามในครั้งต่อไป
>> แต่ตอนนี้รู้สึกไม่เพียงพอ
ถ้าผมบอกว่าได้รับฉัน สตริงคุณให้ฉัน Daven
แต่คุณไม่ได้จริงๆให้ฉัน Daven
สิ่งที่คุณให้ฉันเป็นอยู่ Daven ของ
ฉันจะแล้วทราบว่า ที่ Daven เริ่มต้นและ ends--
เรื่องราวของการ weird-- Daven ที่เริ่มต้นและสิ้นสุด
และจากนั้นต่อไป สตริงในหน่วยความจำเริ่มต้น?
>> ดีถ้าคุณกำลังส่ง ฉันเริ่มต้นของ Daven,
เป็นหลักวิธีทำฉันรู้ว่า ที่ส่วนท้ายของชื่อของเขาคืออะไร?
ที่ null อักขระพิเศษซึ่ง คือสิ่งที่สำคัญมากในขณะนี้
ถ้าสายใต้ เครื่องดูดควันจะมีการระบุเพียง
โดยเฉพาะสถานที่ตั้งของพวกเขาในความทรงจำ
ดังนั้นตลอดเวลาที่ สิ่งที่ได้เกิดขึ้น
>> ดังนั้นเมื่อเรามองแล้ววันนี้ที่ รหัสที่นี่อธิบาย
ถ้าคุณจะผิดพลาดในบรรทัดที่ 26
ทำไม Zamyla และ Zamyla แตกต่างกันอย่างไร
ทำไมเกบเกบและแตกต่างกันอย่างไร
ใช่ในด้านหลัง
>> ผู้ชม: พวกเขามีที่อยู่ที่แตกต่างกัน
>> เดวิดเจลัน: เพียงเพราะ พวกเขามีที่อยู่ที่แตกต่างกัน
เพราะเมื่อคุณเรียก GetString อีกครั้งที่ฉันจะทำอย่างรวดเร็วที่นี่
ถ้าเป็นสายเส้นที่สอง เสื้อที่ผมทำในโปรแกรมที่
เท่ากับการเรียก GetString อื่น
ในครั้งต่อไปที่ผมเรียกว่า GetString ฉันจะ
ที่จะได้รับเป็นก้อนที่แตกต่างกันของหน่วยความจำ
>> GetString ที่ได้รับอนุญาต ที่จะขอให้การดำเนินงานของ
ระบบสำหรับหน่วยความจำมากขึ้น
มันจะไม่นำมาใช้เหมือนกัน หกไบต์ทุกครั้งเดียว
มันจะได้รับใหม่ ก้อนของหน่วยความจำที่
หมายความว่าทีเป็นไปได้ บางค่าอื่น ๆ กว่าที่นี่
>> ดังนั้นเมื่อฉันทำเท่ากับ = ทีคุณไม่ได้เปรียบเทียบ
D ต่อนี้และต่อต้าน นี้และ V ต่อนี้
คุณกำลังเปรียบเทียบนี้ ต่อนี้ซึ่ง
ตรงไปตรงมาเป็น useless-- useful-- สวย จะไม่ได้ผลสวยเพราะที่จริง
ใส่ใจที่สตริงที่อยู่ในหน่วยความจำ?
>> และแน่นอนเราไม่ได้
และเราไม่ได้ไป เริ่มต้นการดูแลโดยเฉพาะอย่างยิ่ง
เพียงเท่าที่ข้อผิดพลาดสามารถเกิดขึ้น และภัยคุกคามความปลอดภัยที่อาจเกิดขึ้นจะ
เราจะเริ่มต้นในการดูแลเกี่ยวกับเรื่องนี้
ดังนั้นเรามาแก้ไขปัญหานี้
จะเปิดออกคุณแก้ไขได้สุดเพียง
>> และขอให้จริงก่อนที่ผมจะ เผยให้เห็นว่าอีกสิ่งที่จะ
คุณจะทำอย่างไรถ้าในชั้นเรียน CS50, และคุณจะต้องดำเนินการ
เปรียบเทียบกับสองสาย
คุณชัดเจนก็ไม่สามารถใช้ S = t เท่ากับ
แต่มีเหตุผลว่า คุณจะเปรียบเทียบสายนี้
กับสตริงโดยใช้รหัส C นี้
ใช่
>> ผู้ชม: เพ​​ียงแค่ทำ สำหรับวง [ไม่ได้ยิน]
เดวิดเจลัน: ที่สมบูรณ์แบบ
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: ใช่
เพียงแค่ใช้การวนหรือ ในขณะที่ห่วงหรืออะไรก็ตาม
แต่เพียงแค่ใช้ความคิดพื้นฐานที่ว่า นี้เป็นก้อนของหน่วยความจำหรืออาเรย์
และนี่คือย้ำกว่า ทั้งในเวลาเดียวกัน
และเพียงแค่เปรียบเทียบตัวอักษร
>> และคุณได้มีที่จะเป็น ระวัง ๆ หน่อย ๆ เพราะคุณ
ไม่ต้องการหนึ่งนิ้ว ไปที่ผ่านมาอื่น ๆ
เพราะสตริงหนึ่ง นานกว่าที่อื่น ๆ
ดังนั้นคุณจะต้องการตรวจสอบ ราคาพิเศษนี้ในตอนท้าย null
แต่มันคือเรื่องจริงใน จบง่ายเหมือนที่
และตรงไปตรงมาเราไม่จำเป็นต้อง ที่จะบูรณาการล้อ
นี่คือรุ่นสอง
และสิ่งที่ผมกำลังจะบอกว่าที่นี่เป็นที่ แทนการเปรียบเทียบเท่ากับ S = t,
ฉันแทนจะบอกว่าถ้าสตริง เปรียบเทียบเครื่องหมายจุลภาค s เสื้อเท่ากับ = 0
ตอนนี้สิ่งที่เป็นสตริงเปรียบเทียบ?
>> มันจะเปิดออกมันเป็นหน้าที่ที่ มาพร้อมกับ C ซึ่งมีจุดมุ่งหมายในชีวิต
คือการเปรียบเทียบสองสาย
และคนเปรียบเทียบว่าถ้าเราอ่านของ หน้าคนหรือเอกสารหรือ CS50
อ้างอิงก็จะ เพียงแค่บอกคุณคนที่
เปรียบเทียบผลตอบแทนทั้งในทางลบ ตัวเลขหรือจำนวนบวกหรือศูนย์
ที่ศูนย์หมายถึงพวกเขากำลังเท่ากับ
>> ดังนั้นเพียงแค่การคาดเดา
สิ่งที่มันอาจหมายถึงถ้า ผัดผลตอบแทนเ​​ปรียบเทียบ
ค่าลบหรือค่าบวก?
ผู้ชม: มากกว่าหรือน้อยกว่า
เดวิดเจลัน: ใช่ มากกว่าหรือน้อยกว่า
ดังนั้นถ้าคุณต้องการที่จะเรียงลำดับทั้ง พวงของสตริงใน dictionary--
ในขณะที่เราจะลงในที่สุด road-- ฟังก์ชั่นที่สมบูรณ์แบบที่จะใช้อาจ
เพราะมันจะทำอย่างนั้น การเปรียบเทียบสตริงสำหรับคุณและบอก
คุณไม่ได้มาก่อนที่จะขหรือไม่ ขมาก่อนตามลำดับตัวอักษร
เราสามารถทำตรงนั้น
>> และแจ้งให้ทราบผมอีกคนหนึ่ง สิ่งที่อยู่ในตัวอย่างนี้
อะไรที่มีการเปลี่ยนแปลงสูง ขึ้นมาในหน้าที่หลักนี้
char *
และนี่คือที่โกหกสีขาวอื่น ๆ
ตลอดเวลานี้เมื่อคุณได้ รับการเขียนสตริง
เราได้รับการแอบเขียนใหม่ สตริงเป็น char * เพื่อให้เสียงดังกราวจริงว่า
เข้าใจคุณ
>> ในคำอื่น ๆ ใน CS50.h และในที่สุดเราก็จะเห็น
เราทำสตริงคำพ้องความหมายที่เรียกว่า นั่นคือสิ่งเดียวกับ char *
และสำหรับตอนนี้รู้เพียงว่า * ในบริบทนี้อย่างน้อย
หมายถึงที่อยู่
>> ที่อยู่ของอะไร
ดีความจริงที่ว่าผมพูด char * และไม่ int * หรือลอย *
หมายความว่า char * เป็น ที่อยู่ของถ่าน
ดังนั้นกล่องเล็ก ๆ นี้ที่นี่อาคา สตริงเป็นจริงชนิด char *,
ซึ่งเป็นเพียงวิธีแฟนซีของบอกว่า ในกล่องนี้จะไปอยู่
และสิ่งที่ไม่อยู่ที่อ้างถึง?
เห็นได้ชัดว่าถ่าน
>> แต่ที่เราจะทำได้อย่างแน่นอน มี int * และสิ่งอื่น ๆ
แต่ตอนนี้ char * เป็นจริงมากที่สุด ตรงไปตรงมาและเป็นหนึ่งที่น่าสนใจ
ดังนั้นปัญหานี้จะ จะเพิ่มขึ้น แต่อีกครั้ง
>> สมมติว่าผมเปิดโปรแกรมนี้
ลองดูว่าตอนนี้เราสามารถคาดการณ์ ว่ามีอะไรผิดปกติกับรหัสนี้
ดังนั้นในโปรแกรมนี้คัดลอก 0 ฉัน จะไปข้างหน้าและอีกครั้งเรียก
GetString และจัดเก็บค่าในนั้น
>> แล้วทำไมฉันถึงทำเช่นนี้ เช่นเดียวกับที่เตือนความทรงจำจากสัปดาห์ที่ผ่านมาหรือไม่
เราได้พูด GetString ที่ บางครั้งกลับเป็นโมฆะ
มันหมายความว่าอะไรถ้า GetString กลับ null?
สิ่งที่ผิดพลาด
มันอาจหมายถึงสายเกินไป ขนาดใหญ่ออกจากคอมพิวเตอร์ของหน่วยความจำ
มันเกิดขึ้นซุปเปอร์ซุปเปอร์ซุปเปอร์ ไม่ค่อย แต่มันจะเกิดขึ้น
เราต้องการที่จะตรวจสอบมัน และนั่นคือทั้งหมดที่เรากำลังทำ
>> เพราะเราจะเห็นตอนนี้ถ้าคุณทำไม่ได้ เริ่มต้นการตรวจสอบเป็นประจำสำหรับสิ่งที่
เช่น null คุณอาจ จะเริ่มต้นที่จะไป
ไปยังที่อยู่ในหน่วยความจำที่ไม่ถูกต้อง
และคุณกำลังจะเริ่มต้นก่อให้เกิด มากขึ้นความผิดพลาดของการแบ่งส่วน
หรือใน Mac หรือ PC เพียง ทำให้คอมพิวเตอร์ที่จะแขวน
หรือโปรแกรมที่จะแช่แข็งอาจ
>> ดังนั้นตอนนี้ฉันเรียกร้องในสำเนา 0.c ที่ฉัน กำลังจะไปคัดลอกสตริงเหล่านี้โดยวิธีการ
ของสาย 28
แล้วฉันจะ เพื่อเรียกร้องที่ด้านล่าง
ที่นี่ที่ฉันจะ ที่จะเปลี่ยนหนึ่งของพวกเขา
>> เพื่อแจ้งให้ทราบนี้
ฉันโทร strlen เพื่อนเก่าของเรา
และเพียงแค่อธิบายในภาษาอังกฤษ สิ่งที่บรรทัดนี้ 34 จะทำ?
ไม่สิ่งที่เสื้อวงเล็บ 0 เป็นตัวแทนของทางด้านซ้าย
ใช่
>> ผู้ชม: ตัวอักษรแรกของ t?
เดวิดเจลัน: ตัวอักษรแรกของ t
นั่นแหล่ะ
ตัวอักษรตัวแรกของ t, ฉันต้องการ ที่จะกำหนดให้เป็นรุ่นที่เป็นตัวพิมพ์ใหญ่
ของตัวละครครั้งแรกในเสื้อ
ดังนั้นนี้จะพะวง ตัวอักษรตัวแรก
และแล้วสิ่งสุดท้ายที่ฉันทำมาก ในโปรแกรมนี้คือผมเรียกร้องที่นี่
เดิม, S, และนี่คือสำเนาที
>> แต่ขึ้นอยู่กับเรื่องที่เราเพิ่ง บอกเกี่ยวกับสิ่งที่สตริงเป็นจริง
สิ่งที่เป็นสาย 28 จริงๆ ทำและสิ่งที่เป็น
ข้อผิดพลาดที่เกิดขึ้นไป จะต้องอยู่บนหน้าจอหรือไม่
>> ดังนั้นก่อนที่คำถามแรก, 28
สิ่งที่เป็นสตริง t = จริงๆทำอะไร
ถ้าเรามีอยู่ในซ้ายมือ ด้านที่นี่สตริง t = วินาที;
ที่ให้ฉันกล่องหนึ่ง ที่นี่และกล่องหนึ่งที่นี่
และคิดว่าที่อยู่นี้เป็น 0x, สมมุติว่า 50 เวลานี้พล
สิ่งที่ไม่สตริง t = S ทำภายใต้กระโปรงหน้ารถหรือไม่
>> ผู้ชม: [ไม่ได้ยิน]
>> เดวิดเจลัน: มันเก็บความทรงจำ อยู่ที่นั่นเพื่อ 0x50 ไปที่นั่น
ดังนั้นถ้าตอนนี้ผมไปครั้งแรก ตัวละครในเสื้อและตัวพิมพ์ใหญ่มัน
สิ่งที่ฉันทำเพื่อได้อย่างมีประสิทธิภาพหรือไม่
ฉันจริงๆทำในสิ่งเดียวกันใช่มั้ย?
เพราะถ้าอยู่ 0x50-- และเพียงแค่ฉัน ไม่ได้มีห้องพักมากในคณะกรรมการที่นี่
แต่คิดว่านี้จะ 0x50 ลงที่นี่ ที่ไหนสักแห่งในหน่วยความจำของคอมพิวเตอร์ของฉัน
>> และฉันได้เช่นเกบ ในตัวพิมพ์เล็กที่นี่เช่นนี้
และฉันได้กล่าวว่าเสื้อวงเล็บ 0 ได้รับทุน
ดีทีวงเล็บ 0 เป็น ตัวอักษรตัวแรกในเ
ดังนั้นกรัมเล็ก ๆ น้อย ๆ ที่เป็นไป กลายเป็น G. ใหญ่ แต่ปัญหา
เป็นสิ่งที่ไม่ยังชี้ไปที่?
>> ผู้ชม: เดียวกัน
>> เดวิดเจลัน: สิ่งที่แน่นอนเดียวกัน
ดังนั้นคำอธิบายง่ายๆบางที แม้ว่าไวยากรณ์แปลกเล็กน้อย
ดังนั้นขอให้ทำเช่นนี้
ทำสำเนา-0 แล้ว ./copy-0
พูดอะไรบางอย่าง: เกบ
และโชคไม่ดีที่ทั้งสอง พวกเขาได้รับตอนนี้พิมพ์ใหญ่
แต่การที่อยู่ภายใต้ เหตุผลที่เรากำลังเพียง
ขณะนี้การซื้อขายที่มีที่อยู่
>> ดังนั้นเราจะเริ่มต้นในการ address-- ไม่มีเล่นสำนวน intended--
ทำอย่างไรเราจะเริ่มต้นไปยังที่อยู่ โดยเฉพาะอย่างยิ่งปัญหานี้ได้อย่างไร
ทั้งใน copy1.c, สิ่งที่กำลังจะ ที่จะได้รับเพียงเล็กน้อยที่ซับซ้อนมากขึ้น
แต่ฉันอยากจะเรียกร้อง วิธีง่ายๆแนวคิด
>> จึงยากที่จะได้รับได้อย่างรวดเร็วก่อน
ไม่ได้จะเป็นเรื่องง่ายสำหรับครั้งแรก ทุกครั้งที่คุณพิมพ์มันออกมาบางที
แต่ถ้าปัญหาคือว่า เพียงแค่ทำ t = แค่
สำเนาที่อยู่อะไร อีกครั้งถ้าฉันสามารถรับกับคุณ
เป็นไปได้ที่จะแก้ปัญหา สำหรับการคัดลอกสตริงจริงหรือไม่
>> ผู้ชม: เราอาจจะ ใช้วงอีกครั้ง
>> เดวิดเจลัน: ใช่
ดังนั้นเราจะต้องห่วงอีกครั้ง
และเพราะถ้าเราต้องการที่จะคัดลอก S สตริงเป็นสตริงอื่น
เราอาจต้องการที่จะทำ ตัวอักษรตัวอักษร
แต่ปัญหาคือถ้า นี้เป็นครั้งแรกวินาที,
ตอนนี้เราต้องเริ่มต้นอย่างชัดเจน จัดสรรหน่วยความจำสำหรับ t
>> ในคำอื่น ๆ ให้ วาดนี้เป็นครั้งสุดท้าย
ในกรณีนี้คือสตริง s = GetString
และขอนำนี้ขึ้นที่นี่เช่นกัน
นี้เป็น GetString
และแล้วภาพบางอย่าง เช่นเดียวกับที่เป็นไปได้เช่นเดิม
G--b-e-/ 0
ที่มีลักษณะบางสิ่งบางอย่างเล็ก ๆ น้อย ๆ เช่นนี้
และ S ดังนั้นเราจึงเรียกสิ่งนี้ 0x50, และนั่นจะเป็น 51, 52
>> ดังนั้นนี่คือ 0x50
แล้วฉันจะสตริงที
ในหน่วยความจำที่แค่ไป ให้ฉันตารางเล็ก ๆ น้อย ๆ เช่นนี้
ดังนั้นสิ่งที่เป็นขั้นตอนสำคัญตอนนี้หรือไม่
ถ้าผมต้องการที่จะคัดลอกลงในเสื้อของสิ่งที่ เราไม่ว่างต้องกรอกที่นี่?
หรือเราทำในสิ่งที่จำเป็นต้อง ทำในระดับสูงหรือไม่
ใช่?
ใครบางคน?
ใช่
>> ผู้ชม: เราต้องไปที่ [ไม่ได้ยิน]
เดวิดเจลัน: ใช่เรา จำเป็นต้องกรอกในช่องว่างนี้
ฉันไม่สามารถคัดลอกและ ประโยชน์ชื่อเกบ
จนกว่าฉันจะขอให้ระบบปฏิบัติการ สำหรับก้อนของหน่วยความจำอื่น
ที่อย่างน้อยเป็นใหญ่เป็นต้นฉบับ
เพื่อที่จะทำให้เรามีคำถาม
>> ฉันขอให้ระบบปฏิบัติการวิธีที่จะไม่ เพียงเพื่อ pointer-- น้อยง่าย
เช่นนี้จะเรียกว่า อยู่ pointer-- ไม่
สำหรับกล่องเล็ก ๆ ง่ายๆ เช่นนี้เรียกว่าสตริง?
ฉันจะขอให้การดำเนินงานของ ระบบสำหรับก้อนใหญ่ของหน่วยความจำ?
ป่านนี้ผมเคยเพียงหลังที่ ทางอ้อมโดยการเรียก GetString
ดังนั้นวิธีที่จะ GetString แม้จะได้รับหน่วยความจำของมัน
>> ดีก็ปรากฎว่ามี ฟังก์ชั่นอื่น ๆ ที่นี่
ว่าตอนนี้เราจะเริ่มต้นที่จะใช้
ตอนนี้ดู than-- วิธีลับมากขึ้น และผมเป็นคนเดียวที่สามารถมองเห็นได้พูดไป
บรรทัดนี้มีลักษณะวิธีการที่เป็นความลับมากขึ้น แล้วมันควรจะเป็นได้อย่างรวดเร็วก่อน
แต่ขอแซวมันนอกเหนือ
>> อยู่ทางด้านซ้ายมือผมมีถ่าน * t
ดังนั้นในภาษาอังกฤษขอเริ่มต้นที่จะกำหนด ประโยคที่เหมาะสมในศัพท์แสงทางเทคนิค
ดังนั้นนี่คือการจัดสรร ตัวแปรประเภท char * เรียกว่าเสื้อ
ตอนนี้สิ่งที่ไม่ว่าจริงๆหมายถึงอะไร
>> ดีนั่นหมายความว่าสิ่งที่ฉันจะ ที่จะใส่ในตัวแปรที่เรียกว่าเสื้อนี้
ที่อยู่ของถ่าน
เพื่อให้เป็นเพียงเรียบง่าย วิธีการที่เหมาะสมมากขึ้น
การอธิบายด้านซ้ายมือ
เพื่อที่จะสร้างช่องนี้ที่นี่เท่านั้น
ดังนั้นทางด้านขวามือ น่าจะเป็นไป
การจัดสรรที่ใหญ่กว่า ก้อนของหน่วยความจำได้อย่างไร
จึงขอแซวนี้นอกเหนือ
>> มันครอบงำได้อย่างรวดเร็วก่อน แต่สิ่งที่เกิดขึ้นภายในที่นี่?
ครั้งแรกที่มี malloc ซึ่ง เห็นได้ชัดว่าเพื่อนใหม่ของเรา
"ความทรงจำจัดสรร".
ดังนั้นนี่คือเหตุผลที่ถูกส่ง เป็นมันจึงเป็นเรื่องใหญ่สวย
จึงขอแซวนี้นอกเหนือ
>> strlen ของวินาที, แน่นอนหมายถึงการยกกำลัง
ผู้ชม: จำนวนตัวอักษร
เดวิดเจลัน: เพียงแค่ จำนวนตัวอักษรในร้าน
ดังนั้นความยาวของ S, สายเดิม
ดังนั้น G--b-E
ดังนั้นมันอาจจะเป็นสี่ในกรณีนี้
ทำไมฉันทำ 1 หลังจากที่ เรียก strlen ของหรือไม่
ผู้ชม: [ไม่ได้ยิน]
เดวิดเจลัน: สำหรับที่ อักขระ null พิเศษ
หากคุณถามฉันสิ่งที่ความยาวของ ชื่อเกบของฉันกำลังจะบอกว่าสี่
ภายใต้กระโปรงหน้ารถ แต่ฉันต้องการ ที่ไบต์ห้าอักขระ null
เพื่อที่ว่าทำไมฉันทำ 1
>> ขณะนี้เป็นเพียงในกรณีที่คุณกำลังทำงานอยู่นี้ โปรแกรมบนคอมพิวเตอร์เครื่องอื่น ๆ กว่าหนึ่งพูดว่า
เครื่องใช้ CS50, ที่ขนาดของถ่าน
อาจจะมีที่แตกต่างกัน จาก computer-- ของตัวเอง
ปรากฎว่าฉันสามารถเรียกสิ่งนี้ว่า sizeof ผู้ประกอบการเพียงขอเครื่องคอมพิวเตอร์
สิ่งที่เป็นขนาดของ ถ่านในคอมพิวเตอร์เครื่องนี้?
>> และโดยการคูณห้านี้ เช่นโดยขนาดของถ่านซึ่ง
บนเครื่องคอมพิวเตอร์ส่วนใหญ่จะ เพียงแค่เป็นหนึ่ง malloc
จะจัดสรรสำหรับฉันใหญ่นี้ ก้อนของหน่วยความจำมากกว่าที่นี่ด้านขวา
และมันจะ return-- มันเป็นฟังก์ชันดังนั้นจึงเป็น
จะกลับมาหาเราอะไร
ผู้ชม: ที่อยู่?
เดวิดเจลัน: ที่อยู่ของสิ่งที่?
ผู้ชม: หน่วยความจำของมันกำหนดหรือไม่?
เดวิดเจลัน: ของ หน่วยความจำมันได้รับการจัดสรร
ดังนั้นผมจึงมีความคิดที่ไม่ตรงไปตรงมา ที่นี้จะจบลง
ฉันจะเสนอว่า มันจะจบลงที่ 0x88
สมบูรณ์โดยพลการ แต่ ที่อื่นนอกเหนือจาก 0x50,
เนื่องจากระบบปฏิบัติการอะไร Windows และ Mac OS ทำเพื่อฉันเป็น
ตรวจสอบให้แน่ใจว่ามันให้ ฉันชิ้นที่แตกต่างกันของแรม
>> ดังนั้นนี่คือมูลค่าที่นี้ ก้อนของหน่วยความจำอาจจะจบลง
ดังนั้นนี่คือสิ่งที่จะสิ้นสุดลงในที่นี่ 0x88
ดังนั้นตอนนี้เห็นได้ชัดว่าผมสามารถเข้าใจ ที่นี้ไม่ได้เช่นเดียวกับที่นี้
เพราะพวกเขากำลังชี้ไปที่ ชิ้นที่แตกต่างกันของหน่วยความจำ
ดังนั้นถ้าตอนนี้ผมอยากที่จะคัดลอกนี้ ในขอทำโซลูชั่นที่นำเสนอของคุณ
>> ขอเพียงไปสร้างสำหรับห่วง และทำทีวงเล็บผมได้รับของตัวฉัน
เพราะตอนนี้ฉันสามารถใช้ สัญกรณ์อาร์เรย์เช่นนี้
เพราะแม้ว่า malloc มาก โดยทั่วไปฉันจัดสรรหน่วยความจำ
หน่วยความจำเป็นเพียงไบต์ที่อยู่ติดกัน
ไบต์ไบต์ไบต์หลังการสำรองข้อมูล
>> แน่นอนฉันสามารถเป็นโปรแกรมเมอร์ รักษามันเป็นอาเรย์ซึ่ง
หมายถึงการที่ฉันสามารถใช้นี้คุ้นเคยที่สุด สัญกรณ์ของเพียงบางส่วนวงเล็บ
>> เพื่อให้ฉันหยุดที่นั่นเพราะ นี้เป็นจำนวนมากทั้งหมดในครั้งเดียวได้
แม้ว่าความคิดพื้นฐานในการปะยางรถ เป็นสตริงที่ทุกเวลานี้
ไม่ได้ชนิดข้อมูลใหม่ต่อ
มันเป็นเพียงตัวชี้ที่เรียกว่า ที่อยู่ของตัวละคร,
ซึ่งก็หมายความว่ามันเป็นจำนวนมาก ว่าด้วยการประชุมของมนุษย์
เรามักจะเขียนเป็นสิ่งที่ 0x
>> แต่มันก็เป็นเพียงแค่ตัวเลข เช่น 33 Oxford Street,
ที่เกิดขึ้นเป็น ที่อยู่ของอาคาร CS
คำถามใด ๆ เกี่ยวกับรายละเอียดเหล่านี้หรือไม่
ใช่?
>> ผู้ชม: ทำไมเราตรวจสอบ สำหรับ t เท่ากับโมฆะ?
>> เดวิดเจลัน: ทำไมเรา ตรวจสอบสำหรับ t เท่ากับโมฆะ?
ถ้าเราอ่าน documentation-- คำถามที่ดีสำหรับ malloc,
มันจะบอกว่าในการพิมพ์ที่ดี บางครั้งอาจ malloc กลับโมฆะ
เช่นเดียว GetString
และแน่นอน GetString กลับ null ถ้าในทางกลับกัน malloc กลับโมฆะ
เพราะ GetString ใช้ malloc
>> และที่อาจเกิดขึ้นได้หากระบบปฏิบัติการ Mac OS, Windows และสิ่งที่เป็นเพียง
ออกจากหน่วยความจำสำหรับคุณ
ดังนั้นนั่นคือสิ่งที่เกิดขึ้นที่นั่น
>> และแจ้งให้เราแสดงให้เห็นถึงสิ่งที่อีกคนหนึ่ง ที่เพิ่งจะพัดใจของคุณ
หรือสมบูรณ์จะไกลเกินไปกว่าเส้น
แต่ให้ฉันดึงขึ้น เดียวกันสำหรับห่วงสำหรับการคัดลอก
ซึ่งช่วงเวลาที่ผ่านมาการเรียกคืนเป็น นี้ เสื้อตัวผมได้รับของตัวฉัน
>> อย่างมีความสุขและใช้งานง่าย
รู้สึกเหมือนสัปดาห์ที่สองอีกครั้ง
แต่รุ่นนี้สามารถจริงจะ เขียนเช่นนี้ซึ่งมีลักษณะที่เป็นความลับ
มันเป็นตัวชี้เทคนิคที่เรียกว่า เลขคณิตเลขคณิตที่อยู่
แต่ทำไมไม่ทำงานนี้
>> ตอนนี้น่ารำคาญ, ผู้เขียนของซีตัดสินใจที่จะใช้
สัญลักษณ์ * เพื่อวัตถุประสงค์ที่แตกต่างกัน
เราได้เห็นมันเคยใช้อยู่แล้ว char * ซึ่งหมายความว่า "ให้ฉันตัวแปร
ที่จะมี ที่อยู่ของถ่าน ".
* เพื่อให้ถ่านในบริบทที่ หมายถึง "ให้ฉันตัวแปร".
>> แต่ถ้าคุณใช้ * โดยไม่ต้อง คำในหน้านั้นเช่นถ่าน,
ก็เรียกว่าตอนนี้ ผู้ประกอบการ dereference
และเราจะเห็นมากกว่านี้ก่อนที่จะยาว
แต่ก็หมายความว่า "ไปที่นั่น".
มันก็เหมือนกับการบอกว่าถ้ามีคนมือฉัน บนแผ่นกระดาษ "33 Oxford Street"
ถ้าฉันทำ "* 33 Oxford Street" ที่หมายถึง "ไปลงที่ถนนไปที่อาคาร CS".
>> ดังนั้น * หมายถึงเพียงแค่ไปที่นั่นถ้า มีคำในหน้าของมันไม่มี
ดังนั้นสิ่งที่เป็นเสื้อที่มีความชัดเจน?
เสื้อเป็นที่อยู่ของก้อน หน่วยความจำที่ได้รับกลับมาให้ฉัน
คือที่อยู่ของสิ่งที่จะเป็นที่ชัดเจน ในตัวอย่างที่เราได้พูดกันมา
ของเกบตัวพิมพ์เล็ก?
คือที่อยู่เเล้
ผู้ชม: สตริง
เดวิดเจลัน: ชื่อเดิมของเกบ
ดังนั้นจึงเป็นที่อยู่ของ ก้อนของหน่วยความจำนี้
ดังนั้นถ้าผมบอกว่า t + i-- i, แจ้งให้ทราบล่วงหน้า เป็นเพียงเพื่อนเก่าของเรา
มันเป็นเพียงตัวแปรดัชนี ที่ทำซ้ำจากศูนย์ขึ้น
ความยาวของสตริง s
ดังนั้นมันจะเป็นศูนย์แล้วหนึ่ง แล้วสองแล้วสามแล้วสี่
จึงขอรวบรวมเหล่านี้ใหม่ รอยขีดข่วนเช่นชิ้นส่วนปริศนา, ถ้าคุณจะ
แม้ว่าอีกครั้งไวยากรณ์ อยู่ไกลมากขึ้นกว่าที่เป็นความลับรอยขีดข่วน
ดังนั้นเสื้อที่อยู่ + ฉันจะให้ฉัน
จำนวนเพราะเหล่านี้ทั้งหมด ตัวเลขที่เราได้รับการวาดภาพเป็นฐานสิบหก
แต่พวกเขากำลังเพียงตัวเลข
>> ดังนั้นหากที่อยู่ของ t ที่เรากล่าวว่า 0x88 เป็นสิ่งที่ 0x88 บวกศูนย์
แม้ว่าคุณจะไม่สบาย กับฐานสิบหกยังใช้การคาดเดา
>> ผู้ชม: เดิม
>> เดวิดเจลัน: ยัง 0x88
ดังนั้นสิ่งที่จะ * 0x88 หมายถึงอะไร
มันหมายถึง "ไปที่นั่น" ซึ่งหมายความว่า ได้อย่างมีประสิทธิภาพ "วางนิ้วของคุณที่นี่".
และตอนนี้อยู่ทางด้านขวามือของ การแสดงออกนี้ * แล้วใน parens,
s + ฉันหมายถึงวินาที, ซึ่งเป็น อยู่ที่นี่ของกรัมน้อย
s + 0 แน่นอน, s, สิ่งที่คือ
>> ดังนั้นตอนนี้มัน * s ซึ่งเช่นเดียว * 33 Oxford Street หมายความว่าไปที่ที่อยู่
S
ดังนั้นนี่คือนิ้วขวามือ
ดังนั้นสิ่งที่ฉันจะคัดลอกลงในอะไร
สิ่งที่อยู่ด้านขวาซึ่งเป็น เกบ, กเล็ก ๆ น้อย ๆ ที่นี่เป็นที่นี่
>> และเพื่อให้ผลของการที่ ย้ำแรกของวง
ตามที่คุณเสนอแม้ว่ามันจะมีลักษณะ บ้าซับซ้อนมากขึ้นกว่าสิ่งใด
ที่เราเคยเห็นมาก่อนเป็นเพียงการบอกว่า ไปที่นี่และคัดลอกตัวอักษรที่นี่
มันให้คุณมีแผนที่ไปยังสถานที่ทั้ง
>> และเราจะเห็นไกลมากกว่านี้
แต่ตอนนี้ความหวังเป็นเพียงการ แนะนำบางส่วนของความคิดพื้นฐานเหล่านี้
และแน่นอนให้ดูที่ หนึ่งโปรแกรมสุดท้ายที่นี่
แล้ว claymation สัญญา ซึ่งจะทำให้ทุกอย่างถูกต้องทั้งหมด
ขวาทั้งหมด
เพื่อให้ฉันเปิด up-- มีเราไป
เพื่อให้ me-- เราจะกลับมา ภาพนี้ไม่นาน
ผมขอเปิดตัวอย่างสุดท้ายที่นี่
>> ดังนั้นนี่คือซุปเปอร์ซุปเปอร์ โปรแกรมที่สำเร็จ
ไม่มีอะไรในชีวิตที่ไม่ต่อไปนี้
มันเป็นครั้งแรกประกาศสองตัวแปร x และ y ที่ไม่ได้ตัวเลขเวลานี้
ต่อ
พวกเขาไม่ได้จำนวนเต็มต่อ
พวกเขาจะเห็นได้ชัด int *
ดังนั้นเพียงแค่ใครสิ่งที่ไม่ได้หมายถึง ถ้าชนิดข้อมูลของตัวแปรของคุณ
เป็นประเภท int * ดาว?
นั่นเป็นที่อยู่ของ int
>> ดังนั้นผมจึงได้ความคิดที่มันเป็นยัง
มันก็หมายถึงการ "ใส่ในที่สุด ที่อยู่ของ int ที่นี่ ".
0x50, 0x88, ที่ใดก็ตามที่มันมีอยู่ใน หน่วยความจำที่อยู่ที่จะมี
และนั่นคือสิ่งที่เป็นปี ไปได้เป็นอย่างดี
>> ถ้าตอนนี้ผมบอกว่า x = malloc (sizeof (int)) นี้เป็นวิธีที่จินตนาการของบอกว่า
เฮ้ระบบปฏิบัติการผ่าน malloc, ให้ฉันหน่วยความจำเพียงพอสำหรับขนาด
ของ int ซึ่งอาจเป็น จะเป็น 32 บิตหรือสี่ไบต์
>> ดังนั้นสิ่งที่จะ malloc กลับ?
malloc กลับที่อยู่
ดังนั้นสิ่งที่จะได้รับการจัดเก็บไว้ใน x?
ที่อยู่ของก้อน หน่วยความจำสี่ไบต์ malloc ที่
พบเพียงสำหรับฉันโดยขอให้ ระบบปฏิบัติการ
>> ตอนนี้ขณะที่สาย สี่นี่ * x = 42
เพียงเพื่อจะชัดเจน สิ่งที่เกิดขึ้นลงไปที่นั่น?
ที่ด้านซ้ายมือ * x
ที่เหมือน * 33 Oxford Street
ดังนั้น * x หมายถึงอะไร
>> ผู้ชม: ไปที่
>> เดวิดเจลัน: ไปที่ที่อยู่ที่
ทุกก้อนที่ หน่วยความจำไปกับมัน
และนำสิ่งที่มีเห็นได้ชัด?
ผู้ชม: 42
เดวิดเจลัน: 42
ทั้งหมดขวา * Y, ความคิดเดียวกัน
ไปที่ที่อยู่ในปี
ใส่หมายเลข 13 ที่นั่น แต่คือ y ในขณะนี้คืออะไร
ผู้ชม: มีหน่วยความจำสำหรับปีไม่มี
เดวิดเจลัน: มี เป็นหน่วยความจำสำหรับปีไม่มี
ดังนั้นสิ่งที่น่าจะเป็นปี มีที่เราได้รับการบอกว่า?
>> ผู้ชม: ขยะ
>> เดวิดเจลัน: บางค่าขยะ
ตอนนี้ค่าขยะยังคงมีจำนวน
มันยังสามารถเข้าใจผิดสำหรับที่อยู่
มันราวกับว่ามีใครบางคน ขีดเขียนอะไรบางอย่างลง
และผมตีความว่ามันเป็นความหมาย อาคารลงถนนบาง
และถ้าคุณเพียงแค่พยายามที่จะไปเป็น อาคารบางอย่างที่คุณไม่ได้เป็นเจ้าของ
หรือก้อนของหน่วยความจำบางอย่างที่คุณยังไม่ได้ รับสิ่งที่ไม่ดีอาจจะเกิดขึ้น
คอมพิวเตอร์อาจผิดพลาดหรือบางอื่น ๆ พฤติกรรมบึกบึนอาจจะเกิดขึ้น
>> ดังนั้นบทนำแล้วให้บิงกี้นี้
ผมยังจำ, 20 ปีที่แปลกบางอย่างในภายหลัง
ที่ฉันคือเมื่อฉันสุดท้าย เข้าใจตัวชี้
>> ซึ่งเป็นที่จะบอกว่าถ้าคุณ ออกจากที่นี่ในสามนาที
และคิดว่าฉันทำไม่ได้ เข้าใจตัวชี้ตระหนักถึง
ผมจำได้ว่า 20 ปีสำหรับเหตุผลบางบ้า
และทำไมเมื่อในที่สุดมันก็จมลง ในนั่งอยู่กับการเรียนการสอนของฉัน
เพื่อน Nishat เมธาใน ด้านหลังของเอเลียตฮอลล์ในการรับประทานอาหาร
ตอนนี้ฉันได้จำได้ นี้เพราะนี่คือ
หนึ่งในหัวข้อที่ผมใน โดยเฉพาะอย่างยิ่งการต่อสู้กับ
และแล้วในที่สุดมันก็คลิก เหมือนที่ผมกล้าพูดมากของหัวข้อ
ในที่สุดก็จะ
และตอนนี้ที่จะทำให้มันรู้สึก มีความสุขและน่าเชื่อถือขึ้นว่า
ลองมาดูสุดท้ายในของเรา สุดท้ายสามนาทีที่นี่ที่บิงกี้
จากเพื่อนของนิคของเรา parlante จาก Stanford
>> [วิดีโอเล่นภาพ]
>> -Hey บิงกี้
ตื่นขึ้นมา!
ก็ถึงเวลาสำหรับความสนุกสนานชี้
>> อะไรที่?
เรียนรู้เกี่ยวกับตัวชี้?
โอ้คนดี!
>> -Well, การเริ่มต้นผมคิดว่าเรากำลัง จะต้องมีตัวชี้คู่
>> -OK
รหัสนี้จัดสรรสองตัวชี้ ซึ่งสามารถชี้ไปที่เลข
-OK
ดีฉันเห็นทั้งสองตัวชี้ แต่พวกเขา ดูเหมือนจะไม่ได้รับการชี้ไปที่อะไร
>> ขวานั่นก็คือ
ในขั้นต้นชี้ ไม่ได้ชี้ไปที่อะไร
สิ่งที่พวกเขาชี้ไปที่จะเรียกว่า pointees และการตั้งค่าของพวกเขาขึ้น
ขั้นตอนที่แยกต่างหาก
>> โอ้ขวาขวา
ฉันรู้ว่า
pointees แยก
เอ้อดังนั้นวิธีการที่คุณจัดสรร Pointee?
>> -OK
ดีรหัสนี้จัดสรร Pointee จำนวนเต็มใหม่
และชุดนี้เป็นส่วนหนึ่ง x จะชี้ไปที่มัน
>> -Hey ที่ดูดีกว่า
เพื่อให้มันทำอะไรบางอย่าง
>> -OK
ฉันจะ dereference ตัวชี้ x เพื่อ เก็บหมายเลข 42 เป็น Pointee ของ
สำหรับเคล็ดลับนี้ผมจะต้องของฉัน Magic Wand ของ dereferencing
>> ด์ของคุณ Magic Wand ของ dereferencing?
That-- ที่ดี
>> นี้เป็นสิ่งที่รหัสดูเหมือนว่า
ฉันเพิ่งจะตั้งค่าตัวเลขและ [POP]
>> -Hey ดู
มีมันไป
>> งั้นทำ dereference ที่ x ดังนี้ ลูกศรเพื่อเข้าถึง Pointee ของ
ในกรณีนี้การจัดเก็บ 42 ในนั้น
เฮ้ลองใช้มันในการจัดเก็บจำนวน 13 ผ่านตัวชี้อื่น ๆ , y
>> -OK
ฉันเพิ่งจะไปกว่าที่นี่เพื่อ Y, และได้รับหมายเลข 13 การตั้งค่า
แล้วใช้ไม้กายสิทธิ์ของ dereferencing และเพียงแค่ [BUZZ]
>> โอ้!
>> โอ้เฮ้!
ที่ไม่ทำงาน
พูดว่าบิงกี้, ฉันไม่คิดว่า dereferencing Y เป็นความคิดที่ดีเพราะคุณรู้ว่า
การตั้งค่า Pointee เป็นขั้นตอนที่แยกต่างหาก
และผมไม่คิดว่าเราเคยทำมัน
>> จุดได้ดี
-Yeah
เราจัดสรร Y ชี้ แต่เรา ไม่เคยตั้งค่าให้ชี้ไปที่ Pointee
>> -Very สังเกต
-Hey คุณกำลังมองหาที่ดีมีบิงกี้
คุณสามารถแก้ไขได้เพื่อให้จุดปี เพื่อ Pointee เหมือนกับ x?
>> -Sure
ฉันจะใช้ Magic Wand ของฉัน ของตัวชี้กำหนด
>> เค้าว่าจะเป็น ปัญหาเหมือนก่อนหรือไม่
ไม่มี
นี้ไม่ได้สัมผัส pointees
มันก็มีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งชี้ไปยัง ชี้ไปที่สิ่งเดียวกับอีก
>> โอ้ฉันเห็น
จุดนี้ปีไปยังสถานที่เดียวกับ x
ดังนั้นรอสักครู่
ตอนนี้, y ได้รับการแก้ไข
มันมี Pointee
เพื่อให้คุณสามารถลองใช้ไม้กายสิทธิ์ของ dereferencing อีกครั้งเพื่อส่ง 13 กว่า
>> -Uh ตกลง
นี่มันไป [POP]
>> -Hey ดูที่ว่า
ผลงานตอนนี้ dereferencing ในปี
และเนื่องจากตัวชี้มีการใช้งานร่วมกัน ว่าหนึ่ง Pointee พวกเขาทั้งสองเห็น 13
-Yeah
การแบ่งปันสิ่งที่
ดังนั้นเราจะเปลี่ยนสถานที่ตอนนี้หรือไม่
>> โอ้มอง
เราออกจากเวลา
>> -But--
>> อันเดิมจำกฎสามตัวชี้
จำนวนหนึ่งโครงสร้างพื้นฐาน คือการที่คุณมีตัวชี้
และมันชี้ไป Pointee
แต่ตัวชี้และ Pointee จะแยก
และข้อผิดพลาดที่พบบ่อย คือการตั้งค่าตัวชี้
แต่ที่จะลืมที่จะให้มัน Pointee
>> หมายเลขสองตัวชี้ dereferencing เริ่มต้นที่ตัวชี้
และต่อไปนี้ลูกศรของตนเหนือ ในการเข้าถึง Pointee ของ
ในขณะที่เราทุกคนรู้ว่านี้ จะทำงานเฉพาะถ้ามี
Pointee, ชนิดของ ได้รับกลับไปปกครองจำนวนหนึ่ง
>> จำนวนสามตัวชี้ การกำหนดตัวชี้จะใช้เวลาหนึ่ง
และการเปลี่ยนแปลงก็จะชี้ไปที่ Pointee เดียวกันเป็นตัวชี้อีก
ดังนั้นหลังจากที่ได้รับมอบหมายให้ ทั้งสองตัวชี้
จะชี้ไปที่ Pointee เดียวกัน
บางครั้งที่เรียกว่าการแบ่งปัน
และนั่นคือทั้งหมดที่มีให้มันจริงๆ
ลาก่อนตอ​​นนี้
[จบการเล่นวิดีโอ]
เดวิดเจลัน: นั่นมันสำหรับ CS50
เราจะเห็นคุณในสัปดาห์หน้า