1 00:00:00,000 --> 00:00:01,110 >> [เล่นเพลง] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 เดวิดเจลัน: ทั้งหมดขวา 4 00:00:11,650 --> 00:00:15,610 นี้เป็น CS50 และนี่ เป็นจุดสิ้นสุดของสัปดาห์ที่สี่ 5 00:00:15,610 --> 00:00:19,420 และหนึ่งในหัวข้อในวันนี้ เป็นที่ของนิติดิจิตอล 6 00:00:19,420 --> 00:00:20,989 ศิลปะของการกู้คืนข้อมูล 7 00:00:20,989 --> 00:00:22,780 และแน่นอนแม้ว่า คุณอยู่ในท่ามกลาง 8 00:00:22,780 --> 00:00:25,070 ตอนนี้สันติภาพที่สาม และฝ่าวงล้อมสัปดาห์หน้า 9 00:00:25,070 --> 00:00:27,880 โฟกัสจะอยู่ใน ได้อย่างแม่นยำโดเมนนี้ 10 00:00:27,880 --> 00:00:30,686 >> ดังนั้นหนึ่งในงานที่เจ๋งที่สุดที่ฉันเคย ได้กลับมาอยู่ในโรงเรียนระดับบัณฑิตศึกษา 11 00:00:30,686 --> 00:00:33,560 ตอนที่ผมทำงานให้กับท้องถิ่น มิดเดิลอัยการเขต 12 00:00:33,560 --> 00:00:34,950 สำนักงานงานนิติทำ 13 00:00:34,950 --> 00:00:37,450 เพื่อเป็นหลัก, แมสซาชูเซต รัฐตำรวจในบางโอกาส 14 00:00:37,450 --> 00:00:40,100 เมื่อทำงานในกรณีที่จะ นำมาในสิ่งที่ต้องการฮาร์ดไดรฟ์ 15 00:00:40,100 --> 00:00:42,185 และฟลอปปี้ดิสก์และ การ์ดหน่วยความจำและไม่ชอบ 16 00:00:42,185 --> 00:00:44,060 และพวกเขาจะส่งพวกเขา ให้ฉันและผู้ให้คำปรึกษาของฉัน 17 00:00:44,060 --> 00:00:48,070 และเป้าหมายของเราคือการหาหลักฐาน ถ้ามีใด ๆ ที่เกี่ยวกับสื่อเหล่านี้ 18 00:00:48,070 --> 00:00:50,700 มองเห็นตอนนี้คุณอาจได้เห็น ของโลกของนิตินี้ 19 00:00:50,700 --> 00:00:53,000 ในสื่อทีวีและภาพยนตร์ 20 00:00:53,000 --> 00:00:55,730 แต่งานที่ฉันมีและ daresay โลกว่า 21 00:00:55,730 --> 00:00:57,550 ไม่มากเหมือนที่คุณจะได้เห็นมัน 22 00:00:57,550 --> 00:01:00,794 ลองมาดูสิ่งที่ คุณอาจจะได้เห็น 23 00:01:00,794 --> 00:01:01,460 [วิดีโอเล่นภาพ] 24 00:01:01,460 --> 00:01:02,930 -OK 25 00:01:02,930 --> 00:01:05,380 ตอนนี้ขอได้รับดูดีที่คุณ 26 00:01:05,380 --> 00:01:06,850 >> [เล่นเพลง] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> -hold มัน 29 00:01:12,932 --> 00:01:13,657 วิ่งกลับไปที่ 30 00:01:13,657 --> 00:01:14,733 >> cmd- รอนาที 31 00:01:14,733 --> 00:01:15,233 ไปขวา 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -There 34 00:01:16,870 --> 00:01:17,369 แช่แข็งที่ 35 00:01:17,369 --> 00:01:17,930 เต็มหน้าจอ 36 00:01:17,930 --> 00:01:18,376 >> -OK 37 00:01:18,376 --> 00:01:18,875 แช่แข็งที่ 38 00:01:18,875 --> 00:01:20,160 -Tighten ขึ้นไปบนนั้นคุณจะ? 39 00:01:20,160 --> 00:01:22,126 >> เวกเตอร์ในที่ คนที่แต่งตัวประหลาดโดยล้อหลัง 40 00:01:22,126 --> 00:01:24,435 >> ซูมในที่นี่ในจุดนี้ 41 00:01:24,435 --> 00:01:28,580 >> Global- ด้วยอุปกรณ์ที่เหมาะสม ภาพที่สามารถขยายและรุนแรงขึ้น 42 00:01:28,580 --> 00:01:29,330 >> อะไรที่? 43 00:01:29,330 --> 00:01:30,780 >> แต่ก็เป็นโปรแกรมเพิ่มประสิทธิภาพ 44 00:01:30,780 --> 00:01:32,170 >> เลือกแขวนคุณที่ชัดเจนว่าขึ้นหรือไม่ 45 00:01:32,170 --> 00:01:33,070 >> -I ไม่ทราบ 46 00:01:33,070 --> 00:01:34,150 ลองเพิ่มความมัน 47 00:01:34,150 --> 00:01:35,440 >> -Enhance มาตรา A6 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 ผมเพิ่มรายละเอียดที่ and-- 50 00:01:38,562 --> 00:01:40,020 -I คิดว่ามีมากพอที่จะเพิ่ม 51 00:01:40,020 --> 00:01:40,976 ปล่อยให้หน้าจอของฉัน 52 00:01:40,976 --> 00:01:42,559 >> -I เพิ่มการสะท้อนในสายตาของเธอ 53 00:01:42,559 --> 00:01:44,322 และกิจกรรมที่กลุ่มที่ทำงานนี้ผ่าน เพิ่มประสิทธิภาพวิดีโอ 54 00:01:44,322 --> 00:01:45,210 >> -Edgar คุณสามารถเพิ่มนี้ 55 00:01:45,210 --> 00:01:45,710 >> -Hang ที่ 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -I've รับการทำงานในการสะท้อนนี้ 58 00:01:49,458 --> 00:01:50,402 >> ภาพสะท้อนของคน -There ของ 59 00:01:50,402 --> 00:01:50,902 >> -Reflection 60 00:01:50,902 --> 00:01:52,870 -There เป็นภาพสะท้อนของใบหน้าของชายคนนั้น 61 00:01:52,870 --> 00:01:53,694 >> -The สะท้อน! 62 00:01:53,694 --> 00:01:54,610 -There สะท้อน 63 00:01:54,610 --> 00:01:55,880 ซูมในกระจก 64 00:01:55,880 --> 00:01:57,860 คุณสามารถเห็นภาพสะท้อน 65 00:01:57,860 --> 00:01:59,630 >> คุณเลือกแขวนเสริมสร้างภาพลักษณ์จากที่นี่? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 คุณเลือกแขวนเพิ่มมันได้หรือไม่ 68 00:02:01,210 --> 00:02:02,190 คุณเลือกแขวนเพิ่มมันได้หรือไม่ 69 00:02:02,190 --> 00:02:03,066 เราเลือกแขวนเพิ่มนี้ 70 00:02:03,066 --> 00:02:03,898 คุณเลือกแขวนเพิ่มมันได้หรือไม่ 71 00:02:03,898 --> 00:02:04,740 -hold ที่สอง 72 00:02:04,740 --> 00:02:05,281 ฉันจะเพิ่ม 73 00:02:05,281 --> 00:02:06,470 ซูมในประตู 74 00:02:06,470 --> 00:02:06,970 -Times 10 75 00:02:06,970 --> 00:02:08,009 ซูม 76 00:02:08,009 --> 00:02:08,509 -Move ใน 77 00:02:08,509 --> 00:02:09,340 พูดถึงมากที่สุด 78 00:02:09,340 --> 00:02:10,094 cmd- รอหยุด 79 00:02:10,094 --> 00:02:10,750 แบบครบวงจร 80 00:02:10,750 --> 00:02:11,250 มันหยุดชั่วคราว 81 00:02:11,250 --> 00:02:13,542 -Rotate เรา 75 องศา รอบแนวตั้งโปรด 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> แบบครบวงจร 84 00:02:16,127 --> 00:02:19,330 กลับไปส่วนหนึ่ง เกี่ยวกับประตูอีกครั้ง 85 00:02:19,330 --> 00:02:21,420 >> -Got เพิ่มภาพที่สามารถบิตแมป? 86 00:02:21,420 --> 00:02:24,420 >> -Maybe เราสามารถใช้ปราดีปซิงห์ วิธีการที่จะมองเข้าไปในหน้าต่าง 87 00:02:24,420 --> 00:02:25,902 >> ซอฟแวร์ -The เป็นรัฐของศิลปะ 88 00:02:25,902 --> 00:02:26,866 >> eigenvalue กรุออก 89 00:02:26,866 --> 00:02:29,758 >> Global- ด้วยขวา การรวมกันของ algorithms-- 90 00:02:29,758 --> 00:02:32,168 >> แสงสว่างนำของพระองค์จึง ขั้นตอนวิธีการในระดับต่อไป 91 00:02:32,168 --> 00:02:34,110 และฉันสามารถใช้พวกเขาเพื่อ เพิ่มรูปนี้ 92 00:02:34,110 --> 00:02:36,840 >> -Lock และขยายแกน Z 93 00:02:36,840 --> 00:02:37,351 >> -Enhance 94 00:02:37,351 --> 00:02:37,850 เพิ่ม 95 00:02:37,850 --> 00:02:38,720 -Enhance 96 00:02:38,720 --> 00:02:40,070 ทำให้แข็งตัวและเพิ่ม 97 00:02:40,070 --> 00:02:43,420 [จบการเล่นวิดีโอ] 98 00:02:43,420 --> 00:02:45,830 เดวิดเจลัน: ดังนั้นผู้ที่มี ทุกคำ แต่พวกเขาไม่ได้ 99 00:02:45,830 --> 00:02:47,870 ที่ใช้ในประโยคที่ถูกต้อง 100 00:02:47,870 --> 00:02:52,370 และแน่นอนในอนาคตเวลาใด ๆ โปรดที่คุณได้ยินคนพูดคำว่า 101 00:02:52,370 --> 00:02:54,250 "เพิ่ม" หัวเราะเพียงเล็กน้อย 102 00:02:54,250 --> 00:02:57,190 เพราะเมื่อคุณพยายามที่จะเพิ่มประสิทธิภาพ เช่นนี้เป็นสิ่งที่เกิดขึ้น 103 00:02:57,190 --> 00:02:58,580 >> ดังนั้นนี่คือภาพที่งดงาม 104 00:02:58,580 --> 00:02:59,720 นี้เป็นของตัวเอง CS50 Daven 105 00:02:59,720 --> 00:03:03,740 และคิดว่าเราต้องการที่จะ มุ่งเน้นในการกระพริบตาในดวงตาของเขา 106 00:03:03,740 --> 00:03:05,870 หรือภาพสะท้อนของ คนเลวที่เห็นได้ชัดว่า 107 00:03:05,870 --> 00:03:07,820 จับโดยกล้องรักษาความปลอดภัย 108 00:03:07,820 --> 00:03:10,330 นี่คือสิ่งที่เกิดขึ้นเมื่อ คุณซูมในภาพที่ 109 00:03:10,330 --> 00:03:14,060 มีเพียงจำนวน จำกัด ของบิตที่เกี่ยวข้องกับมัน 110 00:03:14,060 --> 00:03:15,420 >> นั่นคือสิ่งที่คุณจะได้รับ 111 00:03:15,420 --> 00:03:19,190 และแน่นอนในสายตาของ Daven แต่สี่อาจจะหกพิกเซล 112 00:03:19,190 --> 00:03:22,110 ที่ประกอบด้วยสิ่งที่ ก็มีเสน่ห์มี 113 00:03:22,110 --> 00:03:25,890 เพื่อหาชุดที่สี่ในที่สุดจะมี คุณสำรวจโลกนี้โดยเฉพาะอย่างยิ่ง 114 00:03:25,890 --> 00:03:28,090 โดยธรรมชาติของสิ่งที่ ที่เราเรียกฉันแฟ้ม / o ที่ 115 00:03:28,090 --> 00:03:31,000 I / O เป็นเพียงวิธีที่จินตนาการของ อินพุทและเอาท์พุบอกว่า 116 00:03:31,000 --> 00:03:34,280 >> ดังนั้นป่านนี้ทั้งหมดของการมีปฏิสัมพันธ์ ที่เราเคยมีกับคอมพิวเตอร์ 117 00:03:34,280 --> 00:03:36,770 ได้รับส่วนใหญ่ของคุณด้วย แป้นพิมพ์และหน้าจอ 118 00:03:36,770 --> 00:03:40,770 แต่ไม่มากกับฮาร์ดดิสก์ หรือบันทึกไฟล์ที่เกินกว่าคนที่คุณ 119 00:03:40,770 --> 00:03:41,620 ตัวเองเขียน 120 00:03:41,620 --> 00:03:44,570 โปรแกรมของคุณป่านนี้มี ไม่ได้รับการสร้างและประหยัด 121 00:03:44,570 --> 00:03:46,270 และการอัพเดตไ​​ฟล์ของตัวเอง 122 00:03:46,270 --> 00:03:47,150 >> ดีสิ่งที่เป็นไฟล์ได้หรือไม่ 123 00:03:47,150 --> 00:03:48,105 ดีบางสิ่งบางอย่างเช่น JPEG 124 00:03:48,105 --> 00:03:50,520 นี่คือภาพที่คุณอาจจะ มีหรืออัปโหลดไปยัง Facebook, 125 00:03:50,520 --> 00:03:51,690 หรือดูทุกที่บนเว็บ 126 00:03:51,690 --> 00:03:54,460 อันที่จริงภาพเราที่เพียงแค่ เลื่อยของ Daven เป็น JPEG 127 00:03:54,460 --> 00:03:57,570 และสิ่งที่น่าสนใจ เกี่ยวกับไฟล์เช่น JPEGs 128 00:03:57,570 --> 00:04:02,170 คือว่าพวกเขาสามารถระบุ มักจะโดยรูปแบบบางอย่างของบิต 129 00:04:02,170 --> 00:04:05,200 >> ในคำอื่น ๆ ก็เป็นสิ่งที่ แตกต่างจาก JPEG GIF 130 00:04:05,200 --> 00:04:08,109 จากปิงจาก Word เอกสารจากแฟ้ม Excel? 131 00:04:08,109 --> 00:04:09,900 ดีก็แตกต่างกันเพียง รูปแบบของบิต 132 00:04:09,900 --> 00:04:12,820 และรูปแบบที่แตกต่างกันเหล่านี้ ปกติจะอยู่ที่จุดเริ่มต้นของไฟล์เหล่านั้น 133 00:04:12,820 --> 00:04:18,200 >> เพื่อที่ว่าเมื่อเปิดเครื่องคอมพิวเตอร์ของคุณคำ หมอหรือเมื่อคอมพิวเตอร์เปิด JPEG, 134 00:04:18,200 --> 00:04:20,940 มันก็ดูปกติท​​ี่ หลายบิตแรกในแฟ้ม 135 00:04:20,940 --> 00:04:24,059 และถ้ามันตระหนักถึงรูปแบบ มันบอกว่าโอ้นี้เป็นภาพ 136 00:04:24,059 --> 00:04:25,850 ผมขอแสดงให้ ผู้ใช้เป็นกราฟิก 137 00:04:25,850 --> 00:04:27,870 หรือโอ้นี้ดูเหมือนว่าหมอคำ 138 00:04:27,870 --> 00:04:30,480 ผมขอแสดงให้ผู้ใช้เป็นเรียงความ 139 00:04:30,480 --> 00:04:33,020 >> ดังนั้นสำหรับตัวอย่างเช่นภาพ JPEG, มันจะเปิดออกมี 140 00:04:33,020 --> 00:04:35,460 ที่มีความซับซ้อนอย่างเป็นธรรม ภายใต้เครื่องดูดควัน 141 00:04:35,460 --> 00:04:40,140 แต่สามไบต์ครั้งแรกในทุกส่วน JPEG เริ่มต้นด้วยตัวเลขเหล่านี้สาม 142 00:04:40,140 --> 00:04:44,680 ดังนั้นไบต์ศูนย์หนึ่งและสองมีใน ทุก JPEG, 255 แล้วจำนวนมากที่สุด 143 00:04:44,680 --> 00:04:46,675 216 แล้วจำนวน 255 144 00:04:46,675 --> 00:04:48,990 >> และสิ่งที่คุณจะสามารถ จะเริ่มต้นทำในสัปดาห์หน้า 145 00:04:48,990 --> 00:04:52,920 เป็นจริงโผล่ใต้ เครื่องดูดควันของไฟล์เช่น JPEGs 146 00:04:52,920 --> 00:04:57,210 และเช่นไฟล์บิตแมปและเห็น สิ่งที่เคยมีมานานเป็น 147 00:04:57,210 --> 00:04:58,650 ในขณะที่คุณได้ใช้คอมพิวเตอร์ 148 00:04:58,650 --> 00:05:01,860 >> แต่สิ่งที่มีอยู่ไม่ปกติ เขียนเหมือนเลขทศนิยมเช่นนี้ 149 00:05:01,860 --> 00:05:04,620 นักวิทยาศาสตร์คอมพิวเตอร์ไม่ได้ มีแนวโน้มที่จะพูดในทศนิยม 150 00:05:04,620 --> 00:05:06,139 พวกเขาไม่ได้จริงๆพูดในไบนารี 151 00:05:06,139 --> 00:05:07,930 โดยปกติแล้วเมื่อเราต้องการ ในการแสดงตัวเลข 152 00:05:07,930 --> 00:05:10,710 เราจะใช้เลขฐานสิบหก ที่คุณอาจจำ 153 00:05:10,710 --> 00:05:13,027 จากการพูดการตั้งปัญหา หนึ่งที่ท้าทาย 154 00:05:13,027 --> 00:05:14,610 คุณจะคิดเกี่ยวกับระบบที่แตกต่างกัน 155 00:05:14,610 --> 00:05:17,170 >> เราแน่นอนมีความคุ้นเคย กับทศนิยมศูนย์ถึงเก้า 156 00:05:17,170 --> 00:05:18,215 เราได้พูดคุยเกี่ยวกับไบนารี 157 00:05:18,215 --> 00:05:20,710 และเราไม่ได้จริงๆมี การใช้ที่มากที่นี่ 158 00:05:20,710 --> 00:05:22,470 ที่ออกมาเพราะเครื่องคอมพิวเตอร์ที่จะใช้ว่า 159 00:05:22,470 --> 00:05:24,900 แต่โปรแกรมเมอร์จะมาก บ่อยครั้ง แต่ไม่เสมอไป 160 00:05:24,900 --> 00:05:29,360 ใช้เลขฐานสิบหกซึ่งก็หมายความว่า คุณมี 16 ตัวอักษรในตัวอักษรของคุณ 161 00:05:29,360 --> 00:05:31,330 เมื่อเทียบกับสองคนหรือ 10 162 00:05:31,330 --> 00:05:34,530 >> ดังนั้นวิธีที่คุณนับถึงสูง กว่าเก้าในเลขฐานสิบหก? 163 00:05:34,530 --> 00:05:41,120 คุณไป 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, , b, c, D, E, F, เพียงโดยการประชุม 164 00:05:41,120 --> 00:05:43,540 แต่สิ่งที่สำคัญคือว่าแต่ละ ของเหล่านี้เป็นสัญลักษณ์เดียว 165 00:05:43,540 --> 00:05:44,340 ไม่มี 10 166 00:05:44,340 --> 00:05:48,400 ไม่มี 11 ต่อ se เพราะแต่ละ จากตัวเลขของคุณเช่นเดียวกับในทศนิยม 167 00:05:48,400 --> 00:05:51,940 และเช่นเดียวกับในไบนารีควรเพียง จะเป็นตัวละครตัวเดียวโดยการประชุม 168 00:05:51,940 --> 00:05:55,280 >> เพื่อที่ว่านั้นเป็นตัวอักษรที่เรามี ในการกำจัดของเราสำหรับเลขฐานสิบหก 169 00:05:55,280 --> 00:05:58,600 ดังนั้นสิ่งที่จะ JPEG ลักษณะเหมือนถ้าคุณ เขาจะเขียนออกครั้งแรกที่สามผู้ 170 00:05:58,600 --> 00:06:01,980 ไบต์ไม่เป็นทศนิยม แต่ เช่นเป็นเลขฐานสิบหก? 171 00:06:01,980 --> 00:06:03,640 และเหตุผลที่เป็นฐานสิบหกได้ทั้งหมดที่มีประโยชน์ที่? 172 00:06:03,640 --> 00:06:05,290 >> ดีดูอย่างรวดเร็วที่ยกตัวอย่างเช่น 173 00:06:05,290 --> 00:06:09,030 ดังนั้นถ้าผมเขียนออกบิตที่ เป็นตัวแทน numbers-- ทศนิยมเหล่านี้ 174 00:06:09,030 --> 00:06:12,450 นี้อาจจะมีสนิมเล็กน้อย ในขณะนี้จากไม่กี่สัปดาห์หลัง 175 00:06:12,450 --> 00:06:14,820 แต่คนเดียวที่เหลือและ หนึ่งที่เหมาะสมเป็นเรื่องง่ายสวย 176 00:06:14,820 --> 00:06:17,990 255 เป็นเราจำนวนที่ใหญ่ที่สุด จะเป็นตัวแทนที่มีแปดบิต 177 00:06:17,990 --> 00:06:18,820 มันเป็นทุกคน 178 00:06:18,820 --> 00:06:21,320 ดังนั้นเพียงคนเดียวที่เป็นอย่างอ่อนโยน ที่น่าสนใจคือหนึ่งกลาง 179 00:06:21,320 --> 00:06:24,700 และถ้าคุณทำชนิดของออก คณิตศาสตร์, คุณจะได้ข้อสรุปที่แน่นอน 180 00:06:24,700 --> 00:06:27,949 รูปแบบของการหนึ่งที่และ ศูนย์แสดงถึง 216 181 00:06:27,949 --> 00:06:30,240 เพื่อให้เพียงกำหนดสำหรับ ตอนนี้ที่เหล่านี้ถูกต้อง 182 00:06:30,240 --> 00:06:31,730 แต่ทำไมนี้เป็นที่น่าสนใจ? 183 00:06:31,730 --> 00:06:33,970 >> ดีไบต์แน่นอนแปดบิต 184 00:06:33,970 --> 00:06:38,980 และปรากฎว่าถ้าคุณคิดว่า ของไบต์เป็นสองชิ้นสี่บิต, 185 00:06:38,980 --> 00:06:39,500 เช่นนี้ 186 00:06:39,500 --> 00:06:41,000 ผมขอเพียงแค่เพิ่มพื้นที่บางส่วน 187 00:06:41,000 --> 00:06:42,550 ดังนั้นก่อนที่หลังจาก 188 00:06:42,550 --> 00:06:46,520 ฉันได้เพิ่มเพียงพื้นที่สีขาวบาง เพื่อประโยชน์ในการมองเห็นของที่นี่ 189 00:06:46,520 --> 00:06:51,840 เราอาจจะทำอย่างไรตอนนี้เป็นตัวแทนใน กล่าวว่าเลขฐานสิบหกรูปสี่เหลี่ยมของบิตแต่ละ 190 00:06:51,840 --> 00:06:52,880 ชุดของสี่บิตแต่ละ 191 00:06:52,880 --> 00:06:56,420 >> ดังนั้นสำหรับตัวอย่างเช่นทางด้านซ้าย ตอนนี้เรามี 1111 ในไบนารี 192 00:06:56,420 --> 00:07:00,420 อะไรคือสิ่งที่ตัวเลขในทศนิยมที่ ถ้าคุณทำออกคณิตศาสตร์หรือไม่ 193 00:07:00,420 --> 00:07:03,780 คุณมีสถานที่ที่คนที่เจ้าตัว, สถานที่ที่สี่และเป็นสถานที่ที่แปด 194 00:07:03,780 --> 00:07:04,341 >> ผู้ชม: 15 195 00:07:04,341 --> 00:07:05,340 เดวิดเจลัน: มันเป็น 15 196 00:07:05,340 --> 00:07:08,340 ดังนั้นหากเราทำแปดบวกสี่ บวกสองบวกหนึ่งที่เราได้รับ 15 197 00:07:08,340 --> 00:07:11,790 เพื่อที่ผมจะเขียนลง 15 ด้านล่าง 1111 แต่จุดทั้งที่นี่ 198 00:07:11,790 --> 00:07:13,190 เป็นเลขฐานสิบหกไม่ทศนิยม 199 00:07:13,190 --> 00:07:17,310 ดังนั้นแทนที่จะเขียนลง 15, 1-5 ฉันจะเขียนว่าในฐานสิบหก, 200 00:07:17,310 --> 00:07:22,311 ซึ่งถ้าคุณกลับคิดว่าถ้าคุณมี ศูนย์ผ่านฉสิ่งที่ 15 จะเป็นอย่างไร 201 00:07:22,311 --> 00:07:22,810 ผู้ชม: ฉ 202 00:07:22,810 --> 00:07:24,434 เดวิดเจลัน: ดังนั้นมันจะเปิดออกมันฉ 203 00:07:24,434 --> 00:07:29,140 และคุณสามารถทำงานที่ออกมาด้วยการพูดว่า ดีถ้าเป็น 10 แล้วตกลงฉ 15 204 00:07:29,140 --> 00:07:33,250 ดังนั้นแน่นอนเราสามารถเขียน ชุดเดียวกันนี้ของตัวเลขที่ฉฉ 205 00:07:33,250 --> 00:07:35,750 แล้วถ้าเราทำบิตของคณิตศาสตร์ เราจะได้ข้อสรุปว่าที่ง 206 00:07:35,750 --> 00:07:38,650 แปดเป็นเรื่องง่ายสวยเพราะเรา มีหนึ่งในสถานที่ที่แปด 207 00:07:38,650 --> 00:07:40,620 แล้วเรามีฉฉคู่มากขึ้นของ 208 00:07:40,620 --> 00:07:44,669 >> ดังนั้นสิ่งที่มนุษย์มักจะทำโดยการประชุม เมื่อพวกเขาใช้เลขฐานสิบหกคือพวกเขาเพียงแค่ 209 00:07:44,669 --> 00:07:47,710 เขียนนี้น้อยมากรัดกุม กำจัดส่วนใหญ่ของพื้นที่สีขาวที่ 210 00:07:47,710 --> 00:07:50,890 และเพียงเพื่อเป็นซุปเปอร์ที่ชัดเจนในการ ผู้อ่านว่านี้เป็นเลขฐานสิบหก 211 00:07:50,890 --> 00:07:54,670 การประชุมง่ายในหมู่ มนุษย์จะถูกคุณเขียนเป็นศูนย์ 212 00:07:54,670 --> 00:07:58,000 x ซึ่งมีความหมายอื่น กว่าตัวระบุภาพของ 213 00:07:58,000 --> 00:07:59,590 ที่นี่มาจำนวนฐานสิบหก 214 00:07:59,590 --> 00:08:04,210 >> แล้วคุณใส่ตัวเลขสองหลัก, ฉ ฉในกรณีนี้แล้ว d แล้วฉฉ 215 00:08:04,210 --> 00:08:06,700 ดังนั้นเรื่องยาวสั้น เลขฐานสิบหกก็มีแนวโน้มที่ 216 00:08:06,700 --> 00:08:11,990 จะเป็นประโยชน์เพราะแต่ละคนของ ตัวเลขศูนย์ผ่านฉเส้นอย่างสมบูรณ์แบบ 217 00:08:11,990 --> 00:08:13,880 ขึ้นกับรูปแบบของสี่บิต 218 00:08:13,880 --> 00:08:18,080 >> ดังนั้นถ้าคุณมีตัวเลขสองหลักเลขฐานสิบหก ศูนย์ผ่าน F อีกครั้งและอีกครั้ง 219 00:08:18,080 --> 00:08:20,256 ที่ช่วยให้คุณได้อย่างสมบูรณ์แบบ แปดบิตหรือหนึ่งไบต์ 220 00:08:20,256 --> 00:08:22,380 ดังนั้นที่ว่าทำไมมันมีแนวโน้มที่จะ เป็นประโยชน์ตามอัตภาพ 221 00:08:22,380 --> 00:08:24,990 ไม่มีทางปัญญาเป็น เนื้อหาจริงๆถัดจากนั้น 222 00:08:24,990 --> 00:08:27,010 ยูทิลิตี้อื่น ๆ นอกเหนือจากที่เกิดขึ้นจริงของ 223 00:08:27,010 --> 00:08:29,310 >> ตอนนี้ภาพ JPEG ไม่เพียง แต่ รูปแบบไฟล์สำหรับกราฟิก 224 00:08:29,310 --> 00:08:33,230 คุณอาจจะจำได้ว่ามี ไฟล์เช่นนี้ในโลก 225 00:08:33,230 --> 00:08:34,830 อย่างน้อยจากไม่กี่ปีหลัง 226 00:08:34,830 --> 00:08:37,580 >> ดังนั้นนี้เป็นจริง ที่ติดตั้งใน Windows XP 227 00:08:37,580 --> 00:08:39,960 ในล้านของคอมพิวเตอร์ทั่วโลก 228 00:08:39,960 --> 00:08:43,000 และนี่คือแฟ้มบิตแมป, BMP 229 00:08:43,000 --> 00:08:47,690 และแฟ้มบิตแมปที่คุณจะได้เห็นต่อไป สัปดาห์เพียงหมายถึงรูปแบบของจุดที่ 230 00:08:47,690 --> 00:08:51,710 พิกเซลที่พวกเขากำลังเรียกว่า แผนที่ในบิตจริงๆ 231 00:08:51,710 --> 00:08:55,160 >> ดังนั้นสิ่งที่น่าสนใจแม้ว่า เกี่ยวกับรูปแบบไฟล์นี้, BMP, เป็น 232 00:08:55,160 --> 00:08:58,590 ที่อยู่ใต้ฝากระโปรงก็ มีมากกว่าเพียงแค่สามไบต์ 233 00:08:58,590 --> 00:09:01,020 ที่ประกอบด้วยส่วนหัวของตนเพื่อ ที่จะพูดไม่กี่กัดครั้งแรก 234 00:09:01,020 --> 00:09:03,330 จริง ๆ แล้วมันดูเล็กน้อย ความซับซ้อนได้อย่างรวดเร็วก่อน 235 00:09:03,330 --> 00:09:04,704 และคุณจะเห็นนี้อยู่ในชุด P 236 00:09:04,704 --> 00:09:06,810 และได้รับบางสิ่งบางอย่าง ออกมาโดยเฉพาะอย่างยิ่งในเรื่องนี้ตอนนี้ 237 00:09:06,810 --> 00:09:10,720 ไม่ได้ให้ความสำคัญเช่นเดียวกับความเป็นจริง ว่าที่จุดเริ่มต้นของทุกบิตแมป 238 00:09:10,720 --> 00:09:13,823 ไฟล์รูปแบบกราฟิก, มีทั้งกลุ่มของตัวเลข 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> ตอนนี้ไมโครซอฟท์ ผู้เขียนของรูปแบบนี้ 241 00:09:16,720 --> 00:09:18,820 มีแนวโน้มที่จะเรียกคนเหล่านั้น สิ่งที่ไม่ ints และตัวอักษร 242 00:09:18,820 --> 00:09:22,259 และลอย แต่คำพูดและง คำและปรารถนาและไบต์ 243 00:09:22,259 --> 00:09:23,800 ดังนั้นพวกเขากำลังชนิดข้อมูลที่แตกต่างกันเพียงแค่ 244 00:09:23,800 --> 00:09:25,170 พวกเขากำลังชื่อที่แตกต่างกัน สำหรับสิ่งเดียวกัน 245 00:09:25,170 --> 00:09:26,740 แต่คุณจะเห็นว่าใน P ชุดสี่ 246 00:09:26,740 --> 00:09:31,450 >> แต่นี้เป็นเพียงการบอกว่าถ้ามนุษย์ ดับเบิลคลิกที่ไฟล์บาง .BMP ของเขา 247 00:09:31,450 --> 00:09:35,015 หรือฮาร์ดไดรฟ์ของเธอและหน้าต่างเปิด ขึ้นแสดงให้เขาหรือเธอภาพที่ 248 00:09:35,015 --> 00:09:38,500 ที่เกิดขึ้นเนื่องจากการดำเนินงาน ระบบน่าจะสังเกตเห็นไม่เพียง แต่ 249 00:09:38,500 --> 00:09:41,460 นามสกุลไฟล์ .BMP ในชื่อไฟล์ 250 00:09:41,460 --> 00:09:45,010 แต่ยังมีความจริงที่ว่ามีบาง การประชุมกับรูปแบบของบิต 251 00:09:45,010 --> 00:09:47,490 ที่จุดเริ่มต้นมาก ของไฟล์บิตแมปที่ 252 00:09:47,490 --> 00:09:50,270 >> แต่ตอนนี้ขอมุ่งเน้นไปที่ เช่นไฟล์ที่มีความซับซ้อน 253 00:09:50,270 --> 00:09:52,120 แต่ในสิ่งที่เช่นนี้ 254 00:09:52,120 --> 00:09:55,190 สมมติว่าที่นี่ใน gedit ผม เพียงแค่จุดเริ่มต้น 255 00:09:55,190 --> 00:09:57,070 ของโปรแกรมที่ง่ายสวย 256 00:09:57,070 --> 00:09:58,860 ฉันมีบางอย่างรวมถึงการขึ้นด้านบน 257 00:09:58,860 --> 00:10:02,120 ตอนนี้ผมได้มี #include "structs.h" แต่ ฉันจะกลับมาที่ว่าในช่วงเวลา 258 00:10:02,120 --> 00:10:03,974 แต่เรื่องนี้จะเป็นประโยชน์สำหรับในตอนนี้ 259 00:10:03,974 --> 00:10:05,890 ดังนั้นนี่คือโปรแกรม ที่จะดำเนินการ 260 00:10:05,890 --> 00:10:07,335 เช่นฐานข้อมูลของนายทะเบียน 261 00:10:07,335 --> 00:10:09,710 ดังนั้นฐานข้อมูลของนักเรียน และนักเรียนทุกคนในโลก 262 00:10:09,710 --> 00:10:13,190 มีชื่อและบ้านและอาจจะบาง สิ่งอื่น ๆ แต่เราจะให้มันง่าย 263 00:10:13,190 --> 00:10:15,140 นักเรียนทุกคนมีชื่อและบ้าน 264 00:10:15,140 --> 00:10:17,700 >> ดังนั้นถ้าผมอยากจะเขียน โปรแกรมที่มีจุดมุ่งหมายในชีวิต 265 00:10:17,700 --> 00:10:19,860 เป็นเพียงการย้ำจาก เป็นศูนย์ได้ถึงสาม 266 00:10:19,860 --> 00:10:22,070 ถ้ามีสามนักเรียน ที่มหาวิทยาลัยฮาร์วาร์ 267 00:10:22,070 --> 00:10:25,350 และฉันก็ต้องการที่จะได้รับใช้ GetString, ชื่อของนักเรียนแต่ละคนและบ้าน 268 00:10:25,350 --> 00:10:26,600 และจากนั้นเพียงแค่พิมพ์เหล่านั้นออก 269 00:10:26,600 --> 00:10:28,630 >> นี่คือการจัดเรียงของชอบสัปดาห์ หนึ่งสิ่งที่สัปดาห์ที่สองตอนนี้ 270 00:10:28,630 --> 00:10:30,810 ที่ฉันต้องการเพียงแค่สำหรับ ห่วงหรือสิ่งที่ต้องการ 271 00:10:30,810 --> 00:10:34,500 และฉันต้องการที่จะเรียก GetString ไม่กี่ ครั้งแล้วพิมพ์ฉไม่กี่ครั้ง 272 00:10:34,500 --> 00:10:37,340 ดังนั้นวิธีที่ฉันอาจจะทำเช่นนี้แม้ว่า เมื่อทั้งสองชื่อและบ้าน 273 00:10:37,340 --> 00:10:39,070 มีส่วนร่วมสำหรับนักเรียนแต่ละคน? 274 00:10:39,070 --> 00:10:42,830 >> ดังนั้นสัญชาตญาณแรกของฉันอาจจะ จะทำอะไรเช่นนี้ 275 00:10:42,830 --> 00:10:49,620 ครั้งแรกที่ฉันอาจจะบอกว่าดีให้ฉัน บอกว่าอาเรย์ของสตริงที่เรียกว่าชื่อ 276 00:10:49,620 --> 00:10:51,530 และฉันไม่ต้องการ hardcode สามที่นี่ 277 00:10:51,530 --> 00:10:53,064 สิ่งที่ฉันต้องการที่จะนำมี? 278 00:10:53,064 --> 00:10:55,730 ดังนั้นนักเรียนเพราะนั่นเป็นเพียง คงประกาศที่ด้านบน 279 00:10:55,730 --> 00:10:57,860 เพียงเพื่อให้ฉันจะได้ไม่ต้อง hardcode สามในสถานที่หลาย 280 00:10:57,860 --> 00:11:00,859 วิธีนี้จะสามารถเปลี่ยนได้ที่เดียว และมันมีผลต่อการเปลี่ยนแปลงทุก 281 00:11:00,859 --> 00:11:04,470 และจากนั้นผมอาจจะทำ นักเรียนบ้านสตริง 282 00:11:04,470 --> 00:11:10,250 >> และตอนนี้ฉันอาจจะทำสิ่งที่ชอบ สำหรับ (int i = 0; ฉัน <นักเรียน; i ++ 283 00:11:10,250 --> 00:11:14,390 ดังนั้นฉันพิมพ์ได้อย่างรวดเร็ว แต่นี้เป็น ไวยากรณ์อาจคุ้นเคยตอนนี้ 284 00:11:14,390 --> 00:11:17,030 >> และตอนนี้เป็นมากขึ้นล่าสุด 285 00:11:17,030 --> 00:11:22,890 ถ้าผมต้องการที่จะใส่ใน i-th ชื่อของนักเรียน, ผมคิดว่าผมทำเช่นนี้ 286 00:11:22,890 --> 00:11:26,480 แล้วไม่ได้ชื่อ แต่ยึดบ้านฉัน 287 00:11:26,480 --> 00:11:29,930 ผมทำเช่นนี้ GetString และปล่อยให้ ฉันกลับไปแก้ไขบรรทัดนี้ 288 00:11:29,930 --> 00:11:30,430 เห็นด้วย? 289 00:11:30,430 --> 00:11:31,200 ไม่เห็นด้วย? 290 00:11:31,200 --> 00:11:32,366 มันไม่ใช้ง่ายมาก 291 00:11:32,366 --> 00:11:33,890 ฉันยังไม่ได้บอกผู้ใช้ว่าจะทำอย่างไร 292 00:11:33,890 --> 00:11:36,520 >> แต่ตอนนี้ถ้าฉันยัง ต้องการที่จะต่อมาให้ 293 00:11:36,520 --> 00:11:40,060 พูดพิมพ์สิ่งเหล่านี้ ดังนั้นสิ่งที่ต้องทำแทนดูในภายหลัง 294 00:11:40,060 --> 00:11:42,330 ฉันจะทำมากขึ้นด้วย เจ้านี่นี้เนื้อหาคือ 295 00:11:42,330 --> 00:11:45,970 การดำเนินการที่ถูกต้องของ ได้รับชื่อและที่บ้านสาม 296 00:11:45,970 --> 00:11:48,870 ของพวกเขารวมของแต่ละจากผู้ใช้ 297 00:11:48,870 --> 00:11:51,280 >> แต่นี่ไม่ใช่การออกแบบที่ดีมากใช่มั้ย? 298 00:11:51,280 --> 00:11:55,220 เกิดอะไรขึ้นหากนักเรียนไม่ได้เพียงแค่ชื่อ และบ้าน แต่ยังมีจำนวน ID, 299 00:11:55,220 --> 00:11:57,770 และหมายเลขโทรศัพท์ และที่อยู่อีเมล 300 00:11:57,770 --> 00:12:00,280 และอาจจะหน้าบ้านและ อาจจะจับ Twitter, 301 00:12:00,280 --> 00:12:03,730 และจำนวนของรายละเอียดอื่น ๆ ที่เกี่ยวข้องกับนักเรียนหรือบุคคลที่ 302 00:12:03,730 --> 00:12:04,610 มากขึ้นโดยทั่วไป 303 00:12:04,610 --> 00:12:07,720 วิธีการที่เราจะเริ่มต้นที่จะเพิ่ม ฟังก์ชันการทำงานกับโปรแกรมนี้ 304 00:12:07,720 --> 00:12:14,080 >> ดีฉันรู้สึกเหมือนวิธีที่ง่ายที่สุดอาจจะ จะทำสิ่งที่ต้องการให้พูดว่า 305 00:12:14,080 --> 00:12:16,490 นักศึกษารหัส int 306 00:12:16,490 --> 00:12:18,380 ดังนั้นผมจึงสามารถใส่รหัสของพวกเขาทั้งหมดในที่นั่น 307 00:12:18,380 --> 00:12:22,240 แล้วบางสิ่งบางอย่าง เช่นหมายเลขโทรศัพท์ 308 00:12:22,240 --> 00:12:24,400 ฉันไม่แน่ใจว่าวิธีการ รับรองว่าเพียง แต่ 309 00:12:24,400 --> 00:12:30,280 จึงขอไปข้างหน้าและเพียงแค่โทร นี้ twitters นักเรียนซึ่ง 310 00:12:30,280 --> 00:12:33,550 เป็นเพียงเล็กน้อยแปลก but--, และสาขาพวงมากขึ้น 311 00:12:33,550 --> 00:12:36,360 >> ผมได้เริ่มต้นได้อย่างมีประสิทธิภาพ คัดลอกและวางที่นี่ 312 00:12:36,360 --> 00:12:39,416 และนี่คือที่จะเติบโตสวย เทอะทะสวยได้อย่างรวดเร็วใช่มั้ย? 313 00:12:39,416 --> 00:12:42,290 มันจะไม่ดีถ้ามี ในโลกโครงสร้างข้อมูลที่รู้จักกัน 314 00:12:42,290 --> 00:12:45,600 ไม่เป็น int หรือสตริง แต่สิ่งที่ ระดับที่สูงขึ้นเป็นนามธรรมดังนั้น 315 00:12:45,600 --> 00:12:47,570 ที่จะพูดเป็นที่รู้จักกันเป็นนักเรียนหรือไม่ 316 00:12:47,570 --> 00:12:50,220 C ไม่ได้มาด้วยในตัว ฟังก์ชั่นสำหรับนักเรียน 317 00:12:50,220 --> 00:12:52,260 แต่สิ่งที่ถ้าผมต้องการที่จะให้มันดังกล่าวหรือไม่ 318 00:12:52,260 --> 00:12:55,640 >> ดีก็จะเปิดออกฉันจะไป เปิดไฟล์ที่เรียกว่า structs.h ที่นี่ 319 00:12:55,640 --> 00:12:57,090 และคุณสามารถทำตรงนั้น 320 00:12:57,090 --> 00:12:58,290 และเรากำลังจะเริ่มต้นการทำเช่นนี้ตอนนี้ 321 00:12:58,290 --> 00:13:01,490 และภายใต้ประทุนของ P ชุดสาม, คุณได้รับการทำอยู่แล้วในขณะนี้ 322 00:13:01,490 --> 00:13:05,920 ไม่มีสิ่งเช่นกรัมดูแลรักษาหรือ รูปไข่กรัมในการเขียนโปรแกรมภาษาซี 323 00:13:05,920 --> 00:13:10,570 >> คนที่ Stanford ดำเนินการเหล่านั้น ชนิดข้อมูลโดยใช้วิธีการนี​​้ที่นี่ 324 00:13:10,570 --> 00:13:13,900 ประกาศข้อมูลใหม่ของตัวเอง ประเภทโดยใช้คำหลักใหม่ 325 00:13:13,900 --> 00:13:16,744 เรียกว่า struct และอีก เรียกว่า typedef หนึ่ง 326 00:13:16,744 --> 00:13:19,660 และแน่นอนแม้ว่าไวยากรณ์ มีลักษณะเล็ก ๆ น้อย ๆ ที่แตกต่างจากสิ่งที่ 327 00:13:19,660 --> 00:13:23,550 ที่เราเคยเห็นมาก่อนใน หลักการมันง่ายสุด 328 00:13:23,550 --> 00:13:25,297 >> เพียงแค่นี้ก็หมายถึง "กำหนดประเภท". 329 00:13:25,297 --> 00:13:27,255 ที่เป็นไปได้ โครงสร้างและโครงสร้าง 330 00:13:27,255 --> 00:13:29,400 เป็นเหมือนภาชนะ สำหรับสิ่งที่หลาย ๆ 331 00:13:29,400 --> 00:13:31,780 และโครงสร้างที่เป็นไป ที่จะมีสายเรียกชื่อ 332 00:13:31,780 --> 00:13:33,210 และบ้านสายที่เรียกว่า 333 00:13:33,210 --> 00:13:37,520 และขอเรียกเพียงเพื่อความสะดวก นี้นักเรียนโครงสร้างข้อมูลทั้ง 334 00:13:37,520 --> 00:13:40,320 >> ดังนั้นช่วงเวลาที่คุณจะได้รับการ อัฒภาคที่คุณมีในขณะนี้ 335 00:13:40,320 --> 00:13:43,280 สร้างข้อมูลของคุณเอง ชนิดที่เรียกว่านักเรียน 336 00:13:43,280 --> 00:13:46,420 ที่ตอนนี้ยืนอยู่ข้าง int, และลอยและถ่านและสตริง 337 00:13:46,420 --> 00:13:50,270 และดูแลรักษากรัมและกรัมรูปไข่และหมายเลขใด ๆ ในสิ่งที่คนอื่น ๆ ได้คิดค้น 338 00:13:50,270 --> 00:13:53,340 >> ดังนั้นสิ่งที่เป็นประโยชน์เกี่ยวกับเรื่องนี้ ขณะนี้คือว่าถ้าฉันกลับไป 339 00:13:53,340 --> 00:13:57,430 เพื่อ struct 0 และจบนี้ การดำเนินการที่ฉันเขียน 340 00:13:57,430 --> 00:14:02,080 ล่วงหน้าที่นี่สังเกตได้ว่าทุก ของ messiness หลีกเลี่ยงไม่ได้ 341 00:14:02,080 --> 00:14:05,490 เป็นเรื่องเกี่ยวกับที่จะเริ่มต้นสิ่งที่เกิดขึ้นขณะที่ผมเพิ่ม หมายเลขโทรศัพท์และที่ twitters และทุก 342 00:14:05,490 --> 00:14:07,370 สิ่งอื่น ๆ เหล่านี้เพื่อ ความหมายของนักเรียนที่ 343 00:14:07,370 --> 00:14:11,810 ตอนนี้ก็ห่อรัดกุมขึ้น เป็นเพียงหนึ่งในแถวของนักเรียน 344 00:14:11,810 --> 00:14:15,500 >> และแต่ละของนักเรียนที่ขณะนี้ มีหลายสิ่งภายในของมัน 345 00:14:15,500 --> 00:14:16,930 เพื่อให้เพียงใบหนึ่งคำถาม 346 00:14:16,930 --> 00:14:19,700 คุณจะได้รับที่ชื่อ และบ้านและ ID, 347 00:14:19,700 --> 00:14:21,640 และสิ่งอื่นที่เป็น ด้านในของนักเรียนหรือไม่ 348 00:14:21,640 --> 00:14:22,930 ง่ายสุดเช่นกัน 349 00:14:22,930 --> 00:14:25,730 ไวยากรณ์ใหม่ แต่เป็นความคิดที่เรียบง่าย 350 00:14:25,730 --> 00:14:29,239 >> คุณเพียงแค่ดัชนีลงในอาร์เรย์ ที่เราได้เมื่อสัปดาห์ที่แล้วและ 351 00:14:29,239 --> 00:14:31,030 และสิ่งที่เห็นได้อย่างชัดเจน ชิ้นใหม่ของไวยากรณ์? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 เพียง. ซึ่งหมายความว่า "ไปภายใน โครงสร้างและได้รับข้อมูลที่เรียกว่า 354 00:14:35,880 --> 00:14:39,030 ชื่อที่ได้รับข้อมูลที่เรียกว่าบ้าน ได้รับข้อมูลที่เรียกว่านักเรียน ". 355 00:14:39,030 --> 00:14:41,940 >> ดังนั้นใน P ชุดสามถ้าคุณ ยังคงทำงานอยู่ในนั้น 356 00:14:41,940 --> 00:14:44,020 และคนส่วนใหญ่ยังคง จะตระหนักดีว่าในขณะที่คุณ 357 00:14:44,020 --> 00:14:46,130 เริ่มใช้สิ่งที่ต้องการ rects กรัมกรัมและนิ้วก้อย 358 00:14:46,130 --> 00:14:50,201 และสิ่งอื่น ๆ ที่ดูเหมือนจะไม่ มาจากสัปดาห์ที่ศูนย์หนึ่งหรือสอง 359 00:14:50,201 --> 00:14:52,950 ตระหนักดีว่านั่นเป็นเพราะ Stanford ประกาศบางชนิดข้อมูลใหม่ 360 00:14:52,950 --> 00:14:56,160 >> และแน่นอนที่ว่าสิ่งที่เราจะ ทำเช่นเดียวกับใน P ชุดสี่เมื่อ 361 00:14:56,160 --> 00:14:59,880 เราเริ่มที่จะจัดการกับสิ่ง เช่นภาพบิตแมปและอื่น ๆ 362 00:14:59,880 --> 00:15:02,882 เพื่อให้เป็นเพียงแค่ทีเซอร์และ รูปแบบจิตสำหรับสิ่งที่จะมา 363 00:15:02,882 --> 00:15:04,590 ตอนนี้ผม procrastinated เล็กน้อยในเช้าวันนี้ 364 00:15:04,590 --> 00:15:09,560 ฉันเป็นชนิดของความอยากรู้อยากเห็นสิ่งที่ วอลล์เปเปอร์ไมโครซอฟท์จริง 365 00:15:09,560 --> 00:15:10,310 ดูเหมือนว่าวันนี้ 366 00:15:10,310 --> 00:15:15,200 และมันจะเปิดออกคนในปี 2006 จริงไปเกือบได้อย่างแม่นยำ 367 00:15:15,200 --> 00:15:19,210 จุดเดียวกันในการถ่ายภาพในความเป็นจริง สิ่งที่ดูเหมือนว่าวันนี้ 368 00:15:19,210 --> 00:15:21,380 ข้อมูลนี้เป็นรกน้อย 369 00:15:21,380 --> 00:15:24,850 >> ดังนั้นการพูดตอนนี้ของภาพ ให้นำกลับมา Daven ที่นี่ 370 00:15:24,850 --> 00:15:26,890 บนหน้าจอและนิโคลัส และเพียงแค่เตือนให้คุณ 371 00:15:26,890 --> 00:15:30,540 ว่าถ้าคุณต้องการที่จะเข้าร่วมกับเราเพื่อรับประทานอาหารกลางวัน นี้วันศุกร์ที่หัวไปยัง URL ตามปกติของเรา 372 00:15:30,540 --> 00:15:31,440 ที่นี่ 373 00:15:31,440 --> 00:15:33,530 >> ดังนั้นเราจึงไม่ที่ปล่อยออกในวันจันทร์ที่? 374 00:15:33,530 --> 00:15:35,140 เราได้นำปัญหานี้ใช่มั้ย? 375 00:15:35,140 --> 00:15:37,610 นี้ดูเหมือนจะถูกต้อง การดำเนินการแลกเปลี่ยน 376 00:15:37,610 --> 00:15:40,460 โดยที่คุณสละสอง ints, หนึ่งที่เรียกว่าอย่างใดอย่างหนึ่งที่เรียกว่าข 377 00:15:40,460 --> 00:15:44,130 สลับพวกเขาเช่นเดียวกับลอร่าได้ที่นี่ บนเวทีกับนมและน้ำ 378 00:15:44,130 --> 00:15:46,820 โดยใช้ชั่วคราว ตัวแปรหรือถ้วยที่ว่างเปล่า 379 00:15:46,820 --> 00:15:50,540 เพื่อให้เราสามารถนำขในและใน ขโดยไม่ทำให้ระเบียบของสิ่งที่ 380 00:15:50,540 --> 00:15:51,560 เราใช้ตัวแปร 381 00:15:51,560 --> 00:15:52,870 มันเรียกว่าอุณหภูมิ 382 00:15:52,870 --> 00:15:55,520 >> แต่สิ่งที่เป็นพื้นฐาน ปัญหากับรหัสนี้ในวันจันทร์ที่? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 สิ่งที่เป็นปัญหาที่นี่? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 ใช่ 387 00:16:00,605 --> 00:16:01,970 >> ผู้ชม: มันต้องใช้พื้นที่มากขึ้น 388 00:16:01,970 --> 00:16:04,719 >> เดวิดเจลัน: ใช้เวลามากขึ้น พื้นที่เพราะฉันใช้ตัวแปร 389 00:16:04,719 --> 00:16:05,400 และที่ตกลง 390 00:16:05,400 --> 00:16:07,300 ที่เป็นจริง แต่ฉัน จะบอกว่าที่ตกลง 391 00:16:07,300 --> 00:16:10,030 มันเป็นเพียง 32 บิตในแกรนด์ รูปแบบของสิ่งจึงไม่เป็นเรื่องใหญ่ 392 00:16:10,030 --> 00:16:10,655 ความคิดอื่น ๆ 393 00:16:10,655 --> 00:16:12,572 ผู้ชม: มันแลกเปลี่ยน ตัวแปรในท้องถิ่น 394 00:16:12,572 --> 00:16:13,571 เดวิดเจลัน: แน่นอน 395 00:16:13,571 --> 00:16:15,090 มันเป็นเพียงสัญญาแลกเปลี่ยนตัวแปรท้องถิ่น 396 00:16:15,090 --> 00:16:18,173 เพราะเวลาที่คุณเรียกฟังก์ชัน เมื่อฉันมีถาดจาก Annenberg 397 00:16:18,173 --> 00:16:19,840 ครั้งสุดท้ายที่คุณจะมีหลักที่อยู่ด้านล่าง 398 00:16:19,840 --> 00:16:23,560 เร็วที่สุดเท่าที่คุณเรียกฟังก์ชันที่เรียกว่า แลกเปลี่ยนแลกเปลี่ยนไม่ได้รับ x และ y, 399 00:16:23,560 --> 00:16:24,400 ค่าเดิม 400 00:16:24,400 --> 00:16:26,392 ไม่ได้รับสิ่งแลกเปลี่ยนที่เราได้เรียกร้อง? 401 00:16:26,392 --> 00:16:27,100 ผู้ชม: สำเนา 402 00:16:27,100 --> 00:16:28,090 เดวิดเจลันดังนั้นสำเนาของพวกเขา 403 00:16:28,090 --> 00:16:31,120 จึงได้รับหนึ่งและสองถ้าคุณ จำตัวอย่างจากครั้งสุดท้าย 404 00:16:31,120 --> 00:16:34,730 แต่สำเนาของหนึ่งและสอง ที่จะสลับที่ประสบความสำเร็จ 405 00:16:34,730 --> 00:16:38,550 แต่โชคร้ายที่ในท้ายที่สุด ค่าเหล่านี้จะยังคงเหมือนเดิม 406 00:16:38,550 --> 00:16:41,880 เพื่อให้เราสามารถเห็นสิ่งนี้กับเรา เพื่อนใหม่หวังว่า GDB, 407 00:16:41,880 --> 00:16:45,180 ที่คุณหรือ TFS และ Ca มี ได้รับการแนะนำให้คุณไปดังต่อไปนี้ 408 00:16:45,180 --> 00:16:51,210 >> จึงไม่มีการเรียกคืนการแลกดู like-- ให้ เปิดเจ้านี่มีลักษณะเช่นนี้ 409 00:16:51,210 --> 00:16:54,160 เราเริ่มต้นได้ x เพื่อหนึ่งถึงสองปี 410 00:16:54,160 --> 00:16:55,620 มีพวงของการพิมพ์ของฉ 411 00:16:55,620 --> 00:16:58,080 แต่แล้วการเรียกร้องที่สำคัญ นี่คือการสลับที่ 412 00:16:58,080 --> 00:17:00,260 เป็นสิ่งที่เรารหัส เพิ่งเห็นช่วงเวลาที่ผ่านมา 413 00:17:00,260 --> 00:17:03,180 ซึ่งเป็นที่ถูกต้องในครั้งแรก อย่างรวดเร็ว แต่หน้าที่ 414 00:17:03,180 --> 00:17:06,800 โปรแกรมนี้ไม่ได้ทำงานเพราะ ก็ไม่ได้สลับ x และ y อย่างถาวร 415 00:17:06,800 --> 00:17:10,190 >> ดังนั้นเรามาดูนี้อบอุ่นอย่างรวดเร็ว ขึ้นที่นี่กับ GDB, ./noswap 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 พวงของข้อมูลเป็นอย่างดีว่า ฉันจะได้รับการกำจัดด้วยการควบคุม L สำหรับในตอนนี้ 418 00:17:15,200 --> 00:17:17,516 และตอนนี้ฉันกำลังจะไป ไปข้างหน้าและเรียกใช้ 419 00:17:17,516 --> 00:17:19,349 และโชคร้ายที่ ไม่ได้มีประโยชน์ที่ 420 00:17:19,349 --> 00:17:22,355 มันวิ่งโปรแกรมภายในนี้ โปรแกรมที่เรียกว่า GDB ดีบัก, 421 00:17:22,355 --> 00:17:23,730 แต่มันก็ไม่ให้ฉันกระตุ้นรอบ 422 00:17:23,730 --> 00:17:26,229 >> ดังนั้นวิธีการที่จริงผมสามารถหยุดชั่วคราว ดำเนินการภายในโปรแกรมนี้ 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 ดังนั้นการหยุดพัก 425 00:17:28,329 --> 00:17:32,340 และผมสามารถทำลายใด ๆ จำนวนบรรทัดหนึ่ง, 10, 15 426 00:17:32,340 --> 00:17:35,530 แต่ผมยังสามารถทำลายสัญลักษณ์ โดยกล่าวว่าการหยุดพักเป็นหลัก 427 00:17:35,530 --> 00:17:38,980 และที่จะตั้งพัก จุดที่เห็นได้ชัดที่เส้น 16 ในหลัก 428 00:17:38,980 --> 00:17:40,050 และสถานที่ที่เป็นสาย 16? 429 00:17:40,050 --> 00:17:42,960 ให้ขึ้นไปยังรหัส และไปถึง noswap 430 00:17:42,960 --> 00:17:46,930 และแน่นอนสาย 16 ครั้งแรกในโปรแกรม 431 00:17:46,930 --> 00:17:52,130 >> ดังนั้นตอนนี้ถ้าผมไปข้างหน้าและประเภท ใช้เวลานี้ใส่ก็หยุดชั่วคราว 432 00:17:52,130 --> 00:17:53,080 จึงขอกระตุ้นรอบ 433 00:17:53,080 --> 00:17:55,716 พิมพ์ค่า x ทำไม x ศูนย์? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 และไม่สนใจเครื่องหมายดอลลาร์ 436 00:17:57,830 --> 00:17:59,725 นั่นเป็นเพียงสำหรับนักเล่น การใช้งานของโปรแกรม 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 ทำไม x เป็นศูนย์ในขณะนี้คืออะไร? 439 00:18:03,140 --> 00:18:03,640 ใช่ 440 00:18:03,640 --> 00:18:07,061 >> ผู้ชม: มันหยุดขวาก่อนที่ สาย 16, ไม่จริงในบรรทัด 16 441 00:18:07,061 --> 00:18:08,060 เดวิดเจลัน: แน่นอน 442 00:18:08,060 --> 00:18:11,630 GDB โดยค่าเริ่มต้นได้หยุดชั่วคราว ดำเนินการก่อนที่จะสาย 16 443 00:18:11,630 --> 00:18:14,820 ดังนั้นจึงยังไม่ได้ดำเนินการซึ่ง หมายถึง x มีค่าที่ไม่รู้จักบาง 444 00:18:14,820 --> 00:18:17,150 และเรามีโชคดีว่ามันเป็น สิ่งที่สะอาดเช่นศูนย์ 445 00:18:17,150 --> 00:18:20,310 ดังนั้นตอนนี้ถ้าผมพิมพ์ต่อไป ตอนนี้ก็ดำเนินการ 16 446 00:18:20,310 --> 00:18:22,000 มันรอสำหรับผมที่จะดำเนินการ 17 447 00:18:22,000 --> 00:18:23,400 ให้ฉันไปข้างหน้าและพิมพ์ x 448 00:18:23,400 --> 00:18:24,094 มันเป็นหนึ่งใน 449 00:18:24,094 --> 00:18:25,260 ให้ฉันไปข้างหน้าและพิมพ์ปี 450 00:18:25,260 --> 00:18:26,176 สิ่งที่ฉันควรจะเห็นตอนนี้หรือไม่ 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> ผู้ชม: [ไม่ได้ยิน] 453 00:18:28,560 --> 00:18:29,165 >> เดวิดเจลัน: ดังน้อย 454 00:18:29,165 --> 00:18:30,040 >> ผู้ชม: [ไม่ได้ยิน] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 เดวิดเจลัน: ไม่ค่อนข้างเป็นเอกฉันท์ 457 00:18:32,120 --> 00:18:34,760 ดังนั้นใช่เราจะเห็นค่าขยะบาง 458 00:18:34,760 --> 00:18:37,862 ตอนนี้, y เป็น 134514064 มี 459 00:18:37,862 --> 00:18:39,320 ดีก็เป็นเพียงบางค่าขยะ 460 00:18:39,320 --> 00:18:41,350 โปรแกรมของฉันจะใช้แรม เพื่อวัตถุประสงค์ที่แตกต่างกัน 461 00:18:41,350 --> 00:18:42,350 มีฟังก์ชั่นอื่น ๆ ที่เป็น 462 00:18:42,350 --> 00:18:44,040 คนอื่น ๆ เขียนในคอมพิวเตอร์ของฉัน 463 00:18:44,040 --> 00:18:46,789 ดังนั้นบิตเหล่านั้นได้ถูกนำมาใช้ ค่าอื่น ๆ และสิ่งที่ฉันเห็น 464 00:18:46,789 --> 00:18:49,470 เป็นเศษของบาง ก่อนการใช้งานหน่วยความจำที่ 465 00:18:49,470 --> 00:18:53,350 >> ดังนั้นไม่มีเรื่องใหญ่เพราะทันที ขณะที่ผมพิมพ์ต่อไปแล้วพิมพ์ Y, 466 00:18:53,350 --> 00:18:55,640 มันเริ่มต้นได้ที่ ค่าที่ฉันต้องการ 467 00:18:55,640 --> 00:18:57,400 ดังนั้นตอนนี้ขอไปข้างหน้าเร็วขึ้นเล็กน้อย 468 00:18:57,400 --> 00:18:58,540 ยังไม่มีการต่อไป 469 00:18:58,540 --> 00:18:59,570 ลองทำมันอีกครั้ง 470 00:18:59,570 --> 00:19:00,530 ลองทำมันอีกครั้ง 471 00:19:00,530 --> 00:19:02,404 แต่ฉันไม่ต้องการที่จะตี ได้ที่นี่เพราะถ้าฉัน 472 00:19:02,404 --> 00:19:05,110 ต้องการที่จะเห็นสิ่งที่เกิดขึ้นภายใน การแลกสิ่งที่เป็นคำสั่งหรือไม่ 473 00:19:05,110 --> 00:19:05,520 >> ผู้ชม: ขั้นตอน 474 00:19:05,520 --> 00:19:06,436 >> เดวิดเจลัน: ขั้นตอน 475 00:19:06,436 --> 00:19:09,800 ดังนั้นขั้นตอนนี้ฉันเป็น ฟังก์ชั่นมากกว่าที่มากกว่านั้น 476 00:19:09,800 --> 00:19:12,270 และตอนนี้มันเป็นความลับเล็ก ๆ น้อย ๆ ตรงไปตรงมา แต่นี้เป็นเพียงแค่ 477 00:19:12,270 --> 00:19:14,581 บอกฉันฉันอยู่ในสาย 33 ขณะนี้ 478 00:19:14,581 --> 00:19:15,580 และขอให้ทำเช่นนี้อีกครั้ง 479 00:19:15,580 --> 00:19:16,080 อุณหภูมิพิมพ์ 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 ค่าขยะลบเวลานี้ แต่นั่นเป็นเพียงยังคงค่าขยะ 482 00:19:20,170 --> 00:19:22,810 ดังนั้นขอให้ทำต่อไปอุณหภูมิพิมพ์ 483 00:19:22,810 --> 00:19:27,130 มันเริ่มต้นได้ที่ 1 ซึ่ง คือค่าของ x อาคา 484 00:19:27,130 --> 00:19:29,110 >> ตอนนี้ที่เป็นของเราและ x มาจากไหน? 485 00:19:29,110 --> 00:19:32,510 ดีทราบในหลักของเรา เรียกว่าค่าเหล่านี้ x และ y 486 00:19:32,510 --> 00:19:34,740 จากนั้นเราจะผ่านพวกเขาที่จะแลกเปลี่ยนดังต่อไปนี้ 487 00:19:34,740 --> 00:19:37,010 X มาก่อนจุลภาคปี 488 00:19:37,010 --> 00:19:40,020 แล้วแลกเปลี่ยนสามารถเรียกพวกเขา x และ y 489 00:19:40,020 --> 00:19:42,630 แต่เพื่อความชัดเจนก็ เรียกพวกเขาและข 490 00:19:42,630 --> 00:19:45,970 แต่ A และ B อยู่ในขณะนี้จะเป็น สำเนาของ x และ y ตามลำดับ 491 00:19:45,970 --> 00:19:50,660 >> ดังนั้นถ้าผมกลับไป GDB ไปชั่วคราว เป็นหนึ่งและเป็นหนึ่ง 492 00:19:50,660 --> 00:19:56,130 แต่ถ้าผมทำต่อไปและตอนนี้ทำพิมพ์ , ได้ถูกย้ายไปแล้วกว่า 493 00:19:56,130 --> 00:20:00,030 นมที่ได้รับการเทลงไปในอดีต แก้วหรือในทางกลับกันน้ำผลไม้สีส้ม 494 00:20:00,030 --> 00:20:04,750 >> และถ้าผมทำต่อไปอีกครั้งและตอนนี้ ถ้าผมพิมพ์ออกมาในขณะที่การตรวจสอบสติ, 495 00:20:04,750 --> 00:20:07,687 ยังคงเป็นสอง แต่ขเป็นหนึ่ง 496 00:20:07,687 --> 00:20:08,770 ตรงไปตรงมาก็ยังคงมี 497 00:20:08,770 --> 00:20:10,670 ฉันไม่สนใจสิ่งที่อุณหภูมิเป็น 498 00:20:10,670 --> 00:20:16,850 แต่ทันทีที่ผมพิมพ์สมมุติว่า ดำเนินการต่อไปจะกลับไปตอนนี้ฉันในตอนท้าย 499 00:20:16,850 --> 00:20:17,480 โปรแกรม 500 00:20:17,480 --> 00:20:20,730 และโชคไม่ดีที่ x เป็น ยังคงเป็นหนึ่งและ y ยังคงสอง 501 00:20:20,730 --> 00:20:22,272 >> ดังนั้นสิ่งที่เป็นยูทิลิตี้ของ GDB มี? 502 00:20:22,272 --> 00:20:23,980 มันไม่ได้ช่วยแก้ไข ปัญหาต่อ se 503 00:20:23,980 --> 00:20:26,265 แต่ก็หวังว่าจะช่วยให้ฉัน เข้าใจได้โดยตระหนักถึง 504 00:20:26,265 --> 00:20:30,000 ว่าใช่ตรรกะของฉันที่ถูกต้อง แต่ รหัสของฉันไม่ได้ในท้ายที่สุดมี 505 00:20:30,000 --> 00:20:31,450 ผลกระทบอย่างถาวร 506 00:20:31,450 --> 00:20:34,570 นั่นคือปัญหาที่เรากำลัง ไปตอนนี้แก้วันนี้ 507 00:20:34,570 --> 00:20:37,870 >> แต่ขอให้ได้มีโดยวิธีการนี​​้ 508 00:20:37,870 --> 00:20:39,230 สตริงเป็นเรื่องโกหก 509 00:20:39,230 --> 00:20:41,860 มันเกินไปไม่ชนิดข้อมูล ที่มีอยู่ใน C. มัน 510 00:20:41,860 --> 00:20:44,750 เป็นคำพ้องความหมายสำหรับบางคน เวลาสำหรับสิ่งอื่น 511 00:20:44,750 --> 00:20:47,300 และเราสามารถที่จะเปิดเผยว่าดังนี้ 512 00:20:47,300 --> 00:20:53,282 >> ให้ฉันไปข้างหน้าและเปิดขึ้น โปรแกรมที่เรียกว่าเปรียบเทียบ-0 513 00:20:53,282 --> 00:20:56,240 และมากกว่าการพิมพ์หนึ่งออกนี้ เราจะเริ่มต้นที่จะเดินผ่านรห​​ัส 514 00:20:56,240 --> 00:20:58,040 ฉันได้เขียน แต่ เป็นเพียงไม่กี่บรรทัด 515 00:20:58,040 --> 00:20:59,570 ดังนั้นนี่คือการเปรียบเทียบ-0 516 00:20:59,570 --> 00:21:02,380 และสิ่งแรกที่ฉันทำ จะได้รับบรรทัดของข้อความ 517 00:21:02,380 --> 00:21:05,610 >> แต่สังเกตเห็นสิ่งที่ฉัน ทำครั้งแรก 518 00:21:05,610 --> 00:21:07,910 จะแตกต่างกันอย่างเห็นได้ชัดเกี่ยวกับสาย 21 คืออะไร? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 ที่จริงแล้วรอสักครู่ 521 00:21:11,402 --> 00:21:12,110 นี้เป็นสำเนาสอง 522 00:21:12,110 --> 00:21:13,568 ที่ไม่ได้แม้กระทั่งโปรแกรมที่เหมาะสม 523 00:21:13,568 --> 00:21:14,780 ขวาแจ้งเตือนสปอยเลอร์ทั้งหมด 524 00:21:14,780 --> 00:21:16,890 ขวาทั้งหมดดังนั้นจึงไม่ทราบว่า 525 00:21:16,890 --> 00:21:18,520 นั่นเป็นคำตอบให้กับคำถามในอนาคต 526 00:21:18,520 --> 00:21:21,450 >> นี่คือเปรียบเทียบ-0, และฉัน เกี่ยวกับการที่จะได้รับบรรทัดของข้อความ 527 00:21:21,450 --> 00:21:22,435 โปรแกรมที่ง่ายมาก 528 00:21:22,435 --> 00:21:23,560 ดังนั้นนี่คือตรงไปตรงมา 529 00:21:23,560 --> 00:21:28,070 นี้เป็นเหมือนสัปดาห์หนึ่งสิ่งที่สัปดาห์ที่สอง ในขณะนี้ สตริง s = GetString 530 00:21:28,070 --> 00:21:29,700 ตอนนี้ผมบอกว่ามันลงที่นี่อีกครั้ง 531 00:21:29,700 --> 00:21:31,830 สตริง t = GetString 532 00:21:31,830 --> 00:21:35,300 และแล้วสิ่งสุดท้ายที่อยู่ในนี้ โปรแกรมเป็นชื่อของมันบ่งบอก 533 00:21:35,300 --> 00:21:37,090 คือผมจะพยายามที่จะเปรียบเทียบพวกเขา 534 00:21:37,090 --> 00:21:40,709 >> ดังนั้นถ้าวินาที, สตริงแรก เท่ากับ = t แล้วฉัน 535 00:21:40,709 --> 00:21:42,250 จะบอกว่าคุณพิมพ์สิ่งเดียวกัน 536 00:21:42,250 --> 00:21:44,291 อื่นผมจะบอกว่า คุณพิมพ์สิ่งที่แตกต่าง 537 00:21:44,291 --> 00:21:45,880 จึงขอรวบรวมและเรียกใช้โปรแกรมนี้ 538 00:21:45,880 --> 00:21:48,481 เพื่อให้เปรียบเทียบเป็นศูนย์ 539 00:21:48,481 --> 00:21:48,980 ดูดี 540 00:21:48,980 --> 00:21:50,490 ไม่มีข้อผิดพลาดการรวบรวม 541 00:21:50,490 --> 00:21:52,386 >> ให้ฉันไปข้างหน้าขณะนี้ และพิมพ์ ./compare-0 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 ให้ฉันไปข้างหน้าและพูดอะไรบางอย่าง : Daven และบางสิ่งบางอย่างร็อบ 544 00:21:59,220 --> 00:22:00,450 และฉันพิมพ์สิ่งที่แตกต่าง 545 00:22:00,450 --> 00:22:01,250 เพื่อให้ห่างไกลที่ดีเพื่อให้ 546 00:22:01,250 --> 00:22:02,680 โปรแกรมที่ดูเหมือนว่าจะมีความถูกต้อง 547 00:22:02,680 --> 00:22:03,880 >> แต่ขอเรียกใช้อีกครั้ง 548 00:22:03,880 --> 00:22:05,800 พูดอะไรบางอย่าง: เกบ 549 00:22:05,800 --> 00:22:07,140 พูดอะไรบางอย่าง: เกบ 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 ขวาทั้งหมด 552 00:22:09,020 --> 00:22:10,851 บางทีฉันอาจจะตีแถบพื้นที่ หรือสิ่งที่ขี้ขลาด 553 00:22:10,851 --> 00:22:11,600 ลองทำมันอีกครั้ง 554 00:22:11,600 --> 00:22:13,020 ดังนั้น Zamyla 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 สิ่งที่แตกต่าง 559 00:22:17,330 --> 00:22:19,430 ดังนั้นสิ่งที่เกิดขึ้น? 560 00:22:19,430 --> 00:22:23,200 >> ดังนั้นเราจึงมีทั้งสองสาย รหัส GetString ถูกเรียกว่าเป็นครั้งที่สอง 561 00:22:23,200 --> 00:22:25,760 และจากนั้นผมก็ พยายามที่จะเปรียบเทียบและเสื้อ 562 00:22:25,760 --> 00:22:28,370 แต่สิ่งที่จริงๆแล้วที่เกิดขึ้น? 563 00:22:28,370 --> 00:22:31,180 ดีเขียนด้วยลายมือของฉันเกี่ยวกับการที่ เนื้อตัวอย่างนี้บ้าง 564 00:22:31,180 --> 00:22:34,630 และขอให้จริงโยน นี้ขึ้นกว่าที่นี่เป็นอย่างดี 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> ดังนั้นเราจึงมีสายเช่น สตริง s = GetString 567 00:22:45,712 --> 00:22:48,295 เพื่อให้เป็นเพียงแค่ครั้งแรก สายที่น่าสนใจจากโปรแกรมที่ 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 แต่สิ่งที่ทุกเวลานี้ได้รับการ ที่เกิดขึ้นภายใต้กระโปรงหน้ารถหรือไม่ 570 00:22:52,974 --> 00:22:55,890 ดีที่ซ้ายมือด้านเป็นสตริง ซึ่งเป็นชนิดของตัวแปรบาง 571 00:22:55,890 --> 00:22:56,785 และก็เรียกว่าร้าน 572 00:22:56,785 --> 00:23:00,019 ดังนั้นผมรู้ว่านี่คือการใช้หน่วยความจำ หรือแรมในคอมพิวเตอร์ของฉันอย่างใด 573 00:23:00,019 --> 00:23:02,060 ดังนั้นฉันจะเป็นนามธรรม วาดที่เป็นรูปสี่เหลี่ยม 574 00:23:02,060 --> 00:23:04,820 32 บิตก็จะเปิดออก แต่ เพิ่มเติมว่าในอนาคต 575 00:23:04,820 --> 00:23:06,410 และแล้วสิ่งที่เกิดขึ้นที่นี่? 576 00:23:06,410 --> 00:23:08,700 >> ดี GetString เห็นได้ชัด ได้รับสายจากผู้ใช้ 577 00:23:08,700 --> 00:23:11,360 และ GetString ได้ Zamyla หรือเกบหรือ Daven 578 00:23:11,360 --> 00:23:14,640 จึงขอเลือกแรก ของผู้ซึ่งเป็น Daven 579 00:23:14,640 --> 00:23:19,174 เพื่อให้มีประสิทธิภาพสิ่งที่ GetString ได้ ผมในกรณีแรกที่ D--V-E-n 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 และแล้วสิ่งที่คนอื่นทำ มันให้ฉันแอบ? 582 00:23:25,045 --> 00:23:25,920 ผู้ชม: [ไม่ได้ยิน] 583 00:23:25,920 --> 00:23:28,720 เดวิดเจลัน: ใช่ / 0 หรือ null ตัวอักษร 584 00:23:28,720 --> 00:23:30,550 ดังนั้นมันได้อย่างมีประสิทธิภาพให้ฉันสตริง 585 00:23:30,550 --> 00:23:34,550 แต่เรารู้อยู่แล้วว่าก่อนนี้ ดูเหมือนว่าสตริงเป็นเพียงอาร์เรย์ 586 00:23:34,550 --> 00:23:37,895 ของตัวละครและจะยกเลิกโดย ตัวอักษรแมวมองพิเศษนี้ / 0 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> แต่ถ้าเรื่องนี้เป็นความจริง และนี่คือตาราง, 589 00:23:42,310 --> 00:23:44,160 นี้เห็นได้ชัดว่ารูปสี่เหลี่ยมผืนผ้าขนาดใหญ่มาก 590 00:23:44,160 --> 00:23:46,830 และแน่นอนนี้คือ ฉันเรียกร้องเพียง 32 บิต 591 00:23:46,830 --> 00:23:49,500 และนี่คือชัดเจนกว่า 32 บิตเพราะนี่อาจจะเป็น 592 00:23:49,500 --> 00:23:51,583 แปดบวกแปดบวกแปด บวกแปดบวกแปด 593 00:23:51,583 --> 00:23:53,320 เพียงเพราะไบต์ใน ASCII 594 00:23:53,320 --> 00:23:57,030 วิธี heck เราจะไปพอดี Daven ลงในกล่องเล็ก ๆ น้อย ๆ ที่นี่? 595 00:23:57,030 --> 00:23:59,880 >> ดีสิ่งที่ GetString ทำจริง? 596 00:23:59,880 --> 00:24:03,680 ดีตารางที่นี่แสดงให้เห็นถึง หน่วยความจำของคอมพิวเตอร์ของฉันหรือแรม 597 00:24:03,680 --> 00:24:07,564 จึงขอพลบอกว่าถ้า แต่ละเหล่านี้แสดงให้เห็นถึงไบต์, 598 00:24:07,564 --> 00:24:09,730 แล้วเราสามารถคิดของแต่ละ ไบต์ที่มีที่อยู่ 599 00:24:09,730 --> 00:24:13,830 เช่น 33 Oxford Street, หรือ 34 Oxford Street หรือ 35 Oxford Street 600 00:24:13,830 --> 00:24:16,700 >> ดังนั้นเช่นเดียวกับบ้านที่มีที่อยู่ และอาคารที่มีอยู่ 601 00:24:16,700 --> 00:24:19,810 เพื่อทำแต่ละไบต์ของ หน่วยความจำมีที่อยู่หรือหมายเลข 602 00:24:19,810 --> 00:24:21,042 ที่ระบุตัวตนของพวกเขา 603 00:24:21,042 --> 00:24:22,000 ตอนนี้เป็นพล 604 00:24:22,000 --> 00:24:25,370 แต่การที่จะให้มันง่ายที่ฉันจะ ใช้เลขฐานสิบหกเพียงแค่การประชุม 605 00:24:25,370 --> 00:24:28,200 แต่ 0x หมายถึงอะไรอื่น ๆ กว่า "นี่คือเลขฐานสิบหก". 606 00:24:28,200 --> 00:24:31,030 และฉันจะอ้างว่า "D" จบลงด้วยการที่ Byte หนึ่งในความทรงจำ 607 00:24:31,030 --> 00:24:34,210 >> ผมไม่มีอะไรอื่นที่เกิดขึ้นใน หน่วยความจำเพื่อ Daven ได้จุดแรก 608 00:24:34,210 --> 00:24:35,509 Byte ที่หนึ่ง 609 00:24:35,509 --> 00:24:36,800 นี้นั้นเป็นไปได้ 0x2 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 นี้เป็นไป 0x3 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 นี้เป็นไปได้ 0x4 614 00:24:41,800 --> 00:24:43,025 นี้เป็นไป 0x5 615 00:24:43,025 --> 00:24:44,025 นี้เป็นไปได้ 0x6 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> แต่เมื่อคุณเริ่มคิด เกี่ยวกับสิ่งที่กระทำของคอมพิวเตอร์ 618 00:24:48,290 --> 00:24:50,710 ภายใต้กระโปรงหน้ารถ คุณสามารถเริ่มต้นเพื่อสรุป 619 00:24:50,710 --> 00:24:54,960 วิธีการที่คุณบางปีที่ผ่านมาก็จะ ได้ดำเนินการ C ตัวเอง 620 00:24:54,960 --> 00:24:58,360 เป็น GetString อาจเป็นสิ่งที่ returning-- เพราะมัน 621 00:24:58,360 --> 00:25:00,946 รู้สึกเหมือนมันไม่ กลับ Daven ต่อ se 622 00:25:00,946 --> 00:25:03,320 เพราะเขาก็ไม่ได้ไป ให้พอดีกับ box-- เล็ก ๆ นี้ 623 00:25:03,320 --> 00:25:05,090 ดังนั้นสิ่งที่ GetString อาจกลับมา? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> ผู้ชม: [ไม่ได้ยิน] 626 00:25:08,920 --> 00:25:10,540 >> เดวิดเจลัน: สถานที่ตั้งของ Daven 627 00:25:10,540 --> 00:25:12,770 และจะได้รับการทำเช่นนี้ นับตั้งแต่สัปดาห์หนึ่ง 628 00:25:12,770 --> 00:25:16,150 สิ่งที่ GetString เป็นจริง กลับไม่ได้รับสายต่อ se 629 00:25:16,150 --> 00:25:17,780 นั่นเป็นหนึ่งในคำโกหกสีขาวเล็ก ๆ น้อย ๆ 630 00:25:17,780 --> 00:25:22,520 ก็กลับมาที่อยู่ของ สตริงในหน่วยความจำที่อยู่ไม่ซ้ำกัน 631 00:25:22,520 --> 00:25:24,820 Daven อาศัยอยู่ที่ 33 Oxford Street 632 00:25:24,820 --> 00:25:29,310 แต่ชัดถ้อยชัดคำ, กาวินมีชีวิตอยู่ ที่ 0x1, ที่อยู่หมายเลขหนึ่ง 633 00:25:29,310 --> 00:25:32,280 >> ดังนั้นสิ่งที่ได้รับอยู่ในนี้ กล่องเล็ก ๆ นั้นจะมีความชัดเจน 634 00:25:32,280 --> 00:25:35,930 เป็นเพียงที่อยู่ของสตริงที่ 635 00:25:35,930 --> 00:25:38,110 ดังนั้นตลอดเวลานี้นี้ ได้รับไปเมื่อวันที่ 636 00:25:38,110 --> 00:25:41,650 แต่สิ่งที่นี้คำว่า ขณะนี้คือว่าถ้าทุก s มี 637 00:25:41,650 --> 00:25:44,710 คือหมายเลขภายในของมันที่เป็น ที่จะหยุดคุณ, โปรแกรมเมอร์ 638 00:25:44,710 --> 00:25:47,970 จากการวางตัวเลขใด ๆ ใน ใด ๆ ตัวแปรและเพียงแค่กระโดด 639 00:25:47,970 --> 00:25:49,080 ที่จะรับรู้ของหน่วยความจำที่? 640 00:25:49,080 --> 00:25:51,320 และแน่นอนเราจะได้เห็น ที่เป็นภัยคุกคามในครั้งต่อไป 641 00:25:51,320 --> 00:25:53,500 >> แต่ตอนนี้รู้สึกไม่เพียงพอ 642 00:25:53,500 --> 00:25:55,630 ถ้าผมบอกว่าได้รับฉัน สตริงคุณให้ฉัน Daven 643 00:25:55,630 --> 00:25:57,230 แต่คุณไม่ได้จริงๆให้ฉัน Daven 644 00:25:57,230 --> 00:25:59,310 สิ่งที่คุณให้ฉันเป็นอยู่ Daven ของ 645 00:25:59,310 --> 00:26:04,310 ฉันจะแล้วทราบว่า ที่ Daven เริ่มต้นและ ends-- 646 00:26:04,310 --> 00:26:07,140 เรื่องราวของการ weird-- Daven ที่เริ่มต้นและสิ้นสุด 647 00:26:07,140 --> 00:26:10,435 และจากนั้นต่อไป สตริงในหน่วยความจำเริ่มต้น? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> ดีถ้าคุณกำลังส่ง ฉันเริ่มต้นของ Daven, 650 00:26:13,620 --> 00:26:17,230 เป็นหลักวิธีทำฉันรู้ว่า ที่ส่วนท้ายของชื่อของเขาคืออะไร? 651 00:26:17,230 --> 00:26:20,550 ที่ null อักขระพิเศษซึ่ง คือสิ่งที่สำคัญมากในขณะนี้ 652 00:26:20,550 --> 00:26:23,040 ถ้าสายใต้ เครื่องดูดควันจะมีการระบุเพียง 653 00:26:23,040 --> 00:26:25,820 โดยเฉพาะสถานที่ตั้งของพวกเขาในความทรงจำ 654 00:26:25,820 --> 00:26:28,130 ดังนั้นตลอดเวลาที่ สิ่งที่ได้เกิดขึ้น 655 00:26:28,130 --> 00:26:32,470 >> ดังนั้นเมื่อเรามองแล้ววันนี้ที่ รหัสที่นี่อธิบาย 656 00:26:32,470 --> 00:26:35,790 ถ้าคุณจะผิดพลาดในบรรทัดที่ 26 657 00:26:35,790 --> 00:26:39,560 ทำไม Zamyla และ Zamyla แตกต่างกันอย่างไร 658 00:26:39,560 --> 00:26:41,330 ทำไมเกบเกบและแตกต่างกันอย่างไร 659 00:26:41,330 --> 00:26:42,154 ใช่ในด้านหลัง 660 00:26:42,154 --> 00:26:43,390 >> ผู้ชม: พวกเขามีที่อยู่ที่แตกต่างกัน 661 00:26:43,390 --> 00:26:45,931 >> เดวิดเจลัน: เพียงเพราะ พวกเขามีที่อยู่ที่แตกต่างกัน 662 00:26:45,931 --> 00:26:48,820 เพราะเมื่อคุณเรียก GetString อีกครั้งที่ฉันจะทำอย่างรวดเร็วที่นี่ 663 00:26:48,820 --> 00:26:52,870 ถ้าเป็นสายเส้นที่สอง เสื้อที่ผมทำในโปรแกรมที่ 664 00:26:52,870 --> 00:26:55,030 เท่ากับการเรียก GetString อื่น 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 ในครั้งต่อไปที่ผมเรียกว่า GetString ฉันจะ 667 00:26:58,670 --> 00:27:00,190 ที่จะได้รับเป็นก้อนที่แตกต่างกันของหน่วยความจำ 668 00:27:00,190 --> 00:27:02,220 >> GetString ที่ได้รับอนุญาต ที่จะขอให้การดำเนินงานของ 669 00:27:02,220 --> 00:27:03,800 ระบบสำหรับหน่วยความจำมากขึ้น 670 00:27:03,800 --> 00:27:07,894 มันจะไม่นำมาใช้เหมือนกัน หกไบต์ทุกครั้งเดียว 671 00:27:07,894 --> 00:27:09,810 มันจะได้รับใหม่ ก้อนของหน่วยความจำที่ 672 00:27:09,810 --> 00:27:12,780 หมายความว่าทีเป็นไปได้ บางค่าอื่น ๆ กว่าที่นี่ 673 00:27:12,780 --> 00:27:15,380 >> ดังนั้นเมื่อฉันทำเท่ากับ = ทีคุณไม่ได้เปรียบเทียบ 674 00:27:15,380 --> 00:27:17,880 D ต่อนี้และต่อต้าน นี้และ V ต่อนี้ 675 00:27:17,880 --> 00:27:19,588 คุณกำลังเปรียบเทียบนี้ ต่อนี้ซึ่ง 676 00:27:19,588 --> 00:27:24,020 ตรงไปตรงมาเป็น useless-- useful-- สวย จะไม่ได้ผลสวยเพราะที่จริง 677 00:27:24,020 --> 00:27:25,830 ใส่ใจที่สตริงที่อยู่ในหน่วยความจำ? 678 00:27:25,830 --> 00:27:26,850 >> และแน่นอนเราไม่ได้ 679 00:27:26,850 --> 00:27:28,980 และเราไม่ได้ไป เริ่มต้นการดูแลโดยเฉพาะอย่างยิ่ง 680 00:27:28,980 --> 00:27:34,180 เพียงเท่าที่ข้อผิดพลาดสามารถเกิดขึ้น และภัยคุกคามความปลอดภัยที่อาจเกิดขึ้นจะ 681 00:27:34,180 --> 00:27:36,100 เราจะเริ่มต้นในการดูแลเกี่ยวกับเรื่องนี้ 682 00:27:36,100 --> 00:27:37,230 ดังนั้นเรามาแก้ไขปัญหานี้ 683 00:27:37,230 --> 00:27:39,650 จะเปิดออกคุณแก้ไขได้สุดเพียง 684 00:27:39,650 --> 00:27:42,600 >> และขอให้จริงก่อนที่ผมจะ เผยให้เห็นว่าอีกสิ่งที่จะ 685 00:27:42,600 --> 00:27:47,170 คุณจะทำอย่างไรถ้าในชั้นเรียน CS50, และคุณจะต้องดำเนินการ 686 00:27:47,170 --> 00:27:48,600 เปรียบเทียบกับสองสาย 687 00:27:48,600 --> 00:27:51,440 คุณชัดเจนก็ไม่สามารถใช้ S = t เท่ากับ 688 00:27:51,440 --> 00:27:54,090 แต่มีเหตุผลว่า คุณจะเปรียบเทียบสายนี้ 689 00:27:54,090 --> 00:27:56,370 กับสตริงโดยใช้รหัส C นี้ 690 00:27:56,370 --> 00:27:56,880 ใช่ 691 00:27:56,880 --> 00:27:58,780 >> ผู้ชม: เพ​​ียงแค่ทำ สำหรับวง [ไม่ได้ยิน] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 เดวิดเจลัน: ที่สมบูรณ์แบบ 694 00:28:01,670 --> 00:28:02,900 ผู้ชม: [ไม่ได้ยิน] 695 00:28:02,900 --> 00:28:03,310 เดวิดเจลัน: ใช่ 696 00:28:03,310 --> 00:28:05,390 เพียงแค่ใช้การวนหรือ ในขณะที่ห่วงหรืออะไรก็ตาม 697 00:28:05,390 --> 00:28:08,710 แต่เพียงแค่ใช้ความคิดพื้นฐานที่ว่า นี้เป็นก้อนของหน่วยความจำหรืออาเรย์ 698 00:28:08,710 --> 00:28:11,590 และนี่คือย้ำกว่า ทั้งในเวลาเดียวกัน 699 00:28:11,590 --> 00:28:12,960 และเพียงแค่เปรียบเทียบตัวอักษร 700 00:28:12,960 --> 00:28:14,260 >> และคุณได้มีที่จะเป็น ระวัง ๆ หน่อย ๆ เพราะคุณ 701 00:28:14,260 --> 00:28:16,247 ไม่ต้องการหนึ่งนิ้ว ไปที่ผ่านมาอื่น ๆ 702 00:28:16,247 --> 00:28:18,080 เพราะสตริงหนึ่ง นานกว่าที่อื่น ๆ 703 00:28:18,080 --> 00:28:21,380 ดังนั้นคุณจะต้องการตรวจสอบ ราคาพิเศษนี้ในตอนท้าย null 704 00:28:21,380 --> 00:28:24,017 แต่มันคือเรื่องจริงใน จบง่ายเหมือนที่ 705 00:28:24,017 --> 00:28:26,100 และตรงไปตรงมาเราไม่จำเป็นต้อง ที่จะบูรณาการล้อ 706 00:28:26,100 --> 00:28:27,960 นี่คือรุ่นสอง 707 00:28:27,960 --> 00:28:32,910 และสิ่งที่ผมกำลังจะบอกว่าที่นี่เป็นที่ แทนการเปรียบเทียบเท่ากับ S = t, 708 00:28:32,910 --> 00:28:38,964 ฉันแทนจะบอกว่าถ้าสตริง เปรียบเทียบเครื่องหมายจุลภาค s เสื้อเท่ากับ = 0 709 00:28:38,964 --> 00:28:40,130 ตอนนี้สิ่งที่เป็นสตริงเปรียบเทียบ? 710 00:28:40,130 --> 00:28:43,046 >> มันจะเปิดออกมันเป็นหน้าที่ที่ มาพร้อมกับ C ซึ่งมีจุดมุ่งหมายในชีวิต 711 00:28:43,046 --> 00:28:44,650 คือการเปรียบเทียบสองสาย 712 00:28:44,650 --> 00:28:48,300 และคนเปรียบเทียบว่าถ้าเราอ่านของ หน้าคนหรือเอกสารหรือ CS50 713 00:28:48,300 --> 00:28:50,630 อ้างอิงก็จะ เพียงแค่บอกคุณคนที่ 714 00:28:50,630 --> 00:28:55,730 เปรียบเทียบผลตอบแทนทั้งในทางลบ ตัวเลขหรือจำนวนบวกหรือศูนย์ 715 00:28:55,730 --> 00:28:57,660 ที่ศูนย์หมายถึงพวกเขากำลังเท่ากับ 716 00:28:57,660 --> 00:28:58,570 >> ดังนั้นเพียงแค่การคาดเดา 717 00:28:58,570 --> 00:29:00,390 สิ่งที่มันอาจหมายถึงถ้า ผัดผลตอบแทนเ​​ปรียบเทียบ 718 00:29:00,390 --> 00:29:02,110 ค่าลบหรือค่าบวก? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 ผู้ชม: มากกว่าหรือน้อยกว่า 721 00:29:04,285 --> 00:29:05,570 เดวิดเจลัน: ใช่ มากกว่าหรือน้อยกว่า 722 00:29:05,570 --> 00:29:08,640 ดังนั้นถ้าคุณต้องการที่จะเรียงลำดับทั้ง พวงของสตริงใน dictionary-- 723 00:29:08,640 --> 00:29:12,975 ในขณะที่เราจะลงในที่สุด road-- ฟังก์ชั่นที่สมบูรณ์แบบที่จะใช้อาจ 724 00:29:12,975 --> 00:29:15,850 เพราะมันจะทำอย่างนั้น การเปรียบเทียบสตริงสำหรับคุณและบอก 725 00:29:15,850 --> 00:29:20,060 คุณไม่ได้มาก่อนที่จะขหรือไม่ ขมาก่อนตามลำดับตัวอักษร 726 00:29:20,060 --> 00:29:21,490 เราสามารถทำตรงนั้น 727 00:29:21,490 --> 00:29:23,620 >> และแจ้งให้ทราบผมอีกคนหนึ่ง สิ่งที่อยู่ในตัวอย่างนี้ 728 00:29:23,620 --> 00:29:26,870 อะไรที่มีการเปลี่ยนแปลงสูง ขึ้นมาในหน้าที่หลักนี้ 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 char * 731 00:29:29,350 --> 00:29:31,150 และนี่คือที่โกหกสีขาวอื่น ๆ 732 00:29:31,150 --> 00:29:33,750 ตลอดเวลานี้เมื่อคุณได้ รับการเขียนสตริง 733 00:29:33,750 --> 00:29:38,350 เราได้รับการแอบเขียนใหม่ สตริงเป็น char * เพื่อให้เสียงดังกราวจริงว่า 734 00:29:38,350 --> 00:29:39,270 เข้าใจคุณ 735 00:29:39,270 --> 00:29:42,450 >> ในคำอื่น ๆ ใน CS50.h และในที่สุดเราก็จะเห็น 736 00:29:42,450 --> 00:29:45,950 เราทำสตริงคำพ้องความหมายที่เรียกว่า นั่นคือสิ่งเดียวกับ char * 737 00:29:45,950 --> 00:29:49,910 และสำหรับตอนนี้รู้เพียงว่า * ในบริบทนี้อย่างน้อย 738 00:29:49,910 --> 00:29:51,286 หมายถึงที่อยู่ 739 00:29:51,286 --> 00:29:52,210 >> ที่อยู่ของอะไร 740 00:29:52,210 --> 00:29:56,390 ดีความจริงที่ว่าผมพูด char * และไม่ int * หรือลอย * 741 00:29:56,390 --> 00:30:00,820 หมายความว่า char * เป็น ที่อยู่ของถ่าน 742 00:30:00,820 --> 00:30:06,770 ดังนั้นกล่องเล็ก ๆ นี้ที่นี่อาคา สตริงเป็นจริงชนิด char *, 743 00:30:06,770 --> 00:30:10,490 ซึ่งเป็นเพียงวิธีแฟนซีของบอกว่า ในกล่องนี้จะไปอยู่ 744 00:30:10,490 --> 00:30:12,430 และสิ่งที่ไม่อยู่ที่อ้างถึง? 745 00:30:12,430 --> 00:30:13,780 เห็นได้ชัดว่าถ่าน 746 00:30:13,780 --> 00:30:16,410 >> แต่ที่เราจะทำได้อย่างแน่นอน มี int * และสิ่งอื่น ๆ 747 00:30:16,410 --> 00:30:20,790 แต่ตอนนี้ char * เป็นจริงมากที่สุด ตรงไปตรงมาและเป็นหนึ่งที่น่าสนใจ 748 00:30:20,790 --> 00:30:23,310 ดังนั้นปัญหานี้จะ จะเพิ่มขึ้น แต่อีกครั้ง 749 00:30:23,310 --> 00:30:24,830 >> สมมติว่าผมเปิดโปรแกรมนี้ 750 00:30:24,830 --> 00:30:27,670 ลองดูว่าตอนนี้เราสามารถคาดการณ์ ว่ามีอะไรผิดปกติกับรหัสนี้ 751 00:30:27,670 --> 00:30:31,140 ดังนั้นในโปรแกรมนี้คัดลอก 0 ฉัน จะไปข้างหน้าและอีกครั้งเรียก 752 00:30:31,140 --> 00:30:34,190 GetString และจัดเก็บค่าในนั้น 753 00:30:34,190 --> 00:30:38,800 >> แล้วทำไมฉันถึงทำเช่นนี้ เช่นเดียวกับที่เตือนความทรงจำจากสัปดาห์ที่ผ่านมาหรือไม่ 754 00:30:38,800 --> 00:30:40,960 เราได้พูด GetString ที่ บางครั้งกลับเป็นโมฆะ 755 00:30:40,960 --> 00:30:42,793 มันหมายความว่าอะไรถ้า GetString กลับ null? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 สิ่งที่ผิดพลาด 758 00:30:46,034 --> 00:30:48,950 มันอาจหมายถึงสายเกินไป ขนาดใหญ่ออกจากคอมพิวเตอร์ของหน่วยความจำ 759 00:30:48,950 --> 00:30:51,724 มันเกิดขึ้นซุปเปอร์ซุปเปอร์ซุปเปอร์ ไม่ค่อย แต่มันจะเกิดขึ้น 760 00:30:51,724 --> 00:30:53,890 เราต้องการที่จะตรวจสอบมัน และนั่นคือทั้งหมดที่เรากำลังทำ 761 00:30:53,890 --> 00:30:57,910 >> เพราะเราจะเห็นตอนนี้ถ้าคุณทำไม่ได้ เริ่มต้นการตรวจสอบเป็นประจำสำหรับสิ่งที่ 762 00:30:57,910 --> 00:31:00,870 เช่น null คุณอาจ จะเริ่มต้นที่จะไป 763 00:31:00,870 --> 00:31:03,106 ไปยังที่อยู่ในหน่วยความจำที่ไม่ถูกต้อง 764 00:31:03,106 --> 00:31:05,980 และคุณกำลังจะเริ่มต้นก่อให้เกิด มากขึ้นความผิดพลาดของการแบ่งส่วน 765 00:31:05,980 --> 00:31:08,360 หรือใน Mac หรือ PC เพียง ทำให้คอมพิวเตอร์ที่จะแขวน 766 00:31:08,360 --> 00:31:10,340 หรือโปรแกรมที่จะแช่แข็งอาจ 767 00:31:10,340 --> 00:31:14,930 >> ดังนั้นตอนนี้ฉันเรียกร้องในสำเนา 0.c ที่ฉัน กำลังจะไปคัดลอกสตริงเหล่านี้โดยวิธีการ 768 00:31:14,930 --> 00:31:15,685 ของสาย 28 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 แล้วฉันจะ เพื่อเรียกร้องที่ด้านล่าง 771 00:31:18,750 --> 00:31:21,430 ที่นี่ที่ฉันจะ ที่จะเปลี่ยนหนึ่งของพวกเขา 772 00:31:21,430 --> 00:31:22,330 >> เพื่อแจ้งให้ทราบนี้ 773 00:31:22,330 --> 00:31:24,370 ฉันโทร strlen เพื่อนเก่าของเรา 774 00:31:24,370 --> 00:31:28,960 และเพียงแค่อธิบายในภาษาอังกฤษ สิ่งที่บรรทัดนี้ 34 จะทำ? 775 00:31:28,960 --> 00:31:32,480 ไม่สิ่งที่เสื้อวงเล็บ 0 เป็นตัวแทนของทางด้านซ้าย 776 00:31:32,480 --> 00:31:32,980 ใช่ 777 00:31:32,980 --> 00:31:34,339 >> ผู้ชม: ตัวอักษรแรกของ t? 778 00:31:34,339 --> 00:31:35,880 เดวิดเจลัน: ตัวอักษรแรกของ t 779 00:31:35,880 --> 00:31:36,379 นั่นแหล่ะ 780 00:31:36,379 --> 00:31:40,024 ตัวอักษรตัวแรกของ t, ฉันต้องการ ที่จะกำหนดให้เป็นรุ่นที่เป็นตัวพิมพ์ใหญ่ 781 00:31:40,024 --> 00:31:41,190 ของตัวละครครั้งแรกในเสื้อ 782 00:31:41,190 --> 00:31:43,200 ดังนั้นนี้จะพะวง ตัวอักษรตัวแรก 783 00:31:43,200 --> 00:31:46,340 และแล้วสิ่งสุดท้ายที่ฉันทำมาก ในโปรแกรมนี้คือผมเรียกร้องที่นี่ 784 00:31:46,340 --> 00:31:50,340 เดิม, S, และนี่คือสำเนาที 785 00:31:50,340 --> 00:31:54,610 >> แต่ขึ้นอยู่กับเรื่องที่เราเพิ่ง บอกเกี่ยวกับสิ่งที่สตริงเป็นจริง 786 00:31:54,610 --> 00:31:57,520 สิ่งที่เป็นสาย 28 จริงๆ ทำและสิ่งที่เป็น 787 00:31:57,520 --> 00:31:59,405 ข้อผิดพลาดที่เกิดขึ้นไป จะต้องอยู่บนหน้าจอหรือไม่ 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> ดังนั้นก่อนที่คำถามแรก, 28 790 00:32:03,500 --> 00:32:09,040 สิ่งที่เป็นสตริง t = จริงๆทำอะไร 791 00:32:09,040 --> 00:32:16,430 ถ้าเรามีอยู่ในซ้ายมือ ด้านที่นี่สตริง t = วินาที; 792 00:32:16,430 --> 00:32:19,400 ที่ให้ฉันกล่องหนึ่ง ที่นี่และกล่องหนึ่งที่นี่ 793 00:32:19,400 --> 00:32:25,530 และคิดว่าที่อยู่นี้เป็น 0x, สมมุติว่า 50 เวลานี้พล 794 00:32:25,530 --> 00:32:28,847 สิ่งที่ไม่สตริง t = S ทำภายใต้กระโปรงหน้ารถหรือไม่ 795 00:32:28,847 --> 00:32:30,340 >> ผู้ชม: [ไม่ได้ยิน] 796 00:32:30,340 --> 00:32:34,100 >> เดวิดเจลัน: มันเก็บความทรงจำ อยู่ที่นั่นเพื่อ 0x50 ไปที่นั่น 797 00:32:34,100 --> 00:32:37,980 ดังนั้นถ้าตอนนี้ผมไปครั้งแรก ตัวละครในเสื้อและตัวพิมพ์ใหญ่มัน 798 00:32:37,980 --> 00:32:39,535 สิ่งที่ฉันทำเพื่อได้อย่างมีประสิทธิภาพหรือไม่ 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 ฉันจริงๆทำในสิ่งเดียวกันใช่มั้ย? 801 00:32:43,450 --> 00:32:47,680 เพราะถ้าอยู่ 0x50-- และเพียงแค่ฉัน ไม่ได้มีห้องพักมากในคณะกรรมการที่นี่ 802 00:32:47,680 --> 00:32:51,750 แต่คิดว่านี้จะ 0x50 ลงที่นี่ ที่ไหนสักแห่งในหน่วยความจำของคอมพิวเตอร์ของฉัน 803 00:32:51,750 --> 00:32:55,825 >> และฉันได้เช่นเกบ ในตัวพิมพ์เล็กที่นี่เช่นนี้ 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 และฉันได้กล่าวว่าเสื้อวงเล็บ 0 ได้รับทุน 806 00:33:01,980 --> 00:33:04,860 ดีทีวงเล็บ 0 เป็น ตัวอักษรตัวแรกในเ 807 00:33:04,860 --> 00:33:07,840 ดังนั้นกรัมเล็ก ๆ น้อย ๆ ที่เป็นไป กลายเป็น G. ใหญ่ แต่ปัญหา 808 00:33:07,840 --> 00:33:09,410 เป็นสิ่งที่ไม่ยังชี้ไปที่? 809 00:33:09,410 --> 00:33:10,300 >> ผู้ชม: เดียวกัน 810 00:33:10,300 --> 00:33:11,841 >> เดวิดเจลัน: สิ่งที่แน่นอนเดียวกัน 811 00:33:11,841 --> 00:33:16,342 ดังนั้นคำอธิบายง่ายๆบางที แม้ว่าไวยากรณ์แปลกเล็กน้อย 812 00:33:16,342 --> 00:33:17,050 ดังนั้นขอให้ทำเช่นนี้ 813 00:33:17,050 --> 00:33:20,210 ทำสำเนา-0 แล้ว ./copy-0 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 พูดอะไรบางอย่าง: เกบ 816 00:33:24,110 --> 00:33:26,760 และโชคไม่ดีที่ทั้งสอง พวกเขาได้รับตอนนี้พิมพ์ใหญ่ 817 00:33:26,760 --> 00:33:29,500 แต่การที่อยู่ภายใต้ เหตุผลที่เรากำลังเพียง 818 00:33:29,500 --> 00:33:32,350 ขณะนี้การซื้อขายที่มีที่อยู่ 819 00:33:32,350 --> 00:33:36,470 >> ดังนั้นเราจะเริ่มต้นในการ address-- ไม่มีเล่นสำนวน intended-- 820 00:33:36,470 --> 00:33:39,270 ทำอย่างไรเราจะเริ่มต้นไปยังที่อยู่ โดยเฉพาะอย่างยิ่งปัญหานี้ได้อย่างไร 821 00:33:39,270 --> 00:33:44,400 ทั้งใน copy1.c, สิ่งที่กำลังจะ ที่จะได้รับเพียงเล็กน้อยที่ซับซ้อนมากขึ้น 822 00:33:44,400 --> 00:33:49,310 แต่ฉันอยากจะเรียกร้อง วิธีง่ายๆแนวคิด 823 00:33:49,310 --> 00:33:50,852 >> จึงยากที่จะได้รับได้อย่างรวดเร็วก่อน 824 00:33:50,852 --> 00:33:53,560 ไม่ได้จะเป็นเรื่องง่ายสำหรับครั้งแรก ทุกครั้งที่คุณพิมพ์มันออกมาบางที 825 00:33:53,560 --> 00:33:57,440 แต่ถ้าปัญหาคือว่า เพียงแค่ทำ t = แค่ 826 00:33:57,440 --> 00:33:59,694 สำเนาที่อยู่อะไร อีกครั้งถ้าฉันสามารถรับกับคุณ 827 00:33:59,694 --> 00:34:02,110 เป็นไปได้ที่จะแก้ปัญหา สำหรับการคัดลอกสตริงจริงหรือไม่ 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> ผู้ชม: เราอาจจะ ใช้วงอีกครั้ง 830 00:34:06,770 --> 00:34:06,890 >> เดวิดเจลัน: ใช่ 831 00:34:06,890 --> 00:34:08,390 ดังนั้นเราจะต้องห่วงอีกครั้ง 832 00:34:08,390 --> 00:34:11,800 และเพราะถ้าเราต้องการที่จะคัดลอก S สตริงเป็นสตริงอื่น 833 00:34:11,800 --> 00:34:14,120 เราอาจต้องการที่จะทำ ตัวอักษรตัวอักษร 834 00:34:14,120 --> 00:34:17,199 แต่ปัญหาคือถ้า นี้เป็นครั้งแรกวินาที, 835 00:34:17,199 --> 00:34:22,159 ตอนนี้เราต้องเริ่มต้นอย่างชัดเจน จัดสรรหน่วยความจำสำหรับ t 836 00:34:22,159 --> 00:34:24,320 >> ในคำอื่น ๆ ให้ วาดนี้เป็นครั้งสุดท้าย 837 00:34:24,320 --> 00:34:28,659 ในกรณีนี้คือสตริง s = GetString 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 และขอนำนี้ขึ้นที่นี่เช่นกัน 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 นี้เป็น GetString 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 และแล้วภาพบางอย่าง เช่นเดียวกับที่เป็นไปได้เช่นเดิม 844 00:34:43,860 --> 00:34:44,360 G--b-e-/ 0 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 ที่มีลักษณะบางสิ่งบางอย่างเล็ก ๆ น้อย ๆ เช่นนี้ 847 00:34:48,960 --> 00:34:53,650 และ S ดังนั้นเราจึงเรียกสิ่งนี้ 0x50, และนั่นจะเป็น 51, 52 848 00:34:53,650 --> 00:34:54,409 >> ดังนั้นนี่คือ 0x50 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 แล้วฉันจะสตริงที 851 00:34:59,690 --> 00:35:02,450 ในหน่วยความจำที่แค่ไป ให้ฉันตารางเล็ก ๆ น้อย ๆ เช่นนี้ 852 00:35:02,450 --> 00:35:04,080 ดังนั้นสิ่งที่เป็นขั้นตอนสำคัญตอนนี้หรือไม่ 853 00:35:04,080 --> 00:35:09,870 ถ้าผมต้องการที่จะคัดลอกลงในเสื้อของสิ่งที่ เราไม่ว่างต้องกรอกที่นี่? 854 00:35:09,870 --> 00:35:12,050 หรือเราทำในสิ่งที่จำเป็นต้อง ทำในระดับสูงหรือไม่ 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 ใช่? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 ใครบางคน? 859 00:35:17,020 --> 00:35:17,690 ใช่ 860 00:35:17,690 --> 00:35:19,214 >> ผู้ชม: เราต้องไปที่ [ไม่ได้ยิน] 861 00:35:19,214 --> 00:35:21,380 เดวิดเจลัน: ใช่เรา จำเป็นต้องกรอกในช่องว่างนี้ 862 00:35:21,380 --> 00:35:24,340 ฉันไม่สามารถคัดลอกและ ประโยชน์ชื่อเกบ 863 00:35:24,340 --> 00:35:28,120 จนกว่าฉันจะขอให้ระบบปฏิบัติการ สำหรับก้อนของหน่วยความจำอื่น 864 00:35:28,120 --> 00:35:30,640 ที่อย่างน้อยเป็นใหญ่เป็นต้นฉบับ 865 00:35:30,640 --> 00:35:32,130 เพื่อที่จะทำให้เรามีคำถาม 866 00:35:32,130 --> 00:35:36,080 >> ฉันขอให้ระบบปฏิบัติการวิธีที่จะไม่ เพียงเพื่อ pointer-- น้อยง่าย 867 00:35:36,080 --> 00:35:38,530 เช่นนี้จะเรียกว่า อยู่ pointer-- ไม่ 868 00:35:38,530 --> 00:35:40,980 สำหรับกล่องเล็ก ๆ ง่ายๆ เช่นนี้เรียกว่าสตริง? 869 00:35:40,980 --> 00:35:44,200 ฉันจะขอให้การดำเนินงานของ ระบบสำหรับก้อนใหญ่ของหน่วยความจำ? 870 00:35:44,200 --> 00:35:48,430 ป่านนี้ผมเคยเพียงหลังที่ ทางอ้อมโดยการเรียก GetString 871 00:35:48,430 --> 00:35:50,740 ดังนั้นวิธีที่จะ GetString แม้จะได้รับหน่วยความจำของมัน 872 00:35:50,740 --> 00:35:53,430 >> ดีก็ปรากฎว่ามี ฟังก์ชั่นอื่น ๆ ที่นี่ 873 00:35:53,430 --> 00:35:55,160 ว่าตอนนี้เราจะเริ่มต้นที่จะใช้ 874 00:35:55,160 --> 00:35:59,780 ตอนนี้ดู than-- วิธีลับมากขึ้น และผมเป็นคนเดียวที่สามารถมองเห็นได้พูดไป 875 00:35:59,780 --> 00:36:03,150 บรรทัดนี้มีลักษณะวิธีการที่เป็นความลับมากขึ้น แล้วมันควรจะเป็นได้อย่างรวดเร็วก่อน 876 00:36:03,150 --> 00:36:04,650 แต่ขอแซวมันนอกเหนือ 877 00:36:04,650 --> 00:36:07,950 >> อยู่ทางด้านซ้ายมือผมมีถ่าน * t 878 00:36:07,950 --> 00:36:13,280 ดังนั้นในภาษาอังกฤษขอเริ่มต้นที่จะกำหนด ประโยคที่เหมาะสมในศัพท์แสงทางเทคนิค 879 00:36:13,280 --> 00:36:19,757 ดังนั้นนี่คือการจัดสรร ตัวแปรประเภท char * เรียกว่าเสื้อ 880 00:36:19,757 --> 00:36:21,090 ตอนนี้สิ่งที่ไม่ว่าจริงๆหมายถึงอะไร 881 00:36:21,090 --> 00:36:23,881 >> ดีนั่นหมายความว่าสิ่งที่ฉันจะ ที่จะใส่ในตัวแปรที่เรียกว่าเสื้อนี้ 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 ที่อยู่ของถ่าน 884 00:36:26,402 --> 00:36:28,360 เพื่อให้เป็นเพียงเรียบง่าย วิธีการที่เหมาะสมมากขึ้น 885 00:36:28,360 --> 00:36:29,930 การอธิบายด้านซ้ายมือ 886 00:36:29,930 --> 00:36:32,890 เพื่อที่จะสร้างช่องนี้ที่นี่เท่านั้น 887 00:36:32,890 --> 00:36:34,760 ดังนั้นทางด้านขวามือ น่าจะเป็นไป 888 00:36:34,760 --> 00:36:37,170 การจัดสรรที่ใหญ่กว่า ก้อนของหน่วยความจำได้อย่างไร 889 00:36:37,170 --> 00:36:38,340 จึงขอแซวนี้นอกเหนือ 890 00:36:38,340 --> 00:36:41,131 >> มันครอบงำได้อย่างรวดเร็วก่อน แต่สิ่งที่เกิดขึ้นภายในที่นี่? 891 00:36:41,131 --> 00:36:43,740 ครั้งแรกที่มี malloc ซึ่ง เห็นได้ชัดว่าเพื่อนใหม่ของเรา 892 00:36:43,740 --> 00:36:45,450 "ความทรงจำจัดสรร". 893 00:36:45,450 --> 00:36:49,560 ดังนั้นนี่คือเหตุผลที่ถูกส่ง เป็นมันจึงเป็นเรื่องใหญ่สวย 894 00:36:49,560 --> 00:36:50,970 จึงขอแซวนี้นอกเหนือ 895 00:36:50,970 --> 00:36:53,410 >> strlen ของวินาที, แน่นอนหมายถึงการยกกำลัง 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 ผู้ชม: จำนวนตัวอักษร 898 00:36:55,600 --> 00:36:56,710 เดวิดเจลัน: เพียงแค่ จำนวนตัวอักษรในร้าน 899 00:36:56,710 --> 00:36:59,040 ดังนั้นความยาวของ S, สายเดิม 900 00:36:59,040 --> 00:37:00,350 ดังนั้น G--b-E 901 00:37:00,350 --> 00:37:02,320 ดังนั้นมันอาจจะเป็นสี่ในกรณีนี้ 902 00:37:02,320 --> 00:37:05,485 ทำไมฉันทำ 1 หลังจากที่ เรียก strlen ของหรือไม่ 903 00:37:05,485 --> 00:37:06,360 ผู้ชม: [ไม่ได้ยิน] 904 00:37:06,360 --> 00:37:07,590 เดวิดเจลัน: สำหรับที่ อักขระ null พิเศษ 905 00:37:07,590 --> 00:37:11,260 หากคุณถามฉันสิ่งที่ความยาวของ ชื่อเกบของฉันกำลังจะบอกว่าสี่ 906 00:37:11,260 --> 00:37:14,480 ภายใต้กระโปรงหน้ารถ แต่ฉันต้องการ ที่ไบต์ห้าอักขระ null 907 00:37:14,480 --> 00:37:16,100 เพื่อที่ว่าทำไมฉันทำ 1 908 00:37:16,100 --> 00:37:21,730 >> ขณะนี้เป็นเพียงในกรณีที่คุณกำลังทำงานอยู่นี้ โปรแกรมบนคอมพิวเตอร์เครื่องอื่น ๆ กว่าหนึ่งพูดว่า 909 00:37:21,730 --> 00:37:24,610 เครื่องใช้ CS50, ที่ขนาดของถ่าน 910 00:37:24,610 --> 00:37:26,350 อาจจะมีที่แตกต่างกัน จาก computer-- ของตัวเอง 911 00:37:26,350 --> 00:37:30,590 ปรากฎว่าฉันสามารถเรียกสิ่งนี้ว่า sizeof ผู้ประกอบการเพียงขอเครื่องคอมพิวเตอร์ 912 00:37:30,590 --> 00:37:32,870 สิ่งที่เป็นขนาดของ ถ่านในคอมพิวเตอร์เครื่องนี้? 913 00:37:32,870 --> 00:37:37,400 >> และโดยการคูณห้านี้ เช่นโดยขนาดของถ่านซึ่ง 914 00:37:37,400 --> 00:37:40,440 บนเครื่องคอมพิวเตอร์ส่วนใหญ่จะ เพียงแค่เป็นหนึ่ง malloc 915 00:37:40,440 --> 00:37:44,830 จะจัดสรรสำหรับฉันใหญ่นี้ ก้อนของหน่วยความจำมากกว่าที่นี่ด้านขวา 916 00:37:44,830 --> 00:37:47,140 และมันจะ return-- มันเป็นฟังก์ชันดังนั้นจึงเป็น 917 00:37:47,140 --> 00:37:48,265 จะกลับมาหาเราอะไร 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 ผู้ชม: ที่อยู่? 920 00:37:51,830 --> 00:37:53,709 เดวิดเจลัน: ที่อยู่ของสิ่งที่? 921 00:37:53,709 --> 00:37:55,250 ผู้ชม: หน่วยความจำของมันกำหนดหรือไม่? 922 00:37:55,250 --> 00:37:56,450 เดวิดเจลัน: ของ หน่วยความจำมันได้รับการจัดสรร 923 00:37:56,450 --> 00:37:59,189 ดังนั้นผมจึงมีความคิดที่ไม่ตรงไปตรงมา ที่นี้จะจบลง 924 00:37:59,189 --> 00:38:01,480 ฉันจะเสนอว่า มันจะจบลงที่ 0x88 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 สมบูรณ์โดยพลการ แต่ ที่อื่นนอกเหนือจาก 0x50, 927 00:38:06,009 --> 00:38:08,800 เนื่องจากระบบปฏิบัติการอะไร Windows และ Mac OS ทำเพื่อฉันเป็น 928 00:38:08,800 --> 00:38:11,230 ตรวจสอบให้แน่ใจว่ามันให้ ฉันชิ้นที่แตกต่างกันของแรม 929 00:38:11,230 --> 00:38:14,210 >> ดังนั้นนี่คือมูลค่าที่นี้ ก้อนของหน่วยความจำอาจจะจบลง 930 00:38:14,210 --> 00:38:16,060 ดังนั้นนี่คือสิ่งที่จะสิ้นสุดลงในที่นี่ 0x88 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 ดังนั้นตอนนี้เห็นได้ชัดว่าผมสามารถเข้าใจ ที่นี้ไม่ได้เช่นเดียวกับที่นี้ 933 00:38:21,570 --> 00:38:23,960 เพราะพวกเขากำลังชี้ไปที่ ชิ้นที่แตกต่างกันของหน่วยความจำ 934 00:38:23,960 --> 00:38:29,980 ดังนั้นถ้าตอนนี้ผมอยากที่จะคัดลอกนี้ ในขอทำโซลูชั่นที่นำเสนอของคุณ 935 00:38:29,980 --> 00:38:36,870 >> ขอเพียงไปสร้างสำหรับห่วง และทำทีวงเล็บผมได้รับของตัวฉัน 936 00:38:36,870 --> 00:38:39,760 เพราะตอนนี้ฉันสามารถใช้ สัญกรณ์อาร์เรย์เช่นนี้ 937 00:38:39,760 --> 00:38:43,390 เพราะแม้ว่า malloc มาก โดยทั่วไปฉันจัดสรรหน่วยความจำ 938 00:38:43,390 --> 00:38:45,290 หน่วยความจำเป็นเพียงไบต์ที่อยู่ติดกัน 939 00:38:45,290 --> 00:38:47,240 ไบต์ไบต์ไบต์หลังการสำรองข้อมูล 940 00:38:47,240 --> 00:38:50,030 >> แน่นอนฉันสามารถเป็นโปรแกรมเมอร์ รักษามันเป็นอาเรย์ซึ่ง 941 00:38:50,030 --> 00:38:55,090 หมายถึงการที่ฉันสามารถใช้นี้คุ้นเคยที่สุด สัญกรณ์ของเพียงบางส่วนวงเล็บ 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> เพื่อให้ฉันหยุดที่นั่นเพราะ นี้เป็นจำนวนมากทั้งหมดในครั้งเดียวได้ 944 00:39:00,020 --> 00:39:03,530 แม้ว่าความคิดพื้นฐานในการปะยางรถ เป็นสตริงที่ทุกเวลานี้ 945 00:39:03,530 --> 00:39:05,550 ไม่ได้ชนิดข้อมูลใหม่ต่อ 946 00:39:05,550 --> 00:39:10,150 มันเป็นเพียงตัวชี้ที่เรียกว่า ที่อยู่ของตัวละคร, 947 00:39:10,150 --> 00:39:12,650 ซึ่งก็หมายความว่ามันเป็นจำนวนมาก ว่าด้วยการประชุมของมนุษย์ 948 00:39:12,650 --> 00:39:15,350 เรามักจะเขียนเป็นสิ่งที่ 0x 949 00:39:15,350 --> 00:39:18,590 >> แต่มันก็เป็นเพียงแค่ตัวเลข เช่น 33 Oxford Street, 950 00:39:18,590 --> 00:39:20,530 ที่เกิดขึ้นเป็น ที่อยู่ของอาคาร CS 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 คำถามใด ๆ เกี่ยวกับรายละเอียดเหล่านี้หรือไม่ 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 ใช่? 955 00:39:25,289 --> 00:39:28,530 >> ผู้ชม: ทำไมเราตรวจสอบ สำหรับ t เท่ากับโมฆะ? 956 00:39:28,530 --> 00:39:30,740 >> เดวิดเจลัน: ทำไมเรา ตรวจสอบสำหรับ t เท่ากับโมฆะ? 957 00:39:30,740 --> 00:39:33,250 ถ้าเราอ่าน documentation-- คำถามที่ดีสำหรับ malloc, 958 00:39:33,250 --> 00:39:37,020 มันจะบอกว่าในการพิมพ์ที่ดี บางครั้งอาจ malloc กลับโมฆะ 959 00:39:37,020 --> 00:39:38,080 เช่นเดียว GetString 960 00:39:38,080 --> 00:39:41,820 และแน่นอน GetString กลับ null ถ้าในทางกลับกัน malloc กลับโมฆะ 961 00:39:41,820 --> 00:39:43,130 เพราะ GetString ใช้ malloc 962 00:39:43,130 --> 00:39:46,400 >> และที่อาจเกิดขึ้นได้หากระบบปฏิบัติการ Mac OS, Windows และสิ่งที่เป็นเพียง 963 00:39:46,400 --> 00:39:48,130 ออกจากหน่วยความจำสำหรับคุณ 964 00:39:48,130 --> 00:39:49,820 ดังนั้นนั่นคือสิ่งที่เกิดขึ้นที่นั่น 965 00:39:49,820 --> 00:39:52,910 >> และแจ้งให้เราแสดงให้เห็นถึงสิ่งที่อีกคนหนึ่ง ที่เพิ่งจะพัดใจของคุณ 966 00:39:52,910 --> 00:39:55,100 หรือสมบูรณ์จะไกลเกินไปกว่าเส้น 967 00:39:55,100 --> 00:39:59,770 แต่ให้ฉันดึงขึ้น เดียวกันสำหรับห่วงสำหรับการคัดลอก 968 00:39:59,770 --> 00:40:05,480 ซึ่งช่วงเวลาที่ผ่านมาการเรียกคืนเป็น นี้ เสื้อตัวผมได้รับของตัวฉัน 969 00:40:05,480 --> 00:40:06,740 >> อย่างมีความสุขและใช้งานง่าย 970 00:40:06,740 --> 00:40:09,330 รู้สึกเหมือนสัปดาห์ที่สองอีกครั้ง 971 00:40:09,330 --> 00:40:14,920 แต่รุ่นนี้สามารถจริงจะ เขียนเช่นนี้ซึ่งมีลักษณะที่เป็นความลับ 972 00:40:14,920 --> 00:40:18,280 มันเป็นตัวชี้เทคนิคที่เรียกว่า เลขคณิตเลขคณิตที่อยู่ 973 00:40:18,280 --> 00:40:19,600 แต่ทำไมไม่ทำงานนี้ 974 00:40:19,600 --> 00:40:22,220 >> ตอนนี้น่ารำคาญ, ผู้เขียนของซีตัดสินใจที่จะใช้ 975 00:40:22,220 --> 00:40:25,070 สัญลักษณ์ * เพื่อวัตถุประสงค์ที่แตกต่างกัน 976 00:40:25,070 --> 00:40:29,020 เราได้เห็นมันเคยใช้อยู่แล้ว char * ซึ่งหมายความว่า "ให้ฉันตัวแปร 977 00:40:29,020 --> 00:40:31,210 ที่จะมี ที่อยู่ของถ่าน ". 978 00:40:31,210 --> 00:40:33,990 * เพื่อให้ถ่านในบริบทที่ หมายถึง "ให้ฉันตัวแปร". 979 00:40:33,990 --> 00:40:40,050 >> แต่ถ้าคุณใช้ * โดยไม่ต้อง คำในหน้านั้นเช่นถ่าน, 980 00:40:40,050 --> 00:40:41,905 ก็เรียกว่าตอนนี้ ผู้ประกอบการ dereference 981 00:40:41,905 --> 00:40:43,530 และเราจะเห็นมากกว่านี้ก่อนที่จะยาว 982 00:40:43,530 --> 00:40:44,930 แต่ก็หมายความว่า "ไปที่นั่น". 983 00:40:44,930 --> 00:40:49,070 มันก็เหมือนกับการบอกว่าถ้ามีคนมือฉัน บนแผ่นกระดาษ "33 Oxford Street" 984 00:40:49,070 --> 00:40:53,830 ถ้าฉันทำ "* 33 Oxford Street" ที่หมายถึง "ไปลงที่ถนนไปที่อาคาร CS". 985 00:40:53,830 --> 00:40:57,220 >> ดังนั้น * หมายถึงเพียงแค่ไปที่นั่นถ้า มีคำในหน้าของมันไม่มี 986 00:40:57,220 --> 00:40:59,100 ดังนั้นสิ่งที่เป็นเสื้อที่มีความชัดเจน? 987 00:40:59,100 --> 00:41:03,250 เสื้อเป็นที่อยู่ของก้อน หน่วยความจำที่ได้รับกลับมาให้ฉัน 988 00:41:03,250 --> 00:41:06,650 คือที่อยู่ของสิ่งที่จะเป็นที่ชัดเจน ในตัวอย่างที่เราได้พูดกันมา 989 00:41:06,650 --> 00:41:07,500 ของเกบตัวพิมพ์เล็ก? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 คือที่อยู่เเล้ 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 ผู้ชม: สตริง 994 00:41:12,460 --> 00:41:14,126 เดวิดเจลัน: ชื่อเดิมของเกบ 995 00:41:14,126 --> 00:41:16,660 ดังนั้นจึงเป็นที่อยู่ของ ก้อนของหน่วยความจำนี้ 996 00:41:16,660 --> 00:41:22,220 ดังนั้นถ้าผมบอกว่า t + i-- i, แจ้งให้ทราบล่วงหน้า เป็นเพียงเพื่อนเก่าของเรา 997 00:41:22,220 --> 00:41:24,770 มันเป็นเพียงตัวแปรดัชนี ที่ทำซ้ำจากศูนย์ขึ้น 998 00:41:24,770 --> 00:41:26,960 ความยาวของสตริง s 999 00:41:26,960 --> 00:41:30,367 ดังนั้นมันจะเป็นศูนย์แล้วหนึ่ง แล้วสองแล้วสามแล้วสี่ 1000 00:41:30,367 --> 00:41:33,200 จึงขอรวบรวมเหล่านี้ใหม่ รอยขีดข่วนเช่นชิ้นส่วนปริศนา, ถ้าคุณจะ 1001 00:41:33,200 --> 00:41:36,140 แม้ว่าอีกครั้งไวยากรณ์ อยู่ไกลมากขึ้นกว่าที่เป็นความลับรอยขีดข่วน 1002 00:41:36,140 --> 00:41:39,522 ดังนั้นเสื้อที่อยู่ + ฉันจะให้ฉัน 1003 00:41:39,522 --> 00:41:42,480 จำนวนเพราะเหล่านี้ทั้งหมด ตัวเลขที่เราได้รับการวาดภาพเป็นฐานสิบหก 1004 00:41:42,480 --> 00:41:43,560 แต่พวกเขากำลังเพียงตัวเลข 1005 00:41:43,560 --> 00:41:49,960 >> ดังนั้นหากที่อยู่ของ t ที่เรากล่าวว่า 0x88 เป็นสิ่งที่ 0x88 บวกศูนย์ 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 แม้ว่าคุณจะไม่สบาย กับฐานสิบหกยังใช้การคาดเดา 1008 00:41:53,980 --> 00:41:54,410 >> ผู้ชม: เดิม 1009 00:41:54,410 --> 00:41:55,850 >> เดวิดเจลัน: ยัง 0x88 1010 00:41:55,850 --> 00:41:58,910 ดังนั้นสิ่งที่จะ * 0x88 หมายถึงอะไร 1011 00:41:58,910 --> 00:42:02,670 มันหมายถึง "ไปที่นั่น" ซึ่งหมายความว่า ได้อย่างมีประสิทธิภาพ "วางนิ้วของคุณที่นี่". 1012 00:42:02,670 --> 00:42:06,930 และตอนนี้อยู่ทางด้านขวามือของ การแสดงออกนี้ * แล้วใน parens, 1013 00:42:06,930 --> 00:42:11,586 s + ฉันหมายถึงวินาที, ซึ่งเป็น อยู่ที่นี่ของกรัมน้อย 1014 00:42:11,586 --> 00:42:16,220 s + 0 แน่นอน, s, สิ่งที่คือ 1015 00:42:16,220 --> 00:42:21,230 >> ดังนั้นตอนนี้มัน * s ซึ่งเช่นเดียว * 33 Oxford Street หมายความว่าไปที่ที่อยู่ 1016 00:42:21,230 --> 00:42:22,010 S 1017 00:42:22,010 --> 00:42:24,170 ดังนั้นนี่คือนิ้วขวามือ 1018 00:42:24,170 --> 00:42:26,050 ดังนั้นสิ่งที่ฉันจะคัดลอกลงในอะไร 1019 00:42:26,050 --> 00:42:30,260 สิ่งที่อยู่ด้านขวาซึ่งเป็น เกบ, กเล็ก ๆ น้อย ๆ ที่นี่เป็นที่นี่ 1020 00:42:30,260 --> 00:42:32,750 >> และเพื่อให้ผลของการที่ ย้ำแรกของวง 1021 00:42:32,750 --> 00:42:36,200 ตามที่คุณเสนอแม้ว่ามันจะมีลักษณะ บ้าซับซ้อนมากขึ้นกว่าสิ่งใด 1022 00:42:36,200 --> 00:42:42,110 ที่เราเคยเห็นมาก่อนเป็นเพียงการบอกว่า ไปที่นี่และคัดลอกตัวอักษรที่นี่ 1023 00:42:42,110 --> 00:42:44,700 มันให้คุณมีแผนที่ไปยังสถานที่ทั้ง 1024 00:42:44,700 --> 00:42:46,130 >> และเราจะเห็นไกลมากกว่านี้ 1025 00:42:46,130 --> 00:42:50,600 แต่ตอนนี้ความหวังเป็นเพียงการ แนะนำบางส่วนของความคิดพื้นฐานเหล่านี้ 1026 00:42:50,600 --> 00:42:53,550 และแน่นอนให้ดูที่ หนึ่งโปรแกรมสุดท้ายที่นี่ 1027 00:42:53,550 --> 00:42:57,480 แล้ว claymation สัญญา ซึ่งจะทำให้ทุกอย่างถูกต้องทั้งหมด 1028 00:42:57,480 --> 00:42:57,980 ขวาทั้งหมด 1029 00:42:57,980 --> 00:43:01,680 เพื่อให้ฉันเปิด up-- มีเราไป 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 เพื่อให้ me-- เราจะกลับมา ภาพนี้ไม่นาน 1032 00:43:05,440 --> 00:43:08,360 ผมขอเปิดตัวอย่างสุดท้ายที่นี่ 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> ดังนั้นนี่คือซุปเปอร์ซุปเปอร์ โปรแกรมที่สำเร็จ 1035 00:43:12,710 --> 00:43:15,050 ไม่มีอะไรในชีวิตที่ไม่ต่อไปนี้ 1036 00:43:15,050 --> 00:43:18,740 มันเป็นครั้งแรกประกาศสองตัวแปร x และ y ที่ไม่ได้ตัวเลขเวลานี้ 1037 00:43:18,740 --> 00:43:19,240 ต่อ 1038 00:43:19,240 --> 00:43:20,448 พวกเขาไม่ได้จำนวนเต็มต่อ 1039 00:43:20,448 --> 00:43:22,899 พวกเขาจะเห็นได้ชัด int * 1040 00:43:22,899 --> 00:43:25,690 ดังนั้นเพียงแค่ใครสิ่งที่ไม่ได้หมายถึง ถ้าชนิดข้อมูลของตัวแปรของคุณ 1041 00:43:25,690 --> 00:43:26,860 เป็นประเภท int * ดาว? 1042 00:43:26,860 --> 00:43:30,240 นั่นเป็นที่อยู่ของ int 1043 00:43:30,240 --> 00:43:31,990 >> ดังนั้นผมจึงได้ความคิดที่มันเป็นยัง 1044 00:43:31,990 --> 00:43:35,150 มันก็หมายถึงการ "ใส่ในที่สุด ที่อยู่ของ int ที่นี่ ". 1045 00:43:35,150 --> 00:43:38,340 0x50, 0x88, ที่ใดก็ตามที่มันมีอยู่ใน หน่วยความจำที่อยู่ที่จะมี 1046 00:43:38,340 --> 00:43:40,200 และนั่นคือสิ่งที่เป็นปี ไปได้เป็นอย่างดี 1047 00:43:40,200 --> 00:43:44,920 >> ถ้าตอนนี้ผมบอกว่า x = malloc (sizeof (int)) นี้เป็นวิธีที่จินตนาการของบอกว่า 1048 00:43:44,920 --> 00:43:49,000 เฮ้ระบบปฏิบัติการผ่าน malloc, ให้ฉันหน่วยความจำเพียงพอสำหรับขนาด 1049 00:43:49,000 --> 00:43:52,370 ของ int ซึ่งอาจเป็น จะเป็น 32 บิตหรือสี่ไบต์ 1050 00:43:52,370 --> 00:43:53,680 >> ดังนั้นสิ่งที่จะ malloc กลับ? 1051 00:43:53,680 --> 00:43:55,250 malloc กลับที่อยู่ 1052 00:43:55,250 --> 00:43:57,020 ดังนั้นสิ่งที่จะได้รับการจัดเก็บไว้ใน x? 1053 00:43:57,020 --> 00:44:00,600 ที่อยู่ของก้อน หน่วยความจำสี่ไบต์ malloc ที่ 1054 00:44:00,600 --> 00:44:03,360 พบเพียงสำหรับฉันโดยขอให้ ระบบปฏิบัติการ 1055 00:44:03,360 --> 00:44:08,240 >> ตอนนี้ขณะที่สาย สี่นี่ * x = 42 1056 00:44:08,240 --> 00:44:09,990 เพียงเพื่อจะชัดเจน สิ่งที่เกิดขึ้นลงไปที่นั่น? 1057 00:44:09,990 --> 00:44:11,530 ที่ด้านซ้ายมือ * x 1058 00:44:11,530 --> 00:44:13,610 ที่เหมือน * 33 Oxford Street 1059 00:44:13,610 --> 00:44:15,523 ดังนั้น * x หมายถึงอะไร 1060 00:44:15,523 --> 00:44:16,450 >> ผู้ชม: ไปที่ 1061 00:44:16,450 --> 00:44:17,908 >> เดวิดเจลัน: ไปที่ที่อยู่ที่ 1062 00:44:17,908 --> 00:44:20,466 ทุกก้อนที่ หน่วยความจำไปกับมัน 1063 00:44:20,466 --> 00:44:21,979 และนำสิ่งที่มีเห็นได้ชัด? 1064 00:44:21,979 --> 00:44:22,520 ผู้ชม: 42 1065 00:44:22,520 --> 00:44:23,580 เดวิดเจลัน: 42 1066 00:44:23,580 --> 00:44:25,650 ทั้งหมดขวา * Y, ความคิดเดียวกัน 1067 00:44:25,650 --> 00:44:26,860 ไปที่ที่อยู่ในปี 1068 00:44:26,860 --> 00:44:31,740 ใส่หมายเลข 13 ที่นั่น แต่คือ y ในขณะนี้คืออะไร 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 ผู้ชม: มีหน่วยความจำสำหรับปีไม่มี 1071 00:44:34,630 --> 00:44:35,710 เดวิดเจลัน: มี เป็นหน่วยความจำสำหรับปีไม่มี 1072 00:44:35,710 --> 00:44:38,215 ดังนั้นสิ่งที่น่าจะเป็นปี มีที่เราได้รับการบอกว่า? 1073 00:44:38,215 --> 00:44:38,520 >> ผู้ชม: ขยะ 1074 00:44:38,520 --> 00:44:39,480 >> เดวิดเจลัน: บางค่าขยะ 1075 00:44:39,480 --> 00:44:41,320 ตอนนี้ค่าขยะยังคงมีจำนวน 1076 00:44:41,320 --> 00:44:43,160 มันยังสามารถเข้าใจผิดสำหรับที่อยู่ 1077 00:44:43,160 --> 00:44:45,160 มันราวกับว่ามีใครบางคน ขีดเขียนอะไรบางอย่างลง 1078 00:44:45,160 --> 00:44:48,002 และผมตีความว่ามันเป็นความหมาย อาคารลงถนนบาง 1079 00:44:48,002 --> 00:44:50,460 และถ้าคุณเพียงแค่พยายามที่จะไปเป็น อาคารบางอย่างที่คุณไม่ได้เป็นเจ้าของ 1080 00:44:50,460 --> 00:44:53,710 หรือก้อนของหน่วยความจำบางอย่างที่คุณยังไม่ได้ รับสิ่งที่ไม่ดีอาจจะเกิดขึ้น 1081 00:44:53,710 --> 00:44:57,740 คอมพิวเตอร์อาจผิดพลาดหรือบางอื่น ๆ พฤติกรรมบึกบึนอาจจะเกิดขึ้น 1082 00:44:57,740 --> 00:45:01,310 >> ดังนั้นบทนำแล้วให้บิงกี้นี้ 1083 00:45:01,310 --> 00:45:04,290 ผมยังจำ, 20 ปีที่แปลกบางอย่างในภายหลัง 1084 00:45:04,290 --> 00:45:07,200 ที่ฉันคือเมื่อฉันสุดท้าย เข้าใจตัวชี้ 1085 00:45:07,200 --> 00:45:09,520 >> ซึ่งเป็นที่จะบอกว่าถ้าคุณ ออกจากที่นี่ในสามนาที 1086 00:45:09,520 --> 00:45:12,170 และคิดว่าฉันทำไม่ได้ เข้าใจตัวชี้ตระหนักถึง 1087 00:45:12,170 --> 00:45:14,410 ผมจำได้ว่า 20 ปีสำหรับเหตุผลบางบ้า 1088 00:45:14,410 --> 00:45:17,140 และทำไมเมื่อในที่สุดมันก็จมลง ในนั่งอยู่กับการเรียนการสอนของฉัน 1089 00:45:17,140 --> 00:45:19,501 เพื่อน Nishat เมธาใน ด้านหลังของเอเลียตฮอลล์ในการรับประทานอาหาร 1090 00:45:19,501 --> 00:45:21,250 ตอนนี้ฉันได้จำได้ นี้เพราะนี่คือ 1091 00:45:21,250 --> 00:45:23,920 หนึ่งในหัวข้อที่ผมใน โดยเฉพาะอย่างยิ่งการต่อสู้กับ 1092 00:45:23,920 --> 00:45:26,470 และแล้วในที่สุดมันก็คลิก เหมือนที่ผมกล้าพูดมากของหัวข้อ 1093 00:45:26,470 --> 00:45:27,460 ในที่สุดก็จะ 1094 00:45:27,460 --> 00:45:32,590 และตอนนี้ที่จะทำให้มันรู้สึก มีความสุขและน่าเชื่อถือขึ้นว่า 1095 00:45:32,590 --> 00:45:35,360 ลองมาดูสุดท้ายในของเรา สุดท้ายสามนาทีที่นี่ที่บิงกี้ 1096 00:45:35,360 --> 00:45:37,675 จากเพื่อนของนิคของเรา parlante จาก Stanford 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [วิดีโอเล่นภาพ] 1099 00:45:41,580 --> 00:45:42,750 >> -Hey บิงกี้ 1100 00:45:42,750 --> 00:45:43,500 ตื่นขึ้นมา! 1101 00:45:43,500 --> 00:45:45,960 ก็ถึงเวลาสำหรับความสนุกสนานชี้ 1102 00:45:45,960 --> 00:45:47,012 >> อะไรที่? 1103 00:45:47,012 --> 00:45:48,723 เรียนรู้เกี่ยวกับตัวชี้? 1104 00:45:48,723 --> 00:45:50,580 โอ้คนดี! 1105 00:45:50,580 --> 00:45:53,563 >> -Well, การเริ่มต้นผมคิดว่าเรากำลัง จะต้องมีตัวชี้คู่ 1106 00:45:53,563 --> 00:45:54,390 >> -OK 1107 00:45:54,390 --> 00:45:57,930 รหัสนี้จัดสรรสองตัวชี้ ซึ่งสามารถชี้ไปที่เลข 1108 00:45:57,930 --> 00:45:58,430 -OK 1109 00:45:58,430 --> 00:46:02,140 ดีฉันเห็นทั้งสองตัวชี้ แต่พวกเขา ดูเหมือนจะไม่ได้รับการชี้ไปที่อะไร 1110 00:46:02,140 --> 00:46:02,980 >> ขวานั่นก็คือ 1111 00:46:02,980 --> 00:46:05,100 ในขั้นต้นชี้ ไม่ได้ชี้ไปที่อะไร 1112 00:46:05,100 --> 00:46:08,030 สิ่งที่พวกเขาชี้ไปที่จะเรียกว่า pointees และการตั้งค่าของพวกเขาขึ้น 1113 00:46:08,030 --> 00:46:09,370 ขั้นตอนที่แยกต่างหาก 1114 00:46:09,370 --> 00:46:10,220 >> โอ้ขวาขวา 1115 00:46:10,220 --> 00:46:10,950 ฉันรู้ว่า 1116 00:46:10,950 --> 00:46:12,385 pointees แยก 1117 00:46:12,385 --> 00:46:14,315 เอ้อดังนั้นวิธีการที่คุณจัดสรร Pointee? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -OK 1120 00:46:15,960 --> 00:46:18,970 ดีรหัสนี้จัดสรร Pointee จำนวนเต็มใหม่ 1121 00:46:18,970 --> 00:46:20,950 และชุดนี้เป็นส่วนหนึ่ง x จะชี้ไปที่มัน 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey ที่ดูดีกว่า 1124 00:46:23,230 --> 00:46:25,060 เพื่อให้มันทำอะไรบางอย่าง 1125 00:46:25,060 --> 00:46:25,990 >> -OK 1126 00:46:25,990 --> 00:46:30,455 ฉันจะ dereference ตัวชี้ x เพื่อ เก็บหมายเลข 42 เป็น Pointee ของ 1127 00:46:30,455 --> 00:46:32,830 สำหรับเคล็ดลับนี้ผมจะต้องของฉัน Magic Wand ของ dereferencing 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> ด์ของคุณ Magic Wand ของ dereferencing? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 That-- ที่ดี 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> นี้เป็นสิ่งที่รหัสดูเหมือนว่า 1134 00:46:41,080 --> 00:46:44,110 ฉันเพิ่งจะตั้งค่าตัวเลขและ [POP] 1135 00:46:44,110 --> 00:46:44,700 >> -Hey ดู 1136 00:46:44,700 --> 00:46:46,140 มีมันไป 1137 00:46:46,140 --> 00:46:50,980 >> งั้นทำ dereference ที่ x ดังนี้ ลูกศรเพื่อเข้าถึง Pointee ของ 1138 00:46:50,980 --> 00:46:53,160 ในกรณีนี้การจัดเก็บ 42 ในนั้น 1139 00:46:53,160 --> 00:46:57,710 เฮ้ลองใช้มันในการจัดเก็บจำนวน 13 ผ่านตัวชี้อื่น ๆ , y 1140 00:46:57,710 --> 00:46:58,760 >> -OK 1141 00:46:58,760 --> 00:47:03,270 ฉันเพิ่งจะไปกว่าที่นี่เพื่อ Y, และได้รับหมายเลข 13 การตั้งค่า 1142 00:47:03,270 --> 00:47:07,930 แล้วใช้ไม้กายสิทธิ์ของ dereferencing และเพียงแค่ [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> โอ้! 1144 00:47:08,960 --> 00:47:09,500 >> โอ้เฮ้! 1145 00:47:09,500 --> 00:47:11,090 ที่ไม่ทำงาน 1146 00:47:11,090 --> 00:47:15,630 พูดว่าบิงกี้, ฉันไม่คิดว่า dereferencing Y เป็นความคิดที่ดีเพราะคุณรู้ว่า 1147 00:47:15,630 --> 00:47:17,850 การตั้งค่า Pointee เป็นขั้นตอนที่แยกต่างหาก 1148 00:47:17,850 --> 00:47:20,450 และผมไม่คิดว่าเราเคยทำมัน 1149 00:47:20,450 --> 00:47:21,480 >> จุดได้ดี 1150 00:47:21,480 --> 00:47:21,980 -Yeah 1151 00:47:21,980 --> 00:47:25,680 เราจัดสรร Y ชี้ แต่เรา ไม่เคยตั้งค่าให้ชี้ไปที่ Pointee 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Very สังเกต 1154 00:47:28,616 --> 00:47:30,240 -Hey คุณกำลังมองหาที่ดีมีบิงกี้ 1155 00:47:30,240 --> 00:47:33,400 คุณสามารถแก้ไขได้เพื่อให้จุดปี เพื่อ Pointee เหมือนกับ x? 1156 00:47:33,400 --> 00:47:34,000 >> -Sure 1157 00:47:34,000 --> 00:47:36,780 ฉันจะใช้ Magic Wand ของฉัน ของตัวชี้กำหนด 1158 00:47:36,780 --> 00:47:38,740 >> เค้าว่าจะเป็น ปัญหาเหมือนก่อนหรือไม่ 1159 00:47:38,740 --> 00:47:39,240 ไม่มี 1160 00:47:39,240 --> 00:47:40,660 นี้ไม่ได้สัมผัส pointees 1161 00:47:40,660 --> 00:47:44,450 มันก็มีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งชี้ไปยัง ชี้ไปที่สิ่งเดียวกับอีก 1162 00:47:44,450 --> 00:47:45,450 >> โอ้ฉันเห็น 1163 00:47:45,450 --> 00:47:48,200 จุดนี้ปีไปยังสถานที่เดียวกับ x 1164 00:47:48,200 --> 00:47:48,910 ดังนั้นรอสักครู่ 1165 00:47:48,910 --> 00:47:49,950 ตอนนี้, y ได้รับการแก้ไข 1166 00:47:49,950 --> 00:47:51,120 มันมี Pointee 1167 00:47:51,120 --> 00:47:54,510 เพื่อให้คุณสามารถลองใช้ไม้กายสิทธิ์ของ dereferencing อีกครั้งเพื่อส่ง 13 กว่า 1168 00:47:54,510 --> 00:47:56,510 >> -Uh ตกลง 1169 00:47:56,510 --> 00:47:58,160 นี่มันไป [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey ดูที่ว่า 1171 00:47:59,340 --> 00:48:00,750 ผลงานตอนนี้ dereferencing ในปี 1172 00:48:00,750 --> 00:48:04,991 และเนื่องจากตัวชี้มีการใช้งานร่วมกัน ว่าหนึ่ง Pointee พวกเขาทั้งสองเห็น 13 1173 00:48:04,991 --> 00:48:05,490 -Yeah 1174 00:48:05,490 --> 00:48:06,870 การแบ่งปันสิ่งที่ 1175 00:48:06,870 --> 00:48:08,820 ดังนั้นเราจะเปลี่ยนสถานที่ตอนนี้หรือไม่ 1176 00:48:08,820 --> 00:48:09,440 >> โอ้มอง 1177 00:48:09,440 --> 00:48:10,830 เราออกจากเวลา 1178 00:48:10,830 --> 00:48:11,570 >> -But-- 1179 00:48:11,570 --> 00:48:13,530 >> อันเดิมจำกฎสามตัวชี้ 1180 00:48:13,530 --> 00:48:16,560 จำนวนหนึ่งโครงสร้างพื้นฐาน คือการที่คุณมีตัวชี้ 1181 00:48:16,560 --> 00:48:18,680 และมันชี้ไป Pointee 1182 00:48:18,680 --> 00:48:20,640 แต่ตัวชี้และ Pointee จะแยก 1183 00:48:20,640 --> 00:48:22,610 และข้อผิดพลาดที่พบบ่อย คือการตั้งค่าตัวชี้ 1184 00:48:22,610 --> 00:48:25,000 แต่ที่จะลืมที่จะให้มัน Pointee 1185 00:48:25,000 --> 00:48:28,170 >> หมายเลขสองตัวชี้ dereferencing เริ่มต้นที่ตัวชี้ 1186 00:48:28,170 --> 00:48:31,050 และต่อไปนี้ลูกศรของตนเหนือ ในการเข้าถึง Pointee ของ 1187 00:48:31,050 --> 00:48:33,400 ในขณะที่เราทุกคนรู้ว่านี้ จะทำงานเฉพาะถ้ามี 1188 00:48:33,400 --> 00:48:36,270 Pointee, ชนิดของ ได้รับกลับไปปกครองจำนวนหนึ่ง 1189 00:48:36,270 --> 00:48:39,000 >> จำนวนสามตัวชี้ การกำหนดตัวชี้จะใช้เวลาหนึ่ง 1190 00:48:39,000 --> 00:48:42,320 และการเปลี่ยนแปลงก็จะชี้ไปที่ Pointee เดียวกันเป็นตัวชี้อีก 1191 00:48:42,320 --> 00:48:44,160 ดังนั้นหลังจากที่ได้รับมอบหมายให้ ทั้งสองตัวชี้ 1192 00:48:44,160 --> 00:48:45,910 จะชี้ไปที่ Pointee เดียวกัน 1193 00:48:45,910 --> 00:48:47,990 บางครั้งที่เรียกว่าการแบ่งปัน 1194 00:48:47,990 --> 00:48:49,740 และนั่นคือทั้งหมดที่มีให้มันจริงๆ 1195 00:48:49,740 --> 00:48:50,277 ลาก่อนตอ​​นนี้ 1196 00:48:50,277 --> 00:48:51,110 [จบการเล่นวิดีโอ] 1197 00:48:51,110 --> 00:48:52,568 เดวิดเจลัน: นั่นมันสำหรับ CS50 1198 00:48:52,568 --> 00:48:55,110 เราจะเห็นคุณในสัปดาห์หน้า 1199 00:48:55,110 --> 00:48:56,064