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