1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [เล่นเพลง] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> Davin: สิทธิทั้งหมดผู้ชาย 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 ดังนั้นนี่คือการตรวจสอบ สำหรับการทดสอบครั้งแรก 7 00:00:15,350 --> 00:00:17,751 คือทุกคนพร้อมสำหรับการ แบบทดสอบในวันพุธที่? 8 00:00:17,751 --> 00:00:18,292 ALLISON: วู! 9 00:00:18,292 --> 00:00:18,743 นักเรียน: วู! 10 00:00:18,743 --> 00:00:19,242 Davin: ใช่ 11 00:00:19,242 --> 00:00:19,920 ALLISON: ใช่! 12 00:00:19,920 --> 00:00:20,920 Davin: นั่นของผู้ชายคนพร้อม 13 00:00:20,920 --> 00:00:22,200 ผู้ชายคนที่สองมืออย่างมีความสุข 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 ดังนั้นการตรวจสอบแบบทดสอบในวันนี้ก็จะ จะเป็นประมาณหนึ่งชั่วโมงครึ่ง 16 00:00:25,900 --> 00:00:27,940 เรากำลังจะไปในช่วงที่สำคัญ แนวความคิดที่คุณควรรู้สำหรับการทดสอบ 17 00:00:27,940 --> 00:00:31,434 เรากำลังจะไปกว่าการเขียนโปรแกรมบางอย่างโดย ตัวอย่างมือซึ่งเป็นแบบทดสอบทุก 18 00:00:31,434 --> 00:00:34,350 และถ้าคุณมีคำถามรู้สึกฟรี ที่จะยกมือขึ้นและทุกอย่างของคุณ 19 00:00:34,350 --> 00:00:34,945 เช่นนั้น 20 00:00:34,945 --> 00:00:36,695 ดีจิสติกส์เกี่ยวกับ แบบทดสอบออนไลน์ 21 00:00:36,695 --> 00:00:38,450 ดังนั้นเรากำลังจะแยกคน ขึ้นไปในห้องพักที่แตกต่างกัน 22 00:00:38,450 --> 00:00:39,491 ก็ขึ้นอยู่กับชื่อของพวกเขา 23 00:00:39,491 --> 00:00:43,630 ดังนั้นถ้าคุณมีคำถามใด ๆ เกี่ยวกับการที่ จะไปหรือเกี่ยวกับสิ่งที่วัสดุที่เป็นเหมือน 24 00:00:43,630 --> 00:00:46,810 คำอย่างเป็นทางการในสิ่งที่เกิดขึ้น จะอยู่ในแบบทดสอบ, ตรวจสอบออนไลน์ 25 00:00:46,810 --> 00:00:48,420 และนั่นคือทั้งหมดถึงวันที่ 26 00:00:48,420 --> 00:00:51,280 ดังนั้นหากมีคำถามไม่ เริ่มต้นด้วยเรากำลังจะเริ่มต้น 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 และนี่คือแอลลิสัน 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [ปรบมือ] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK ขอบคุณร็อบ 32 00:00:59,300 --> 00:01:00,280 เห็นคุณค่าของมัน 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin ควรจะมีการพลิกนี้ 35 00:01:03,050 --> 00:01:07,240 นี้เป็นรายการที่ไม่ครบถ้วนสมบูรณ์ของ หัวข้อเช่นเคยเป็น Davin เพียงกล่าวว่า 36 00:01:07,240 --> 00:01:10,860 ศึกษาเอกสาร ออนไลน์เกี่ยวกับแบบทดสอบศูนย์ 37 00:01:10,860 --> 00:01:13,680 แต่นี้เป็น much-- สวย มันอยู่ในหลักสูตร 38 00:01:13,680 --> 00:01:15,550 คือทุกสิ่งที่เราได้ไปแล้วกว่าป่านนี้ 39 00:01:15,550 --> 00:01:18,290 ทุกอย่างที่นี่เป็นเกมที่ยุติธรรม, เช่นเดียวกับสิ่งอื่น 40 00:01:18,290 --> 00:01:21,380 ที่อาจได้รับการกล่าวถึงในการบรรยาย 41 00:01:21,380 --> 00:01:25,070 >> ส่วนที่ฉันที่นี่คือ เพียงจำนวนมากของการตรวจสอบ 42 00:01:25,070 --> 00:01:27,775 มีการออกกำลังกายเป็นคู่ ว่าพวกคุณอาจจะทำงานใน 43 00:01:27,775 --> 00:01:30,650 แต่ส่วนใหญ่เราจริงๆ ต้องการที่จะได้รับการ Davin ด้วยรหัสผู้ 44 00:01:30,650 --> 00:01:31,710 โดยการออกกำลังกายมือ 45 00:01:31,710 --> 00:01:33,940 >> ดังนั้นฉันจะบินผ่านนี้ 46 00:01:33,940 --> 00:01:36,330 ถ้าคุณมีคำถามใด ๆ หยุดฉัน 47 00:01:36,330 --> 00:01:37,270 ยกมือของคุณ 48 00:01:37,270 --> 00:01:39,250 ฉันสัญญาว่าฉันอาจจะเห็นคุณ 49 00:01:39,250 --> 00:01:41,042 ถ้าไม่ได้เพียงแค่โบกมือไปรอบ ๆ 50 00:01:41,042 --> 00:01:42,250 ฉันจะได้รับการพูดถึงอย่างรวดเร็ว 51 00:01:42,250 --> 00:01:43,950 ผมหวังว่าทุกคนตกลงกับที่ 52 00:01:43,950 --> 00:01:48,020 >> ตกลงคำพิเศษ Davin อย่างเห็นได้ชัด ลืมที่จะพลิกผ่านสไลด์เหล่านี้ 53 00:01:48,020 --> 00:01:51,880 [หัวเราะ] คุณกำลังมีปัญหาชาย 54 00:01:51,880 --> 00:01:55,770 ดังนั้นเคล็ดลับสำหรับการทดสอบศูนย์ การเขียนโปรแกรมการปฏิบัติบนกระดาษ 55 00:01:55,770 --> 00:01:58,950 พวกคุณจะได้รับบางส่วน ปฏิบัติกับว่าตอนนี้มี Davin, 56 00:01:58,950 --> 00:02:00,655 ดังนั้นคุณจะไม่สมบูรณ์ด้วยตัวเอง 57 00:02:00,655 --> 00:02:03,030 ผมคิดว่าเรากำลังจะเป็นจริง ผ่านทั้งสองฟังก์ชั่น 58 00:02:03,030 --> 00:02:04,500 ดังนั้นคุณจะได้รับการเตรียมความพร้อมที่มี 59 00:02:04,500 --> 00:02:05,958 >> จะคุ้นเคยกับชุดปัญหาของคุณ 60 00:02:05,958 --> 00:02:08,150 มีคำถาม ในแบบทดสอบก่อนหน้านี้ 61 00:02:08,150 --> 00:02:12,680 ที่จะขอให้คุณตัวอย่างเช่นโค้ด บางสิ่งบางอย่างที่คล้ายกันมากกับมาริโอ 62 00:02:12,680 --> 00:02:15,060 ดังนั้นเป็นความคุ้นเคยกับ ปัญหาของคุณกำหนดได้เป็นอย่างดี 63 00:02:15,060 --> 00:02:17,827 เป็นคำถามที่เราถามคุณ ในการเริ่มต้นในแบบฟอร์ม 64 00:02:17,827 --> 00:02:19,660 ที่คุณกรอกจะ บริการคุณอย่างดี 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> ทำแบบทดสอบก่อนหน้านี้ภายใต้ ข้อ จำกัด ด้านเวลา 67 00:02:23,380 --> 00:02:25,430 แบบทดสอบเหล่านี้มีความยาว 68 00:02:25,430 --> 00:02:26,850 เวลาไปอย่างรวดเร็วจริงๆ 69 00:02:26,850 --> 00:02:30,480 และบ่อยครั้งที่คุณไม่ได้ตระหนักถึงวิธีการ มันจะไปอย่างรวดเร็วจนคุณจริง 70 00:02:30,480 --> 00:02:32,180 ใส่ตัวเองภายใต้ข้อ จำกัด เหล่านั้น 71 00:02:32,180 --> 00:02:36,500 ดังนั้นถ้าคุณก็สามารถตัดออกคุณรู้ว่า 75 นาทีทั้งคืนนี้หรือวันพรุ่งนี้ 72 00:02:36,500 --> 00:02:41,020 จะใช้เวลาหนึ่งของแบบทดสอบเหล่านี้ภายใต้ ว่าคุณจะอยู่ในรูปร่างที่ดีขึ้นมาก 73 00:02:41,020 --> 00:02:43,060 >> และยังสร้างแผ่นอ้างอิงของคุณ 74 00:02:43,060 --> 00:02:45,290 โปรดจำไว้ว่าคุณได้รับหนึ่ง หน้าด้านหน้าและด้านหลัง 75 00:02:45,290 --> 00:02:47,040 เป็นข้อมูลอ้างอิงสำหรับการทดสอบของคุณในวันพุธที่ 76 00:02:47,040 --> 00:02:49,074 การสร้างที่เป็นวิธีที่ดีในการศึกษา 77 00:02:49,074 --> 00:02:51,990 สิ่งที่คุณกำลังมีปัญหา กับที่คุณต้องการรวมที่มี 78 00:02:51,990 --> 00:02:55,627 อะไรที่ TFS ของคุณได้รับ เช่นนี้เป็นสิ่งที่สำคัญจริงๆ 79 00:02:55,627 --> 00:02:57,960 คุณควรจะรู้ว่านี่เป็น บางทีสิ่งที่คุณมีในมี 80 00:02:57,960 --> 00:02:59,931 ถ้าคุณไม่ได้จดจำพวกเขา 81 00:02:59,931 --> 00:03:02,680 แม้ว่าคุณจะรู้ว่าพวกเขาจริงๆ ดีบางครั้งมีมันไว้อย่างนั้น 82 00:03:02,680 --> 00:03:07,030 เป็นเพียงชนิดของความสะดวกสบายสำหรับคุณ ซึ่งฉันรู้ว่าแบบทดสอบเครียด 83 00:03:07,030 --> 00:03:09,260 เพื่อความสะดวกสบายใด ๆ ที่คุณได้รับจะช่วยให้ 84 00:03:09,260 --> 00:03:13,072 สิทธิทั้งหมดนอกจากนี้ยังได้รับการนอนหลับและ กินและชอบสิ่งที่ปกติ 85 00:03:13,072 --> 00:03:14,280 ที่เราบอกคุณแบบทดสอบ 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> ดังนั้นการเริ่มต้นออกง่าย ชนิดข้อมูลและขนาด 88 00:03:18,890 --> 00:03:22,720 ขณะที่ผมกล่าวมานี้เป็นเพียงการไป ฉันจะได้รับการขว้างปาจำนวนมากสิ่งที่ 89 00:03:22,720 --> 00:03:24,320 ที่นี่ที่คุณควรรู้ 90 00:03:24,320 --> 00:03:27,600 ดังนั้นเราจึงมีตัวอักษรของเรา ที่เป็นหนึ่งไบต์ ints 91 00:03:27,600 --> 00:03:30,390 ที่มีสี่ไบต์นาน ยาวซึ่งมีแปดไบต์ 92 00:03:30,390 --> 00:03:33,280 โดยทั่วไปก็เพียงแค่คุณ ต้องการที่จะถือจำนวนเต็มขนาดใหญ่ 93 00:03:33,280 --> 00:03:35,490 ลอยซึ่งเป็นสี่ คู่ที่แปด 94 00:03:35,490 --> 00:03:38,150 อีกครั้งเพียงจะช่วยให้คุณมากขึ้น พื้นที่สำหรับการลอยของคุณ 95 00:03:38,150 --> 00:03:41,290 แล้วพิมพ์ดาวดังนั้นใด ๆ ตัวชี้บนเครื่อง 32 บิต 96 00:03:41,290 --> 00:03:44,650 ซึ่งเป็นสิ่งที่พวกคุณต้องการ จะรู้ว่าเป็นสี่ไบต์ 97 00:03:44,650 --> 00:03:46,542 >> ดังนั้นทุกสิ่งที่คุณควร รู้ว่าสิ่งที่อาจจะ 98 00:03:46,542 --> 00:03:48,250 คุณต้องการที่จะมีใน แผ่นอ้างอิงของคุณ 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 ตกลงแปลงเลขฐานสอง เพื่อไบนารีแปลง 101 00:03:53,520 --> 00:03:56,860 กับเลขฐานสิบหกไปมา ทุกสิ่งที่คุณควรรู้ 102 00:03:56,860 --> 00:03:59,480 ดังนั้นจากเลขฐานสอง 103 00:03:59,480 --> 00:04:03,309 พวกคุณต้องการที่จะใช้เวลานาทีอย่างรวดเร็ว และพยายามคิดออกแต่ละเหล่านี้ 104 00:04:03,309 --> 00:04:04,600 แล้วบอกฉันว่าพวกเขา? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> ฉันยังมีขนมในกระเป๋าของฉันเพื่อให้ทุกคน คำตอบที่ได้รับลูกอมโดยวิธีการ 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 และฉันมีจำนวนมากของมัน 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 ให้ฉันคว้านี้ 111 00:04:16,870 --> 00:04:18,480 ฉันจะให้นี้จะเกบ 112 00:04:18,480 --> 00:04:21,829 เพื่อให้คุณสามารถส่งออกขนม ใครก็ตามที่เป็นสิ่งที่ดีและความร่วมมือ 113 00:04:21,829 --> 00:04:23,490 >> ตกลงผมเห็นมือที่มีในด้านหลัง 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> นักเรียน: ใช่คนแรกคือ 42 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: ใช่คนแรกคือ 42, ที่ถูกต้อง 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 นักเรียน: [ไม่ได้ยิน] 119 00:04:32,038 --> 00:04:34,810 [หัวเราะ] 120 00:04:34,810 --> 00:04:37,030 ALLISON: สองหนึ่ง มีกลับมาในสีเหลือง? 121 00:04:37,030 --> 00:04:38,910 นักเรียน: 110010 122 00:04:38,910 --> 00:04:43,410 ALLISON: ถูกต้องและสิ่งนี้ หนึ่งที่ผ่านมาลงที่นี่ที่ด้านล่าง? 123 00:04:43,410 --> 00:04:44,570 นอกจากนี้ใช่คุณรู้ว่าต้องการ? 124 00:04:44,570 --> 00:04:45,550 เพียงแค่โยนออกขนม 125 00:04:45,550 --> 00:04:46,483 วิธีการเกี่ยวกับลูกอมสำหรับทุกคนหรือไม่ 126 00:04:46,483 --> 00:04:47,510 >> นักเรียน: [ไม่ได้ยิน] เมื่อเรากำลังทำ 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 แล้วสุดท้าย 130 00:04:50,910 --> 00:04:52,000 ใครอยากตอบ? 131 00:04:52,000 --> 00:04:52,744 ที่นั่น 132 00:04:52,744 --> 00:04:54,480 >> นักเรียน: 11100 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100 ดูที่ว่า 134 00:04:56,820 --> 00:04:58,790 ขอแสดงความยินดีงานที่ดีทุกคน 135 00:04:58,790 --> 00:05:03,370 ตกลงทุกคนชนิดของการทำความเข้าใจ ขั้นตอนการทำเช่นนี้? 136 00:05:03,370 --> 00:05:08,700 คุณได้ไปจากเลขฐานสอง วิธีที่ฉันมักจะทำมันถูกเขียนออก 137 00:05:08,700 --> 00:05:09,920 อำนาจของ 2 138 00:05:09,920 --> 00:05:18,350 ดังนั้นผมจึงบอกว่าโอเค 0 ครั้ง 2-0 ดังนั้น นั่นคือ 0, 1 ครั้งที่ 2 ครั้งแรกที่ 139 00:05:18,350 --> 00:05:21,400 เป็นที่ 2 เป็นต้นไปจะวิธีการที่ 140 00:05:21,400 --> 00:05:25,790 ไม่มีใครต้องการให้ฉันไปอย่างชัดเจน ผ่านตัวอย่างของไบนารี? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 ตกลงเย็น 143 00:05:28,140 --> 00:05:30,390 >> ทศนิยมให้เป็นเลขฐานสองจะคล้าย 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 ฉันมักจะเขียนออกอำนาจของ 2 146 00:05:33,630 --> 00:05:38,660 เริ่มต้นด้วยหนึ่งที่ยิ่งใหญ่ที่สุด, แต่ไม่ได้ไปที่ผ่านมาทศนิยม 147 00:05:38,660 --> 00:05:39,710 ที่คุณกำลังมองหา 148 00:05:39,710 --> 00:05:42,870 แล้วชนิดของวิธีการทำงานของคุณ หลังการเพิ่มขึ้นสิ่งที่ตามความจำเป็น 149 00:05:42,870 --> 00:05:45,200 >> และจากนั้นก็มีการเพิ่มมัน เช่นเดียวนอกจากนี้ยังปกติ 150 00:05:45,200 --> 00:05:51,110 หากคุณเคยมีกรณีที่คุณอยู่ เพิ่มอีกสอง 1s ก็เห็นได้ชัดว่าจะกลายเป็น 2 151 00:05:51,110 --> 00:05:56,875 2 ในไบนารีคือตอน 1 0 ดังนั้นคุณต้อง ในการดำเนินการ 1 ของคุณลงในช่องถัดมา 152 00:05:56,875 --> 00:05:57,375 เย็น 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> เลขฐานสิบหกนี้อาจจะมีบางสิ่งบางอย่าง ที่เล็กน้อยไม่คุ้นเคย 155 00:06:03,240 --> 00:06:06,600 ดังนั้นในขณะที่ร็อบก็แค่บอกฉัน ก่อนเคล็ดลับของเขานี้ 156 00:06:06,600 --> 00:06:10,210 เป็นเพียงการแยกขึ้น เป็นสี่ชิ้นไบต์, OK? 157 00:06:10,210 --> 00:06:11,050 บิตขอโทษ 158 00:06:11,050 --> 00:06:11,720 เห็น? 159 00:06:11,720 --> 00:06:12,220 ขอบคุณร็อบ 160 00:06:12,220 --> 00:06:15,874 นี่คือเหตุผลที่คุณอยู่ที่นี่ [เสียง] ตกลงดังนั้นเราก็ทำลายมันได้ 161 00:06:15,874 --> 00:06:16,790 เป็นสี่ชิ้นบิต 162 00:06:16,790 --> 00:06:21,570 ดังนั้นด้วยไบนารีที่เลขฐานสิบหก เรามองไปที่แรกที่ 4 163 00:06:21,570 --> 00:06:25,573 ซึ่งถ้าเรามีสี่ 1s ใน แถวสิ่งที่หมายเลขที่เป็นสัญลักษณ์ไม่? 164 00:06:25,573 --> 00:06:26,540 >> นักเรียน: เอฟ 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: ดังนั้นในกรณีนี้ สิ่งที่เป็น 11111111 or-- ใช่? 166 00:06:32,751 --> 00:06:33,250 นักเรียน: FF 167 00:06:33,250 --> 00:06:34,600 ALLISON: เพอร์เฟก 168 00:06:34,600 --> 00:06:36,900 ที่ดีเพื่อให้ลูกอมสำหรับคุณ 169 00:06:36,900 --> 00:06:41,100 ตอนนี้สำหรับวิธีการเลขฐานสิบหกเลขฐานสองเรา เพียงแค่คิดเกี่ยวกับชนิดของมันในสิ่งที่ตรงกันข้าม 170 00:06:41,100 --> 00:06:46,420 สำหรับแต่ละหมายเลขหรือตัวอักษรนั้น เรามีอยู่ในฐานสิบหกของเรา 171 00:06:46,420 --> 00:06:53,930 เพียงแค่แปลงเป็นสี่บิต [หัวเราะ] เพื่อการแปลงสี่บิต 172 00:06:53,930 --> 00:06:58,696 ดังนั้น 5 ในกรณีนี้สิ่งที่เป็น 5 ถ้า เรากำลังเป็นตัวแทนของมันมีสี่บิต? 173 00:06:58,696 --> 00:06:59,608 >> นักเรียน: 010? 174 00:06:59,608 --> 00:07:00,520 MM-HM 175 00:07:00,520 --> 00:07:03,605 แล้วซึ่งเป็น จริงที่ 10 จะเป็นอย่างไร 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010 178 00:07:08,040 --> 00:07:09,670 เพื่อให้เรามีที่นี่ 179 00:07:09,670 --> 00:07:13,990 ดังนั้นการแปลงระหว่างเลขฐานสิบหก และไบนารีจริงไม่ใช่ว่าไม่ดี 180 00:07:13,990 --> 00:07:16,565 ถ้าคุณมองไปที่มันในสี่บิต ชิ้น, จะเป็นสีทอง 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- ใช่? 183 00:07:19,300 --> 00:07:21,903 >> ปล้น: นี่คือโง่ แต่ฉันจำไว้เสมอ 184 00:07:21,903 --> 00:07:23,500 เพราะควรจะเป็น 10 185 00:07:23,500 --> 00:07:26,230 และไบนารีเป็นเพียง 10 10, so-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: อ่ามีที่เราจะไป 187 00:07:27,310 --> 00:07:28,615 >> ปล้น: Hey 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hey, ขนมสำหรับร็อบ 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 มีสิ่งที่ช็อคโกแลตที่ไม่ได้อยู่ในนั้น 191 00:07:33,290 --> 00:07:34,180 เพื่อให้คุณสามารถมีบางส่วน 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 คณิตศาสตร์ดังนั้น ASCII 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 ประพฤติ 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 ดังนั้น ASCII คณิตศาสตร์เป็นพวกคุณ อาจจะยังจำได้ 198 00:07:44,720 --> 00:07:48,480 P ชุดที่ 2 กับ VISIONEER และ ซีซาร์ที่คุณได้จำนวนมากนี้ 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 โปรดจำไว้ว่าตัวละคร พื้นฐานเพียงตัวเลข 201 00:07:51,980 --> 00:07:54,780 เพื่อให้เราสามารถทำคณิตศาสตร์กับพวกเขา เช่นเดียวกับที่เราทำคณิตศาสตร์กับ ints 202 00:07:54,780 --> 00:07:58,090 >> ดังนั้นเราจึงมีเพียงเล็กน้อย สิ่งที่ง่ายที่นี่ 203 00:07:58,090 --> 00:08:00,940 เรามีบางอย่างในที่ เริ่มต้นได้ที่ 65 204 00:08:00,940 --> 00:08:07,440 และ B เท่ากับค่า ASCII ของ บวก 1, ถ่าน C เท่ากับ D ลบ 1, 205 00:08:07,440 --> 00:08:09,060 และถ่าน D เท่ากับ 68 206 00:08:09,060 --> 00:08:13,130 ดังนั้นแล้วเราจะไปพิมพ์ ทั้งหมดของพวกเขาในขณะที่เราเห็นที่นี่ 207 00:08:13,130 --> 00:08:15,650 และทุกคนสามารถบอกฉัน สิ่งนี้จะพิมพ์ออกมา? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 นักเรียน: [ไม่ได้ยิน] 210 00:08:18,210 --> 00:08:20,540 ALLISON: แน่นอนดังนั้น สิ่งหนึ่งที่สังเกตได้ 211 00:08:20,540 --> 00:08:22,900 ว่าเราจะพิมพ์ออก ตัวละครในแต่ละครั้งที่นี่ 212 00:08:22,900 --> 00:08:28,290 เราจะกำหนดแม้ว่า A และ B มี ints เมื่อเราประกาศไว้ดังกล่าวข้างต้น 213 00:08:28,290 --> 00:08:32,870 เรากำลังพิมพ์พวกเขาเป็นตัวละครโดย C ร้อยละและงบ printf ของเรา 214 00:08:32,870 --> 00:08:34,610 ดังนั้นพวกเขาทั้งหมดจะพิมพ์เป็นตัวอักษร 215 00:08:34,610 --> 00:08:40,730 และแน่นอนค่า ASCII 65 จะ พิมพ์เป็น A. ค่า ASCII บวก 1 216 00:08:40,730 --> 00:08:43,669 จะเป็น 66 ซึ่งจะ ภูมิใจที่จะ B. ดังนั้นในความเป็นจริงเรา 217 00:08:43,669 --> 00:08:49,107 ได้รับ B C D. ทุกคนที่ดีมี? 218 00:08:49,107 --> 00:08:49,690 คำถามใด? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 น่ากลัว 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> ตกลงขอบเขต 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 ดังนั้นขอบเขตจะเห็นได้ชัดมาก สิ่งที่สำคัญที่จะเข้าใจที่นี่ 225 00:08:59,950 --> 00:09:03,250 จำนวนมากของคุณถ้าคุณ มีข้อผิดพลาดรวบรวม 226 00:09:03,250 --> 00:09:06,085 และกล่าวว่าคุณไม่ได้ การเข้าถึงตัวแปรบาง 227 00:09:06,085 --> 00:09:08,540 มันอาจจะเป็นเพราะคุณ กำหนดไว้ภายในวง 228 00:09:08,540 --> 00:09:12,210 และพยายามที่จะเข้าถึงได้ ออกจากมันหรือในทางกลับกัน 229 00:09:12,210 --> 00:09:16,410 >> ดังนั้นขอบเขตที่หลักของมัน, มันเป็นเพียงแค่กำหนดที่ 230 00:09:16,410 --> 00:09:20,800 เราบอกว่าตัวแปรที่มีอยู่ที่เรา สามารถเปลี่ยนได้ที่เราสามารถเข้าถึงได้ 231 00:09:20,800 --> 00:09:24,550 มันเป็นเพียงชนิดของคำพูดเหล่านี้ สถานที่เดียวที่คุณสามารถเข้าถึง 232 00:09:24,550 --> 00:09:26,060 กับตัวแปรนี้ 233 00:09:26,060 --> 00:09:30,080 >> ดังนั้นทั้งสองขอบเขตที่เราพูดคุยเกี่ยวกับ ในชั้นเรียนมีโลกและท้องถิ่น 234 00:09:30,080 --> 00:09:35,080 ตัวแปรดังนั้นทั่วโลกเราพูดคุยเกี่ยวกับ เมื่อคุณได้รับการกำหนดไว้ข้างต้นหลัก 235 00:09:35,080 --> 00:09:38,390 ก็หมายความว่าทั้งหมดของคุณ โปรแกรมมีการเข้าถึงมัน 236 00:09:38,390 --> 00:09:42,090 และมันมีอยู่นานเป็น ขณะที่วิ่งโปรแกรม, OK? 237 00:09:42,090 --> 00:09:45,100 ท้องถิ่นหมายถึงว่ามันเป็น ขึ้นอยู่กับภูมิภาค 238 00:09:45,100 --> 00:09:50,520 ดังนั้นเมื่อใดก็ตามที่คุณมีฟังก์ชั่นที่เฉพาะเจาะจง เช่นการแลกเปลี่ยนเรามักจะพูดคุยเกี่ยวกับ 239 00:09:50,520 --> 00:09:54,380 เรามักจะพูดคุยเกี่ยวกับการแลกกับและ B. A และ B อยู่ในฟังก์ชั่นที่ 240 00:09:54,380 --> 00:09:55,690 พวกเขาไม่ได้อยู่ที่ใด 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> เช่นเดียวกับเมื่อคุณมีถ้า งบหรือลูป 243 00:10:00,610 --> 00:10:04,670 เมื่อใดก็ตามที่เรามีตัวอย่างเช่นใน สำหรับวงเรามี int ฉันเท่ากับ 0 244 00:10:04,670 --> 00:10:06,630 เรามีเงื่อนไขบางอย่างและเราปรับปรุง 245 00:10:06,630 --> 00:10:10,270 ฉันเท่านั้นที่อยู่ภายใน การจัดฟันที่ห่วง 246 00:10:10,270 --> 00:10:13,270 ถ้าคุณพยายามที่จะเข้าถึงได้อื่น ๆ คอมไพเลอร์ของคุณจะตะโกนใส่คุณ 247 00:10:13,270 --> 00:10:14,560 มันจะเป็นเหมือนสิ่งที่คุณพยายามจะทำอย่างไร? 248 00:10:14,560 --> 00:10:15,400 นี้ไม่ได้มีอยู่ 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 เพื่อให้เป็นสอง ประเภทที่แตกต่างกันของขอบเขต 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 ไม่ว่าทำให้ความรู้สึกที่ทุกคนหรือไม่ 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> ดังนั้นสำหรับตัวอย่างเช่นนี่นี้ เป็นเพียงบางโปรแกรมใช้งานง่าย 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 สิ่งที่พวกคุณคิดว่าเป็น จะเกิดขึ้นในแต่ละจุด 257 00:10:32,890 --> 00:10:34,210 ที่เราพยายามที่จะพิมพ์? 258 00:10:34,210 --> 00:10:40,150 ดังนั้นหนึ่งนี่นี้ สิ่งที่จะเกิดขึ้น? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 นักเรียน: มันจะพิมพ์สาม 261 00:10:44,255 --> 00:10:44,880 ALLISON: ขวา 262 00:10:44,880 --> 00:10:45,930 มันจะพิมพ์สาม 263 00:10:45,930 --> 00:10:47,272 สิ่งที่เกี่ยวกับที่นี่? 264 00:10:47,272 --> 00:10:48,230 นักเรียน: มันจะไม่ทำงาน 265 00:10:48,230 --> 00:10:48,910 ALLISON: มันจะไม่ทำงาน 266 00:10:48,910 --> 00:10:50,290 คุณออกจากขอบเขตใช่มั้ย? 267 00:10:50,290 --> 00:10:55,160 ตัวแปรท้องถิ่นไม่อยู่ ด้านนอกของฟันเหล่านี้ขวาทั้งหมดหรือไม่ 268 00:10:55,160 --> 00:10:56,462 และแล้วสิ่งที่เกี่ยวกับที่นี่? 269 00:10:56,462 --> 00:10:57,850 >> นักเรียน: [ไม่ได้ยิน] 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: อะไรนะ? 271 00:10:59,210 --> 00:10:59,900 ร็อบไป 272 00:10:59,900 --> 00:11:00,854 >> Rob: ผมเพิ่งกล่าวว่า 273 00:11:00,854 --> 00:11:04,200 ตัวแปรทั่วโลกควรจะเป็น ตัวแปรขีดทั่วโลก 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: อ่าใช่ขอโทษ 275 00:11:05,660 --> 00:11:06,200 ขอบคุณร็อบ 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 ร็อบเช่นคอมไพเลอร์ที่อยู่อาศัยของเรา 278 00:11:10,170 --> 00:11:12,684 เขาก็จะตะโกนใส่เราเมื่อเรา จำเป็นต้องใช้มัน [หัวเราะ] ใช่ว่า 279 00:11:12,684 --> 00:11:14,225 ควรจะเป็นตัวแปรขีดทั่วโลก 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 ดังนั้นสมมติว่าว่า เป็นขีดระดับโลก 282 00:11:18,430 --> 00:11:20,260 ตัวแปรสิ่งที่จะเกิดขึ้นที่นี่? 283 00:11:20,260 --> 00:11:21,260 นักศึกษาที่จะทำงาน 284 00:11:21,260 --> 00:11:22,093 ALLISON: มันจะทำงาน 285 00:11:22,093 --> 00:11:24,655 ดังนั้นมันจะพิมพ์ดังนั้นเพียง เป็นตัวอย่างที่ง่ายมาก 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 ตกลงต้นแบบ 288 00:11:29,870 --> 00:11:33,680 ดังนั้นเห็นได้ชัดเราจริงๆ เน้นสำหรับพวกคุณ 289 00:11:33,680 --> 00:11:36,460 ที่จะทำให้การทำงานถ้ามัน ทำให้ความรู้สึกในโปรแกรมของคุณ 290 00:11:36,460 --> 00:11:38,460 แต่แน่นอนเมื่อคุณ ทำให้การทำงานของคุณเอง 291 00:11:38,460 --> 00:11:40,930 โดยทั่วไปแล้วคุณจะกำหนดพวกเขาหลังจากที่หลัก 292 00:11:40,930 --> 00:11:42,430 และคุณจะพยายามที่จะเรียกพวกเขาในหลัก 293 00:11:42,430 --> 00:11:46,030 และถ้าคุณไม่ได้ใช้ต้นแบบ คอมไพเลอร์ของคุณจะตะโกนใส่คุณ 294 00:11:46,030 --> 00:11:49,590 >> ต้นแบบเป็นพื้น เพียงแค่บอกคอมไพเลอร์ของคุณ 295 00:11:49,590 --> 00:11:52,400 ที่ฉันมีฟังก์ชั่นด้านล่างนี้หลัก 296 00:11:52,400 --> 00:11:54,970 ฉันจะเรียกมันว่าก่อนที่ผมจะกำหนดมัน 297 00:11:54,970 --> 00:11:56,360 เพียงแค่กดที่ 298 00:11:56,360 --> 00:12:00,660 ฉันสัญญาว่าจะกำหนดและคุณ จะมีทุกอย่างที่คุณต้องการ 299 00:12:00,660 --> 00:12:05,900 >> ดังนั้นวิธีที่เราทำมันเป็นเพียงการกลับมาของคุณ ชนิดชื่อฟังก์ชันของคุณใส่ของคุณ 300 00:12:05,900 --> 00:12:06,400 รายการ 301 00:12:06,400 --> 00:12:09,760 มันเป็นพื้นบรรทัดแรก ของการประกาศฟังก์ชั่นของคุณ 302 00:12:09,760 --> 00:12:11,510 มันเป็นความจริงทั้งหมดมันเป็น 303 00:12:11,510 --> 00:12:14,440 แต่นี่เป็นเพียง ชนิดทั่วไปของรูปแบบ 304 00:12:14,440 --> 00:12:17,220 >> ดังนั้นในตัวอย่างของเราที่นี่ ซึ่งพวกคุณควร 305 00:12:17,220 --> 00:12:19,700 ได้เห็นในส่วน ในบางจุดที่เรามี 306 00:12:19,700 --> 00:12:23,220 บางก้อน int ที่ ใช้เวลา int เข้าบางส่วน 307 00:12:23,220 --> 00:12:25,870 และเรามีหลักของเรา ฟังก์ชั่นที่เรียกก้อน 308 00:12:25,870 --> 00:12:28,670 และก้อนถูกกำหนดตามความเป็นจริง 309 00:12:28,670 --> 00:12:34,450 >> ดังนั้นถ้าเราไม่ได้มีการใส่ก้อน int ที่ด้านบนเมื่อเราเรียกว่าลูกบาศก์ 310 00:12:34,450 --> 00:12:36,620 ภายในหลักคอมไพเลอร์ของเรา จะได้รับบ้าที่พวกเรา 311 00:12:36,620 --> 00:12:38,890 มันคงเป็นเหมือนสิ่งที่ คุณกำลังพูดถึง? 312 00:12:38,890 --> 00:12:40,360 Cube ไม่อยู่ 313 00:12:40,360 --> 00:12:41,910 ผมไม่ทราบว่าสิ่งที่คุณกำลังถามหา 314 00:12:41,910 --> 00:12:43,490 และฉันก็จะหยุด 315 00:12:43,490 --> 00:12:47,330 >> แต่เป็นเพราะเราทำต้นแบบของเรา ที่ด้านบนที่เราได้กล่าวว่า 316 00:12:47,330 --> 00:12:49,800 คุณรู้ว่าเมื่อคุณเห็น ก้อนไม่ต้องกังวลเกี่ยวกับเรื่องนี้ 317 00:12:49,800 --> 00:12:51,990 ฉันสัญญาว่าจะกำหนดในภายหลัง 318 00:12:51,990 --> 00:12:53,750 และมันจะช่วยให้คุณทำสิ่งที่คุณต้องการ 319 00:12:53,750 --> 00:12:57,750 ดังนั้นถ้าคุณเคยมีฟังก์ชั่น ที่มีการประกาศหลังจากที่คุณเรียกมันว่า 320 00:12:57,750 --> 00:13:00,570 เป็นครั้งแรกที่คุณจะต้อง มีมันเป็นต้นแบบที่ด้านบน 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> ใช่? 323 00:13:02,720 --> 00:13:04,412 >> Rob: มันยกกำลังไม่ cubing 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: โอ้พระเจ้าของข้าพระองค์ 325 00:13:05,855 --> 00:13:09,435 ผมไม่ได้ have-- เกบผมคิดว่า คุณสำอางของเรา 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 พวกตกลงอดทนกับฉันที่นี่ 328 00:13:12,760 --> 00:13:14,440 ผมหวังว่าทุกคนได้รับความคิด 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 ตกลงดังนั้นนี้ควรจะมี รับการยกกำลังไม่ cubed 331 00:13:20,380 --> 00:13:22,700 แต่ความคิดที่ยังคงเหมือนเดิม 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 ฟังก์ชั่นใด ๆ ที่เรากำลังเรียกร้องหลังจากที่ ความจริงที่ควรจะมีต้นแบบ 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 ทุกคนที่ดีกับที่? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 ความผิดพลาดใด ๆ อื่น ๆ ? 338 00:13:32,310 --> 00:13:32,810 ตกลง 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 ความผิดพลาดใด ๆ ที่นี่ก่อนที่เราจะเริ่มต้น, ร็อบ? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [หัวเราะ] OK เพื่อ structs 343 00:13:42,380 --> 00:13:45,040 โดยทั่วไป structs ช่วยให้คุณ เพื่อสร้างชนิดข้อมูลของคุณเอง 344 00:13:45,040 --> 00:13:49,264 มากเช่น int หรือถ่านหรือ ลอยก็แค่อีกประเภทหนึ่ง 345 00:13:49,264 --> 00:13:51,680 ผมชอบที่จะคิดว่ามันเป็นเหมือน สร้างประเภทข้อมูลของคุณเอง 346 00:13:51,680 --> 00:13:53,740 ดังนั้นมันจึงช่วยให้คุณสามารถทำเช่นนั้นได้ 347 00:13:53,740 --> 00:13:56,160 และมันถือประเภทที่แตกต่างกันของข้อมูล 348 00:13:56,160 --> 00:14:01,030 >> ดังนั้นหากคุณจำไว้ในอาเรย์เรา สามารถเก็บสิ่งที่เป็นของประเภทที่คล้ายกัน 349 00:14:01,030 --> 00:14:04,660 structs ช่วยให้เราสามารถถือหลาย สิ่งที่แตกต่างกัน 350 00:14:04,660 --> 00:14:08,944 ดังนั้นในกรณีนี้ที่นี่เรา มีโครงสร้างที่เรียกว่านักศึกษา, 351 00:14:08,944 --> 00:14:10,650 การตั้งชื่อที่นี่ที่ด้านล่าง 352 00:14:10,650 --> 00:14:13,540 และเรามีบาง int id และชื่อสตริงบาง 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 ดังนั้นนี้เป็นเพียงชนิดข้อมูลอื่น 355 00:14:17,300 --> 00:14:18,950 ขณะนี้เรามีชนิดของข้อมูลที่เรียกว่านักศึกษา 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> เพราะเราสามารถคิดของ ว่ามันเป็นเพียงแค่ชนิดข้อมูลอื่น 358 00:14:24,750 --> 00:14:27,760 เราสามารถประกาศตัวแปร ขณะที่อื่น ๆ ที่เราจะใด ๆ 359 00:14:27,760 --> 00:14:32,680 ดังนั้นแทนที่จะเพียงแค่มีความเหมือน นักเรียน int เราก็มีนักเรียน 360 00:14:32,680 --> 00:14:33,390 นักเรียน 1 361 00:14:33,390 --> 00:14:33,560 โอ้ดู 362 00:14:33,560 --> 00:14:34,059 มันเป็นร็อบ 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 ดังนั้นที่นี่เรากำลังประกาศ struct หรือตัวแปร 365 00:14:38,880 --> 00:14:40,940 เรียกว่านักเรียน 1 ประเภทนักเรียน 366 00:14:40,940 --> 00:14:45,370 ดังนั้นมันจะมี id และชื่อที่เกี่ยวข้องกับมัน 367 00:14:45,370 --> 00:14:48,430 >> และวิธีที่เราใช้เหล่านี้ องค์ประกอบภายในโครงสร้างของเรา 368 00:14:48,430 --> 00:14:50,100 อยู่กับผู้ประกอบการจุดที่นี่ 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 ดังนั้นในกรณีนี้เรา ประกาศนักศึกษาบางส่วน 1 371 00:14:54,660 --> 00:14:57,080 เราได้รับมอบหมายให้ ID ที่จะเป็น 1 372 00:14:57,080 --> 00:14:58,840 และเรากำหนดชื่อที่จะเป็นร็อบ 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 ตกลงทุกคนที่ดีกับที่? 375 00:15:04,960 --> 00:15:06,787 ใช้มันเป็นเพียงแค่ like-- ใช่? 376 00:15:06,787 --> 00:15:09,530 >> นักเรียน: ใช่ typedef-- เมื่อ เราจะต้องใช้ typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON ดังนั้น typedef เพียง กล่าวว่า that-- ร็อบคุณ 378 00:15:13,190 --> 00:15:16,990 สามารถถูกต้องฉันเกี่ยวกับเรื่องนี้ถ้าผม wrong-- แต่ typedef เป็นเพียงการประกาศจริง 379 00:15:16,990 --> 00:15:19,330 มันเป็นชนิดที่คุณสามารถใช้ใช่มั้ย? 380 00:15:19,330 --> 00:15:22,550 >> Rob: ใช่มันเป็นพื้น, จึงเป็นเพียงการสร้าง 381 00:15:22,550 --> 00:15:24,215 นามแฝงหรือฉายาสำหรับประเภท 382 00:15:24,215 --> 00:15:25,590 ดังนั้นคุณจึงสามารถพิมพ์ว่า [ไม่ได้ยิน] 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 ดังนั้น [ไม่ได้ยิน] มีอยู่ และตอนนี้เราก็มี 385 00:15:30,350 --> 00:15:32,090 [ไม่ได้ยิน] หมายถึง ตรงเดียวกัน 386 00:15:32,090 --> 00:15:37,210 และอื่น ๆ ที่นี่เรากำลังพิมพ์ผมคิดว่า บางชนิด struct 2 [ไม่ได้ยิน] 387 00:15:37,210 --> 00:15:40,680 จึงเป็นเพียงชื่อเล่น สำหรับประเภทที่กำหนด 388 00:15:40,680 --> 00:15:44,344 >> นักเรียน: String [ไม่ได้ยิน] ห้องสมุด ถูกพิมพ์ขึ้นเช่นถ่านดาว 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: เพื่อประโยชน์ของเราที่นี่ ถ้าคุณกำลังประกาศ struct, 391 00:15:54,390 --> 00:15:55,600 เพียงแค่ทำ typedef struct 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 ตกลงดังนั้นก่อนนี้ เพียงตัวแปรปกติท​​ี่นี่ 394 00:16:04,490 --> 00:16:06,390 เราเข้าถึงได้ด้วยจุด 395 00:16:06,390 --> 00:16:08,580 ถ้าเรามีตัวชี้ไปยัง struct เราสามารถจริง 396 00:16:08,580 --> 00:16:10,700 ใช้ลูกศรซึ่งเป็นเย็นสวย 397 00:16:10,700 --> 00:16:17,130 >> ดังนั้นในกรณีนี้เรามีตัวชี้ไปยัง นักเรียนที่ 1 เป็นประเภทนักเรียน 398 00:16:17,130 --> 00:16:19,020 โปรดจำไว้ว่ามีของคุณ การก่อสร้างตัวชี้ 399 00:16:19,020 --> 00:16:23,710 คุณต้องการสิ่งที่พิมพ์ตัวชี้ของคุณ จะชี้ไปที่จะเป็นจุดเริ่มต้น 400 00:16:23,710 --> 00:16:25,960 ดังนั้นเราจึงมีนักเรียนบางส่วนที่ 1 ที่นี่ 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 และเนื่องจากนักเรียนนี้ 1 อยู่ในขณะนี้ชี้, 403 00:16:31,050 --> 00:16:36,520 เราจริงสามารถไปนักเรียนชื่อ 1 ลูกศร แทนจุดเพราะมันเป็นตัวชี้ 404 00:16:36,520 --> 00:16:37,640 และกำหนดร็อบ 405 00:16:37,640 --> 00:16:40,720 และตอนนี้ถ้าเราต้องการที่จะ เปลี่ยนร็อบกับ Davin, 406 00:16:40,720 --> 00:16:43,570 นี้เป็นเพียงการแสดง วิธีที่แตกต่างที่จะทำมัน 407 00:16:43,570 --> 00:16:48,850 >> ดังนั้นแทนที่จะใช้ลูกศรคุณ สามารถ also-- ผมจะจบเรื่องนี้แล้ว 408 00:16:48,850 --> 00:16:52,860 ใช้เวลาที่คำถามที่คุณสามารถ ยังทำนักเรียนอ้างอิง 1 409 00:16:52,860 --> 00:16:56,170 ที่บอกว่าเหมือนไป อะไรที่เป็นนักเรียนที่ 1 ซึ่ง 410 00:16:56,170 --> 00:16:58,840 จะเป็น struct นักเรียนของเรา 411 00:16:58,840 --> 00:17:03,910 เข้าถึงได้ด้วยจุดและองค์ประกอบ ที่คุณต้องการและจากนั้นกำหนดมัน 412 00:17:03,910 --> 00:17:05,326 มีคำถามเป็น 413 00:17:05,326 --> 00:17:08,034 นักเรียน: ใช่ดังนั้นวิธีการที่คุณมีมา ที่จะใช้ [ไม่ได้ยิน] เมื่อคุณอยู่ 414 00:17:08,034 --> 00:17:10,367 ทำดาวนักศึกษาโดยไม่ต้อง [ไม่ได้ยิน] นักเรียน? 415 00:17:10,367 --> 00:17:12,200 ALLISON: เพราะนี้ คือการสร้างตัวชี้ 416 00:17:12,200 --> 00:17:13,616 ปล้น: เรากำลังจะพูดคุยเกี่ยวกับเรื่องนี้ 417 00:17:13,616 --> 00:17:16,119 ALLISON: เรากำลังจะพูดคุย เกี่ยวกับที่มาในการตรวจสอบ 418 00:17:16,119 --> 00:17:17,660 ดังนั้นเพียงแค่ถือเข้าความคิดที่ว่า 419 00:17:17,660 --> 00:17:20,560 หากยังคงรบกวนจิตใจคุณ ท้ายมาพูดคุยกับคนของเรา 420 00:17:20,560 --> 00:17:23,380 >> ดังนั้นเหล่านี้จะตรงเดียวกัน 421 00:17:23,380 --> 00:17:25,579 เรากำลังแสดงให้คุณทั้งสอง วิธีการที่แตกต่างกันที่จะทำมัน 422 00:17:25,579 --> 00:17:29,470 นักศึกษาที่ 1 คือตอนนี้ตัวชี้ดังนั้น คุณสามารถเข้าถึงองค์ประกอบชื่อ 423 00:17:29,470 --> 00:17:30,960 ภายใน struct ที่มีลูกศร 424 00:17:30,960 --> 00:17:36,440 หรือคุณสามารถ dereference ตัวชี้ของคุณและ จากนั้นเข้าใช้งานได้ตามปกติ 425 00:17:36,440 --> 00:17:38,430 ไม่ว่าทำให้ความรู้สึกที่ทุกคน? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 หากสิ่งที่ตัวชี้ทั้งมีน้อย ทำให้เกิดความสับสนเกบจะพูดคุยเกี่ยวกับเรื่องนั้น 428 00:17:43,890 --> 00:17:45,740 แล้วอาจจะ จะทำให้รู้สึกมากขึ้น 429 00:17:45,740 --> 00:17:46,240 ใช่? 430 00:17:46,240 --> 00:17:48,387 >> นักเรียน: ใช่ดังนั้นวิธีการที่เป็น นี้แตกต่างจาก? 431 00:17:48,387 --> 00:17:49,470 ALLISON: เดิมหรือไม่ 432 00:17:49,470 --> 00:17:52,330 ดังนั้นนักเรียน 1 ในครั้งนี้ กรณีที่ไม่ได้เป็นตัวชี้ 433 00:17:52,330 --> 00:17:54,380 มันเป็นเพียงโครงสร้างที่แท้จริงของคุณ 434 00:17:54,380 --> 00:17:55,400 >> นักเรียน: OK 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: ในขณะนี้ เป็นตัวชี้ไป struct 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> นักเรียน: OK แต่ไม่ได้ชนิดของ จบลงด้วยการทำงานที่เหมือนกัน [ไม่ได้ยิน] 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: มันมีประสิทธิภาพการทำงานที่เหมือนกัน 439 00:18:03,310 --> 00:18:04,560 ไวยากรณ์ของคุณจะแตกต่างกันเพียงแค่ 440 00:18:04,560 --> 00:18:05,185 นักเรียน: OK 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: ใช่พวกเขาจะ ได้อย่างมีประสิทธิภาพเช่นเดียวกัน 442 00:18:07,600 --> 00:18:11,321 มันก็แค่ขึ้นอยู่กับบริบท คุณอาจต้องการที่หนึ่งในช่วงอื่น ๆ 443 00:18:11,321 --> 00:18:11,820 ใช่? 444 00:18:11,820 --> 00:18:13,956 >> นักเรียน: เมื่อคุณทำ อ้างอิงถึง 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: MM-HM? 446 00:18:14,580 --> 00:18:16,880 นักเรียน: ทำไมคุณ มีวงเล็บ? 447 00:18:16,880 --> 00:18:19,575 ALLISON: เพราะนักเรียน 1 เป็นตัวชี้ 448 00:18:19,575 --> 00:18:22,200 ดังนั้นคุณต้องให้แน่ใจว่าคุณ เพียง dereferencing ชี้ 449 00:18:22,200 --> 00:18:23,380 >> นักเรียน: OK 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: ดังนั้นในกรณีนี้ที่นี่ วงเล็บรอบ ๆ 451 00:18:26,700 --> 00:18:29,875 หมายความว่าคุณกำลัง dereferencing นักเรียน 1 452 00:18:29,875 --> 00:18:35,390 เพื่อให้คุณกำลังจะไปที่นักเรียน 1 คะแนนซึ่งเป็นโครงสร้างของคุณ 453 00:18:35,390 --> 00:18:38,010 ดังนั้นตอนนี้คุณสามารถคิด มันเป็นโครงสร้างที่ 454 00:18:38,010 --> 00:18:39,785 เพื่อให้เราสามารถใช้การดำเนินการจุดของเราตามปกติ 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 ใด ๆ ที่คำถามอื่น ๆ ? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 เย็น, น่ากลัว 459 00:18:48,120 --> 00:18:51,359 >> ดังนั้นสิ่งสุดท้ายที่ผมคิดว่า เป็นสไลด์สุดท้ายของฉัน, วู! 460 00:18:51,359 --> 00:18:52,775 OK เพื่อให้ลอยไม่แน่ชัดจุด 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 เราพูดคุยกันสั้น ๆ เกี่ยวกับ นี้ในระหว่างการบรรยาย 463 00:18:56,820 --> 00:19:00,030 โดยทั่วไปเรามี จำนวนจริงมากมายหลาย 464 00:19:00,030 --> 00:19:02,237 และถ้าใด ๆ ของพวกคุณ รักคณิตศาสตร์มี 465 00:19:02,237 --> 00:19:03,570 ทุกประเภทของสิ่งดีๆกับเรา 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> แต่มีเพียบ จำนวนจริงจำนวนมาก 468 00:19:07,190 --> 00:19:09,850 แต่พวกเขากำลังเพียง จำกัด บิตหลายอย่างที่เรามี 469 00:19:09,850 --> 00:19:13,240 ดังนั้นคุณเสมอไป มีความไม่แน่ชัดคือทั้งหมด 470 00:19:13,240 --> 00:19:16,269 และที่นั่นเป็นเพียงชนิดของ เหมือนสิ่งที่คุณควรรู้ 471 00:19:16,269 --> 00:19:19,060 ที่ว่าเราอาจขอให้คุณทำไม จุดลอยไม่แน่ชัดอยู่? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 ดังนั้นสิ่งเดียวที่คุณควรรู้ 474 00:19:21,420 --> 00:19:23,770 และด้วยการที่ผมเปลี่ยน มันไปชี้ 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> บิงกี้: สวัสดีครับ 477 00:19:28,520 --> 00:19:29,616 ชื่อของฉันของบิงกี้ 478 00:19:29,616 --> 00:19:30,990 ฉันจะพูดคุยเกี่ยวกับตัวชี้ 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 ใช่ตัวชี้เพื่อให้เป็นจริง ส่วนหนึ่งที่ชื่นชอบในหลักสูตรนี้ 481 00:19:35,830 --> 00:19:39,740 ดังนั้นเพียงเพื่อให้ชัดเจนในสิ่งที่อัลลิสัน พูดคุยเกี่ยวกับที่นี่จึงเป็นเหตุผลว่า 482 00:19:39,740 --> 00:19:43,810 why-- แตกต่างที่นี่ ความแตกต่างใหญ่เป็นวิธี 483 00:19:43,810 --> 00:19:44,760 สิ่งที่เราประกาศ 484 00:19:44,760 --> 00:19:47,560 ดังนั้นดาวนักเรียนหมายถึงนี้ เป็นตัวชี้ไปที่นักเรียน 485 00:19:47,560 --> 00:19:52,960 ในขณะที่การนำเสนอภาพนิ่งก่อนที่นักเรียนเป็น struct ที่เกิดขึ้นจริงเช่นเดียวกับนักเรียนที่เกิดขึ้นจริง 486 00:19:52,960 --> 00:19:54,400 มีใด ๆ ของสิ่งเหล่านั้น 487 00:19:54,400 --> 00:19:57,050 >> และเหตุผลที่ว่าทำไมเรา ต้องการ to-- ใช่ Davin? 488 00:19:57,050 --> 00:19:58,630 >> Davin: อะไรลูกศรหมายถึงอะไร? 489 00:19:58,630 --> 00:20:04,240 >> บิงกี้: หมายถึงลูกศร เหมือนกับนี้ 490 00:20:04,240 --> 00:20:06,150 เพื่อให้คุณไม่ได้จริงๆต้องลูกศร 491 00:20:06,150 --> 00:20:11,060 เช่นถ้าคุณโปรแกรมเท่านั้น ใน C คุณก็สามารถใช้นี้ 492 00:20:11,060 --> 00:20:12,850 ขออภัยผมไม่ได้ว่ามันคืออะไร 493 00:20:12,850 --> 00:20:14,920 คุณก็สามารถใช้รูปแบบนี้ 494 00:20:14,920 --> 00:20:17,430 >> แต่บางคนเมื่อ พวกเขาได้รับการออกแบบ C, 495 00:20:17,430 --> 00:20:19,870 พวกเขาคิดว่าคน ใช้ไวยากรณ์ที่มาก 496 00:20:19,870 --> 00:20:23,970 ว่าพวกเขาจะชอบมาเพียงแค่ขึ้น ที่มีโครงสร้างไวยากรณ์สำหรับมัน 497 00:20:23,970 --> 00:20:26,820 และสิ่งนี้เกิดขึ้นใน รูปแบบของลูกศรนี้ 498 00:20:26,820 --> 00:20:29,210 และมันเป็นเรื่องดีจริงๆเพราะ มันเป็นสัญลักษณ์ของอะไรบางอย่าง 499 00:20:29,210 --> 00:20:33,670 เหมือนเรากำลังจริงต่อไปนี้ ลูกศรนี้ชี้นี้ 500 00:20:33,670 --> 00:20:35,300 ไปยังพื้นที่ในหน่วยความจำบางส่วน 501 00:20:35,300 --> 00:20:40,410 และเมื่อเราได้มีที่เราต้องการ มองไปที่ชื่อของนักเรียนนั้น 502 00:20:40,410 --> 00:20:42,150 หากที่ทำให้ความรู้สึก 503 00:20:42,150 --> 00:20:43,000 OK? 504 00:20:43,000 --> 00:20:44,290 >> ดังนั้นนี่คือตรงเดียวกัน 505 00:20:44,290 --> 00:20:46,310 ตรงนี้เป็นสิ่งเดียวกันเช่นนี้ 506 00:20:46,310 --> 00:20:48,130 พวกเขาได้รับการเรียบเรียงตรงเดียวกัน, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 และเหตุผลที่นี่ทำไมเรา malloc บางสิ่งบางอย่างเป็นเพราะในกรณีนี้ 509 00:20:55,580 --> 00:20:59,120 ตัวแปรของเราเป็นจริง เพียงตัวแปรตัวชี้ 510 00:20:59,120 --> 00:21:02,900 ดังนั้นเราจึงมีเพียงแค่ในบางพื้นที่ หน่วยความจำที่ถือตัวชี้ 511 00:21:02,900 --> 00:21:06,570 เราไม่ได้จริงๆมีพื้นที่ใด ๆ ที่มีโครงสร้างที่เกิดขึ้นจริง 512 00:21:06,570 --> 00:21:08,660 >> ดังนั้นนี้จะต้องมีการดำเนินการในขั้นตอนที่สอง 513 00:21:08,660 --> 00:21:11,545 เราต้องสร้าง หน่วยความจำในการวางโครงสร้างใน 514 00:21:11,545 --> 00:21:14,445 และเราต้องสร้าง หน่วยความจำที่จะนำตัวชี้ใน 515 00:21:14,445 --> 00:21:16,570 ดังนั้นพวกเขากำลังพื้นสอง ตัวแปรที่แตกต่างกันที่นี่ 516 00:21:16,570 --> 00:21:19,730 หนึ่งในนั้นคือประเภทนักเรียน ยกเว้นมันไม่ได้จริงๆมีชื่อ 517 00:21:19,730 --> 00:21:21,900 และอีกคนหนึ่งเป็น ประเภทนักเรียนดาว 518 00:21:21,900 --> 00:21:24,900 แล้วนักเรียน 1 คะแนน มีถ้าที่ทำให้รู้สึก 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 OK? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> ดังนั้นเหตุผลที่ว่าทำไมเราใช้ ชี้เป็นเพราะทุกอย่าง 523 00:21:31,860 --> 00:21:35,510 ในคอมพิวเตอร์ทุกตัวแปร ในคอมพิวเตอร์ที่มีสองสิ่ง 524 00:21:35,510 --> 00:21:36,580 มันมีค่าของมัน 525 00:21:36,580 --> 00:21:38,420 และมีที่อยู่ของมัน 526 00:21:38,420 --> 00:21:41,390 และเป็นวิธีที่ดีที่จะ กรอบความคิดนี้มี 527 00:21:41,390 --> 00:21:44,230 ปัญหามากมายเมื่อคุณ พยายามที่จะใช้ฟังก์ชั่น 528 00:21:44,230 --> 00:21:47,200 และเราจะพยายามที่จะ มองเข้าไปในหนึ่งในบรรดา 529 00:21:47,200 --> 00:21:50,370 คือมันจะ คิดของหน่วยความจำที่เป็นกล่อง 530 00:21:50,370 --> 00:21:52,810 >> คุณมักจะคิดว่าของตัวแปร เมื่อคุณพูด ​​na เท่ากับ 5 531 00:21:52,810 --> 00:21:54,430 คุณคิดของการวางลงในช่อง 5 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 ดังนั้นสิ่งที่ถ้าคุณต้องการที่จะผ่าน int ว่าในการทำงานหรือไม่? 534 00:22:00,030 --> 00:22:03,230 คุณเพียงแค่ pass-- ฉันทำไม่ได้ know-- x ในการทำงาน 535 00:22:03,230 --> 00:22:06,090 แต่สิ่งที่เกิดขึ้นคือ ปกติเป็นคนที่คุณ 536 00:22:06,090 --> 00:22:09,050 จะคิดว่าสิ่งที่ต้องการฉัน ผ่านกล่องให้กับบุคคล 537 00:22:09,050 --> 00:22:12,070 และมันไม่ได้จริงๆ เกิดขึ้นได้ในคอมพิวเตอร์ 538 00:22:12,070 --> 00:22:17,770 สิ่งที่เกิดขึ้นก็คือค​​ุณคัดลอกค่า จากกล่องกล่องของบุคคลนั้น 539 00:22:17,770 --> 00:22:22,440 >> ดังนั้นสิ่งที่ผมพยายามจะบอกก็คือว่าถ้า คุณมีฟังก์ชัน sorry-- ที่นี่ 540 00:22:22,440 --> 00:22:27,700 ถ้าเรามีฟังก์ชั่นเช่นถึงห้าขึ้น ที่นั่นถ้าคุณพยายามที่จะผ่านตัวแปร 541 00:22:27,700 --> 00:22:29,450 ก็แค่ไปคัดลอก 542 00:22:29,450 --> 00:22:35,771 ถ้า NX เริ่มต้นเท่ากับ 3 ก็จะ เพื่อคัดลอกค่านี้ขึ้นอยู่กับตัวแปร 543 00:22:35,771 --> 00:22:36,270 ขึ้นมี 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 ตกลงนี้เป็นชนิดของเหตุผล เหตุผลที่เราต้องการที่จะใช้ตัวชี้ 546 00:22:39,630 --> 00:22:42,550 เพราะแทนที่จะ ให้เพียงค่า 547 00:22:42,550 --> 00:22:44,850 แทนเพียงแค่ผ่าน ค่าฟังก์ชั่น, 548 00:22:44,850 --> 00:22:46,530 เราต้องการที่จะผ่านโดยการอ้างอิง 549 00:22:46,530 --> 00:22:50,630 สิ่งที่เราเรียกผ่านโดยการอ้างอิงเป็นชนิด ของการให้กล่องฟังก์ชั่น 550 00:22:50,630 --> 00:22:53,890 เพื่อให้การทำงานยังสามารถ เปลี่ยนค่าที่อยู่ในกล่องที่ 551 00:22:53,890 --> 00:22:57,280 >> ตกลงดังนั้นเพียงบางตัวชี้พื้นฐาน สิ่งที่คือการสร้างตัวชี้ 552 00:22:57,280 --> 00:23:00,300 คุณเพียงแค่ประกาศชนิดและ คุณใส่ดาวที่เหมาะสมหลังจากที่มัน 553 00:23:00,300 --> 00:23:02,307 และประเภทเป็นเพียง สิ่งที่คุณกำลังชี้ไปที่ 554 00:23:02,307 --> 00:23:04,390 ดังนั้นถ้ามันดาว int, คุณกำลังชี้ไปที่ int 555 00:23:04,390 --> 00:23:05,940 ถ้าเป็นดาวถ่าน, คุณกำลังชี้ไปที่แผนภูมิ 556 00:23:05,940 --> 00:23:07,790 และถ้ามันเป็นดาวนักเรียน คุณกำลังชี้ไปที่นักเรียน 557 00:23:07,790 --> 00:23:08,770 OK? 558 00:23:08,770 --> 00:23:10,510 >> และพวกเขากำลังทั้งหมดยาว 4 ไบต์ 559 00:23:10,510 --> 00:23:13,010 เพราะตัวแปรนี้ มันไม่จริง 560 00:23:13,010 --> 00:23:15,380 ต้องถือถ่าน, int หรือนักเรียน 561 00:23:15,380 --> 00:23:16,890 เพียงต้องการที่จะถืออยู่ 562 00:23:16,890 --> 00:23:21,390 นั่นเป็นเหตุผลที่พวกเขากำลังทั้งหมด 4 ไบต์ ยาวนานในเครื่อง 32 บิตปกติ 563 00:23:21,390 --> 00:23:21,890 OK? 564 00:23:21,890 --> 00:23:25,600 ดังนั้นที่นี่ x เป็นตัวแปรที่ชี้ เป็น int จุดและการถ่าน จุด Z 565 00:23:25,600 --> 00:23:26,580 ที่จะลอย 566 00:23:26,580 --> 00:23:27,480 คำถามใด ๆ ที่นี่? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 เย็น 569 00:23:30,340 --> 00:23:32,550 และมีสอง สัญลักษณ์ที่แตกต่างกันพวกเขามี 570 00:23:32,550 --> 00:23:34,341 ไปเก็บไว้ในใจเมื่อ มาถึงตัวชี้ 571 00:23:34,341 --> 00:23:36,540 ดังนั้นการอ้างอิงและ dereferencing เป็นคนที่ยิ่งใหญ่ 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 ดังนั้นเครื่องหมายของ ชื่อตัวแปรจะช่วยให้คุณ? 574 00:23:41,602 --> 00:23:42,310 นักศึกษาที่อยู่ 575 00:23:42,310 --> 00:23:43,380 บิงกี้: ที่อยู่ 576 00:23:43,380 --> 00:23:47,330 ดังนั้นถ้าคุณประกาศ int เท่ากับ 5 แล้วเครื่องหมาย 577 00:23:47,330 --> 00:23:49,214 ของที่จะให้ที่อยู่ 578 00:23:49,214 --> 00:23:51,130 และคุณจริงสามารถลอง ในการพิมพ์ที่และดู 579 00:23:51,130 --> 00:23:54,640 สิ่งที่อยู่ในความทรงจำ ตัวแปรของคุณมี 580 00:23:54,640 --> 00:23:57,380 แล้ว dereferencing-- เพื่อให้ได้รับการอ้างอิง, 581 00:23:57,380 --> 00:24:00,380 รับ dereferencing address-- เป็นตรงกันข้าม 582 00:24:00,380 --> 00:24:04,120 ตกลงเช่นเดียวกับครั้งนี้ ตรงข้ามของส่วน, 583 00:24:04,120 --> 00:24:06,060 ดาวอยู่ตรงข้ามของเครื่องหมาย 584 00:24:06,060 --> 00:24:09,710 ดังนั้นวิธีการ dereferencing ไปที่นั่น 585 00:24:09,710 --> 00:24:14,280 ดังนั้นถ้าคุณให้ฉัน star-- ไม่ know-- 50 ที่ 586 00:24:14,280 --> 00:24:20,320 จะพยายามที่จะไปที่ที่อยู่ของ จำนวน 50 ภายในของเครื่องคอมพิวเตอร์ของคุณ 587 00:24:20,320 --> 00:24:22,840 ตกลงทำเหตุที่เราเห็น ว่าพวกเขาจะตรงข้าม? 588 00:24:22,840 --> 00:24:27,320 เพราะสิ่งที่เกิดขึ้นถ้าคุณทำ บางอย่างเช่นดาวเครื่องหมาย? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 ดีเครื่องหมายจะช่วยให้คุณอยู่ ของตัวแปรที่อยู่ของ 591 00:24:33,460 --> 00:24:35,830 แต่หมายถึงดาวไปที่นั่น 592 00:24:35,830 --> 00:24:38,930 >> ดังนั้นสิ่งที่เกิดขึ้นถ้าคุณ ไปที่ที่อยู่ของ? 593 00:24:38,930 --> 00:24:40,400 คุณเพียงแค่จะไปใช่ไหม? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 ดังนั้นจะไปยังที่อยู่ของ เป็นสิ่งเดียวกับ 596 00:24:43,600 --> 00:24:47,580 นั่นเป็นเหตุผลที่พวกเขามักจะ เรียกว่ามันเหมือนกับนี้ 597 00:24:47,580 --> 00:24:50,480 และนี่จะเรียกว่า ผู้ประกอบการที่อยู่ตรงข้ามกับ 598 00:24:50,480 --> 00:24:50,980 OK? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 So Cool 601 00:24:53,790 --> 00:24:57,240 >> ภายใต้ประทุนเช่น ถ้าเราประกาศ int x เท่ากับ 5 602 00:24:57,240 --> 00:24:58,040 เรามีตัวแปร 603 00:24:58,040 --> 00:25:00,790 และจำไว้ว่าที่ผมพูดทุก variable-- และนี่คือสิ่งที่ดี 604 00:25:00,790 --> 00:25:03,820 ไปเก็บไว้ใน mind-- มันมีสอง สิ่งที่แตกต่างที่เกี่ยวข้องกับ 605 00:25:03,820 --> 00:25:06,460 มันได้รับการแก้ไขและมูลค่า 606 00:25:06,460 --> 00:25:07,140 OK? 607 00:25:07,140 --> 00:25:09,180 >> ดังนั้นค่าในกรณีนี้คือ 5 608 00:25:09,180 --> 00:25:12,140 และที่อยู่เป็นเท่าไหร่สมมติว่าผม ทำสิ่ง up-- ก็ 0x04 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 และเหตุผลเดียวที่ว่าทำไมเรามักจะ เป็นตัวแทนที่อยู่ในเลขฐานสิบหก 611 00:25:17,200 --> 00:25:19,770 เป็นหนึ่งเพราะมันก็เหมือนกับการที่ดี 612 00:25:19,770 --> 00:25:21,600 มันจะไปได้ดีกับไบนารี 613 00:25:21,600 --> 00:25:23,500 มันง่ายที่จะแปลงไปและกลับจากไบนารี 614 00:25:23,500 --> 00:25:26,890 และมันก็ไม่ได้รับการขนาดใหญ่เกินไปถ้า คุณมีจำนวนใหญ่มาก 615 00:25:26,890 --> 00:25:29,990 ดังนั้นเราจึงต้องการที่จะใช้เลขฐานสิบหก ในที่อยู่การพิมพ์ 616 00:25:29,990 --> 00:25:31,890 แต่ผมจะเป็นตัวแทน นี้เป็นจำนวนเต็ม 617 00:25:31,890 --> 00:25:32,750 มันเป็นเรื่องที่ดี 618 00:25:32,750 --> 00:25:35,450 >> และดังนั้นจึงมีที่อยู่ 4 และคุณค่าของ 5 619 00:25:35,450 --> 00:25:38,080 แล้วผมบอกว่าตัวชี้ int ดาว 620 00:25:38,080 --> 00:25:40,070 ดังนั้นนี่คือการแจ้งให้ทราบชนิดที่แตกต่างกัน, 621 00:25:40,070 --> 00:25:43,220 ตัวชี้ดาว Int เท่ากับ ที่อยู่ของ x 622 00:25:43,220 --> 00:25:46,425 ดังนั้นสิ่งที่จะเป็นค่าของ PTR? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 มันเป็นไปได้ ที่อยู่ของ x ลงที่นี่ 625 00:25:51,600 --> 00:25:54,190 OK เพื่อให้ค่าที่เป็นไปได้ เป็นเช่นเดียวกับที่อยู่ 626 00:25:54,190 --> 00:25:56,130 ที่ได้รับมอบหมายงานที่ฉันทำ 627 00:25:56,130 --> 00:25:59,380 แล้ว PTR เป็นไปได้ ที่อยู่ของตัวเองซึ่งจะเปิดออก 628 00:25:59,380 --> 00:26:02,050 ในกรณีนี้ 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> และจากนั้นผมสร้างสำเนาจำนวนเต็มใหม่ 631 00:26:05,900 --> 00:26:08,790 และผมบอกว่าสำเนา int เท่ากับไปที่นั่น 632 00:26:08,790 --> 00:26:11,140 ดังนั้นไปกับสิ่งที่ ptr จะชี้ไปที่ 633 00:26:11,140 --> 00:26:13,940 ดีสิ่งที่ PTR นี้ได้? 634 00:26:13,940 --> 00:26:14,740 ptr มี 0x04 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 เกิดอะไรขึ้นถ้าฉันพยายามที่จะไปที่นั่น? 637 00:26:18,400 --> 00:26:23,650 ฉันจะได้พบกับคนที่มี x ที่อยู่และผู้ที่มีที่อยู่ 4 638 00:26:23,650 --> 00:26:25,970 และผู้ที่มีสี่อยู่คือ x 639 00:26:25,970 --> 00:26:26,950 ที่ทำให้รู้สึก? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 ใช่? 642 00:26:28,795 --> 00:26:32,060 >> นักเรียน: ในกรณีนี้ ตัวชี้ในกอง? 643 00:26:32,060 --> 00:26:36,024 >> บิงกี้: ในกรณีนี้ คำถามที่ดี it's-- 644 00:26:36,024 --> 00:26:38,690 ฉันไม่ได้จริงๆคิดเกี่ยวกับเรื่องนี้ เมื่อมีการขึ้นอยู่เหล่านี้ 645 00:26:38,690 --> 00:26:42,570 แต่ถ้าเป็นเช่นทั้งหมด เหล่านี้เป็นตัวแปรท้องถิ่น 646 00:26:42,570 --> 00:26:46,372 แล้ว x จะไปอาศัยอยู่ in-- ทุกอย่าง จะไปอาศัยอยู่ในกอง 647 00:26:46,372 --> 00:26:48,330 เพื่อให้ทุกอย่างเป็นไปได้ จะชี้ไปที่กอง 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 คุณจะได้รับไปยังกองเมื่อ คุณเริ่มที่จะใช้ malloc ใช่มั้ย? 650 00:26:52,700 --> 00:26:59,430 >> ดังนั้นถ้าคุณจำสแต็คเป็นทุกครั้ง คุณเรียกฟังก์ชั่นในโปรแกรมของคุณ 651 00:26:59,430 --> 00:27:02,800 เหมือนหลักเช่นหรือใด ๆ ฟังก์ชั่นอื่น ๆ เช่น printf 652 00:27:02,800 --> 00:27:06,334 ทั้งหมดของตัวแปรในท้องถิ่นที่มี จะได้รับการใส่ในกองกรอบ 653 00:27:06,334 --> 00:27:08,500 และพวกเขากำลังจะได้รับ เหมือนซ้อนขึ้นในกอง 654 00:27:08,500 --> 00:27:09,930 นั่นคือสิ่งที่เรียกว่าสแต็ค 655 00:27:09,930 --> 00:27:12,200 และบรรดาตัวแปรท้องถิ่น จะไปอยู่ที่นั่น 656 00:27:12,200 --> 00:27:14,940 และ heap-- และเรากำลังจะ ที่จะพูดคุยเพิ่มเติมเกี่ยวกับ later-- นี้ 657 00:27:14,940 --> 00:27:19,050 กองเป็นที่ที่ทุกคน จัดสรรแบบไดนามิกชีวิตของหน่วยความจำ 658 00:27:19,050 --> 00:27:20,270 เย็น? 659 00:27:20,270 --> 00:27:21,680 >> เราไปสไลด์นี้ 660 00:27:21,680 --> 00:27:22,800 ใช่? 661 00:27:22,800 --> 00:27:25,490 >> นักเรียน: ทำไมไม่ได้ int คัดลอกกลับ 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> บิงกี้: ทำไมไม่ได้ int คัดลอกกลับ 0x04? 664 00:27:30,066 --> 00:27:32,450 >> นักเรียน: ทำไมไม่เป็นที่ [ไม่ได้ยิน] 665 00:27:32,450 --> 00:27:35,530 >> บิงกี้: เพราะสิ่งที่เป็นคุณค่าของ PTR? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> นักเรียน: 0x04 668 00:27:38,370 --> 00:27:38,960 >> บิงกี้: 0x04 669 00:27:38,960 --> 00:27:40,910 จะเกิดอะไรขึ้นถ้าคุณไปที่ 0x04? 670 00:27:40,910 --> 00:27:41,620 สิ่งที่คุณได้รับ? 671 00:27:41,620 --> 00:27:42,371 >> นักเรียน: โอ้, OK 672 00:27:42,371 --> 00:27:42,995 บิงกี้: คุณเห็น? 673 00:27:42,995 --> 00:27:43,536 นักเรียน: ใช่ 674 00:27:43,536 --> 00:27:44,890 บิงกี้: เพื่อให้คุณได้รับ 5 675 00:27:44,890 --> 00:27:49,170 ดังนั้นสำเนาเป็นไปได้ 5 หากที่ทำให้ความรู้สึก 676 00:27:49,170 --> 00:27:49,809 ใช่? 677 00:27:49,809 --> 00:27:52,803 >> นักศึกษาสามารถเรามีอากาศ 5 ในกล่องค่า [ไม่ได้ยิน] 678 00:27:52,803 --> 00:27:55,300 ถ้าเราใส่สำเนา int [ไม่ได้ยิน] 679 00:27:55,300 --> 00:27:56,710 >> บิงกี้: เราจะ Int-- ใช่ 680 00:27:56,710 --> 00:27:59,080 ที่จะได้ทำ สวยมากในสิ่งเดียวกัน 681 00:27:59,080 --> 00:28:02,080 แต่วิธีนี้เราสามารถผ่าน อยู่กับการทำงาน 682 00:28:02,080 --> 00:28:05,050 และนั่นคือสิ่งที่เย็น ที่เรากำลังจะทำตอนนี้ 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> ดังนั้นชนิดของการออกกำลังกายนี้เสมอมา on-- มากมักจะเกิดขึ้นในแบบทดสอบ 685 00:28:13,090 --> 00:28:15,870 ดังนั้นจึงเป็นเรื่องที่ดีมากที่จะลอง ทำชนิดของสิ่งที่ตัวเองว่า 686 00:28:15,870 --> 00:28:21,210 จึงพยายามที่จะติดตามสิ่งที่อยู่ และต้องการค่าของตัวแปร 687 00:28:21,210 --> 00:28:22,620 อยู่ที่แต่ละจุด 688 00:28:22,620 --> 00:28:24,370 ดังนั้นตรงนี้เป็น สิ่งที่เรากำลังจะทำ 689 00:28:24,370 --> 00:28:26,988 ที่นี่เรามีขั้นตอนหนึ่ง สองสามสี่ห้า 690 00:28:26,988 --> 00:28:30,530 หนึ่งสองสามสี่ห้า 691 00:28:30,530 --> 00:28:33,330 และเรากำลังจะติดตาม ของค่าของ x และ 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> ดังนั้นสิ่งนี้จะทำถ้าเป็น รหัสรถเรากำลังพยายามที่จะทำถึงห้า 694 00:28:40,530 --> 00:28:43,610 ดังนั้นเรากำลังพยายามที่จะได้รับใน ตัวแปรและเปลี่ยนค่าเป็น 5 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 และจำไว้ว่าการเปรียบเทียบของฉันของการมี กล่องและยื่นกล่องใครบางคน? 697 00:28:49,900 --> 00:28:51,515 ดังนั้นหลักมีกล่องที่เรียกว่า x นี้ 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 และมันมีค่า 3 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 และฉันพยายามที่จะส่งมอบ กล่องนี้ถึงห้า 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> และฉันต้องการที่จะเปลี่ยนห้า มูลค่าของกล่องนี้ถึง 5 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 และจากนั้นผมเพียงแค่พิมพ์ค่าของ x 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 นี่คือสิ่งที่ฟังก์ชันของฉัน นี่คือสิ่งที่ฉันพยายามที่จะทำ 708 00:29:08,850 --> 00:29:12,450 ฉันแค่พยายามที่จะปรับปรุง ค่าของ x 5 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 มันเป็นที่ชัดเจนว่าการทำงานอย่างไร 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> ตกลงดังนั้นสิ่งที่เป็นไปได้ ค่าของ x และที่นี่ 713 00:29:21,440 --> 00:29:27,734 บรรทัดแรก, ก่อนมีสิทธิก่อน line-- ผมจะ say-- ของโปรแกรมได้หรือไม่ 714 00:29:27,734 --> 00:29:28,940 >> นักเรียน: น่าจะเป็นขยะ 715 00:29:28,940 --> 00:29:30,023 >> บิงกี้: เพียงแค่สิ่งที่ขยะ 716 00:29:30,023 --> 00:29:32,590 ดังนั้นฉันเพียงแค่ใส่ N / A ดังนั้น เราไม่ทราบจริงๆ 717 00:29:32,590 --> 00:29:37,400 เหมือนไม่ได้อยู่ยัง เพราะเรายังไม่ได้เรียกว่าถึงห้า 718 00:29:37,400 --> 00:29:38,980 int ไม่ได้ประกาศ 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 และ x เป็นไปได้ที่มีอยู่ ที่นี่ แต่เรามีไม่ได้จริงๆ 721 00:29:42,920 --> 00:29:45,370 กำหนดค่าให้กับมันใด ๆ ตกลงเพื่อ? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> และแล้วสิ่งที่เป็นไปได้ ค่าของ x และในจำนวนสอง? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> นักเรียน: [ไม่ได้ยิน] 726 00:29:55,410 --> 00:29:57,540 >> บิงกี้: x ดังนั้นเป็นไปได้ 3 727 00:29:57,540 --> 00:29:59,650 นั่นเป็นเรื่องง่ายเพราะ เรากำลังกำหนด 3 ถึงมัน 728 00:29:59,650 --> 00:30:03,500 และยังไม่ได้มีอยู่ เพราะเพียงแค่อาศัยอยู่ในห้า 729 00:30:03,500 --> 00:30:05,800 ดังนั้นฉันจะมี 3 และไม่มีอะไร 730 00:30:05,800 --> 00:30:08,590 หรือชอบขยะใด ไม่ได้กำหนดไว้จริงๆ 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 และตอนนี้เป็นสายสำคัญ 733 00:30:13,140 --> 00:30:14,931 ที่นี่เรากำลังจะไป จริงโทรไปห้า 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 และจำไว้ว่าสิ่งที่ผมพูด 736 00:30:18,680 --> 00:30:20,240 เราไม่เคยผ่านในกล่อง 737 00:30:20,240 --> 00:30:23,110 เราเพียงแค่คัดลอกค่าของ กล่องกล่องอื่น 738 00:30:23,110 --> 00:30:27,000 นั่นคือคอมพิวเตอร์ทุกเครื่องจะคัดลอก สิ่งจากที่หนึ่งไปยังอีก 739 00:30:27,000 --> 00:30:33,550 >> ดังนั้นถึงห้าสิ่งที่มันไม่จริง เป็นสำเนาค่าของ x จะ 740 00:30:33,550 --> 00:30:35,130 ดังนั้นสิ่งที่เป็นไปได้ที่นี่? 741 00:30:35,130 --> 00:30:36,210 ค่าของ x และ 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 และ 3 เราจะคัดลอก มันมาจาก x เพื่อ 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 เย็น 746 00:30:45,320 --> 00:30:46,140 >> ตอนนี้เราอยู่ที่นี่ 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 และตอนนี้เรากำลังจะ การปรับปรุงเท่ากับ 5 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 สิ่งที่จะเกิดขึ้นในสายสี่ 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> นักเรียน: [ไม่ได้ยิน] 753 00:30:56,010 --> 00:30:59,685 >> บิงกี้: ได้รับการปรับปรุง แต่ x ก็ไม่ได้รับการปรับปรุง 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 เพราะ x ยังคงอาศัยอยู่ในหลักของมัน บล็อกที่แตกต่างกันอย่างสมบูรณ์ของหน่วยความจำ 756 00:31:05,250 --> 00:31:06,970 มันเป็นตัวแปรที่แตกต่างกัน 757 00:31:06,970 --> 00:31:07,900 เป็นตัวแปรอื่น 758 00:31:07,900 --> 00:31:10,000 พวกเขาเกิดขึ้นได้ ค่าเดียวกันเพราะผม 759 00:31:10,000 --> 00:31:13,980 คัดลอกสูงกว่ามูลค่าของ x 760 00:31:13,980 --> 00:31:20,070 แต่ตอนนี้เมื่อฉันทำเท่ากับ 5 ก็ ไม่ได้ส่งผลกระทบจริงๆ x ในทางใดทางหนึ่ง 761 00:31:20,070 --> 00:31:21,450 นี้เป็นส่วนที่ยุ่งยาก 762 00:31:21,450 --> 00:31:23,380 มันทำให้รู้สึกกับทุกคน? 763 00:31:23,380 --> 00:31:24,093 ใช่? 764 00:31:24,093 --> 00:31:25,717 นักเรียน: คำถามเพิ่มเติมหนึ่งคุณมี 3 765 00:31:25,717 --> 00:31:27,741 ทำไม already-- โอ้ไม่ก็ 3 766 00:31:27,741 --> 00:31:28,490 ขออภัยไม่ทราบ 767 00:31:28,490 --> 00:31:29,310 ผมอ่าน 5 768 00:31:29,310 --> 00:31:30,415 >> บิงกี้: ใช่, 3, 3 769 00:31:30,415 --> 00:31:31,540 >> นักเรียน: [ไม่ได้ยิน] ใช่ 770 00:31:31,540 --> 00:31:35,290 บิงกี้: และแล้วเรากำหนด 5 ถึง แต่ไม่ได้เปลี่ยนจริงๆ x 771 00:31:35,290 --> 00:31:36,369 ดีหรือไม่? 772 00:31:36,369 --> 00:31:36,910 นักเรียน: ใช่ 773 00:31:36,910 --> 00:31:37,410 บิงกี้: ใช่? 774 00:31:37,410 --> 00:31:42,330 คุณสามารถอธิบายอีกครั้งว่า ได้รับการคัดลอก [ไม่ได้ยิน] 775 00:31:42,330 --> 00:31:48,480 >> บิงกี้: OK ดังนั้นเมื่อคุณโทรไปห้า ของ x ดังนั้นบรรทัดนี้รหัสที่นี่ 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 ถึงห้าของ x คืออะไร X? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x เพียง 3 ที่จุดนี้ใช่มั้ย? 780 00:31:58,340 --> 00:32:03,320 ดังนั้นคุณก็สามารถคิดของการวาง 3 ที่นี่และลืมเกี่ยวกับ x 781 00:32:03,320 --> 00:32:04,410 เพียงแค่ใส่ 3 ที่นี่ 782 00:32:04,410 --> 00:32:10,880 เช่นเดียวกับที่เรากำลังจะคัดลอกไป ค่าของ x เพื่อ int ที่มีขึ้น 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 OK? 785 00:32:13,630 --> 00:32:14,780 >> ดังนั้นค่าของ x คือ 3 786 00:32:14,780 --> 00:32:17,680 เรากำลังจะไปคัดลอก 3 ไป 787 00:32:17,680 --> 00:32:20,040 และทุกบล็อกอื่น ๆ ของ หน่วยความจำของตัวแปรอื่น ๆ 788 00:32:20,040 --> 00:32:22,640 เรียกว่าจะมี 3 เช่นเดียวกับ 789 00:32:22,640 --> 00:32:23,580 ที่ทำให้รู้สึก? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 ใช่? 792 00:32:25,794 --> 00:32:31,008 >> นักเรียน: ถ้าคุณให้ถึงห้าเช่น มีมันเป็นจำนวนเต็ม x แทน, 793 00:32:31,008 --> 00:32:32,910 ที่จะแก้ไขปัญหาทุกอย่าง? 794 00:32:32,910 --> 00:32:36,290 >> บิงกี้: ถ้ามัน integer-- ไม่มี ที่จะไม่แก้ไขปัญหาทุกอย่าง 795 00:32:36,290 --> 00:32:37,590 นั่นคือคำถามที่ดีมาก 796 00:32:37,590 --> 00:32:40,480 มันไม่ได้เรื่องจริงๆสิ่งที่ คุณเรียกตัวแปรเหล่านั้น 797 00:32:40,480 --> 00:32:44,510 อีกครั้งก็จะเป็นปัญหาของขอบเขต, เพราะพวกเขาไม่ได้ x เดียวกัน 798 00:32:44,510 --> 00:32:46,526 พวกเขากำลังอย่างสมบูรณ์ ช่องว่างที่แตกต่างกันในหน่วยความจำ 799 00:32:46,526 --> 00:32:47,400 นักเรียน: [ไม่ได้ยิน] 800 00:32:47,400 --> 00:32:49,020 บิงกี้: ดังนั้นมันไม่ได้จริงๆ สำคัญว่าสิ่งที่คุณเรียกพวกเขา 801 00:32:49,020 --> 00:32:50,480 แต่นั่นไม่ได้แก้ไขสิ่ง, OK? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 คำถามเพิ่มเติมหรือไม่ 804 00:32:54,430 --> 00:32:55,762 ใช่? 805 00:32:55,762 --> 00:32:58,498 >> นักเรียน: มันเป็นวิธีการกลับไป หมายเลขห้า [ไม่ได้ยิน] 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 บิงกี้: ตกลงเราไม่ได้ทำที่ยัง 808 00:33:01,160 --> 00:33:03,432 ลองไปที่บ้านเลขที่ห้าแล้ว 809 00:33:03,432 --> 00:33:04,650 >> นักเรียน: [ไม่ได้ยิน] 810 00:33:04,650 --> 00:33:05,565 >> บิงกี้: อะไรนะ? 811 00:33:05,565 --> 00:33:08,179 >> นักเรียน: คุณมีผลตอบแทนที่ทุกคน? 812 00:33:08,179 --> 00:33:09,970 บิงกี้: เราไม่ได้มี กลับไปไม่ได้ในหลัก 813 00:33:09,970 --> 00:33:12,940 แต่ผลตอบแทนหลัก 0 โดยอัตโนมัติ ถ้าคุณไม่กลับอะไร 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 ใช่? 816 00:33:15,188 --> 00:33:22,658 >> นักเรียน: คุณสามารถทำให้ main-- หรือ คุณสามารถทำให้ถึงห้ากลับมา? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> บิงกี้: เราอาจมี ถึงห้ากลับใช่ 819 00:33:27,990 --> 00:33:32,527 แต่แล้วเราจะต้องกำหนด x เท่ากับค่าตอบแทนของถึงห้า 820 00:33:32,527 --> 00:33:34,360 ซึ่งจะเป็นเล็กน้อย โปรแกรมที่แตกต่างกัน 821 00:33:34,360 --> 00:33:35,440 มันจะทำงาน 822 00:33:35,440 --> 00:33:38,730 แต่สิ่งที่เราต้องการจะทำคือสิ่งที่เป็น สิ่งที่เรียกว่าการเปลี่ยนแปลงในสถานที่ 823 00:33:38,730 --> 00:33:41,690 ดังนั้นเราจึงต้องการที่จะเป็นจริง เปลี่ยนช่องที่และไม่ต้องกังวล 824 00:33:41,690 --> 00:33:44,390 เกี่ยวกับการมีที่จะกลับมา ค่าหรืออะไร 825 00:33:44,390 --> 00:33:44,890 OK? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> นี้เช่นเดียวกับฟังก์ชั่นการแลกเปลี่ยน เดวิดได้แสดงให้เห็นในการบรรยายยกเว้นฉัน 828 00:33:50,150 --> 00:33:51,740 เพียงจัดการกับตัวแปรหนึ่ง 829 00:33:51,740 --> 00:33:55,960 และเขาใช้สองดังนั้น int a และ b และ แล้วตัวแปรชั่วคราวและ whatnot 830 00:33:55,960 --> 00:33:57,020 OK? 831 00:33:57,020 --> 00:33:58,070 ดังนั้นสิ่งที่บรรทัดสุดท้าย? 832 00:33:58,070 --> 00:34:04,400 หลังจากที่ห้าผลตอบแทนก็ ก็จะหายไป 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 เราจะไม่ได้อีกต่อไปและ เพียง x จะยังคงอาศัยอยู่บน 835 00:34:10,179 --> 00:34:12,130 >> และเดาอะไร x ไม่ได้เปลี่ยนค่าของมัน 836 00:34:12,130 --> 00:34:15,520 หลังจากทั้งหมดเพราะเรา เพียงเปลี่ยนค่าของ 837 00:34:15,520 --> 00:34:17,370 นั่นเป็นเหตุผลที่ x 3 ตลอด 838 00:34:17,370 --> 00:34:17,870 OK? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 ดี 841 00:34:21,130 --> 00:34:23,560 ดังนั้นโปรแกรมนี้ไม่ได้ บรรลุสิ่งที่เราต้องการ 842 00:34:23,560 --> 00:34:24,760 ตอนนี้ขอแก้ไขได้ 843 00:34:24,760 --> 00:34:27,440 >> และโปรแกรมการแก้ไขคือการใช้ตัวชี้ 844 00:34:27,440 --> 00:34:32,300 สิ่งที่เราทำคือเรามีสาม เส้นที่แตกต่างกัน 845 00:34:32,300 --> 00:34:34,020 คนแรกคือเราไม่ได้ผ่าน x 846 00:34:34,020 --> 00:34:35,535 เรากำลังผ่านที่อยู่ของ x 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 ดังนั้นแทนที่จะคัดลอกไป ค่าของกล่อง 849 00:34:40,876 --> 00:34:42,500 ฉันยังคงไปคัดลอกไปบางสิ่งบางอย่าง 850 00:34:42,500 --> 00:34:45,380 แต่ฉันคัดลอกไป ที่อยู่ของกล่อง 851 00:34:45,380 --> 00:34:48,780 >> ดังนั้นถ้าผมส่งที่อยู่ของ กล่องถึงห้าแล้วถึงห้า 852 00:34:48,780 --> 00:34:51,560 จะสามารถที่จะพบว่าใน หน่วยความจำและการเปลี่ยนแปลงค่าของมัน 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> ดังนั้นแล้วขึ้นมีฉันมี ที่ไม่ได้ int อีกต่อไป 855 00:34:59,580 --> 00:35:00,882 เป็นดาว int 856 00:35:00,882 --> 00:35:02,090 มันเป็นตัวชี้ไปยังจำนวนเต็ม 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 แล้วเพราะฉันผ่าน อยู่ที่นี่แล้วสิ่งที่ฉันทำ 859 00:35:07,310 --> 00:35:10,530 ไม่เท่ากับ 5 เพราะ มีการถือครองที่อยู่ 860 00:35:10,530 --> 00:35:16,710 ดังนั้นสิ่งที่ฉันต้องการจะทำคือไปที่นั่นและ ปรับปรุงเนื้อหาของที่อยู่นี้ 861 00:35:16,710 --> 00:35:18,305 5 862 00:35:18,305 --> 00:35:21,130 >> ตกลงเพื่อให้ผ่านไป ทั้งหมดของสายหนึ่งโดยหนึ่ง 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 ดังนั้นเมื่อผมเริ่มต้นที่นี่ผม ยังคงมีไม่มี /, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 สำหรับทุกอย่างในครั้งแรก สายเพราะฉันมีไม่ได้จริงๆ 866 00:35:28,440 --> 00:35:29,390 สิ่งที่ยังประกาศ 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 แล้วแถวสองผมมี x เท่ากับ 3 869 00:35:35,110 --> 00:35:38,020 int ดาวไม่อยู่ สิ่งเดียวกับก่อนที่จะ 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> ตอนนี้มันได้รับน่าสนใจ 872 00:35:40,640 --> 00:35:42,300 ดังนั้นฉันจะผ่าน 873 00:35:42,300 --> 00:35:45,720 และสมมติว่าที่อยู่ ของ x คือ 12 ในฐานสิบหก 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 ขอเพียงสมมตินี้ 876 00:35:48,420 --> 00:35:49,221 ฉันทำมันขึ้นมา 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 ดังนั้นสิ่งที่ฉันผ่านที่นี่ถึงห้า 879 00:35:53,500 --> 00:35:54,460 ผมผ่าน 12 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> ดังนั้นสิ่งที่มีค่าไม่ได้? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> นักเรียน: [ไม่ได้ยิน] 884 00:36:06,210 --> 00:36:06,950 >> บิงกี้: ขอโทษ? 885 00:36:06,950 --> 00:36:08,145 >> นักเรียน: [ไม่ได้ยิน] 886 00:36:08,145 --> 00:36:10,520 บิงกี้: ใช่ชอบที่จะให้ สมมติว่าเราอยู่ที่นี่ตอนนี้ 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 ฉันขอ 889 00:36:12,040 --> 00:36:12,915 >> นักเรียน: [ไม่ได้ยิน] 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> บิงกี้: จะได้รับการริเริ่ม 892 00:36:14,890 --> 00:36:15,860 >> นักเรียน: [ไม่ได้ยิน] 893 00:36:15,860 --> 00:36:17,985 บิงกี้: เพราะเราผ่าน สิ่งที่จะทำงาน 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 ใช่? 896 00:36:19,930 --> 00:36:20,899 >> นักเรียนที่อยู่ของ x 897 00:36:20,899 --> 00:36:22,690 บิงกี้: มันจะ มีที่อยู่ของ x 898 00:36:22,690 --> 00:36:25,800 และที่อยู่ของ x คือ 12 ดี 899 00:36:25,800 --> 00:36:30,990 ดังนั้น x เป็นไปได้ 3 เพราะ เรายังไม่ได้เปลี่ยนจริงๆ x ยัง 900 00:36:30,990 --> 00:36:36,700 และจากนั้นก็เป็นไปได้ 0x12 ดังนั้น ที่อยู่ของ x เพราะนั่นคือ 901 00:36:36,700 --> 00:36:38,840 สิ่งที่เราส่งผ่านไปถึงห้า 902 00:36:38,840 --> 00:36:40,940 >> และแล้วสิ่งที่เกิดขึ้น ถ้าเราพยายามที่จะไปที่นั่น? 903 00:36:40,940 --> 00:36:42,145 สิ่งที่เราจะไปหา? 904 00:36:42,145 --> 00:36:47,120 ดังนั้นถ้าคุณพยายามที่จะพิมพ์ดาว, เราจะทำตามที่อยู่นี้ 905 00:36:47,120 --> 00:36:48,620 และได้รับค่าที่อยู่ภายใน 906 00:36:48,620 --> 00:36:50,470 และมีค่าเป็นเพียงแค่ ค่าเดียวกันที่ x 907 00:36:50,470 --> 00:36:53,980 มีเพราะนั่นคือ ที่อยู่ของ x ซึ่งจะเป็น 3 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 เราจะดีหรือไม่? 910 00:36:56,930 --> 00:36:59,990 >> ตกลงแล้วตอนนี้เราไปที่นั่นจริง 911 00:36:59,990 --> 00:37:05,510 และสิ่งที่เราปรับปรุง อยู่ในที่อยู่นี้ 12 912 00:37:05,510 --> 00:37:07,390 เราทำให้มัน 5 913 00:37:07,390 --> 00:37:10,560 ดังนั้นตอนนี้ทั้ง x และดาวเป็น 5 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> ทำไมเป็นเช่นนั้น? 916 00:37:13,680 --> 00:37:17,070 เนื่องจากที่อยู่ของ x คือ 12 917 00:37:17,070 --> 00:37:20,920 และยังมี 12 เป็นค่าของมัน 918 00:37:20,920 --> 00:37:23,780 ดังนั้นหากเราทำตาม 12 เราไม่ เพียงแค่จะไปหา x 919 00:37:23,780 --> 00:37:27,400 ดังนั้นสิ่งที่เราจะทำอย่างไรกับ ดาวที่จะเกิดขึ้น 920 00:37:27,400 --> 00:37:30,790 กับ x เพราะมี ที่อยู่ของ x 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 OK? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> และนี้เป็นเหมือนปมของการแก้ไข 925 00:37:37,750 --> 00:37:41,500 ดังนั้นตอนนี้เราสามารถ จากห้าจริง 926 00:37:41,500 --> 00:37:43,840 เข้าถึงหน่วยความจำที่อาศัยอยู่ในหลัก 927 00:37:43,840 --> 00:37:47,980 ดังนั้นหน่วยความจำนี้ไม่ได้อยู่ใน ห้าเหมือนก่อนที่อยู่นี้ 12 928 00:37:47,980 --> 00:37:50,980 และเราก็สามารถที่จะไปที่นั่น และเปลี่ยนค่าเป็น 5 929 00:37:50,980 --> 00:37:53,990 >> และจากนั้นเมื่อเรากลับมา เราลืมเกี่ยวกับ 930 00:37:53,990 --> 00:37:55,720 เราลืมเกี่ยวกับดาว 931 00:37:55,720 --> 00:37:57,020 และ x ยังคงห้า 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 ดังนั้นถ้าคุณต้องการที่จะ ใช้ฟังก์ชั่นการแลกเปลี่ยน, 934 00:38:00,160 --> 00:38:05,010 คุณก็จะทำสิ่งเดียวกันแน่นอน ยกเว้นคุณจะต้อง int ดาวที่นี่ 935 00:38:05,010 --> 00:38:06,140 และอื่น ๆ และอื่น ๆ 936 00:38:06,140 --> 00:38:06,976 OK? 937 00:38:06,976 --> 00:38:07,475 เราจะดีหรือไม่? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 เย็น 940 00:38:10,610 --> 00:38:12,410 >> คำนวณตัวชี้ดังนั้น 941 00:38:12,410 --> 00:38:13,960 นี้เป็นเรื่องยุ่งยากเล็กน้อย 942 00:38:13,960 --> 00:38:16,554 ดังนั้นจึงปรากฎว่า ชี้เป็นเพียงจำนวนเต็ม 943 00:38:16,554 --> 00:38:17,970 คุณสามารถคิดว่าพวกเขาเป็นจำนวนเต็ม 944 00:38:17,970 --> 00:38:21,080 เพราะในความทรงจำที่คุณมีเช่น หน่วยความจำที่อยู่ศูนย์หนึ่งสองสาม 945 00:38:21,080 --> 00:38:21,900 สี่ห้า 946 00:38:21,900 --> 00:38:23,900 ดังนั้นเราจึงสามารถสรุปอยู่หน่วยความจำ 947 00:38:23,900 --> 00:38:27,230 >> และนั่นคือสิ่งที่คุณมักจะทำอย่างไรเมื่อ คุณอยู่ในและอาเรย์ตัวอย่างเช่น 948 00:38:27,230 --> 00:38:30,540 อาร์เรย์เป็นเช่นเดียวกับที่อยู่ติดกัน บล็อกของหน่วยความจำจำนวนมากของตัวอักษร, 949 00:38:30,540 --> 00:38:31,840 ตัวอย่างเช่นจำนวนมาก ints 950 00:38:31,840 --> 00:38:34,420 ดังนั้นหากคุณต้องการที่จะไป สอง int หรือ int ที่สาม 951 00:38:34,420 --> 00:38:37,830 คุณก็สามารถสรุปสิ่งที่จะเป็นครั้งแรก ที่อยู่และคุณจะได้รับมี 952 00:38:37,830 --> 00:38:39,620 ดังนั้นนี้เป็นประโยชน์มากสำหรับการที่ 953 00:38:39,620 --> 00:38:41,850 >> และสิ่งที่จะทำให้ ในใจ แต่เป็น 954 00:38:41,850 --> 00:38:45,140 ว่ามันไม่ได้เป็นเช่นเดียวกับ คณิตศาสตร์ปกติในความรู้สึก 955 00:38:45,140 --> 00:38:50,304 ว่าถ้าคุณจัดการกับพูดว่า ดาว int และคุณเพิ่ม 1 กับมัน 956 00:38:50,304 --> 00:38:52,220 แล้วคุณจะไม่ เพื่อเพิ่ม 1 ไปยังที่อยู่, 957 00:38:52,220 --> 00:38:53,950 คุณกำลังจะเพิ่ม 4 ไปยังที่อยู่ 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 เพราะ int คือ 4 ไบต์ 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> ดังนั้นนี้เป็นเหมือน เดินบนอาร์เรย์ 962 00:38:59,540 --> 00:39:05,260 ถ้าเรามีอาร์เรย์ของจำนวนมาก ints และ แล้วเราก็พยายามที่จะไปที่หนึ่งที่สอง 963 00:39:05,260 --> 00:39:08,790 มันเป็นเพียงข้อสรุป ที่อยู่ของคนแรกบวก 1 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 แต่จะไม่ be-- เพียงสมมุติว่า ที่อยู่ของคนแรกคือ 4 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 ที่นี่ในกรณีนี้ 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 และถ้าเรารวมดังนั้นนี้ เป็นสิ่งที่เกิดขึ้น 970 00:39:22,850 --> 00:39:23,530 เรามี int 971 00:39:23,530 --> 00:39:25,640 int x เท่ากับ 5 972 00:39:25,640 --> 00:39:26,950 X มีค่า 5 973 00:39:26,950 --> 00:39:31,240 และเราเริ่มต้นชี้นี้ int และและ int ดาวเท่ากับที่อยู่ของ x 974 00:39:31,240 --> 00:39:33,660 >> สมมติว่าที่อยู่ของ x คือ 4 975 00:39:33,660 --> 00:39:36,960 สิ่งที่จะเกิดขึ้น ตอนนี้ถ้าผมรวมเพิ่ม 1 ถึง Y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 มันจะจริง ผลรวม 4 แทนเพียง 1 978 00:39:44,790 --> 00:39:50,920 ดังนั้นผมจึงเพิ่ม 1 แต่มันเป็นจริง เพิ่ม 4 เพราะคอมพิวเตอร์สมาร์ท 979 00:39:50,920 --> 00:39:55,275 ดังนั้นมันจะเพิ่มจริงโดยครั้งที่ฉัน ขนาดของประเภทของตัวชี้ 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 OK? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> ดังนั้นถ้าเป็นถ่านยกตัวอย่างเช่น ถ้าเป็นถ่านและดาว 984 00:40:02,440 --> 00:40:07,141 และถ้าเราเพิ่ม 1 แล้วจะนี้ เป็น 5 เพราะถ่านเป็น 1 ไบต์นาน 985 00:40:07,141 --> 00:40:07,640 ดีหรือไม่? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> และในที่สุดเราก็มาถึง ตัวชี้และอาร์เรย์ 988 00:40:13,190 --> 00:40:16,451 แต่กลับกลายเป็นว่าทุกครั้ง คุณจัดการกับอาร์เรย์ 989 00:40:16,451 --> 00:40:18,075 คุณจริงเกี่ยวกับตัวชี้ 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 เหตุผลความคิดที่ดีมากสำหรับ นี้คืออาร์เรย์มีขนาดใหญ่มาก 992 00:40:24,777 --> 00:40:27,360 ดังนั้นอย่าลืมที่ผมบอกว่า ทุกครั้งที่คุณผ่านสิ่งที่อยู่รอบ ๆ 993 00:40:27,360 --> 00:40:29,097 คุณคัดลอกทุกอย่าง 994 00:40:29,097 --> 00:40:31,180 ดังนั้นถ้าคุณมีอาร์เรย์ ที่จริงๆใหญ่จริงๆ 995 00:40:31,180 --> 00:40:32,990 คุณไม่ได้จริงๆต้องการที่จะ คัดลอกทุกอย่างทุกครั้ง 996 00:40:32,990 --> 00:40:35,710 คุณจะผ่านมันไปรอบ ๆ ไปยังอีก ฟังก์ชั่นเนื่องจากว่าเป็นเพียง 997 00:40:35,710 --> 00:40:37,190 จำนวนมหาศาลของการทำงาน 998 00:40:37,190 --> 00:40:39,710 ดังนั้นสิ่งที่คุณทำคือเพียงแค่ที่ผ่านมา ที่อยู่ของไบต์แรก 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 และจากนั้นการทำงานจะมีการเข้าถึง องค์ประกอบทั้งหมดที่อยู่ในแถวที่ 1001 00:40:44,010 --> 00:40:48,670 เพื่อให้คุณผ่านอาร์เรย์ตามที่อยู่ของมัน ดังนั้นที่อยู่ของไบต์แรก 1002 00:40:48,670 --> 00:40:53,010 >> ดังนั้นถ้าเราประกาศ int แถว 3 ที่นี่เรารู้ว่า 1003 00:40:53,010 --> 00:40:57,470 วิธีการเข้าถึงองค์ประกอบแรก ใช้เครื่องหมายวงเล็บ 1004 00:40:57,470 --> 00:41:02,410 ถ้าคุณจำวงเล็บ สัญกรณ์อาร์เรย์วงเล็บ 0 เท่ากับ 1 1005 00:41:02,410 --> 00:41:06,330 อย่างนี้จะเป็นว่า เช่นเดียวกับที่เพียงแค่ไปที่นั่นและนำ 1 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 ตกลงเป็นสิ่งเดียวกัน 1008 00:41:09,110 --> 00:41:13,010 ดังนั้นสัญกรณ์วงเล็บที่นี่ จะเป็นเช่นเดียวกับทางรถไฟสายนี้ 1009 00:41:13,010 --> 00:41:18,600 >> และคาดเดาสิ่งที่สัญกรณ์วงเล็บ สำหรับวงเล็บอาร์เรย์ 1 จะเป็นอย่างไร 1010 00:41:18,600 --> 00:41:20,440 มันก็จะเป็นสิ่งเดียวกันเช่นนี้ 1011 00:41:20,440 --> 00:41:22,500 เพื่อเพิ่มหนึ่งไปยังอาร์เรย์ 1012 00:41:22,500 --> 00:41:24,370 ย้ายหนึ่งพร้อมในหน่วยความจำ 1013 00:41:24,370 --> 00:41:26,310 ไปที่นั่นและนำ 2 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 OK? 1016 00:41:28,579 --> 00:41:29,870 และบรรทัดนี้เป็นสิ่งเดียวกัน 1017 00:41:29,870 --> 00:41:34,860 เราต้องการที่จะไปที่สาม กล่องดังนั้นอาร์เรย์บวก 2 1018 00:41:34,860 --> 00:41:37,465 ไปที่นั่นและวาง 3 1019 00:41:37,465 --> 00:41:39,340 ดังนั้นในความทรงจำอะไร จะเกิดขึ้นคือเรา 1020 00:41:39,340 --> 00:41:44,400 จะมี 1, 2 และ 3 สามองค์ประกอบของอาร์เรย์นี้ 1021 00:41:44,400 --> 00:41:46,970 >> เราอาจจะมีการกระทำเช่นนี้โดยใช้ สัญกรณ์วงเล็บเราคุ้นเคย 1022 00:41:46,970 --> 00:41:49,410 ผมแค่อยากพวกคุณจะรู้ว่า ว่าพวกเขามีสิ่งที่เหมือนกัน 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 ตกลงคำถามเกี่ยวกับเรื่องนี้? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 สวย 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 ตอนนี้ผมกำลังจะไปส่ง มันไปยังฮันนาห์ 1029 00:41:59,880 --> 00:42:00,330 >> ฮันนาห์: ยาย Yee หอ 1030 00:42:00,330 --> 00:42:02,246 >> บิงกี้: พูดคุยเกี่ยวกับ สิ่งที่หน่วยความจำและบทความ 1031 00:42:02,246 --> 00:42:06,554 [APPLAUSE] 1032 00:42:06,554 --> 00:42:10,150 >> ฮันนาห์: สวัสดีเย็นดังนั้นเรา จะพูดคุยนิด ๆ หน่อย ๆ 1033 00:42:10,150 --> 00:42:13,090 เกี่ยวกับหน่วยความจำซึ่งเราก็ ที่ใช้ตัวชี้ 1034 00:42:13,090 --> 00:42:16,060 ดังนั้นจึงมีสองส่วนหลักของ หน่วยความจำที่เรากำลังเกี่ยวข้องกับ 1035 00:42:16,060 --> 00:42:18,830 เรามีกองซึ่งเติบโต ขึ้นมาในด้านล่างและกองซึ่ง 1036 00:42:18,830 --> 00:42:20,600 ไปลงมาจากด้านบน 1037 00:42:20,600 --> 00:42:24,690 และกองกำลังที่จะถือ ทั้งหมดของตัวแปรเช่นของเรา 1038 00:42:24,690 --> 00:42:28,860 ดังนั้นแต่ละเรียกฟังก์ชั่นได้รับ กรอบเล็ก ๆ น้อย ๆ ของตัวเองในกอง 1039 00:42:28,860 --> 00:42:32,160 ดังนั้นในขณะที่เกบกล่าวก่อนหน้านี้ถ้าเรา เรียกใช้ฟังก์ชันอีกครั้งและอีกครั้ง 1040 00:42:32,160 --> 00:42:34,180 เรากำลังจะแตก สิ่งที่ขึ้นในกอง 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> และในทำนองเดียวกันกอง ซึ่งเริ่มต้นที่ด้านบน 1043 00:42:38,570 --> 00:42:42,660 จะถือทั้งหมดของหน่วยความจำ ที่เราจัดสรรแบบไดนามิก 1044 00:42:42,660 --> 00:42:45,110 ดังนั้นในขณะที่เราแบบไดนามิก จัดสรรหน่วยความจำ, 1045 00:42:45,110 --> 00:42:47,580 นี้จะลงมาทางด้านล่าง 1046 00:42:47,580 --> 00:42:51,340 สิ่งที่คู่ที่จะตระหนักถึงเมื่อ เรากำลังใช้กองและกอง 1047 00:42:51,340 --> 00:42:55,200 กับสแต็คถ้าเรามีเกินไป many-- สมมุติว่าเรียก recursive, 1048 00:42:55,200 --> 00:42:58,392 และเรากำลังเรียกใช้ฟังก์ชันอีกครั้ง และอีกครั้งและอีกครั้งและอีกครั้ง 1049 00:42:58,392 --> 00:43:00,350 และมันก็ซ้อนขึ้น ซ้อนซ้อนขึ้น 1050 00:43:00,350 --> 00:43:01,570 และมันจะผิดพลาดเป็นกอง 1051 00:43:01,570 --> 00:43:03,040 เรากำลังจะวิ่งออกมาจากหน่วยความจำ 1052 00:43:03,040 --> 00:43:05,100 ที่จะก่อให้เกิด ปัญหาสำหรับคอมพิวเตอร์ 1053 00:43:05,100 --> 00:43:06,770 และที่เรียกว่ากองล้น 1054 00:43:06,770 --> 00:43:09,728 นั่นคือสิ่งที่คุณแน่นอน ควรจะตระหนักถึงและพยายามที่จะหลีกเลี่ยง 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 และกองต้องจำไว้ ไม่ได้ตั้งใจรั่วไหลของหน่วยความจำ 1057 00:43:14,050 --> 00:43:17,950 เวลาที่คุณใช้ malloc ใด ๆ ไม่ได้ ลืมที่จะเป็นอิสระหน่วยความจำที่ 1058 00:43:17,950 --> 00:43:20,040 มิฉะนั้นมันจะเพียงแค่ จะอยู่ในกองเสีย 1059 00:43:20,040 --> 00:43:23,230 และคอมพิวเตอร์จะไม่ทราบว่า มันเป็นอิสระที่จะใช้หน่วยความจำที่ 1060 00:43:23,230 --> 00:43:25,810 ดังนั้นผู้ที่มีสิ่งที่สอง จะต้องระมัดระวังกับเมื่อ 1061 00:43:25,810 --> 00:43:28,580 คุณจัดการกับ กองและกอง 1062 00:43:28,580 --> 00:43:30,412 คำถามใด ๆ กับเรื่องนี้? 1063 00:43:30,412 --> 00:43:31,304 น่ากลัว 1064 00:43:31,304 --> 00:43:31,900 >> ตกลงเย็น 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 ดังนั้นชนิดนี้ได้เช่นเดียวกัน ความคิดที่เป็นกองล้นที่ 1067 00:43:36,810 --> 00:43:39,850 เรากำลังจะเกิน ขอบเขตของสิ่งที่หน่วยความจำ 1068 00:43:39,850 --> 00:43:41,960 ที่เราควรจะสามารถที่จะใช้ 1069 00:43:41,960 --> 00:43:45,077 เพื่อใช้เช่นบัฟเฟอร์หรือคุณ ก็อาจคิดว่ามันเป็นอาเรย์ 1070 00:43:45,077 --> 00:43:47,660 และเรากล่าวว่าตกลงเราจะไป สร้างอาร์เรย์เล็ก ๆ น้อย ๆ นี้ดี 1071 00:43:47,660 --> 00:43:49,140 มันจะเป็นสตริง 1072 00:43:49,140 --> 00:43:50,630 หรือมันจะตัวละครที่จัดเก็บ 1073 00:43:50,630 --> 00:43:51,720 และมันก็แค่ไปทักทาย 1074 00:43:51,720 --> 00:43:52,678 และมันเป็นเรื่องที่ไม่แน่นอน 1075 00:43:52,678 --> 00:43:53,990 นั่นแหล่ะ 1076 00:43:53,990 --> 00:43:58,240 >> แต่ถ้าผมเป็นคนชั่วร้ายและความต้องการที่จะ ทำอะไรไม่ดีกับอาร์เรย์นี้สิ่งที่ 1077 00:43:58,240 --> 00:44:02,310 ฉันจะทำคือการพยายามที่จะเขียน ที่ผ่านมาในตอนท้ายของสตริง 1078 00:44:02,310 --> 00:44:04,490 และเป็นคุณจะเห็นว่า ฉันเขียนไกลพอ 1079 00:44:04,490 --> 00:44:06,980 ที่จริงผมจะมีผลต่อ ที่อยู่ผู้ส่ง 1080 00:44:06,980 --> 00:44:09,530 และถ้าฉันเริ่มต้นที่จะส่งผลกระทบต่อ ที่อยู่ผู้ส่ง, 1081 00:44:09,530 --> 00:44:11,730 ฉันส่งผลกระทบต่อวิธีการที่โปรแกรมจริงทำงาน 1082 00:44:11,730 --> 00:44:15,900 และแทนที่จะกลับมาที่คุณ รู้สตริงมีความสุขเช่นสวัสดีฉัน 1083 00:44:15,900 --> 00:44:19,460 สามารถทำสิ่งที่ไม่ดีเช่นไปที่ ที่อื่นในเครื่องคอมพิวเตอร์ของคุณยังคง 1084 00:44:19,460 --> 00:44:22,146 หน่วยความจำเปลี่ยนมัน สิ่งที่ฉันต้องการที่จะทำ 1085 00:44:22,146 --> 00:44:25,020 เพื่อให้เป็นสิ่งนี้จะมีลักษณะ เป็นถ้าฉันเพียงแค่ชนิดของที่เต็มไปมันขึ้น 1086 00:44:25,020 --> 00:44:27,400 ที่มีค่าขยะแบบสุ่ม ในกรณีนี้เพียงแค่ 1087 00:44:27,400 --> 00:44:30,490 และแล้วเมื่อฉันจริง ได้ไปอยู่หน่วยความจำ, 1088 00:44:30,490 --> 00:44:33,740 ผมเริ่มกรอกด้วยบางสิ่งบางอย่าง ที่ทำในสิ่งที่ผมอยากจะทำ 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 คำถามใด ๆ กับหน่วยความจำล้น? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 น่ากลัวบินขวา ผ่านสิ่งนี้ 1093 00:44:40,730 --> 00:44:43,530 >> ตกลงดังนั้นเราพูดคุยกันมากของ เกี่ยวกับตัวชี้กับเกบ 1094 00:44:43,530 --> 00:44:45,790 เราจะได้รับจริงตัวชี้? 1095 00:44:45,790 --> 00:44:48,070 เราไม่ได้รับที่อยู่ในหน่วยความจำได้อย่างไร? 1096 00:44:48,070 --> 00:44:51,040 ดีที่เราสามารถใช้นี้ดี ฟังก์ชัน malloc โทรซึ่ง 1097 00:44:51,040 --> 00:44:53,370 เป็นไปได้ ชิ้นส่วนเล็ก ๆ ของหน่วยความจำ 1098 00:44:53,370 --> 00:44:55,480 โดยเฉพาะใน กองที่เรากล่าวถึง 1099 00:44:55,480 --> 00:44:59,780 และมันจะทำให้คุณกลับมา ตัวชี้ไปยังที่อยู่ในความทรงจำที่ 1100 00:44:59,780 --> 00:45:01,950 และเหตุผลที่เรา จะต้องให้การ malloc 1101 00:45:01,950 --> 00:45:04,280 เป็นเท่าใดพื้นที่ในหน่วยความจำที่เราต้องการ 1102 00:45:04,280 --> 00:45:06,100 >> ดังนั้นคุณจะเห็นขนาดในไบต์ 1103 00:45:06,100 --> 00:45:08,670 สมมติว่าเช่นหรือ ที่จริงในตัวอย่างนี้ 1104 00:45:08,670 --> 00:45:12,040 เราจัดสรรเพียงพอ พื้นที่สำหรับ 10 จำนวนเต็ม 1105 00:45:12,040 --> 00:45:15,640 ดังนั้นอาจจะเป็นสิ่งที่เรากำลังจะต้องการ ที่จะทำให้ที่นี่เป็น array ของจำนวนเต็ม 10 1106 00:45:15,640 --> 00:45:19,641 ดังนั้นเราจะให้มันขนาดของ ints ซึ่ง เราเรียนรู้ก็คือว่าหลายไบต์? 1107 00:45:19,641 --> 00:45:20,140 นักเรียน: 4 1108 00:45:20,140 --> 00:45:22,920 ฮันนาห์: 4, ที่สวยงามและเรา ต้องการของผู้ที่ 10 ในแถว 1109 00:45:22,920 --> 00:45:28,050 เพื่อให้เรามีพื้นที่เพียงพอที่จะ เก็บทุก 10 จำนวนเต็มในกรณีนี้ 1110 00:45:28,050 --> 00:45:31,290 สิ่งที่สำคัญสุด เวลาที่คุณเรียก malloc, 1111 00:45:31,290 --> 00:45:32,880 คุณต้องตรวจสอบสำหรับ null 1112 00:45:32,880 --> 00:45:37,310 หากคุณไม่ได้ตรวจสอบ null ดี malloc ถ้ามันวิ่งออกไปจากพื้นที่ 1113 00:45:37,310 --> 00:45:40,400 และไม่สามารถให้การใด ๆ หน่วยความจำมากขึ้นก็จะกลับมาเป็นโมฆะ 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 ดังนั้นถ้าคุณไม่ได้ตรวจสอบ malloc อาจจะกลับมาเป็นโมฆะ 1116 00:45:45,630 --> 00:45:51,265 แล้วถ้าเราพยายามที่จะ dereference ชี้โมฆะ 1117 00:45:51,265 --> 00:45:54,960 เรากำลังจะได้รับความผิดส่วน, ซึ่งเราจะพูดถึงในตอนนี้ 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 น่ากลัว 1120 00:45:56,650 --> 00:45:58,300 >> ตกลงคำถามกับ malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 ใช่? 1123 00:46:00,544 --> 00:46:05,460 >> นักเรียน: การตรวจสอบเป็นโมฆะ [ไม่ได้ยิน] ไม่ได้ทำแบบทดสอบได้หรือไม่? 1124 00:46:05,460 --> 00:46:08,100 >> ฮันนาห์: แน่นอนว่าคำถามคือ ไม่ได้ matter-- แบบทดสอบ, 1125 00:46:08,100 --> 00:46:10,420 คุณจะได้รับคะแนนออกหาก คุณไม่ได้ตรวจสอบเป็นโมฆะ? 1126 00:46:10,420 --> 00:46:12,794 ใช่คุณจะได้รับคะแนนออก ถ้าคุณไม่ได้ตรวจสอบเป็นโมฆะ 1127 00:46:12,794 --> 00:46:16,030 ทุกครั้งที่คุณโทร malloc ทั้งใน แบบทดสอบและ psets ของคุณและในชีวิตจริง 1128 00:46:16,030 --> 00:46:17,155 คุณต้องตรวจสอบสำหรับ null 1129 00:46:17,155 --> 00:46:18,330 คำถามที่ดี 1130 00:46:18,330 --> 00:46:19,689 >> GABE: ถ้าผมไม่ได้ฟรีหรือไม่? 1131 00:46:19,689 --> 00:46:21,730 ฮันนาห์: เกบอยากจะรู้ว่า สิ่งที่ถ้าเราทำไม่ฟรี 1132 00:46:21,730 --> 00:46:25,030 จากนั้นเราก็จะมี หน่วยความจำรั่วในกองของเรา 1133 00:46:25,030 --> 00:46:26,140 ใด ๆ ที่คำถามอื่น ๆ ? 1134 00:46:26,140 --> 00:46:27,550 ใช่? 1135 00:46:27,550 --> 00:46:30,120 >> นักเรียน: you-- สามารถไปกว่า หน่วยความจำล้นจริงอย่างรวดเร็วอีกครั้งหรือไม่ 1136 00:46:30,120 --> 00:46:30,530 >> ฮันนาห์: แน่นอน 1137 00:46:30,530 --> 00:46:33,071 คำถามคือเราสามารถไปกว่า หน่วยความจำล้นอย่างรวดเร็วจริงๆ 1138 00:46:33,071 --> 00:46:35,050 ลองกลับไปที่สไลด์ 1139 00:46:35,050 --> 00:46:37,430 ดังนั้นบัฟเฟอร์คุณก็สามารถ คิดว่ามันเป็นอาเรย์ใช่มั้ย? 1140 00:46:37,430 --> 00:46:39,360 คุณมีพื้นที่ในหน่วยความจำบางส่วน 1141 00:46:39,360 --> 00:46:43,580 และเมื่อครั้งแรกที่เราสร้างอาร์เรย์ของเรา เรารู้ว่าอาร์เรย์มีการแก้ไขขนาด 1142 00:46:43,580 --> 00:46:45,470 หรือบัฟเฟอร์ของเรามีขนาดคงที่ 1143 00:46:45,470 --> 00:46:51,360 >> ดังนั้นสมมติว่าในกรณีนี้เรามีเพียงแค่ พื้นที่พอที่จะเขียนสตริงสวัสดี 1144 00:46:51,360 --> 00:46:57,340 ถ้าเราไปในอดีตที่ถูกผูกไว้ถ้าเราไปที่ผ่านมา สิ่งที่อาเรย์ของเราที่เราบอกว่ามันอาจจะค้างไว้ 1145 00:46:57,340 --> 00:46:59,780 เราจริงสามารถเริ่มต้น เขียนในหน่วยความจำ 1146 00:46:59,780 --> 00:47:01,780 ว่าคอมพิวเตอร์ไม่ได้ ต้องการให้เราเขียนลงใน 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 โดยเฉพาะถ้าเราตี สิ่งที่ต้องการผลตอบแทน 1149 00:47:05,580 --> 00:47:08,700 ที่อยู่ของฟังก์ชั่นที่ เช่นชิ้นส่วนอื่น ๆ ของหน่วยความจำ 1150 00:47:08,700 --> 00:47:11,420 เป็นเพียงหนึ่งในของคุณ คอมพิวเตอร์ของคุณสามารถจริง 1151 00:47:11,420 --> 00:47:14,080 เปลี่ยนที่และเริ่มต้นที่จะทำสิ่งชั่วร้าย 1152 00:47:14,080 --> 00:47:15,272 ตอบคำถามของคุณ? 1153 00:47:15,272 --> 00:47:16,230 น่ากลัวอะไรอีกหรือไม่ 1154 00:47:16,230 --> 00:47:17,466 ใช่? 1155 00:47:17,466 --> 00:47:21,948 >> นักเรียนดังนั้นกอง [ไม่ได้ยิน] คุณ กล่าวว่าไปจากด้านล่างขึ้นไป 1156 00:47:21,948 --> 00:47:25,434 ในช่วงที่กองไม่ หน่วยความจำไปจากที่เช่น 1157 00:47:25,434 --> 00:47:27,230 ด้านบนลงที่เกี่ยวข้องกับแต่ละทำลาย? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> ฮันนาห์: วิธีทำ you-- เลื่อนไปปล้นที่นี้ 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> Rob: มันจะเจริญเติบโตได้ในที่เดียวกัน ทิศทางเป็นกองโต 1162 00:47:38,213 --> 00:47:38,712 ฮันนาห์: OK 1163 00:47:38,712 --> 00:47:40,967 Rob: ผมได้รับสับสน 1164 00:47:40,967 --> 00:47:42,331 นี้จะเป็นสิ่งที่เป็นนามธรรม 1165 00:47:42,331 --> 00:47:42,831 ฮันนาห์: OK 1166 00:47:42,831 --> 00:47:44,000 ปล้น: นี่คือที่ถูกต้อง 1167 00:47:44,000 --> 00:47:49,420 ดังนั้นหากสแต็คที่มีการเจริญเติบโต ขึ้นแล้ว generally-- มัน 1168 00:47:49,420 --> 00:47:52,380 ไม่จำเป็นต้องเป็นเช่นนี้ แต่คุณสามารถประกาศ int x 1169 00:47:52,380 --> 00:47:54,120 จากนั้นคุณประกาศ int และ 1170 00:47:54,120 --> 00:47:57,300 จากนั้น int x โดยทั่วไปจะมี ลดลงในสแต็คกว่า int และ 1171 00:47:57,300 --> 00:47:59,300 แต่นั่นเป็นเพียงความเป็นจริง 1172 00:47:59,300 --> 00:48:02,410 ที่ไม่ชอบสิ่งที่เมล็ดพันธุ์ที่มีความสำคัญ 1173 00:48:02,410 --> 00:48:06,800 >> ปล้นดังนั้นคำถามอีกครั้งเป็นเพียง สิ่งที่เกิดขึ้นแต่ละเฟรมสร้างขึ้น 1174 00:48:06,800 --> 00:48:08,960 ดังนั้นการทำงานของแต่ละคนได้รับ ชิ้นเล็ก ๆ ของสแต็ค 1175 00:48:08,960 --> 00:48:13,030 และเป็นคุณขึ้นไปภายใน ชิ้นส่วนเล็ก ๆ น้อย ๆ อยู่ในกรอบที่ 1176 00:48:13,030 --> 00:48:16,710 เราจะบอกว่าตัวแปร ภายในกรอบที่ยังเลื่อนขึ้น 1177 00:48:16,710 --> 00:48:17,473 มีคำถาม? 1178 00:48:17,473 --> 00:48:18,688 >> ปล้น: เพียงแค่จะเป็นไมค์ 1179 00:48:18,688 --> 00:48:19,396 ฮันนาห์: โอ้ใช่ 1180 00:48:19,396 --> 00:48:20,440 Rob: ผมจะพูดเป็นคุณ 1181 00:48:20,440 --> 00:48:21,410 ฮันนาห์: โอ้ใช่ตกลง 1182 00:48:21,410 --> 00:48:24,150 Rob: ข้อยกเว้นคือ สำหรับอาร์เรย์และ structs, 1183 00:48:24,150 --> 00:48:27,470 ที่อาร์เรย์ที่ต่ำกว่า ดัชนีในอาร์เรย์ 1184 00:48:27,470 --> 00:48:29,930 และใน structs ที่สูงขึ้น ข้อมูลใน structs 1185 00:48:29,930 --> 00:48:35,040 ได้รับการรับรองเป็นที่อยู่ต่ำกว่า กว่ามูลค่าต่อมาในอาร์เรย์ 1186 00:48:35,040 --> 00:48:36,720 ดังนั้นผู้ที่ได้รับการรับรอง 1187 00:48:36,720 --> 00:48:40,310 แต่ตัวแปรใด ๆ ภายใน เช่น int x และ int และภายในฟังก์ชัน 1188 00:48:40,310 --> 00:48:43,030 ไม่มีความสัมพันธ์ที่จำเป็น ระหว่างที่อยู่ของพวกเขา 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 ฮันนาห์: คำถามมากกว่าที่นี่อีก? 1191 00:48:46,340 --> 00:48:51,620 นักเรียนดังนั้นในบัฟเฟอร์ การไหลเพียง Buffer Overflow 1192 00:48:51,620 --> 00:48:54,980 เพียง แต่เกิดขึ้นเมื่อคุณ ได้เช่นเดียวกับที่ได้รับมอบหมาย 1193 00:48:54,980 --> 00:49:01,056 ปริมาณของอาร์เรย์ นั้นเป็นมากขึ้น? 1194 00:49:01,056 --> 00:49:03,230 เหมือนได้ไหม 1195 00:49:03,230 --> 00:49:05,435 ดังนั้นหากคุณกำลังถามหา อะไรบางอย่างจาก user-- 1196 00:49:05,435 --> 00:49:06,018 >> ฮันนาห์: MM-HM 1197 00:49:06,018 --> 00:49:08,600 นักเรียน: พวกเขาสามารถบังคับ ให้คุณได้อะไรกลับ 1198 00:49:08,600 --> 00:49:11,777 ที่มีขนาดใหญ่กว่าสิ่งที่ คุณได้รับการจัดสรรสำหรับพวกเขา? 1199 00:49:11,777 --> 00:49:13,610 ฮันนาห์: แน่นอนดังนั้น คำถามก็คือโดยทั่วไป 1200 00:49:13,610 --> 00:49:16,217 ผู้ใช้สามารถให้คุณ มากกว่าที่คุณขอ? 1201 00:49:16,217 --> 00:49:16,800 นักเรียน: ใช่ 1202 00:49:16,800 --> 00:49:18,480 ฮันนาห์: ดีคุณสามารถป้องกันไม่ให้ ผู้ใช้จากการทำที่ 1203 00:49:18,480 --> 00:49:21,350 คุณอาจจะบอกว่าโดยเฉพาะไม่ได้ ให้ฉันมากกว่า x จำนวนโดยไบต์ 1204 00:49:21,350 --> 00:49:24,330 ฉันได้รับเพียงคุณเท่านั้นที่ห้องพักสำหรับ x จำนวน ไบต์, x จำนวนตัวอักษร 1205 00:49:24,330 --> 00:49:25,700 นั่นคือสิ่งที่คุณต้องการเพื่อป้องกันไม่ให้ 1206 00:49:25,700 --> 00:49:26,199 ใช่? 1207 00:49:26,199 --> 00:49:30,270 ความแตกต่างระหว่างสิ่งที่ กองล้นและหน่วยความจำล้น? 1208 00:49:30,270 --> 00:49:32,140 >> ฮันนาห์: OK เพื่อสแต็ค overflow-- โอ้สิ่งที่ 1209 00:49:32,140 --> 00:49:34,790 ความแตกต่างระหว่างสแต็ค ล้นและหน่วยความจำล้น? 1210 00:49:34,790 --> 00:49:37,581 ดังนั้นเราจึงต้องการที่จะคิดแตกล้น ที่เกิดขึ้นเมื่อเรากำลังจริง 1211 00:49:37,581 --> 00:49:39,530 ซ้อนเหล่านี้เรียกฟังก์ชัน 1212 00:49:39,530 --> 00:49:42,991 สมมติว่าคุณมีฟังก์ชันเวียนเกิด เพราะเรารู้ว่าทุกครั้งที่คุณ 1213 00:49:42,991 --> 00:49:45,240 เรียกใช้ฟังก์ชันก็จะได้รับ กรอบของตัวเองในกอง 1214 00:49:45,240 --> 00:49:47,950 >> ดังนั้นเรากองขึ้นสูงเกินไปและ จากนั้นเราเริ่มที่จะล้น 1215 00:49:47,950 --> 00:49:50,530 และเราจะใช้หน่วยความจำมากเกินไปและ เราไม่ได้ออกจากที่ใดก็ได้ 1216 00:49:50,530 --> 00:49:51,590 เราได้รับข้อผิดพลาดที่ 1217 00:49:51,590 --> 00:49:53,930 >> บัฟเฟอร์ล้นอยู่ในโปรแกรม 1218 00:49:53,930 --> 00:49:57,180 เราต้องการอาจจะไม่จำเป็นต้องมี วิ่งออกมาจากหน่วยความจำในทางเดียวกัน 1219 00:49:57,180 --> 00:50:00,080 ที่เราอาจจะถ้าเรากำลังซ้อน โทรปลุกฟังก์ชั่นมากมาย 1220 00:50:00,080 --> 00:50:04,540 แต่เราเขียนผ่านมาหน่วยความจำ ที่เรารู้ว่าเราสามารถใช้ 1221 00:50:04,540 --> 00:50:06,170 และที่ช่วยให้เราสามารถทำสิ่งชั่วร้าย 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 ใช่? 1224 00:50:08,560 --> 00:50:10,950 >> ปล้น: ใช่คุณอาจต้องการ เพียงแค่ทำซ้ำนี้ 1225 00:50:10,950 --> 00:50:12,699 แต่คุณยังสามารถคิด ของกองล้น 1226 00:50:12,699 --> 00:50:15,374 เหมือนชนิดที่ระบุ ของหน่วยความจำล้น 1227 00:50:15,374 --> 00:50:17,665 หรือคุณเพียงแค่คิดว่าของคุณ สแต็คเป็นกันชนใหญ่จริงๆ 1228 00:50:17,665 --> 00:50:20,724 จากนั้นเมื่อคุณล้นคุณสแต็ค, มันเป็นชนิดเช่นหน่วยความจำล้น 1229 00:50:20,724 --> 00:50:23,390 แต่กองล้นเป็นเพียง คำเฉพาะที่ใช้ในการสแต็ค 1230 00:50:23,390 --> 00:50:24,310 ตัวเองล้น 1231 00:50:24,310 --> 00:50:27,500 >> ฮันนาห์: ขวาเพื่อที่จะ ทำซ้ำสำหรับวิดีโอ 1232 00:50:27,500 --> 00:50:31,756 คุณสามารถคิดแตกล้นเป็น ประเภทเฉพาะของหน่วยความจำล้น 1233 00:50:31,756 --> 00:50:33,040 เย็น? 1234 00:50:33,040 --> 00:50:34,562 คำถามใด ๆ เพิ่มเติมก่อนที่เราจะไป? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 น่ากลัว 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> ตกลงเย็นดังนั้นขอพูดคุยเกี่ยวกับ บางข้อความผิดพลาดที่พบบ่อย 1239 00:50:39,727 --> 00:50:42,060 นี่คือสิ่งที่มี แสดงขึ้นในหลายแบบทดสอบ, 1240 00:50:42,060 --> 00:50:44,740 บางสิ่งบางอย่างเพื่อให้คุ้มค่า การมองที่สอง 1241 00:50:44,740 --> 00:50:46,860 ฉันแน่ใจว่าคุณได้พบ อย่างน้อยบางส่วนของเหล่านี้ 1242 00:50:46,860 --> 00:50:48,690 ในขณะที่คุณกำลังทำชุดปัญหาของคุณ 1243 00:50:48,690 --> 00:50:50,980 เพื่อให้แน่ใจว่าคุณสามารถพูดคุย เกี่ยวกับพวกเขาในการตอบคำถาม 1244 00:50:50,980 --> 00:50:52,990 >> ดังนั้นคนแรกคือ ความผิดส่วน 1245 00:50:52,990 --> 00:50:55,250 และนั่นคือสิ่งที่เราได้ตลอดเวลา พยายามที่จะเข้าถึงหน่วยความจำ 1246 00:50:55,250 --> 00:50:57,130 ว่าเราไม่ได้รับอนุญาตให้เข้าถึง 1247 00:50:57,130 --> 00:51:00,280 เพื่อให้คุณได้เห็น migh นี้ ตัวอย่างเช่นในการแหกคุก 1248 00:51:00,280 --> 00:51:03,390 หากตร​​วจพบการปะทะกัน กลับ null และจากนั้นคุณ 1249 00:51:03,390 --> 00:51:05,500 พยายามที่จะทำอะไรบางอย่าง ด้วยค่า null ที่ 1250 00:51:05,500 --> 00:51:08,147 คอมพิวเตอร์จะให้ คุณผิดส่วน 1251 00:51:08,147 --> 00:51:10,730 ดังนั้นหนึ่งสิ่งสำคัญที่ต้อง ทำเพื่อที่จะพยายามที่จะหลีกเลี่ยงปัญหานี้ 1252 00:51:10,730 --> 00:51:12,000 อยู่เสมอตรวจสอบ null 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> คุณอาจจะยังได้เห็น ประกาศโดยนัยของการทำงาน 1255 00:51:16,180 --> 00:51:18,370 ดังนั้นนี่คือสิ่งที่เกิดขึ้น เมื่อแอลลิสันแสดงให้เห็นว่าคุณ 1256 00:51:18,370 --> 00:51:20,150 วิธีการที่เราทำต้นแบบใช่มั้ย? 1257 00:51:20,150 --> 00:51:23,440 ดังนั้นสมมติว่าเรามีบาง ฟังก์ชันที่เรากำหนด 1258 00:51:23,440 --> 00:51:24,440 สมมติว่าก้อน 1259 00:51:24,440 --> 00:51:27,120 และที่ไปที่ด้านล่าง การทำงานของเราภายใต้หลัก 1260 00:51:27,120 --> 00:51:35,205 >> ถ้าเราลืมที่จะบอกเกี่ยวกับคอมพิวเตอร์ ก้อนเมื่อหลักพยายามที่จะเรียกก้อน 1261 00:51:35,205 --> 00:51:36,830 คอมพิวเตอร์จะเป็นเหมือนโอ้เอ้ย 1262 00:51:36,830 --> 00:51:38,300 ฉันมีความคิดสิ่งที่หมายถึงไม่มี 1263 00:51:38,300 --> 00:51:39,760 ผมไม่ทราบว่าจะทำอย่างไรที่นี่ 1264 00:51:39,760 --> 00:51:41,594 ดังนั้นต้นแบบกล่าวว่าไม่ต้องกังวล 1265 00:51:41,594 --> 00:51:42,510 ฉันจะบอกคุณ 1266 00:51:42,510 --> 00:51:43,132 >> มันจะมา 1267 00:51:43,132 --> 00:51:43,840 อย่าตะโกนมาที่ผม 1268 00:51:43,840 --> 00:51:46,697 อย่าให้ฉันโดยปริยาย การประกาศของฟังก์ชั่น 1269 00:51:46,697 --> 00:51:49,280 ดังนั้นถ้าคุณได้รับข้อผิดพลาดนี้อย่างใดอย่างหนึ่ง สิ่งที่คุณจะต้องการที่จะทำ 1270 00:51:49,280 --> 00:51:50,821 คือทำให้แน่ใจว่าคุณมีต้นแบบของคุณ 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 OK? 1273 00:51:53,230 --> 00:51:55,680 >> และสุดท้าย แต่ไม่ท้ายสุด ระบุไม่ได้ประกาศ 1274 00:51:55,680 --> 00:52:00,570 เป็นหลักเมื่อคุณพยายามที่จะใช้ ตัวแปรที่คุณยังไม่ได้ประกาศ 1275 00:52:00,570 --> 00:52:03,449 ดังนั้นทั้งหมดในทันทีที่คุณเริ่มต้น พูดเช่น n บวกบวก 1276 00:52:03,449 --> 00:52:04,740 และคอมพิวเตอร์กล่าวว่าสิ่งที่ n? 1277 00:52:04,740 --> 00:52:06,660 คุณไม่เคยบอกผมว่าเป็นสิ่งที่ n 1278 00:52:06,660 --> 00:52:10,930 >> ดังนั้นสิ่งหนึ่งที่คุณต้องให้แน่ใจว่าคุณ ไม่เป็นบอกคอมพิวเตอร์สิ่งที่ n คือ 1279 00:52:10,930 --> 00:52:13,320 ดังนั้นสำหรับตัวอย่างเช่น n อาจเป็นจำนวนเต็ม 1280 00:52:13,320 --> 00:52:14,999 แล้วคุณจะหลีกเลี่ยงข้อผิดพลาดนี้ 1281 00:52:14,999 --> 00:52:16,290 คำถามใด ๆ เกี่ยวกับข้อผิดพลาดที่พบบ่อย? 1282 00:52:16,290 --> 00:52:17,260 ใช่? 1283 00:52:17,260 --> 00:52:19,344 >> นักเรียน: สำหรับปริยาย การประกาศของฟังก์ชั่น 1284 00:52:19,344 --> 00:52:22,343 มันอาจจะยังเป็นไปได้ว่าคุณมองข้ามอย่างใดอย่างหนึ่ง ของห้องสมุดที่คุณควร 1285 00:52:22,343 --> 00:52:24,400 ที่จะรวมมากกว่าเดิม? 1286 00:52:24,400 --> 00:52:26,359 >> ฮันนาห์: ขวาดังนั้น คำถามคือคุณสามารถ 1287 00:52:26,359 --> 00:52:28,650 ยังได้รับข้อผิดพลาดนี้ถ้าคุณ ลืมที่จะให้บริการ ได้แก่ ห้องสมุด 1288 00:52:28,650 --> 00:52:29,085 >> นักเรียน: ใช่ 1289 00:52:29,085 --> 00:52:30,876 >> ฮันนาห์: แน่นอน เพราะในทางเดียวกัน 1290 00:52:30,876 --> 00:52:33,540 ว่าเราต้องการที่จะนำต้นแบบของเรา ก่อนที่จะมีฟังก์ชั่นหลัก 1291 00:52:33,540 --> 00:52:37,717 ถ้าเรามีห้องสมุดที่จะไป เป็นหลักรวมถึงต้นแบบ, 1292 00:52:37,717 --> 00:52:39,425 รวมถึงคำนิยาม ฟังก์ชั่น 1293 00:52:39,425 --> 00:52:40,585 คำถามที่ดี 1294 00:52:40,585 --> 00:52:43,230 >> นักเรียน: สำหรับการแบ่งส่วน ความผิดจะว่ายัง 1295 00:52:43,230 --> 00:52:47,350 เกิดขึ้นถ้าเราเช่นพยายาม ในการเข้าถึงตัวแปร 1296 00:52:47,350 --> 00:52:51,947 เหมือนที่แตกต่างกัน [ไม่ได้ยิน] กว่าที่จะมีการประกาศอะไรบ้าง? 1297 00:52:51,947 --> 00:52:54,030 ฮันนาห์: แน่นอนดังนั้นเราจะ ได้รับความผิดส่วน 1298 00:52:54,030 --> 00:52:56,270 ถ้าเราพยายามที่จะเข้าถึง ตัวแปรออกจากขอบเขต? 1299 00:52:56,270 --> 00:52:57,104 นั่นคือคำถาม? 1300 00:52:57,104 --> 00:52:57,645 นักเรียน: ใช่ 1301 00:52:57,645 --> 00:52:58,430 ฮันนาห์: Beautiful 1302 00:52:58,430 --> 00:53:01,840 ดังนั้นอาจจะเป็นคุณกำลังจะได้รับ ข้อผิดพลาดที่ระบุไม่ได้ประกาศแทน 1303 00:53:01,840 --> 00:53:04,006 จึงเป็นเพียงจะบอกว่า ผมไม่ทราบว่ามันคืออะไร 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 เย็นอะไรอีกหรือไม่ 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 ใช่ตกลงสวยงาม 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> ทั้งหมด righty ดังนั้นการเรียกซ้ำ 1310 00:53:12,400 --> 00:53:15,160 ดังนั้นที่ผมกล่าวถึงสองสามครั้ง ที่เราอาจได้รับกองล้น 1311 00:53:15,160 --> 00:53:17,919 เพราะเรากำลังเรียกร้องของเรา ฟังก์ชั่นซ้ำหลายครั้ง 1312 00:53:17,919 --> 00:53:20,210 เราได้รับทุกกองเหล่านี้ เฟรม, blah, blah, blah 1313 00:53:20,210 --> 00:53:22,420 แม้สิ่งที่เป็นฟังก์ชัน recursive? 1314 00:53:22,420 --> 00:53:25,680 ดีฟังก์ชัน recursive เป็น ฟังก์ชั่นที่เรียกตัวเองใด ๆ 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> บางสิ่งบางอย่างที่จะตระหนักถึงเมื่อคุณ มีการดำเนินการการทำงานซ้ำ 1317 00:53:30,160 --> 00:53:31,940 อย่าลืมที่จะรวมถึงกรณีฐาน 1318 00:53:31,940 --> 00:53:34,010 กรณีฐานเป็น จุดที่เราจบ 1319 00:53:34,010 --> 00:53:38,740 ดังนั้นสำหรับตัวอย่างเช่นถ้าเรากำลังเข้ารหัส พูด, Fibonacci ซ้ำ 1320 00:53:38,740 --> 00:53:43,210 เราต้องการที่จะให้แน่ใจว่าเมื่อเราได้รับ ไปที่ 0 หรือหมายเลข Fibonacci แรก 1321 00:53:43,210 --> 00:53:46,220 เลขสองตัวนั้นมีกรณีเหล่านี้ เพราะผู้ไม่ได้ขึ้นอยู่ 1322 00:53:46,220 --> 00:53:47,700 ในสิ่งที่มาก่อน 1323 00:53:47,700 --> 00:53:48,990 ผู้ที่มีค่าของพวกเขาเอง 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> ข้อดีบางอย่างที่จะเรียกซ้ำซึ่งเป็น คำถามที่เราเคยเห็นในอดีตแบบทดสอบ 1326 00:53:55,320 --> 00:53:57,930 พวกเขาสามารถนำไปสู่​​การมากขึ้น กระชับรหัสที่สง่างาม 1327 00:53:57,930 --> 00:54:00,510 และมากของฟังก์ชั่น, จำนวนมากของขั้นตอนวิธีที่แตกต่างกัน, 1328 00:54:00,510 --> 00:54:02,350 จริงยืมตัวให้เรียกซ้ำ 1329 00:54:02,350 --> 00:54:05,510 ความหมายของพวกเขาอาจจะ เวียนเกิดในตัวของมันเอง 1330 00:54:05,510 --> 00:54:06,980 ดังนั้นฟีโบนักชีเป็นหนึ่ง 1331 00:54:06,980 --> 00:54:07,860 เป็นหนึ่งในปัจจัย 1332 00:54:07,860 --> 00:54:10,480 ผสานการจัดเรียงคือ one-- ทั้งหมด สิ่งที่คุณสามารถมองไปที่ 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 ตกลงคำถามหรือข้อสงสัย 1335 00:54:13,460 --> 00:54:13,960 ใช่? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> นักเรียน: เป็นกรณีมุม คล้ายกับกรณีฐานหรือไม่? 1338 00:54:19,612 --> 00:54:22,590 หรือเป็นที่อื่น ๆ บางส่วน ชนิดของ [ไม่ได้ยิน] 1339 00:54:22,590 --> 00:54:25,170 >> ฮันนาห์: แน่นอนดังนั้น กรณีที่เป็นมุม any-- ดังนั้น 1340 00:54:25,170 --> 00:54:27,580 เป็นกรณีที่มุมเดียวกับกรณีฐาน? 1341 00:54:27,580 --> 00:54:32,825 กรณีมุมเป็นสิ่งที่คุณ รหัสอาจทำงานแตกต่างกันเล็ก ๆ น้อย ๆ 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 กรณีฐานที่เกี่ยวข้องการจัดเรียงของใน ว่าพวกเขากำลังเช่นกรณีโดยเฉพาะอย่างยิ่ง 1344 00:54:38,610 --> 00:54:40,240 ที่คุณต้องการที่จะมองไปที่ 1345 00:54:40,240 --> 00:54:43,240 แต่ความคิดของกรณีฐานที่เป็นที่ คุณต้องการฟังก์ชันเวียนเกิดของคุณ 1346 00:54:43,240 --> 00:54:44,870 ที่จะหยุดในบางจุด 1347 00:54:44,870 --> 00:54:46,490 มันไม่สามารถให้เรียกตัวเองตลอดไป 1348 00:54:46,490 --> 00:54:47,781 มันต้องการที่จะหยุดในบางจุด 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ปล้น: ใช่บ่อยกรณีฐานของคุณ อาจจะเป็นตัวอย่างของฐานมุม 1351 00:54:53,460 --> 00:54:55,876 >> ฮันนาห์: ขวาเย็นอะไร? 1352 00:54:55,876 --> 00:54:58,732 >> นักเรียน: คุณช่วยอธิบาย ฐานนิด ๆ หน่อย ๆ เพิ่มเติมหรือไม่ 1353 00:54:58,732 --> 00:55:01,600 ฉันไม่เข้าใจ [ไม่ได้ยิน] กรณีฐาน 1354 00:55:01,600 --> 00:55:02,676 >> ฮันนาห์: ของกรณีฐาน? 1355 00:55:02,676 --> 00:55:03,140 >> นักเรียน: กรณีฐานใช่ 1356 00:55:03,140 --> 00:55:03,770 >> ฮันนาห์: Oh yeah นั่นเอง 1357 00:55:03,770 --> 00:55:04,270 ลองมาดูกัน 1358 00:55:04,270 --> 00:55:05,480 เรามีชอล์กกว่าที่นี่? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 ใช่ที่เราทำ 1361 00:55:07,320 --> 00:55:09,530 ตกลงอย่างรวดเร็วจริงๆผมจะ พยายามที่จะเขียนขนาดใหญ่พอ 1362 00:55:09,530 --> 00:55:11,320 เพื่อให้คุณสามารถเห็นบนหน้าจอ 1363 00:55:11,320 --> 00:55:13,490 เรามาพูดถึงจริงๆ ได้อย่างรวดเร็วฟีโบนักชี 1364 00:55:13,490 --> 00:55:15,550 ดังนั้นผมจะให้คุณลำดับฟีโบนักชี 1365 00:55:15,550 --> 00:55:17,090 คุณสามารถดูคำนิยาม 1366 00:55:17,090 --> 00:55:26,050 >> โดยพื้นฐานแล้วจำนวนในแต่ละลำดับ คือผลรวมของตัวเลขสองก่อนหน้านี้ 1367 00:55:26,050 --> 00:55:29,720 ตกลงดังนั้นวิธีการที่ฉัน เพียงแค่อธิบาย Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 คุณสามารถได้ยินเสียงเรียกซ้ำตัวเองใช่มั้ย? 1369 00:55:31,530 --> 00:55:35,280 เมื่อฉันกล่าวว่าจำนวนแต่ละคนเป็น ผลรวมของตัวเลขสองก่อนหน้านี้ 1370 00:55:35,280 --> 00:55:36,420 เราอาจกล่าวได้ตกลง 1371 00:55:36,420 --> 00:55:38,570 ดีที่ n ฟีโบนักชี เลขจึงขอ 1372 00:55:38,570 --> 00:55:42,260 บอกว่าเรามีฟังก์ชั่นนี้ เรียกว่าตอแหล fib-- ของ n 1373 00:55:42,260 --> 00:55:48,260 เป็นไปได้เท่ากับปด ของ n ลบ 1 บวกขอโทษ 1374 00:55:48,260 --> 00:55:51,240 เราจะไปยังบรรทัดถัดไป กว่าตอแหลตรงนี้ของ n ลบ 2 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> ตกลงดังนั้นนี้ใช้งานได้ดีถ้าคุณอยู่ กำลังมองหาที่เช่นศูนย์หนึ่ง 1377 00:55:56,790 --> 00:55:59,410 สองสามสี่ จำนวนฟีโบนักชีที่ห้า 1378 00:55:59,410 --> 00:56:03,561 ที่คุณสามารถพูดได้ว่า 5 เท่ากับ 2 บวก 3 1379 00:56:03,561 --> 00:56:05,060 แต่สิ่งที่ถ้าคุณอยู่ที่จุดเริ่มต้น? 1380 00:56:05,060 --> 00:56:07,184 สิ่งที่ถ้าคุณเพียงแค่กดปุ่ม เหล่านี้ก่อนสองค่า? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> ที่จะได้รับ 1 นี้คุณไม่สามารถ กล่าวเพิ่มก่อนหน้านี้สอง 1383 00:56:11,330 --> 00:56:13,930 เพราะเป็นศูนย์ที่ and-- ผมไม่ทราบ 1384 00:56:13,930 --> 00:56:15,390 ดังนั้นในบางจุดที่เราต้องการที่จะหยุด 1385 00:56:15,390 --> 00:56:21,250 ในบางจุดที่เราต้องการจะบอกว่าสิ่งเหล่านี้ สองก็มีความหมายของตัวเอง 1386 00:56:21,250 --> 00:56:23,890 จำนวน 0 Fibonacci เป็น 0 1387 00:56:23,890 --> 00:56:26,115 และจำนวนฟีโบนักชีแรกคือ 1 1388 00:56:26,115 --> 00:56:34,120 >> ดังนั้นวิธีที่ฉันอาจรหัสนี้ผม จะบอกว่าถ้า n มีค่าน้อยกว่าสองคน 1389 00:56:34,120 --> 00:56:35,130 แล้วก็กลับมา n 1390 00:56:35,130 --> 00:56:36,494 และนั่นจะเป็นกรณีฐานของฉัน 1391 00:56:36,494 --> 00:56:38,660 นั่นเป็นวิธีที่ฉันรู้ที่จะหยุด ด้วยฟังก์ชั่นแบบทั่วถึง 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 ที่ชัดเจน? 1394 00:56:41,410 --> 00:56:41,940 น่ากลัว 1395 00:56:41,940 --> 00:56:43,260 สิ่งอื่นในการเรียกซ้ำ? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 สวยงาม 1398 00:56:45,930 --> 00:56:48,750 >> ขออย่างรวดเร็วพูดคุยเกี่ยวกับ การค้นหาและเวลาทำงานการจัดเรียง 1399 00:56:48,750 --> 00:56:52,660 แล้วฉันจะให้ Davin บาง เวลาที่จะพูดคุยเกี่ยวกับการเขียนโปรแกรมตัวอย่าง 1400 00:56:52,660 --> 00:56:56,490 ดังนั้นนี่คือการค้นหาหลักและ ทุกประเภทที่คุณควรรู้เกี่ยวกับ 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- ฉันไม่สามารถรับประกัน, เพราะผมยังไม่เคยเห็น quiz-- 1402 00:56:59,500 --> 00:57:01,940 แต่เรื่องนี้ขึ้นมาทดสอบ หลังจากทดสอบหลังจากเลิก 1403 00:57:01,940 --> 00:57:04,050 ดังนั้นแน่นอนใช้แผนภูมินี้ 1404 00:57:04,050 --> 00:57:05,682 เช่นใช้แผนภูมินี้ 1405 00:57:05,682 --> 00:57:06,890 วางลงบนแผ่นโกงของคุณ 1406 00:57:06,890 --> 00:57:07,931 คุณจะเป็นคนที่มีความสุข 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> นี้บอกเราครั้งการทำงานของแต่ละ ของการจัดเรียงและค้นหาเหล​​่านี้ขั้นตอนวิธี 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 ดังนั้นการค้นหาเชิงเส้นที่คุณสามารถดูการทำงาน เวลาเดียวกันที่มีการค้นหาไบนารี 1411 00:57:18,850 --> 00:57:21,490 ไปกว่าสิ่งที่กลไกเหล่านี้ ทำความคิดทั่วไป 1412 00:57:21,490 --> 00:57:24,220 ดู pseudocode บาง หากไม่ได้รับรหัสตัวเอง 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> คุณจะเห็นการจัดเรียงฟองที่มีบน ผูกพันในกรณีที่เลวร้ายที่สุดของ n ยกกำลัง 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 ดังนั้นถ้าอาร์เรย์ของเราได้อย่างสมบูรณ์ ย้อนกลับไปก่อนที่เราต้องการในการจัดเรียง, 1417 00:57:34,680 --> 00:57:37,090 เราจะบอกว่านั่นคือ จะใช้ขั้นตอนที่ยกกำลัง n 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 แต่ในกรณีที่ดีที่สุดเพื่อให้ ขอบเขตล่างสำหรับกรณีที่ดีที่สุด 1420 00:57:41,730 --> 00:57:44,300 เป็นไปได้ว่าจะเป็น แล้วแยกอย่างสมบูรณ์แบบ 1421 00:57:44,300 --> 00:57:46,671 แล้วสิ่งที่เราต้องทำคือ ตรวจสอบว่ามีการแยก 1422 00:57:46,671 --> 00:57:47,921 มีคำถามที่นี่? 1423 00:57:47,921 --> 00:57:49,805 >> นักเรียน: เมื่อจะ คุณต้องการที่จะใช้การจัดเรียง? 1424 00:57:49,805 --> 00:57:50,747 การจัดเรียง 1425 00:57:50,747 --> 00:57:52,160 ฉันอยากรู้เพียง 1426 00:57:52,160 --> 00:57:53,510 >> ฮันนาห์: เมื่อคุณจะ ต้องการที่จะใช้การจัดเรียงตัวเลือก? 1427 00:57:53,510 --> 00:57:54,010 หนึ่งนี้? 1428 00:57:54,010 --> 00:57:55,705 หนึ่งที่ยกกำลัง n ในทั้งสองกรณี? 1429 00:57:55,705 --> 00:57:56,860 >> นักเรียน: [ไม่ได้ยิน] 1430 00:57:56,860 --> 00:57:58,151 >> ฮันนาห์: แล้วมันแตกต่างกันมาก 1431 00:57:58,151 --> 00:58:00,760 หากคุณมีความเฉพาะเจาะจง ข้อกำหนดสำหรับโปรแกรมของคุณ 1432 00:58:00,760 --> 00:58:04,887 สิ่งที่ต้องการเช่นถ้าเราเพียงแค่กล่าวว่า ใช้ sorry-- search-- 1433 00:58:04,887 --> 00:58:06,720 ดำเนินการจัดเรียงที่คุณจะ อาจต้องการที่จะไป 1434 00:58:06,720 --> 00:58:09,950 สำหรับหนึ่งในคนที่ มีกรณีที่ดีที่สุดของ n, 1435 00:58:09,950 --> 00:58:12,410 หรือผูกไว้ที่ต่ำกว่าในกรณีที่ดีที่สุดของ n 1436 00:58:12,410 --> 00:58:14,790 แต่อาจจะมี บางสิ่งที่ต้องการพูด 1437 00:58:14,790 --> 00:58:16,767 แลกเปลี่ยนจริงๆ ราคาแพงด้วยเหตุผลบางอย่าง 1438 00:58:16,767 --> 00:58:18,850 แล้วคุณต้องการจะทำ การจัดเรียงฟองเพราะคุณ 1439 00:58:18,850 --> 00:58:20,641 ต้องทำมากมาย แลกเปลี่ยน, สิ่งที่ต้องการที่ 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 ใด ๆ ใช่ other--? 1442 00:58:23,098 --> 00:58:25,488 >> นักเรียน: มันจะเป็น [ไม่ได้ยิน] ที่จะบอกว่า [ไม่ได้ยิน] 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 ฮันนาห์: นั่นเป็นสิ่งหนึ่งที่ ที่จะบอกคุณ 1445 00:58:31,910 --> 00:58:33,670 ถ้าคุณกำลังมองหาที่การดำเนินการ 1446 00:58:33,670 --> 00:58:35,850 วิธีที่ฉันจะจริง คิดเกี่ยวกับเหตุผลที่มันเป็น n 1447 00:58:35,850 --> 00:58:40,840 กำลังสองคือการที่เราต้องทำงาน ผ่านแถวของเรามีความยาว n, 1448 00:58:40,840 --> 00:58:42,765 ทำให้เวลาที่มากที่สุด, n แลกเปลี่ยนกัน 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 และเราจะต้องทำกระบวนการ n ครั้งนี้ 1451 00:58:46,220 --> 00:58:51,130 >> ดังนั้นเมื่อคุณจะต้องทำมากที่สุด, n แลกเปลี่ยนและ n ไหลผ่านอาร์เรย์ 1452 00:58:51,130 --> 00:58:52,380 มีจะได้รับการยกกำลัง n 1453 00:58:52,380 --> 00:58:55,480 แต่ใช่นี้จะถูกเปิดเผย ผ่านคู่นี้สำหรับห่วง 1454 00:58:55,480 --> 00:58:59,428 เป็นคำถามที่ asked-- หรือ ซ้อนกันสำหรับวงผมควรจะพูดว่า 1455 00:58:59,428 --> 00:59:00,890 OK? 1456 00:59:00,890 --> 00:59:03,375 >> แล้วรวมการจัดเรียงที่ คือการจัดเรียงที่เร็วที่สุดที่เราตอนนี้ 1457 00:59:03,375 --> 00:59:07,560 หรือว่าเราได้ครอบคลุมใน CS50, รู้ว่าขั้นตอนวิธีหลักคือ 1458 00:59:07,560 --> 00:59:10,150 ความคิดของการทำลายลงในนี้ ชิ้นที่เรียงลำดับแล้ว 1459 00:59:10,150 --> 00:59:11,980 การควบรวมกิจการเข้าด้วยกันบิตแยกเหล่านี้ 1460 00:59:11,980 --> 00:59:14,170 และจะได้รับเรา log n log n 1461 00:59:14,170 --> 00:59:17,110 คำถามใด ๆ เกี่ยวกับการค้นหาและ ทุกประเภทก่อนที่ผมจะผ่านมัน? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 ลองมาดูกัน 1464 00:59:21,040 --> 00:59:21,800 >> โอ้รายการเชื่อมโยง 1465 00:59:21,800 --> 00:59:23,210 ขอโทษนะฉันมีหนึ่งหัวข้อเพิ่มเติม 1466 00:59:23,210 --> 00:59:25,000 ตกลง, น่ากลัว, รายการเชื่อมโยง 1467 00:59:25,000 --> 00:59:27,900 ปัญหากับอาร์เรย์, พวกเขามีขนาดคงที่ 1468 00:59:27,900 --> 00:59:30,634 ดังนั้นถ้าคุณไม่ทราบว่าใหญ่ ใส่ของคุณเป็นไปได้, 1469 00:59:30,634 --> 00:59:32,050 คุณไม่ต้องการที่จะสร้างอาร์เรย์ 1470 00:59:32,050 --> 00:59:34,080 เพราะถ้าเราสร้าง อาร์เรย์ที่มีขนาดเล็กเกินไป 1471 00:59:34,080 --> 00:59:35,930 เราอาจจะใช้เป็นหน่วยความจำล้น 1472 00:59:35,930 --> 00:59:38,890 >> ดังนั้นแทนที่จะเราสามารถทำอะไรบางอย่าง กับรายการที่เชื่อมโยงซึ่ง 1473 00:59:38,890 --> 00:59:44,280 ช่วยให้เรามีแบบไดนามิก โครงสร้างข้อมูลขนาด 1474 00:59:44,280 --> 00:59:48,970 ที่จะช่วยให้เราเก็บ จำนวนเงินที่มีความยืดหยุ่นมากขึ้นของข้อมูล 1475 00:59:48,970 --> 00:59:54,030 ดังนั้นในแต่ละโหนดในของเรา รายการที่เชื่อมโยงเรามีสองชิ้น 1476 00:59:54,030 --> 00:59:56,820 เรามีค่าที่เกิดขึ้นจริงที่จะเก็บ 1477 00:59:56,820 --> 00:59:59,530 เพื่อให้เป็นเพียงสิ่งที่คุณต้องการ เห็นในอาร์เรย์ตัวอย่างเช่น 1478 00:59:59,530 --> 01:00:04,600 และจากนั้นเรายังติดตาม ตัวชี้ไปยังสิ่งต่อไปในหน่วยความจำ 1479 01:00:04,600 --> 01:00:06,430 >> ซึ่งแตกต่างจากอาร์เรย์ซึ่ง เรารู้ว่าทุกคนจะ 1480 01:00:06,430 --> 01:00:10,890 เพื่อ be-- องค์ประกอบมากมายเป็นหนึ่งทั้งหมด หลังจากที่อื่นใน memory-- เชื่อมโยง 1481 01:00:10,890 --> 01:00:13,300 รายการอาจจะเป็นที่ใดก็ได้ในหน่วยความจำ 1482 01:00:13,300 --> 01:00:14,590 พวกเขากำลังสถานที่โดยพลการ 1483 01:00:14,590 --> 01:00:16,410 ดังนั้นถ้าเราจะ จริงไปพบพวกเขาเรา 1484 01:00:16,410 --> 01:00:19,770 จำเป็นที่จะต้องติดตาม สิ่งต่อไปในรายการของเรา 1485 01:00:19,770 --> 01:00:22,840 >> และจากนั้นก็เพื่อที่จะทราบ ที่รายการที่รวมคือ 1486 01:00:22,840 --> 01:00:26,276 ทั้งหมดที่เราต้องติดตามคือ องค์ประกอบแรกในรายการที่เชื่อมโยงของเรา 1487 01:00:26,276 --> 01:00:27,900 และที่จะช่วยให้เราสามารถปฏิบัติตามผ่าน 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> ดังนั้นนี่คือวิธีการที่คุณอาจกำหนดโหมด 1490 01:00:33,070 --> 01:00:36,160 นี้เป็นโอกาสที่ดี เพื่อใช้ประโยชน์จาก structs 1491 01:00:36,160 --> 01:00:39,660 เพราะคุณมีความคิดนี้ดี สำหรับโหนดให้ฉันมีสองชิ้น 1492 01:00:39,660 --> 01:00:41,770 ฉันมีค่าที่แท้จริงของตัวเอง 1493 01:00:41,770 --> 01:00:45,610 และแล้วฉันมีตัวชี้ไปยัง องค์ประกอบถัดไปในรายการที่เชื่อมโยง 1494 01:00:45,610 --> 01:00:49,150 ดังนั้นคุณจะเห็นเรามีจำนวนเต็ม n, ซึ่งจะเป็นมูลค่าที่เกิดขึ้นจริง 1495 01:00:49,150 --> 01:00:53,150 แล้วชี้ไปยัง โหนดที่เรียกว่าต่อไป 1496 01:00:53,150 --> 01:00:56,431 เพื่อให้เป็นไปได้ต่อไป องค์ประกอบในรายการที่เชื่อมโยงของเรา 1497 01:00:56,431 --> 01:00:56,972 นักเรียน: ใช่? 1498 01:00:56,972 --> 01:01:01,920 คุณมีเพื่อระบุว่า ดาวเป็นเช่น struct? 1499 01:01:01,920 --> 01:01:05,620 >> ฮันนาห์: ใช่ดังนั้นตั้งแต่นี้ เป็นเหมือนชนิดของ, 1500 01:01:05,620 --> 01:01:07,980 ดูเหมือนว่า recursive ความหมายในเราที่ 1501 01:01:07,980 --> 01:01:12,080 ต้องรู้ว่าอะไรเป็นโหนด ภายในเพื่อหาโหนด 1502 01:01:12,080 --> 01:01:14,450 เพราะมันไม่จริง รู้ว่าสิ่งที่โหนดจะสมบูรณ์ 1503 01:01:14,450 --> 01:01:17,283 จนกว่าเราจะได้รับไปยังจุดสิ้นสุดของเจ้านี่ และหลังจากนี้เราก็สามารถเรียกมันว่า 1504 01:01:17,283 --> 01:01:21,935 node-- ภายในของคำนิยามนี้, เราต้องการที่จะเรียกว่าโหนด struct 1505 01:01:21,935 --> 01:01:22,560 คำถามที่ดี 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 อะไรอีกหรือไม่ 1508 01:01:25,214 --> 01:01:26,198 ใช่? 1509 01:01:26,198 --> 01:01:29,150 >> นักเรียน: ทำไมเรา ต้องบอกว่าโหนดสองครั้ง 1510 01:01:29,150 --> 01:01:33,578 เพราะเมื่อเราอยู่ใน [ไม่ได้ยิน] เราก็มีที่จะทำในอัฒภาค 1511 01:01:33,578 --> 01:01:37,352 แต่ตอนนี้เราต้องไปหาที่ struct โหนด? [ไม่ได้ยิน] 1512 01:01:37,352 --> 01:01:39,060 ฮันนาห์: ดังนั้นผมเชื่อว่า ในตัวอย่างที่ผ่านมา 1513 01:01:39,060 --> 01:01:42,110 เราได้เพียงแค่การสร้างตลอดเวลาที่คุณ อยากจะใช้นักเรียนหลังจากนั้นคุณ 1514 01:01:42,110 --> 01:01:46,430 ต้องใช้ struct node-- ฉัน sorry-- struct นักเรียน 1515 01:01:46,430 --> 01:01:51,575 นี้ได้รับอนุญาตให้เราหลังจากที่ความเป็นจริงเพียง การใช้โหนดเพิ่มรูปแบบใหม่เป็นหลัก 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 ทำให้รู้สึก? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 ดังนั้นเราจะต้องกลับไปและ ดูรหัสก่อน 1520 01:01:57,150 --> 01:01:59,025 แต่ผมเดาว่า เราไม่ได้ใช้ typedef 1521 01:01:59,025 --> 01:02:02,050 และเราถามคำถามที่ ทำไมเราต้องใช้ typedef? 1522 01:02:02,050 --> 01:02:05,540 typedef ช่วยให้เราสามารถหลีกเลี่ยง struct คำในการเริ่มต้น 1523 01:02:05,540 --> 01:02:06,221 ใช่? 1524 01:02:06,221 --> 01:02:08,095 นักเรียน: การจัดเรียงของสิ่งที่ คำถามจะเกิดขึ้น 1525 01:02:08,095 --> 01:02:10,400 ในแง่ในแง่ของ โหนดและรายการเชื่อมโยง? 1526 01:02:10,400 --> 01:02:15,110 >> ฮันนาห์: ดังนั้นสิ่งหนึ่งที่เราอาจจะบอกว่า คุณอาจจะค้นหาผ่านทางรายการที่เชื่อมโยงหรือไม่? 1527 01:02:15,110 --> 01:02:16,930 ตกลงเพราะ เล็ก ๆ น้อย ๆ ที่ซับซ้อนมากขึ้น 1528 01:02:16,930 --> 01:02:18,520 กว่าถ้าเรากำลังค้นหา ผ่านแถว 1529 01:02:18,520 --> 01:02:21,472 เราก็สามารถดูองค์ประกอบศูนย์ องค์ประกอบหนึ่งองค์ประกอบสอง blah, blah, 1530 01:02:21,472 --> 01:02:21,972 blah 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 ถ้าเราต้องการที่จะค้นหา ผ่านรายการที่เชื่อมโยง 1533 01:02:24,420 --> 01:02:27,229 เราจริงจะต้องปฏิบัติตาม เขาวงกตเล็ก ๆ น้อย ๆ ของตัวชี้ 1534 01:02:27,229 --> 01:02:29,270 จึงขอจริงไป ผ่านทางนี้ได้อย่างรวดเร็วจริงๆ 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 สิ่งที่เราจะทำใน สั่งซื้อ to-- สมมุติว่าเรา 1537 01:02:32,860 --> 01:02:35,430 ต้องการเพียงแค่ย้ำผ่าน รายการที่เชื่อมโยงทั้งหมดของเรา 1538 01:02:35,430 --> 01:02:37,450 เราจะเริ่มต้นที่หัว 1539 01:02:37,450 --> 01:02:39,890 และจากนั้นในการที่จะ ย้ายไปยังองค์ประกอบต่อไปนี้ 1540 01:02:39,890 --> 01:02:43,680 แทนเพียงการเพิ่มโดยหนึ่ง เหมือนอย่างที่เราอาจจะผ่านในอาร์เรย์ 1541 01:02:43,680 --> 01:02:45,720 เรากำลังจะไปจริง ทำตามตัวชี้ต่อไป, 1542 01:02:45,720 --> 01:02:48,360 เพื่อให้เราสามารถหาที่อยู่ใน หน่วยความจำองค์ประกอบต่อไปคือ 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 ดังนั้นผมรู้ว่ามันไม่พอที่จะ ใช้เวลาทั้งหมดนี้ในตอนนี้ 1545 01:02:51,690 --> 01:02:52,650 แต่คุณจะต้องสไลด์เหล่านี้ 1546 01:02:52,650 --> 01:02:54,730 เพื่อให้คุณสามารถไปผ่าน นี้เล็กน้อยช้ากว่า 1547 01:02:54,730 --> 01:02:56,890 แต่เป็นหลัก, สิ่งที่เราต้องการ ที่จะทำคือการทำตามคำแนะนำเหล่านี้ 1548 01:02:56,890 --> 01:02:58,550 ผ่านความสมบูรณ์ของรายการที่เชื่อมโยง 1549 01:02:58,550 --> 01:03:00,258 ดังนั้นนี่คือคำถาม คุณอาจจะถาม 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> สิ่งที่จะเห็นด้วย แทรกสมมติว่า 1552 01:03:03,980 --> 01:03:07,925 เราต้องการที่จะนำองค์ประกอบใหม่ ที่ด้านหน้าของรายการที่เชื่อมโยงของเรา 1553 01:03:07,925 --> 01:03:10,800 เราจะต้องระวังให้มาก เกี่ยวกับคำสั่งที่เรา 1554 01:03:10,800 --> 01:03:12,760 กำหนดตัวชี้ 1555 01:03:12,760 --> 01:03:15,230 เพราะสมมุติว่าผมแค่บอกว่าโอเค 1556 01:03:15,230 --> 01:03:18,930 ทำให้จุดหัวถึงองค์ประกอบใหม่นี้ 1557 01:03:18,930 --> 01:03:23,550 เพียงแค่ทำให้มันชี้ไปที่ 1 แล้วเราได้ เป็นหลักที่หายไปส่วนที่เหลือของรายการของเรา, 1558 01:03:23,550 --> 01:03:25,860 เพราะผมจำไม่ได้ที่ 2 ชีวิต 1559 01:03:25,860 --> 01:03:27,730 >> ดังนั้นเราจึงต้องทำใน เพื่อที่เฉพาะเจาะจงมาก 1560 01:03:27,730 --> 01:03:31,500 ครั้งแรกที่เราทำใหม่ จุดองค์ประกอบที่ศีรษะ 1561 01:03:31,500 --> 01:03:33,970 และจากนั้นเราจะทำให้หัว ชี้ไปที่องค์ประกอบใหม่ 1562 01:03:33,970 --> 01:03:38,455 ดังนั้นเรามาดูสิ่งที่ดูเหมือนว่า กับ arrows-- เช่นเดียวกับที่ 1563 01:03:38,455 --> 01:03:42,080 เพื่อให้คุณมีใหม่ครั้งแรก จุดองค์ประกอบที่ศีรษะเก่า 1564 01:03:42,080 --> 01:03:45,990 และตอนนี้เรามีหัว ชี้ไปที่องค์ประกอบแรกใหม่ 1565 01:03:45,990 --> 01:03:47,187 คำถามใด ๆ กับเรื่องนี้? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> ตกลงนี่คือรหัสบางครั้งบางสิ่งบางอย่าง ดูนิด ๆ หน่อย ๆ ในภายหลัง 1568 01:03:54,350 --> 01:03:58,630 และตอนนี้ฉันจะเปลี่ยนมันไปยัง Davin สำหรับ GDB และนิด ๆ หน่อย ๆ ของการปฏิบัติ 1569 01:03:58,630 --> 01:03:59,480 การเข้ารหัสบนกระดาษ 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 สวยงาม 1572 01:04:01,096 --> 01:04:01,810 >> ปล้น: และร็อบ 1573 01:04:01,810 --> 01:04:02,360 >> ฮันนาห์: โอ้ Davin และร็อบ 1574 01:04:02,360 --> 01:04:03,055 ฉันขอโทษ 1575 01:04:03,055 --> 01:04:03,596 >> นักเรียน: วู! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ปล้นขอบคุณ 1578 01:04:09,110 --> 01:04:11,209 >> Davin: คุณต้องการที่จะบอกว่า ทุกอย่างรวดเร็วจริง? 1579 01:04:11,209 --> 01:04:11,875 Rob: ใช่ใช่ 1580 01:04:11,875 --> 01:04:12,845 Davin: เมื่อฉันขึ้น 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 ตกลงขณะที่ร็อบทำให้ ไมโครโฟนที่ดังนั้นสิ่งที่เป็น GDB? 1583 01:04:19,520 --> 01:04:23,945 ทุกคนควรจะได้เห็นใน GDB ชั้นและในเวลาทำการ 1584 01:04:23,945 --> 01:04:25,070 และคุณควรจะใช้มัน 1585 01:04:25,070 --> 01:04:25,750 ดังนั้นสิ่งที่ GDB คืออะไร? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 ใคร? 1588 01:04:28,850 --> 01:04:29,540 >> นักเรียน: มันเป็นบั๊ก 1589 01:04:29,540 --> 01:04:30,250 >> Davin: มันเป็นบั๊ก 1590 01:04:30,250 --> 01:04:31,624 และมันก็ไม่สิ่งที่ช่วยให้คุณจะทำอย่างไร? 1591 01:04:31,624 --> 01:04:33,064 เช่นทำไมเราชอบ GDB? 1592 01:04:33,064 --> 01:04:34,480 นักเรียน: ในการชะลอตัวลงโปรแกรม 1593 01:04:34,480 --> 01:04:36,740 Davin: ขวาเพื่อให้คุณสามารถเดิน ผ่านมันชอบฝีเท้าของมนุษย์ 1594 01:04:36,740 --> 01:04:38,490 และเพื่อให้สิ่งที่เป็นบางส่วน คำสั่งที่คุณจะทำอย่างไร 1595 01:04:38,490 --> 01:04:40,407 ดีแตกน่าจะเป็น คำสั่งที่คุณชื่นชอบ 1596 01:04:40,407 --> 01:04:43,240 เพราะเห็นว่าจะช่วยให้คุณทำลาย โปรแกรมจริงและเดินผ่านมัน 1597 01:04:43,240 --> 01:04:44,280 ทีละบรรทัด 1598 01:04:44,280 --> 01:04:46,500 >> เรียกใช้ช่วยให้คุณสามารถเรียกใช้ 1599 01:04:46,500 --> 01:04:48,210 ต่อไปเช่นการก้าวผ่าน 1600 01:04:48,210 --> 01:04:49,820 มีอะไรต่อไปและระหว่างขั้นตอน? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 รอบอกว่าออกมาดัง ๆ 1603 01:04:53,190 --> 01:04:54,060 มันเป็นที่ถูกต้อง 1604 01:04:54,060 --> 01:04:55,280 >> นักเรียน: [ไม่ได้ยิน] 1605 01:04:55,280 --> 01:04:56,190 >> Davin: ใช่น่ากลัว 1606 01:04:56,190 --> 01:04:59,210 ดังนั้นเหมือนขั้นตอนต่อไปและถ้า you're-- สมมติว่าคุณมีฟังก์ชั่นที่คุณ 1607 01:04:59,210 --> 01:04:59,950 กำหนด 1608 01:04:59,950 --> 01:05:03,350 สมมติว่าในบางฟังก์ชั่นหลักของคุณ และคุณเพียงแค่กดปุ่มถัดไปถัดไป 1609 01:05:03,350 --> 01:05:03,850 ต่อไป 1610 01:05:03,850 --> 01:05:05,910 คุณจริงไป ดำเนินการฟังก์ชั่นที่ 1611 01:05:05,910 --> 01:05:07,285 แต่คุณกำลังจะกระโดดข้ามมัน 1612 01:05:07,285 --> 01:05:09,711 ถ้าคุณกดขั้นตอนหรือ หรืออะไรก็ตามที่คุณ 1613 01:05:09,711 --> 01:05:11,460 จะกระโดดจริง ในการทำงานนั้น 1614 01:05:11,460 --> 01:05:14,110 และจากนั้นคุณสามารถกดต่อไป ที่จะเห็นสายที่แตกต่างกัน 1615 01:05:14,110 --> 01:05:16,170 ภายในฟังก์ชันนั้น 1616 01:05:16,170 --> 01:05:16,670 ใช่? 1617 01:05:16,670 --> 01:05:18,670 >> นักเรียน: มีวิธี เพื่อกระโดดเหมือนกลับออก? 1618 01:05:18,670 --> 01:05:20,750 Davin: เสร็จสิ้นใช่ จบด้วยการกระโดดให้คุณออก 1619 01:05:20,750 --> 01:05:22,570 ดังนั้นมันจะไปจบที่ ฟังก์ชั่นและจากนั้นคุณ 1620 01:05:22,570 --> 01:05:24,153 จะกลับมาอยู่ในหลักตัวอย่างเช่น 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 พิมพ์จะพิมพ์ออกมาครั้งหนึ่ง 1623 01:05:27,370 --> 01:05:29,381 สิ่งที่ผมมักจะใช้คือการแสดง 1624 01:05:29,381 --> 01:05:31,880 การแสดงผลจะพิมพ์ออกมา อย่างต่อเนื่องตลอดทั้งหมด 1625 01:05:31,880 --> 01:05:32,470 ของโปรแกรมของคุณ 1626 01:05:32,470 --> 01:05:33,810 >> ตัวอย่างเช่นถ้าคุณกำลัง ในการห่วงและคุณ 1627 01:05:33,810 --> 01:05:37,018 ต้องการที่จะเห็นวิธีการบางอย่างที่เปลี่ยนแปลง และคุณไม่ต้องการที่จะเหมือนอย่างต่อเนื่อง 1628 01:05:37,018 --> 01:05:38,940 จะทำเช่นการพิมพ์ พิมพ์พิมพ์จอแสดงผล 1629 01:05:38,940 --> 01:05:43,230 จะแสดงตัวแปรที่ อย่างต่อเนื่องทุกครั้งที่คุณตีต่อไป 1630 01:05:43,230 --> 01:05:44,310 และดำเนินการต่อ 1631 01:05:44,310 --> 01:05:45,905 ดังนั้น GBD ที่ GDB 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> นักเรียน: มีอะไรอย่างใดอย่างหนึ่ง ที่คุณ [ไม่ได้ยิน] 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 Davin: มันคืออะไร? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> นักเรียน: มีอะไรยกกำลัง ตัวแปรท้องถิ่น 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 Rob: มีบางอย่างที่เป็นจริง เหมือนชาวบ้านหรือสิ่งที่ 1640 01:05:57,780 --> 01:05:58,140 ฉัน can't-- 1641 01:05:58,140 --> 01:05:59,930 >> Davin: มันอาจจะ สิ่งที่ต้องการที่ใช่ 1642 01:05:59,930 --> 01:06:00,830 >> ฮันนาห์: ในชาวบ้าน? 1643 01:06:00,830 --> 01:06:01,510 >> Davin: นั่นแหล่ะ 1644 01:06:01,510 --> 01:06:02,134 ที่หนึ่ง 1645 01:06:02,134 --> 01:06:03,040 ปล้น: Beautiful 1646 01:06:03,040 --> 01:06:04,030 >> Davin: ใช่ 1647 01:06:04,030 --> 01:06:06,010 >> นักเรียน: อะไรยังคงทำอย่างไร 1648 01:06:06,010 --> 01:06:08,010 >> Davin: มัน continues-- จึงเป็นเพียง จะยังคงโปรแกรมของคุณ 1649 01:06:08,010 --> 01:06:09,843 ดังนั้นถ้าคุณทำลายและตี ต่อไปก็จะ 1650 01:06:09,843 --> 01:06:13,119 เพียงแค่เรียกใช้โปรแกรมที่จนกว่า มันกระทบหยุดพักอีกครั้ง 1651 01:06:13,119 --> 01:06:14,910 ดังนั้นสำหรับตัวอย่างเช่นถ้าคุณ ยากจนในการทำงาน, 1652 01:06:14,910 --> 01:06:16,720 และคุณกำลังจะทำเหมือน ห่วงหรือสิ่งที่ต้องการที่ 1653 01:06:16,720 --> 01:06:19,869 และคุณตีดำเนินการต่อก็จะ ดำเนินต่อไปและกลับไปพักที่ 1654 01:06:19,869 --> 01:06:22,660 หรือมีการหยุดพักไม่มีมันจะ อย่างต่อเนื่องและจบโปรแกรม 1655 01:06:22,660 --> 01:06:25,000 >> Rob: ชอบดังนั้นเพียงแค่หยุดทำงาน ที่จุดพักแรก 1656 01:06:25,000 --> 01:06:27,010 คุณจะตีถ้าคุณแล้ว ตีอย่างต่อเนื่องก็จะเก็บ 1657 01:06:27,010 --> 01:06:28,070 ไปจนกว่าจะมีจุดพักต่อไป 1658 01:06:28,070 --> 01:06:30,111 แล้วดำเนินการต่อจะไป เพื่อจุดพักต่อไป 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 Davin: คำถามใด ๆ ที่อื่น ๆ ใน GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 ดังนั้นผมคิดว่าในอดีตที่ผ่านมา เราได้ถามคุณว่า 1663 01:06:35,410 --> 01:06:37,690 GDB เป็นและให้ ตัวอย่างของบางสิ่งที่คุณ 1664 01:06:37,690 --> 01:06:40,770 สามารถทำอะไรกับ GDB ดังนั้น ง่ายจริง แต่ใช่ 1665 01:06:40,770 --> 01:06:42,280 มีคุณไป 1666 01:06:42,280 --> 01:06:43,250 และโหนด? 1667 01:06:43,250 --> 01:06:49,571 >> ปล้น: ใช่ดังนั้นทิศทางที่เป็นมันได้หรือไม่ 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 นักเรียน: นั่นคือมัน 1670 01:06:51,726 --> 01:06:52,160 Davin รอ 1671 01:06:52,160 --> 01:06:52,270 Rob: ผู้ชายคนนี้? 1672 01:06:52,270 --> 01:06:52,936 Davin: ที่หนึ่ง 1673 01:06:52,936 --> 01:06:54,660 Rob: ผู้ชายคนนี้, โอ้ผมไม่ทราบ 1674 01:06:54,660 --> 01:06:56,940 ดังนั้นเราจึงไม่ชัดเจน สิ่งที่ฉันไม่ได้ยกกำลัง 1675 01:06:56,940 --> 01:06:58,680 รู้ว่าใครมัน was-- แต่คำถาม 1676 01:06:58,680 --> 01:07:01,180 เราไม่ทราบว่าสิ่งที่คุณ ถามเกี่ยวกับเรื่องนี้ดังนั้นเพียง 1677 01:07:01,180 --> 01:07:04,800 เพื่อชี้แจงบางสิ่งบางอย่าง 1678 01:07:04,800 --> 01:07:07,750 ดังนั้นก่อนเช่นฉันกล่าวก่อน typedef คุณมักจะใช้เพียง 1679 01:07:07,750 --> 01:07:09,305 สร้างชื่อเล่นสำหรับประเภท 1680 01:07:09,305 --> 01:07:13,420 ดังนั้นที่นี่ชื่อเล่นเรา สร้างเป็นประเภทนี้โหนด struct 1681 01:07:13,420 --> 01:07:18,070 >> ดังนั้นก่อนไม่สนใจโหนดในนี้ typedef ดังนั้นนี้หยิกโหนด struct 1682 01:07:18,070 --> 01:07:21,060 รั้งลงไปหยิกต่อไป รั้งเป็นชนิดที่โหนด struct 1683 01:07:21,060 --> 01:07:23,470 และเราจำเป็นต้องโหนที่ มีขึ้นเพราะเรา 1684 01:07:23,470 --> 01:07:25,190 ต้องอ้างอิงโหนดในที่นี่ 1685 01:07:25,190 --> 01:07:29,380 ดังนั้นด้วยการเรียงลำดับของ struct recursive นี้ คุณต้องการที่จะให้นี้ struct ชื่อ 1686 01:07:29,380 --> 01:07:31,340 หรืออื่น ๆ ที่คุณทำไม่ได้ พูดโหนด struct ที่นี่ 1687 01:07:31,340 --> 01:07:33,340 ขณะที่ก่อนกับนักเรียน เมื่อเราได้พิมพ์ผมคิดว่า 1688 01:07:33,340 --> 01:07:35,423 เราไม่ได้มีการบอกว่า นักเรียนมีขึ้นเพราะเรา 1689 01:07:35,423 --> 01:07:40,370 ไม่ได้มีการบอกว่า struct นักเรียนภายใน struct ตัวเอง 1690 01:07:40,370 --> 01:07:43,730 ดังนั้นจึงเป็นซ้ำว่า กองกำลังสหรัฐที่จะบอกว่ามีโหนด 1691 01:07:43,730 --> 01:07:46,610 >> โหนดนี้เป็นเพียงชื่อที่เรากำลัง ให้โหนดสำหรับ typedef 1692 01:07:46,610 --> 01:07:48,520 ดังนั้นโหนดที่ไม่ได้ เช่นเดียวกับการโหนที่ 1693 01:07:48,520 --> 01:07:51,567 แต่โหนด struct นี้ เช่นเดียวกับโหนด struct ที่ 1694 01:07:51,567 --> 01:07:54,150 Davin: ดังนั้นเมื่อใดก็ตามที่คุณโทร เช่นโหนดในฟังก์ชั่นหลักของคุณ 1695 01:07:54,150 --> 01:07:55,350 คุณไม่ได้ไป ต้องบอกว่าโหนด struct 1696 01:07:55,350 --> 01:07:58,360 คุณก็สามารถบอกว่าโหนดเพราะ โหนดต่างออกเป็นพื้น 1697 01:07:58,360 --> 01:07:59,440 คุณกำลังจะบอกว่าตกลง 1698 01:07:59,440 --> 01:08:01,490 แทนที่จะต้องเรียก โหนด struct ในรหัสของฉัน 1699 01:08:01,490 --> 01:08:04,050 ผมแค่อยากจะเปลี่ยนชื่อ เป็นโหนดที่จะทำให้มันง่ายขึ้น 1700 01:08:04,050 --> 01:08:06,800 >> ปล้น: ถ้าคุณเสมอ ใช้ typedef แล้วนี้ 1701 01:08:06,800 --> 01:08:11,240 เป็นสถานที่เดียวที่คุณจะต้อง การประกาศตัวแปรที่มีโหนด struct 1702 01:08:11,240 --> 01:08:11,740 ดาราใช่ 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> Davin: OK ดังนั้นส่วนสุดท้าย เป็นเรื่องยากที่จะสอน because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ปล้น: อะไรนะ? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> Davin: เพราะมันเข้ารหัสบนกระดาษ 1709 01:08:25,649 --> 01:08:28,689 ดังนั้นทุกปีเรามี โค้ดบนกระดาษคำถาม 1710 01:08:28,689 --> 01:08:32,510 ดังนั้นผมคิดว่าเมื่อปีที่แล้ว, 12 ออกจาก 80 คะแนนเป็นรหัสลงบนกระดาษ 1711 01:08:32,510 --> 01:08:36,720 ปีก่อนที่ 10 จาก 80, ปีก่อนที่ 20 จาก 100 1712 01:08:36,720 --> 01:08:37,939 จึงค่อนข้างน้อยของเหล่านี้ 1713 01:08:37,939 --> 01:08:40,970 ดังนั้นคุณจะต้องสามารถ โค้ดขึ้นฟังก์ชันเหล่านี้ด้วยมือ 1714 01:08:40,970 --> 01:08:45,340 >> ดังนั้นผมจึงคิดว่าเราอาจจะผ่านไป คู่ของพวกเขาและดูว่าคนทำ 1715 01:08:45,340 --> 01:08:47,340 ชนิดของเดินผ่าน พวกเขาช้าด้วยคน 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 ดังนั้นโดยทั่วไป strlen และ atoi ได้รับความนิยมมาก 1718 01:08:52,420 --> 01:08:55,670 ปีที่แล้วผมคิดว่าเรามี GetPositiveInt และ RandomInt 1719 01:08:55,670 --> 01:08:58,591 แต่ธารดังนั้นอำนาจยัง บวกหนึ่งเกินไป 1720 01:08:58,591 --> 01:09:00,965 ขอเพียงผ่านไปอาจจะ หนึ่งหรือสองของเหล่านี้ร่วมกัน 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 อะไรคือสิ่งที่ผู้คนต้องการที่จะเห็น? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> นักเรียน: atoi 1725 01:09:05,767 --> 01:09:06,350 นักเรียน: ใช่ 1726 01:09:06,350 --> 01:09:06,859 Davin: atoi? 1727 01:09:06,859 --> 01:09:07,800 นักเรียน: [ไม่ได้ยิน] 1728 01:09:07,800 --> 01:09:09,682 Davin: ตกลงฉันจะ ที่จะทำมันขึ้นมาบนเรือ 1729 01:09:09,682 --> 01:09:11,765 คุณมีการตั้งค่า ถ้าผมทำมันได้ที่นี่หรือที่นั่น? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 มีเกบบอกว่ามี 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> Rob: และนี่คือความคิดทั่วไป คำถามเหล่านี้การเข้ารหัส 1734 01:09:19,580 --> 01:09:21,705 พยายามที่จะเขียนบางสิ่งบางอย่าง 1735 01:09:21,705 --> 01:09:22,580 อย่าปล่อยให้มันว่างเปล่า 1736 01:09:22,580 --> 01:09:23,080 >> Davin: ใช่ 1737 01:09:23,080 --> 01:09:25,520 Rob: ถ้าคุณได้รับ กลับชนิดที่ถูกต้อง 1738 01:09:25,520 --> 01:09:27,090 หรือบางทีเราอาจจะเอาไปให้ คุณ แต่ถ้าคุณสามารถจะทำได้เหมือน 1739 01:09:27,090 --> 01:09:30,256 เขียนลายเซ็นการทำงานโดยทั่วไป ถ้าคุณได้รับกรณีฐานที่ถูกต้อง 1740 01:09:30,256 --> 01:09:32,244 หรือกรณีที่มุมหรือ จดจำการตรวจสอบเป็นโมฆะ 1741 01:09:32,244 --> 01:09:34,160 ตราบใดที่คุณมี สิ่งแล้วบางทีเรา 1742 01:09:34,160 --> 01:09:35,880 สามารถให้คุณทั้งคู่ ชี้ปัญหา 1743 01:09:35,880 --> 01:09:36,810 ไม่เพียงแค่ปล่อยให้มันว่างเปล่า 1744 01:09:36,810 --> 01:09:38,560 >> Davin: ใช่และถ้าคุณ เป็นเพียงสมบูรณ์ 1745 01:09:38,560 --> 01:09:40,580 นิ่งงันที่วิธีการ จริงเปลี่ยนเป็นรหัส 1746 01:09:40,580 --> 01:09:43,140 ถ้าคุณเขียน pseudocode, ที่ดีสวยเกินไป 1747 01:09:43,140 --> 01:09:46,390 ดังนั้นมันก็เหมือนมันเป็นคำถามที่หกจุด และคุณเขียน pseudocode ที่ถูกต้อง 1748 01:09:46,390 --> 01:09:47,858 คุณจะได้รับอย่างน้อยสองจุด 1749 01:09:47,858 --> 01:09:49,149 จึงไม่เพียงแค่ปล่อยให้พวกเขาว่างเปล่า 1750 01:09:49,149 --> 01:09:50,279 พยายามที่จะนำบางสิ่งบางอย่าง 1751 01:09:50,279 --> 01:09:51,770 >> Rob: มันจะต้องมีการ pseudocode ที่ถูกต้อง แต่ 1752 01:09:51,770 --> 01:09:52,270 >> Davin: ใช่ 1753 01:09:52,270 --> 01:09:55,381 Rob: ดังนั้นเราจึงมักจะมีน้อย ผ่อนปรนมีข้อบกพร่องใน pseudocode 1754 01:09:55,381 --> 01:09:57,130 Davin: OK เพื่อให้พวกคุณ อยากจะเห็น atoi 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 ตกลงดังนั้นเพียงนะ ดังนั้นสิ่งที่คุณต้องการจะทำ 1757 01:10:02,820 --> 01:10:04,969 คือคุณกำลังจะเป็น กำหนดชนิดของตัวเลขบางอย่าง 1758 01:10:04,969 --> 01:10:07,010 แต่จำนวนนี้ไม่ได้ จะเป็น int ใช่มั้ย? 1759 01:10:07,010 --> 01:10:08,574 สิ่งที่มันจะเป็นอย่างไร 1760 01:10:08,574 --> 01:10:09,480 >> นักเรียน: [ไม่ได้ยิน] 1761 01:10:09,480 --> 01:10:11,146 >> Davin: มันจะเป็นสตริงใช่มั้ย? 1762 01:10:11,146 --> 01:10:13,160 ดังนั้นหากคุณได้รับ string-- สมมุติว่า 1763 01:10:13,160 --> 01:10:15,228 >> ปล้นผมควรจะดึงการแก้ไข? 1764 01:10:15,228 --> 01:10:16,200 ฉันสามารถดึง up-- 1765 01:10:16,200 --> 01:10:16,800 >> Davin: โอ้, คุณต้องการที่จะทำมัน on-- 1766 01:10:16,800 --> 01:10:17,420 >> Rob: คุณต้องการที่คณะกรรมการหรือไม่ 1767 01:10:17,420 --> 01:10:18,800 >> Davin: สิ่งที่คุณต้องการจะทำอย่างไร? 1768 01:10:18,800 --> 01:10:19,900 ผมหมายถึงว่าคุณต้องการที่จะทำมันด้วยมือ? 1769 01:10:19,900 --> 01:10:21,460 หรือคุณต้องการที่จะทำมันโดยคอมพิวเตอร์? 1770 01:10:21,460 --> 01:10:22,180 >> Rob: มันทำด้วยมือ 1771 01:10:22,180 --> 01:10:22,805 >> Davin: [หัวเราะ] 1772 01:10:22,805 --> 01:10:23,950 Rob: มันทำด้วยมือ 1773 01:10:23,950 --> 01:10:25,469 >> Davin: ตกลงดังนั้นจึงเป็นไปได้ atoi 1774 01:10:25,469 --> 01:10:27,760 ดังนั้นสิ่งที่พูดไปผมหมายความว่าเราจะ อาจจะให้กับคุณ 1775 01:10:27,760 --> 01:10:29,106 แต่สิ่งที่มันจะกลับมา? 1776 01:10:29,106 --> 01:10:29,452 >> นักเรียน: Int 1777 01:10:29,452 --> 01:10:31,076 >> Davin: มันจะกลับ int ใช่มั้ย? 1778 01:10:31,076 --> 01:10:33,772 So-- ฉันไม่ต้องการที่จะทำมันมี 1779 01:10:33,772 --> 01:10:34,510 ฉันจะทำมันที่นี่ 1780 01:10:34,510 --> 01:10:36,596 >> Rob: คุณสามารถดึงมันลง แล้วดันขึ้นบน 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> Davin: ใช่ 1783 01:10:40,385 --> 01:10:43,880 [หัวเราะ] การเปลี่ยนแปลงเกม 1784 01:10:43,880 --> 01:10:50,950 ตกลงดังนั้นจึงเป็นไปได้ atoi int, และสิ่งที่มันจะใช้เวลา? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 ดาวถ่านดังนั้นเพียง สตริงดาววินาที, เช่นนั้น 1787 01:10:57,780 --> 01:10:59,240 >> Rob: ดีดาวดี 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 Davin นี้อาจจะไม่ได้อยู่ที่นั่นตกลง 1790 01:11:04,040 --> 01:11:04,540 ปล้น: ใช่ 1791 01:11:04,540 --> 01:11:06,670 Davin: OK เพื่อครั้งแรก สิ่งที่คุณต้องการ do-- ฉัน 1792 01:11:06,670 --> 01:11:08,490 ไม่ทราบว่าใครมอง ที่ solutions-- ปฏิบัติ 1793 01:11:08,490 --> 01:11:10,150 แต่สิ่งที่คุณกำลังจะ เพื่อต้องการจะทำคือคุณ 1794 01:11:10,150 --> 01:11:11,570 จะต้องการที่จะมี ห่วงเพราะคุณ 1795 01:11:11,570 --> 01:11:14,100 จะต้องการจริง ก้าวผ่านสายนี้ 1796 01:11:14,100 --> 01:11:18,880 ดังนั้น helpful-- จึงขอบอกว่า เราจะให้ห่วง 1797 01:11:18,880 --> 01:11:22,270 และเรากำลังจะก้าวผ่าน องค์ประกอบของสตริงทุก 1798 01:11:22,270 --> 01:11:23,470 นานเท่าไหร่ที่ว่าคืออะไร? 1799 01:11:23,470 --> 01:11:26,464 กี่ครั้งที่เรากำลังจะไป เพื่อย้ำในที่สำหรับวง? 1800 01:11:26,464 --> 01:11:27,130 นักเรียน: Sterln? 1801 01:11:27,130 --> 01:11:27,963 Davin: Sterln ใช่ 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 ดังนั้นสมมติว่ามีความยาวเท่ากับ int sterln S 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 และอยากรู้อยากเห็นเพียงแค่ว่าทำไมมันเป็นเสมอชนิด ของดีกว่าที่จะทำนอกของลูปนี้หรือไม่? 1806 01:11:48,740 --> 01:11:52,277 เช่นทำไมมันจะดีกว่าที่จะเรียก ฟังก์ชันนี้ด้านนอกของวง? 1807 01:11:52,277 --> 01:11:53,360 เพียงแค่มีสุขภาพจิตดีได้อย่างรวดเร็วตรวจสอบ? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 ใช่? 1810 01:11:56,311 --> 01:11:58,268 นักเรียน: เพื่อให้คุณไม่ได้ ต้องให้ตรวจสอบมัน 1811 01:11:58,268 --> 01:11:59,400 คุณก็สามารถ [ไม่ได้ยิน] 1812 01:11:59,400 --> 01:12:01,560 >> Davin: แน่นอนดังนั้นใช่ ว่าสิ่งที่เธอบอกว่า 1813 01:12:01,560 --> 01:12:03,101 ดังนั้นเราจึงไม่จำเป็นต้องให้การตรวจสอบมัน 1814 01:12:03,101 --> 01:12:05,690 ดังนั้นสำหรับตัวอย่างเช่นถ้าฉันโทร ฟังก์ชันนี้ภายในห่วง 1815 01:12:05,690 --> 01:12:08,050 แล้วฉันจะให้โทร ฟังก์ชันนี้หลายครั้ง 1816 01:12:08,050 --> 01:12:10,080 และที่ว่าจะลดลง ประสิทธิภาพของโปรแกรมของคุณ 1817 01:12:10,080 --> 01:12:12,370 ดังนั้นจึงเป็นเรื่องที่มีประโยชน์เสมอ ที่จะประกาศมันนอก 1818 01:12:12,370 --> 01:12:14,370 >> Rob: นั่นคือการกล่าวว่าเมื่อวันที่ ใด ๆ ของปัญหาเหล​​่านี้ 1819 01:12:14,370 --> 01:12:17,940 สวยมากตราบใดที่คุณได้รับ การแก้ปัญหาการทำงานคุณจะได้รับเครดิตเต็มรูปแบบ 1820 01:12:17,940 --> 01:12:20,820 ดังนั้นไม่ต้องกังวลถ้าการออกแบบของคุณ เป็นที่น่ากลัวอย่างแน่นอน 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 มันอาจจะทำให้เราอารมณ์เสีย การอ่านรห​​ัสของคุณ 1823 01:12:25,230 --> 01:12:28,160 แต่ตราบใดที่การทำงาน คุณจะได้รับคะแนน 1824 01:12:28,160 --> 01:12:29,302 >> Davin: ใช่ 1825 01:12:29,302 --> 01:12:31,260 ตกลงดังนั้นแล้วฉันจะไป ประกาศตัวแปรบาง 1826 01:12:31,260 --> 01:12:33,900 มันเป็นเพียงแค่จะเรียก int ผลรวม 1827 01:12:33,900 --> 01:12:37,031 และฉันจะตั้งค่านี้ เท่ากับศูนย์เช่นนั้น 1828 01:12:37,031 --> 01:12:38,780 และที่เพิ่งจะ ที่จะเป็นตัวยึด 1829 01:12:38,780 --> 01:12:40,960 เพื่อให้เป็นไปได้ สิ่งที่ผมกำลังจะกลับมา 1830 01:12:40,960 --> 01:12:43,730 ดังนั้นฉันจะไปในที่สุด กลับผลรวมออกจากโปรแกรมนี้ 1831 01:12:43,730 --> 01:12:44,980 ดังนั้นผมจึงมีทั้งสองตัวแปร 1832 01:12:44,980 --> 01:12:45,563 ฉันมีความยาว 1833 01:12:45,563 --> 01:12:46,500 ฉันมีผลรวม 1834 01:12:46,500 --> 01:12:48,290 และตอนนี้ขอกระโดดลงไปในสายของเรา 1835 01:12:48,290 --> 01:12:49,510 >> เพื่อช่วยให้มีของเราห่วง 1836 01:12:49,510 --> 01:13:06,520 ดังนั้นสี่ int ฉันเท่ากับ 0 วัตต์ในขณะที่ ฉันมีค่าน้อยกว่าที่ฉันมีความยาวบวกบวก 1837 01:13:06,520 --> 01:13:07,150 และ now-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 Rob: ดี 1840 01:13:11,420 --> 01:13:14,030 Davin: ตกลงตอนนี้ที่นี่ มาพร้อมเนื้อของรหัสของเรา 1841 01:13:14,030 --> 01:13:17,380 ดังนั้นคุณสามารถจริงทำ นี้โดยทั่วไปในหนึ่งบรรทัด 1842 01:13:17,380 --> 01:13:20,702 ดังนั้นใครที่ไม่ได้มีความคิด ของสิ่งที่เรากำลังจะทำต่อไปหรือไม่ 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 ตกลงดังนั้นที่ตกลง 1845 01:13:25,380 --> 01:13:35,860 ดังนั้นเรากำลังทำอะไรที่จะบอกว่าผลรวม equals-- ให้ฉันวิ่งหนีผลรวม over-- นี้ 1846 01:13:35,860 --> 01:13:50,010 เท่ากับผลรวม 10 ครั้งบวกเรา จะใช้ S ฉันลบหนึ่ง 1847 01:13:50,010 --> 01:13:54,787 อ้าง 0 หนึ่งอ้างทำเช่นนั้น 1848 01:13:54,787 --> 01:13:55,620 Rob: ใช้งานง่ายมาก 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> Davin: บดมัน 1851 01:13:57,880 --> 01:14:01,438 ตกลงดังนั้น someone-- ผมได้รับมัน, ผมได้รับมัน 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 ตกลงดังนั้นนี้เป็นอย่างชัดเจนขึ้น 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 สิ่งนี้หมายความว่าอย่างไร 1856 01:14:09,450 --> 01:14:12,120 ดังนั้นใครที่ไม่ทราบว่าสิ่งที่นี้หมายถึงอะไร? 1857 01:14:12,120 --> 01:14:13,826 ทุกคนสามารถดูนี้? 1858 01:14:13,826 --> 01:14:16,088 ไม่มีใครสามารถดูนี้ตกลง 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 ฉันจะ to-- 1861 01:14:18,340 --> 01:14:20,506 >> Rob: ผมจะเขียน สูตรเพียงขวาที่นี่ 1862 01:14:20,506 --> 01:14:23,140 Davin: OK, ร็อบจะทำมัน บนคอมพิวเตอร์ซึ่งคือความสนุก 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ปล้น: โอ้พระเจ้าของข้าพระองค์ 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 หรือฉันจะไม่ 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 Davin: ยืนอยู่ข้าง 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 นักเรียน: ฉันมีคำถาม 1871 01:14:44,260 --> 01:14:45,348 Davin: ใช่นั่นเอง 1872 01:14:45,348 --> 01:14:46,223 นักเรียน: [ไม่ได้ยิน] 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 Davin: OK ดังนั้นมันจริง เช่นเพียงในทั่วไป 1875 01:14:54,570 --> 01:14:56,710 ถ้าคุณจะใส่เหมือน ใน int ประกาศนี้ 1876 01:14:56,710 --> 01:14:59,770 ฉันมีความยาวเท่ากับ 0 จุลภาค เท่ากับ sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> นักเรียน: [ไม่ได้ยิน] 1878 01:15:01,200 --> 01:15:03,585 >> Davin: ที่ปรับเพราะ that-- 1879 01:15:03,585 --> 01:15:05,543 นักเรียน: ทำไมคุณจะ จำเป็นที่จะต้องใช้ระยะเวลาใน? 1880 01:15:05,543 --> 01:15:08,620 ทำไมทำไม่ได้เราก็ [ไม่ได้ยิน] sterln วินาที, เช่นตลอดเวลา [ไม่ได้ยิน] 1881 01:15:08,620 --> 01:15:09,460 >> Davin: คุณหมายถึงที่นี่? 1882 01:15:09,460 --> 01:15:10,001 >> นักเรียน: ใช่ 1883 01:15:10,001 --> 01:15:12,630 Davin: เพราะทุก เวลานี้สำหรับวงวิ่ง 1884 01:15:12,630 --> 01:15:14,295 ก็จะประเมินสภาพนี้ 1885 01:15:14,295 --> 01:15:14,920 นักเรียน: ขวา 1886 01:15:14,920 --> 01:15:16,836 Davin: และถ้าคุณมี sterln ที่นั่นแล้วก็ 1887 01:15:16,836 --> 01:15:19,510 จะมีการเรียกจริง ฟังก์ชั่นที่ทุกเวลาเดียว 1888 01:15:19,510 --> 01:15:21,090 ดังนั้นแทนที่จะเพียง เปรียบเทียบกับ int, 1889 01:15:21,090 --> 01:15:23,548 คุณกำลังจะได้รับการเรียกร้อง ฟังก์ชั่นและจากนั้นเปรียบเทียบ 1890 01:15:23,548 --> 01:15:24,510 ให้ค่าตอบแทน 1891 01:15:24,510 --> 01:15:25,860 ใช่จึงเป็นเพียงใช่ 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> ดีตกลงดังนั้นตอนนี้ทุกคนสามารถดูได้ 1894 01:15:30,770 --> 01:15:33,400 อะไร does-- นี้เป็นเหมือนนี้มัน 1895 01:15:33,400 --> 01:15:34,580 นี้เป็นแยมขวาที่นี่ 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 มันหมายความว่าอะไร? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 ผมทำอะไร? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 ใช่ความคิด? 1902 01:15:42,880 --> 01:15:43,482 ใช่? 1903 01:15:43,482 --> 01:15:45,692 >> นักเรียน: ดีดังนั้นเมื่อ คุณกำลังเข้าสู่อาร์เรย์ 1904 01:15:45,692 --> 01:15:47,525 คุณกำลังจะไป จากซ้ายไปขวา 1905 01:15:47,525 --> 01:15:51,786 เพื่อให้คุณกำลังจะไปใน ทศนิยมจากปุ่ม [ไม่ได้ยิน] 1906 01:15:51,786 --> 01:15:52,410 Davin: แน่นอน 1907 01:15:52,410 --> 01:15:55,063 นักเรียนดังนั้นแต่ละคน คุณต้องคูณ 1908 01:15:55,063 --> 01:15:59,490 สิ่งที่คุณเห็นเป็นค่าของ int โดย เวลาที่คุณได้รับที่จะย้ายที่หนึ่ง 1909 01:15:59,490 --> 01:16:01,590 >> Davin: ที่สมบูรณ์แบบที่สมบูรณ์แบบ ดังนั้นสำหรับตัวอย่างเช่นสมมุติ 1910 01:16:01,590 --> 01:16:05,376 บอกฉันให้ you-- ฉัน จะเขียนมากกว่าที่นี่ 1911 01:16:05,376 --> 01:16:06,480 ไม่ฉันไม่ได้ 1912 01:16:06,480 --> 01:16:08,640 ฉันจะเขียนมากกว่าที่นี่ 1913 01:16:08,640 --> 01:16:12,080 สมมติว่าฉันให้คุณ 76 ใช่มั้ย? 1914 01:16:12,080 --> 01:16:13,380 สมมติว่าผมให้คุณ 76 1915 01:16:13,380 --> 01:16:15,360 นั่นเป็นสตริงจะเริ่มต้นด้วย, OK? 1916 01:16:15,360 --> 01:16:16,840 >> ดังนั้นระยะเวลาคืออะไร? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2 ใช่มั้ย? 1919 01:16:19,060 --> 01:16:20,290 ผลรวมเป็น 0 1920 01:16:20,290 --> 01:16:21,600 แล้วเรากระโดดในสำหรับวงของเรา 1921 01:16:21,600 --> 01:16:24,187 ตกลงย้ำแรกของ นี้สิ่งที่มันจะเป็นอย่างไร 1922 01:16:24,187 --> 01:16:25,270 มันจะเป็นผลรวมเป็น 0 1923 01:16:25,270 --> 01:16:27,180 ดังนั้นครั้งรวม 10 0 1924 01:16:27,180 --> 01:16:28,500 นั่นคือความหมาย 1925 01:16:28,500 --> 01:16:29,880 แล้วสิ่งนี้จะทำอย่างไร 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 นักเรียน: [ไม่ได้ยิน] 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> Davin: มันจะเปิดที่ ตัวละครที่เป็นจำนวนเต็มใช่มั้ย? 1930 01:16:37,430 --> 01:16:42,160 เป็นชนิดของเช่นเดียวกับคุณ ปัญหาถึงตรง light-- นี้ 1931 01:16:42,160 --> 01:16:44,170 มันเหมือนกับมี ปัญหาการตั้งค่า VISIONEER 1932 01:16:44,170 --> 01:16:45,980 คุณจัดการกับค่า ASCII 1933 01:16:45,980 --> 01:16:48,520 ดังนั้นถ้าผมให้คุณเช่น เจ็ด แต่มันก็เป็นตัวอักษร 1934 01:16:48,520 --> 01:16:50,965 และคุณต้องการที่จะรู้ว่า ตกลงสิ่งที่หลักคือ? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 ใช่คุณอาจจะใช่ 1937 01:16:54,910 --> 01:16:55,900 เพื่อให้เป็นสิ่งหลักที่? 1938 01:16:55,900 --> 01:16:59,550 คุณสามารถลบ 0 จากมัน แต่คุณ ต้องลบ 0, ตัวละคร 1939 01:16:59,550 --> 01:17:01,425 >> และสถานที่ที่คนบางคน ได้รับการดีดกลับขึ้นมาพวกเขากำลัง 1940 01:17:01,425 --> 01:17:04,260 เช่น, OK, ดี, ฉันจะต้องรู้ ค่า ASCII สำหรับคำถามนี้? 1941 01:17:04,260 --> 01:17:06,218 ไม่มีคุณแน่นอนไม่ได้ จำเป็นต้องรู้ ASCII 1942 01:17:06,218 --> 01:17:09,520 ค่านิยมของเช่นตัวพิมพ์เล็ก พิมพ์ใหญ่ศูนย์ 1943 01:17:09,520 --> 01:17:12,060 >> Rob: ไม่มีเหตุผลคือการที่เคย วางบนแผ่นโกง 1944 01:17:12,060 --> 01:17:14,226 >> Davin: แน่นอนไม่ได้ เสียพื้นที่ของคุณด้วย 1945 01:17:14,226 --> 01:17:18,090 คุณสามารถ literally-- เพียงแทน บอก 48 เช่นขวาขึ้น 1946 01:17:18,090 --> 01:17:24,630 มีที่เทียบเท่ากับ บอกว่าหนึ่งหนึ่ง apostrophe, 1947 01:17:24,630 --> 01:17:27,680 เช่นนั้นเหมือนกัน 1948 01:17:27,680 --> 01:17:34,106 >> ปล้น: คุณเกือบจะคิดว่า มันเป็นพระเจ้าใดถ้าฉันต้องการของฉัน 1949 01:17:34,106 --> 01:17:37,490 oops-- คุณเกือบจะคิดว่ามัน เช่นถ้าเรามีบางอย่างเช่นกัญชาที่ 1950 01:17:37,490 --> 01:17:39,755 กำหนดเป็น 0 48 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 ที่จะไม่ทำงาน 1953 01:17:42,030 --> 01:17:45,502 แต่คิดว่ามันเป็นคำพูดเดียว 0 พูดเดียวและสำหรับทุกตัวอักษร 1954 01:17:45,502 --> 01:17:47,960 คิดว่ามันเป็นค่าคงที่ แสดงให้เห็นถึงค่า ASCII ที่ 1955 01:17:47,960 --> 01:17:49,080 >> Davin: ใช่ 1956 01:17:49,080 --> 01:17:52,820 ตกลงดังนั้นครั้งแรกที่ผ่านดังนั้น กับ 76-- ดังนั้นครั้งแรกที่ผ่าน 1957 01:17:52,820 --> 01:17:57,260 นี้เป็นเพียงตัวละคร 7 ลบตัวอักษร 0, 1958 01:17:57,260 --> 01:18:00,420 และผู้ที่มีเจ็ด integers-- ดีเหล่านั้น 1959 01:18:00,420 --> 01:18:04,030 เจ็ดพื้นที่ออกจากกัน อื่น ๆ ในแผนภูมิ ASCII หรืออะไรก็ตาม 1960 01:18:04,030 --> 01:18:06,770 เพื่อที่จะกลับ int 7 1961 01:18:06,770 --> 01:18:08,720 ดังนั้นตอนนี้ผลรวมเท่ากับ 7 1962 01:18:08,720 --> 01:18:10,830 >> ตกลงกันให้กระโดด ในนี้สำหรับวงอีกครั้ง 1963 01:18:10,830 --> 01:18:13,010 ตกลงตอนนี้มันเป็นผลรวม 10 ครั้ง 1964 01:18:13,010 --> 01:18:15,800 ดังนั้นคุณได้อย่างมีประสิทธิภาพ 7 ย้ายไปทางซ้าย 1965 01:18:15,800 --> 01:18:17,542 ที่ทำให้รู้สึก? 1966 01:18:17,542 --> 01:18:19,250 คุณได้อย่างมีประสิทธิภาพ ย้ายไปทางซ้าย 1967 01:18:19,250 --> 01:18:21,790 >> แล้วคุณ add-- นี้ เป็นไปได้ 6 ลบ 0 1968 01:18:21,790 --> 01:18:22,650 ที่ 6 1969 01:18:22,650 --> 01:18:24,752 ดังนั้นจึงเป็นไปได้ 70 บวก 6 1970 01:18:24,752 --> 01:18:25,996 76 ที่เป็นหมายเลขของคุณ 1971 01:18:25,996 --> 01:18:28,370 ดังนั้นไม่คำนึงถึงจำนวนสิ่งที่ ฉันให้คุณก็ช้าเพียง 1972 01:18:28,370 --> 01:18:31,610 จะไปเปลี่ยนค่าขนาดใหญ่ ไปทางซ้าย 1 ปัจจัยที่ 10 1973 01:18:31,610 --> 01:18:35,525 แต่ละครั้งในการวน, แล้วเพิ่มตามความจำเป็น 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> ในด้านหลัง? 1976 01:18:37,865 --> 01:18:40,240 นักเรียน: เราไม่ต้องทำ การตรวจสอบใด ๆ ในโปรแกรมได้หรือไม่ 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ปล้นดังนั้นเท่าที่ตรวจสอบ ไปสำหรับโปรแกรม 1979 01:18:44,302 --> 01:18:46,510 เราจะบอกคุณสวย มากสิ่งที่คุณจำเป็นต้องตรวจสอบ 1980 01:18:46,510 --> 01:18:48,670 ถ้าเราไม่ได้บอกคุณ อะไรแล้วโดยทั่วไป 1981 01:18:48,670 --> 01:18:50,320 สมมติว่าคุณต้องตรวจสอบสิ่งที่มากที่สุด 1982 01:18:50,320 --> 01:18:54,772 เช่นคุณอาจจะเพียงเพื่อความปลอดภัยคุณ อาจจะตรวจสอบเดี๋ยวก่อน S เป็นโมฆะ? 1983 01:18:54,772 --> 01:18:56,230 แล้วผมก็มีความคิดว่าจะกลับไม่มี 1984 01:18:56,230 --> 01:18:58,814 แต่เราจะบอกคุณ การจัดเรียงของสิ่งนี้ 1985 01:18:58,814 --> 01:18:59,480 0, ผมไม่ทราบ 1986 01:18:59,480 --> 01:19:02,786 >> Davin: และทำไมคุณต้องการ เพื่อตรวจสอบถ้า S เท่ากับ null? 1987 01:19:02,786 --> 01:19:03,660 นักเรียน: [ไม่ได้ยิน] 1988 01:19:03,660 --> 01:19:04,880 Davin: เพราะถ่านดาว 1989 01:19:04,880 --> 01:19:05,510 มันเป็นตัวชี้ 1990 01:19:05,510 --> 01:19:09,240 ดังนั้นยอมรับอย่างสมบูรณ์ ประกาศฉันจะบอกว่าโอเค 1991 01:19:09,240 --> 01:19:11,917 S เท่ากับ null เพราะมัน อาจจะเป็นตัวชี้ให้เป็นโมฆะ 1992 01:19:11,917 --> 01:19:14,250 ดังนั้นเมื่อใดก็ตามที่คุณมีตัวชี้ ในเส้นทางของคุณในแบบนี้ 1993 01:19:14,250 --> 01:19:15,420 คุณอาจจะตรวจสอบ 1994 01:19:15,420 --> 01:19:18,461 เพราะถ้าคุณไม่ได้ตรวจสอบว่าและ แล้วคุณแล้วไปเป็นของคุณสำหรับห่วง 1995 01:19:18,461 --> 01:19:20,100 และคุณ doing-- วิ่งหนีลง 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 วิ่งหนีลง 1998 01:19:22,920 --> 01:19:23,860 >> Rob: ขออภัยที่มัน 1999 01:19:23,860 --> 01:19:25,860 >> Davin: ดังนั้นเช่นถ้า มันเป็นโมฆะและจากนั้นคุณ 2000 01:19:25,860 --> 01:19:28,267 ทำเช่นนี้สิ่งที่ผิดพลาด ที่คุณจะได้รับ? 2001 01:19:28,267 --> 01:19:29,850 นักเรียน: คุณกำลังจะได้รับความผิดชุด 2002 01:19:29,850 --> 01:19:31,250 Davin: คุณกำลังจะตั้ง ความผิดที่ถูกต้องเพราะคุณ 2003 01:19:31,250 --> 01:19:32,616 พยายามที่จะเข้าไปในดัชนี null 2004 01:19:32,616 --> 01:19:35,240 ดังนั้นคุณจะพยายามที่จะดัชนี ในหน่วยความจำที่คุณไม่ได้เป็นเจ้าของ 2005 01:19:35,240 --> 01:19:39,550 ดังนั้นนี่ถ้านี้เป็นโมฆะและ คุณทำเช่นนี้คุณจะวงจร 2006 01:19:39,550 --> 01:19:43,656 >> Rob: ผมยังคิดว่าในการสอบที่ เราถามคำถามนี้เราบอกคุณ 2007 01:19:43,656 --> 01:19:45,655 ที่คุณก็สามารถคิด มันเป็นจำนวนบวก 2008 01:19:45,655 --> 01:19:48,270 เพราะ atoi คาดว่ายัง ที่จะจัดการกับตัวเลขติดลบ 2009 01:19:48,270 --> 01:19:49,686 ดังนั้นคุณจะต้องกรณีพิเศษ 2010 01:19:49,686 --> 01:19:53,080 เฮ้เป็นตัวอักษรตัวแรก เส้นประซึ่งในกรณีที่ตกลง 2011 01:19:53,080 --> 01:19:54,839 ตอนนี้ก็เป็นจำนวนเต็มลบ 2012 01:19:54,839 --> 01:19:56,380 เราจะบอกคุณทุกประเภทของสิ่งเหล่านี้ 2013 01:19:56,380 --> 01:19:58,005 เราจะบอกสิ่งที่คุณต้องการที่จะจัดการกับ 2014 01:19:58,005 --> 01:19:59,310 Davin: ใช่ 2015 01:19:59,310 --> 01:20:02,530 ดังนั้นฉันแน่ใจว่าบางคนอาจจะ have-- ถ้าคุณเริ่มมองหาที่สอบเก่า 2016 01:20:02,530 --> 01:20:03,900 คุณเคยเห็น sterln 2017 01:20:03,900 --> 01:20:05,120 ที่ได้รับความนิยมอย่างใดอย่างหนึ่ง 2018 01:20:05,120 --> 01:20:09,790 และผมคิดว่าใน sterln คุณต้อง จะตรวจสอบนี้สำหรับ null กลับ 2019 01:20:09,790 --> 01:20:10,950 0 หรือสิ่งที่ต้องการที่ 2020 01:20:10,950 --> 01:20:11,940 เช่นเดียวกับที่คุณมีการตรวจสอบเป็นโมฆะ 2021 01:20:11,940 --> 01:20:14,230 และถ้าคุณไม่ได้ว่า เป็นจุดปิดที่ทดสอบ 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 ดังนั้นต่อไปไม่ทุกคน รู้สึกตกลงกับ atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 ไม่มีใครต้องการที่จะ ไปกว่าชิ้นส่วนอีกครั้งหรือไม่ 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 Rob: ใช่แล้วผมคิดว่า เรายังบอกคุณคุณ 2028 01:20:25,565 --> 01:20:28,565 สามารถสรุปทุกอย่างเท่าไหร่ว่า พวกเขากำลังจริงป้อนตัวเลข 2029 01:20:28,565 --> 01:20:32,821 ที่คุณไม่ต้องกังวลเกี่ยวกับ เหมือนตัวอักษรที่อยู่ในสตริงดังนั้น 2030 01:20:32,821 --> 01:20:33,320 Davin: ใช่ 2031 01:20:33,320 --> 01:20:33,922 ใช่? 2032 01:20:33,922 --> 01:20:35,713 นักเรียน: คุณสามารถไป กว่าหนึ่งเวลามากขึ้นเมื่อ 2033 01:20:35,713 --> 01:20:37,860 คุณใช้คำพูดคู่และพูดเดียว? 2034 01:20:37,860 --> 01:20:41,290 >> Davin: แน่นอนดังนั้นคำพูดคู่มาก ก็เป็นคำพูดคู่นี้จะมี 2035 01:20:41,290 --> 01:20:43,370 ดังนั้นถ้าคุณเป็นสองเท่าของราคา อะไรที่เป็นสตริง 2036 01:20:43,370 --> 01:20:48,270 ดังนั้นเช่นถ้าผมมีนี้ 0 กว่าที่นี่ และฉันทำอย่างนี้ที่เป็นสตริง 2037 01:20:48,270 --> 01:20:50,060 ที่ไม่มีตัวอักษร 2038 01:20:50,060 --> 01:20:54,816 ดังนั้นผมจึงไม่สามารถหาค่า ASCII ของฉัน แผนภูมิเพราะสตริงใช่ 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> ตกลงคำถามอื่น ๆ ? 2041 01:20:59,480 --> 01:21:00,405 ใช่? 2042 01:21:00,405 --> 01:21:02,345 >> นักเรียน: เพื่อให้คุณได้ แล้วตอบนี้ 2043 01:21:02,345 --> 01:21:05,255 แต่เช่นเดียวกับเมื่อเรากำลังจริง เขียนนี้ในการตอบคำถาม, 2044 01:21:05,255 --> 01:21:08,165 ที่คุณต้องการให้เราเขียนด้วย slashes zeroes [ไม่ได้ยิน] 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 Davin เลขที่ 2047 01:21:11,540 --> 01:21:13,800 คำถามคือคุณควร ใส่เฉือนผ่านศูนย์ 2048 01:21:13,800 --> 01:21:14,890 เพื่อแสดงให้เห็นว่าพวกเขากำลังศูนย์? 2049 01:21:14,890 --> 01:21:15,890 ไม่มีเราจะคิดออก 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 ใช่ขอบคุณพวกเขากำลังดี 2052 01:21:19,530 --> 01:21:20,860 ตกลงอะไรอีกหรือไม่ 2053 01:21:20,860 --> 01:21:25,060 ไม่มีใครต้องการ to-- ดังนั้นฉันคิดว่า เราเคยทำงานนิด ๆ หน่อย ๆ เมื่อเวลาผ่านไป 2054 01:21:25,060 --> 01:21:27,305 คุณต้องการที่จะเห็นอีกคนหนึ่งหรือ? 2055 01:21:27,305 --> 01:21:28,096 นักเรียน: RandomInt 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> Davin: RandomInt ตกลงว่า 2058 01:21:30,750 --> 01:21:32,975 เพื่อขอทำ RandomInt 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 ฉันจะทำมันที่นี่ 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 ดังนั้น RandomInt เป็นจริงง่ายมาก 2063 01:21:39,210 --> 01:21:43,578 ผมคิดว่า atoi น่าจะเป็นหนึ่งในที่ยากที่สุด ที่เราได้ถามในปีก่อนหน้า 2064 01:21:43,578 --> 01:21:44,453 นักเรียน: [ไม่ได้ยิน] 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> Davin: อะไรนะ? 2067 01:21:47,161 --> 01:21:49,493 Rob: ผมเห็นว่ามันเป็นชนิด ของสามารถดูได้จากที่นี่ 2068 01:21:49,493 --> 01:21:50,040 Davin: มันคืออะไร? 2069 01:21:50,040 --> 01:21:52,500 Rob: ผมไม่คิดว่ามันเป็น going-- ผมคิดว่า มันจะวิ่งออกไปทางขวา 2070 01:21:52,500 --> 01:21:53,791 Davin: ตกลงดังนั้นฉันจะทำอย่างใดอย่างหนึ่ง 2071 01:21:53,791 --> 01:21:56,250 และแล้วคุณก็วางมันลงบนหน้าจอ 2072 01:21:56,250 --> 01:21:57,150 >> ปล้นสิทธิทั้งหมด 2073 01:21:57,150 --> 01:21:58,190 >> Davin: คุณต้องการที่จะเป็นนักเขียนของฉันได้อย่างไร 2074 01:21:58,190 --> 01:21:58,600 >> ปล้น: ใช่ 2075 01:21:58,600 --> 01:21:59,100 >> Davin: ดี 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 ตกลงฉันสามารถลบนี้หรือไม่? 2078 01:22:02,727 --> 01:22:04,188 >> นักเรียน: ใช่ 2079 01:22:04,188 --> 01:22:05,162 >> Davin: นั่นอย่างหนัก 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (ร้อง) คุณกำลังทำ สิ่งที่คุณทำ 2082 01:22:12,062 --> 01:22:14,454 และทำในสิ่งที่คุณทำไม่ได้ 2083 01:22:14,454 --> 01:22:14,954 สิทธิ์ทั้งหมด 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> ตกลงถ้าผมจำไม่ผิดที่ แบบทดสอบ RandomInt ก็ชอบ 2086 01:22:22,930 --> 01:22:26,190 ตกลงฉันจะให้คุณทั้งสอง ตัวเลขเช่นข 2087 01:22:26,190 --> 01:22:30,380 และฉันต้องการให้คุณให้ฉัน RandomInt ระหว่างตัวเลขเหล่านั้น 2088 01:22:30,380 --> 01:22:33,440 ดังนั้น RandomInt จะ จะใช้เวลาสอง numbers-- 2089 01:22:33,440 --> 01:22:41,690 ดังนั้น RandomInt-- และมัน จะกลับ int 2090 01:22:41,690 --> 01:22:42,930 >> ดังนั้นสิ่งที่เป็นค่าตอบแทนหรือไม่ 2091 01:22:42,930 --> 01:22:44,151 ผมแค่บอกคุณ 2092 01:22:44,151 --> 01:22:44,650 int ใช่มั้ย? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 เช่นนี้แล้วก็ จะใช้เวลาสอง ints 2095 01:22:49,260 --> 01:22:56,301 ดังนั้นมันจะใช้เวลา int และ int B, เช่นนั้น 2096 01:22:56,301 --> 01:22:58,217 ดังนั้นสิ่งที่เป็น RandomInt จะทำคือมันจะ 2097 01:22:58,217 --> 01:23:02,440 เพื่อกลับไปบางค่าแบบสุ่ม ในระหว่างทั้งสองค่า 2098 01:23:02,440 --> 01:23:05,140 ดังนั้นจึงเป็นไปได้มากขึ้น กว่าน้อยกว่าข 2099 01:23:05,140 --> 01:23:09,020 ดังนั้นผมคิดว่าคุณอาจจะคิดว่า เป็นขนาดเล็กของทั้งสองค่า 2100 01:23:09,020 --> 01:23:12,210 ดังนั้นหากเรากำลังติดต่อกับ แบบแผนฟังก์ชั่นอะไร 2101 01:23:12,210 --> 01:23:14,825 ที่เราเห็นได้ว่า ทำให้เรามีสิ่งสุ่ม? 2102 01:23:14,825 --> 01:23:15,450 นักเรียน: Drand 2103 01:23:15,450 --> 01:23:16,506 Davin: Drand ว่า 2104 01:23:16,506 --> 01:23:18,630 ดังนั้นคุณจะอาจจะ ต้องการที่จะใช้ drand ของคุณ 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 เพื่อให้คุณสามารถพูด int สุ่มและเราจะ เพียงแค่บอกว่ามันเท่ากับ 0 ตอนนี้ 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 และพวกเขากำลังที่เรากำลังจะบอกว่า ตกลงเท่ากับสุ่ม drand 48 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 และสิ่งนี้จะกลับมา? 2111 01:23:40,830 --> 01:23:43,742 อะไรฟังก์ชันนี้ให้คุณ? 2112 01:23:43,742 --> 01:23:45,610 >> นักเรียนระหว่าง 0 และ 1 2113 01:23:45,610 --> 01:23:47,870 >> Davin: ใช่ระหว่าง 0 และ 1 2114 01:23:47,870 --> 01:23:48,890 ดังนั้นมันจะ be-- 2115 01:23:48,890 --> 01:23:51,070 >> ปล้น: และนี้เป็นเท่าไหร่ผมคิดว่า เราจะบอกคุณนี้ 2116 01:23:51,070 --> 01:23:52,670 เช่นคุณสามารถใช้ drand 48 2117 01:23:52,670 --> 01:23:54,350 คุณสามารถตรวจสอบนี้ในการสอบที่ผ่านมา 2118 01:23:54,350 --> 01:23:56,720 แต่เราอาจจะบอกว่าคุณ สามารถใช้ drand 48 ซึ่ง 2119 01:23:56,720 --> 01:23:58,790 กลับลอยระหว่าง 0 และ 1 2120 01:23:58,790 --> 01:24:00,830 >> Davin: ใช่ใช่ฉัน ค่อนข้างมั่นใจว่าในการสอบ 2121 01:24:00,830 --> 01:24:03,860 มันบอกว่าคุณอาจ ต้องการที่จะใช้ drand ใช่ 2122 01:24:03,860 --> 01:24:07,041 ดังนั้นมันจะกลับมา ค่าระหว่าง 0 และ 1 บางส่วน 2123 01:24:07,041 --> 01:24:08,790 และแล้วสิ่งที่เป็นคุณ จะต้องการจะทำอย่างไร? 2124 01:24:08,790 --> 01:24:16,360 ดีที่คุณต้องการคูณคูณ รอผมคิดว่ามันเป็นเช่นนี้ขอโทษ 2125 01:24:16,360 --> 01:24:18,018 ฉันจะทำเช่นนี้ 2126 01:24:18,018 --> 01:24:19,410 ฉันไม่รู้ 2127 01:24:19,410 --> 01:24:22,240 >> ดังนั้นขลบ 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 ดังนั้นทำไมขลบ? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 ดังนั้นสมมติว่า drand จะช่วยให้คุณกลับมา ตกลง int-- ฉันจะทำส่วนที่เหลือ, 2132 01:24:30,490 --> 01:24:33,380 ดังนั้นบวก 2133 01:24:33,380 --> 01:24:36,130 ดังนั้นสิ่งที่ does-- และเป็นขลบ 2134 01:24:36,130 --> 01:24:40,670 ดังนั้นสมมติว่า drand ที่ช่วยให้คุณกลับมา ค่าสูงสุดมันอาจเป็นไปได้ 2135 01:24:40,670 --> 01:24:41,410 ให้คุณ 2136 01:24:41,410 --> 01:24:42,409 อะไรที่จะเป็น? 2137 01:24:42,409 --> 01:24:43,010 นักเรียน: 1 2138 01:24:43,010 --> 01:24:44,430 >> Davin: 1 ใช่มั้ย? 2139 01:24:44,430 --> 01:24:47,880 ดังนั้นหากนี้คือ 1 และคุณ คูณโดย b ลบ, 2140 01:24:47,880 --> 01:24:50,110 ดีที่เป็นเพียง ความแตกต่างระหว่างลบ A. 2141 01:24:50,110 --> 01:24:52,870 และถ้าคุณแล้วเพิ่มที่ กลับขึ้นไปบนว่าเป็นสิ่งที่? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 เป็นพื้น b 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 ที่ทำให้รู้สึก? 2146 01:24:57,310 --> 01:24:57,851 >> นักเรียน: ใช่ 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> Davin ดังนั้นถ้าเป็นสูงสุด คุณค่ามันอาจจะเป็นไปได้ 2149 01:25:02,170 --> 01:25:03,175 มันเป็นไปได้ 1 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 แล้วนี้เป็นเพียง ความแตกต่างระหว่างทั้งสอง 2152 01:25:06,330 --> 01:25:11,410 เพิ่มในดังนั้นนี่คือ จะกลับมาแบบสุ่ม 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 และในกรณีที่มุมที่ drand จะช่วยให้คุณกลับมาที่ 1 2155 01:25:18,620 --> 01:25:20,970 สุ่มจะเป็นเพียงการได้อย่างมีประสิทธิภาพได้รับการข 2156 01:25:20,970 --> 01:25:22,700 แต่ที่สูงสุดที่จะสามารถ 2157 01:25:22,700 --> 01:25:27,420 ดังนั้นถ้ามันเป็นไปได้น้อยกว่า ที่นี้จึงขอบอกว่าเหมือน 0.9 2158 01:25:27,420 --> 01:25:31,080 เป็นอย่างนั้น 0.9 คูณ b ลบ เป็นไปได้น้อย 2159 01:25:31,080 --> 01:25:33,230 กว่าความแตกต่างระหว่างขลบ 2160 01:25:33,230 --> 01:25:35,830 >> แล้วถ้าคุณเพิ่มว่า ไปแล้วค่าที่ 2161 01:25:35,830 --> 01:25:38,986 ไปได้มากกว่าเพราะ คุณกำลังเพิ่มบางสิ่งบางอย่างลงบนมัน, 2162 01:25:38,986 --> 01:25:40,360 แต่มันก็เป็นไปได้น้อยกว่าข 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 เพื่อให้คุณกำลังจะได้รับการสุ่ม จำนวน drand เพราะคุณกำลังเรียกร้อง 2165 01:25:44,420 --> 01:25:48,000 และแรนด์ที่สุ่มหมายเลขที่ จะเป็นหนึ่งในระหว่าง 2166 01:25:48,000 --> 01:25:49,342 และข 2167 01:25:49,342 --> 01:25:50,780 ที่ทำให้รู้สึก? 2168 01:25:50,780 --> 01:25:52,990 >> ปล้น: เพียงที่จะนำมันใน ตัวเลขที่เป็นรูปธรรมดังนั้น 2169 01:25:52,990 --> 01:25:55,450 สมมุติว่าเราต้องการที่จะเลือก สุ่มตัวเลขระหว่าง 7 และ 10 2170 01:25:55,450 --> 01:25:56,960 ดังนั้นขลบเป็นช่วงของเรา 2171 01:25:56,960 --> 01:26:00,150 ดังนั้นจึงเป็นช่วงของสาม ตัวเลขที่เราต้องการที่จะเลือกจาก 2172 01:26:00,150 --> 01:26:03,290 แล้วคูณ ว่าระหว่าง 0 และ 1 1 2173 01:26:03,290 --> 01:26:07,430 หากที่แล้วทำให้เรา some-- ขอบอกว่าจะช่วยให้เรา 1.5 2174 01:26:07,430 --> 01:26:10,670 >> แล้ว 1.5 เราต้องการที่จะไป 7-10 2175 01:26:10,670 --> 01:26:14,470 ดังนั้น 1.5 บวก 7 นำเรา กลับเข้ามาใน 7-10 ช่วงของเรา 2176 01:26:14,470 --> 01:26:17,580 และจากนั้นเราจะเก็บไว้ภายใน จำนวนเต็มดังนั้นจึงตัดทอนลงไป 8 2177 01:26:17,580 --> 01:26:18,790 และจากนั้นเราก็กลับมาที่ 2178 01:26:18,790 --> 01:26:21,310 ดังนั้นขลบเป็นช่วงของเรา 2179 01:26:21,310 --> 01:26:25,770 กะมันได้เป็นตัวเลข ที่เราต้องการอยู่ในช่วงที่ 2180 01:26:25,770 --> 01:26:30,540 ดังนั้นระหว่างวันที่ 7 และ 10 และแล้วเรา สามารถกลับสิ่งที่เราจบลงด้วย 2181 01:26:30,540 --> 01:26:32,684 >> Davin: ใช่ดี 2182 01:26:32,684 --> 01:26:34,470 >> Rob: ขอบคุณ 2183 01:26:34,470 --> 01:26:35,628 >> Davin: ใช่อะไรขึ้น? 2184 01:26:35,628 --> 01:26:39,746 >> นักเรียน: เราทำงานกับชนิดของใด ๆ ข้อผิดพลาด ASCII เมื่อ we're-- ถ้า drand เป็น 2185 01:26:39,746 --> 01:26:40,996 กลับลอย [ไม่ได้ยิน] 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ปล้นดังนั้นเช่นเดียวร็อบกล่าวว่า เพราะสุ่มไม่ได้ int, 2188 01:26:45,360 --> 01:26:47,080 ดังนั้น drand จะลอย 2189 01:26:47,080 --> 01:26:48,470 ดังนั้นแล้วก็คูณออก 2190 01:26:48,470 --> 01:26:50,507 และคุณอาจได้รับบาง ชนิดของตัวเลขลอย 2191 01:26:50,507 --> 01:26:51,840 และจากนั้นก็จะตัดทอน 2192 01:26:51,840 --> 01:26:52,339 >> นักเรียน: OK 2193 01:26:52,339 --> 01:26:53,019 Davin: ใช่ 2194 01:26:53,019 --> 01:26:56,060 ปล้นและถ้าคอมไพเลอร์จะเตือน คุณเกี่ยวกับการเช่นเดียวกับการสูญเสียของความแม่นยำ 2195 01:26:56,060 --> 01:26:58,986 โยนเพียง int ใน มีและมันก็เป็นสิ่งที่ดี 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 Davin: ใช่? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> นักเรียน: มันจะมี ความน่าจะเป็นอย่างเดียวกับการ, 2200 01:27:04,722 --> 01:27:06,156 เหมือนขหรือ [ได้ยิน] 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ปล้นดังนั้นเท่าไหร่ฉันจริง wondering-- เป็น RandomInt คาดไว้ 2203 01:27:10,980 --> 01:27:14,362 จะเป็นตัวเลขจากน้อยกว่า B? 2204 01:27:14,362 --> 01:27:16,820 เช่นถ้าเป็นระหว่าง 7 และ 10 สิ่งที่เป็นไปได้หรือไม่ 2205 01:27:16,820 --> 01:27:18,454 7, 8, และ 9 หรือ 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 Davin: ผมลืม 2207 01:27:19,120 --> 01:27:19,880 เมื่อถึงตรงปัญหา 2208 01:27:19,880 --> 01:27:20,570 >> Rob: ผมคิดว่ามันเป็น 7, 8, 9 2209 01:27:20,570 --> 01:27:22,785 >> Davin: มันโดยเฉพาะกล่าวว่าหนึ่ง รวมและเป็นเอกสิทธิ์เฉพาะของ 2210 01:27:22,785 --> 01:27:23,110 >> ปล้น: ใช่ 2211 01:27:23,110 --> 01:27:23,670 >> Davin: แต่ผม don't-- ฉัน not-- 2212 01:27:23,670 --> 01:27:25,878 >> ปล้นดังนั้นผมคิดว่าเหล่านี้คือ ไม่รวมซึ่งในกรณีนี้ 2213 01:27:25,878 --> 01:27:28,152 มีความเท่าเทียมกัน น่าจะเป็นของ 7, 8, และ 9 2214 01:27:28,152 --> 01:27:29,360 มีความน่าจะเป็น 10 ไม่ได้ 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 Davin: ใช่? 2217 01:27:32,270 --> 01:27:33,395 นักเรียน: ฉันมีคำถาม 2218 01:27:33,395 --> 01:27:38,090 เราต้องการที่จะกำหนดฟังก์ชัน ผลตอบแทนที่ได้ไม่คุ้มค่า แต่อาร์เรย์ 2219 01:27:38,090 --> 01:27:41,020 จากนั้นสิ่งที่จะเป็น ไวยากรณ์หลังจากที่กลับมา? 2220 01:27:41,020 --> 01:27:44,604 >> Davin: ตกลงเป็นอย่างนั้นคุณ would-- หลังจากกลับ? 2221 01:27:44,604 --> 01:27:47,020 ดังนั้นสมมติว่าคุณได้ประกาศ อาเรย์ที่มีขึ้น 2222 01:27:47,020 --> 01:27:49,708 แล้วคุณก็จะกลับมา ชื่อของอาร์เรย์ 2223 01:27:49,708 --> 01:27:50,676 >> นักเรียน: OK ขอขอบคุณ 2224 01:27:50,676 --> 01:27:51,718 แล้วก็กลับมาพร้อมกับเเรก 2225 01:27:51,718 --> 01:27:52,759 Davin: โอ้รอขอโทษ 2226 01:27:52,759 --> 01:27:54,620 คำถามคือวิธีการ คุณจะกลับอาร์เรย์ 2227 01:27:54,620 --> 01:27:56,170 >> Rob: แม้ว่ามันจะไม่ได้ ได้รับการประกาศอาร์เรย์ 2228 01:27:56,170 --> 01:27:57,260 ในกองหรืออะไรอย่างนั้น 2229 01:27:57,260 --> 01:27:59,510 มันจะต้องมีอะไรบางอย่าง malloced เพราะ malloc 2230 01:27:59,510 --> 01:28:01,610 เป็นวิธีการที่คุณได้รับรอบ จัดสรรหน่วยความจำอัตโนมัติ 2231 01:28:01,610 --> 01:28:02,109 >> Davin: ใช่ 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 Rob: วิธีที่คุณจะได้รับรอบขอบเขตท้องถิ่น 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> Davin: แต่คุณจะ เพียงแค่กลับ name-- ของ 2236 01:28:11,550 --> 01:28:17,890 >> นักเรียน: [ไม่ได้ยิน] มันไม่ได้เป็นอย่างใดอย่างหนึ่ง ค่าตัวอย่างเช่นตัวเลขสองดังนั้น 2237 01:28:17,890 --> 01:28:18,390 [ไม่ได้ยิน] 2238 01:28:18,390 --> 01:28:19,590 >> Davin: คุณไม่สามารถกลับจำนวนหลาย 2239 01:28:19,590 --> 01:28:20,850 คุณไม่สามารถเช่น return-- 2240 01:28:20,850 --> 01:28:23,630 >> นักเรียน: ฉันพูดคุยเกี่ยวกับการกลับ อาร์เรย์หรือสิ่งที่ต้องการ 2241 01:28:23,630 --> 01:28:26,050 >> Davin: ใช่ดังนั้นคำถามคือ ฉันสามารถคืนค่าหลายค่า 2242 01:28:26,050 --> 01:28:27,460 คุณไม่สามารถคืนค่าหลายค่า 2243 01:28:27,460 --> 01:28:30,270 คุณไม่สามารถเหมือนกลับมาแล้ว กลับขหรือสิ่งที่ต้องการ 2244 01:28:30,270 --> 01:28:32,710 เพราะหลังจากที่คุณกลับมาที่คุณ กลับออกมาจากการทำงาน 2245 01:28:32,710 --> 01:28:35,790 และจากนั้นการทำงานจะทำและ เช่นร็อบกล่าวว่าเป็นในกอง 2246 01:28:35,790 --> 01:28:38,260 >> ดังนั้นสิ่งที่หน่วยความจำที่เพิ่งได้รับ กลับไปยังเครื่องคอมพิวเตอร์ 2247 01:28:38,260 --> 01:28:40,025 ทุกอย่างได้รับการลืมโดยทั่วไป 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 ดังนั้นหากคุณต้องการที่จะกลับไปหลาย ค่าที่คุณต้องกลับอาร์เรย์ 2250 01:28:44,430 --> 01:28:45,971 และวิธีที่คุณทำอย่างนั้นจะ mallocing 2251 01:28:45,971 --> 01:28:48,780 แล้วคุณจะกลับมา x เช่นนั้น 2252 01:28:48,780 --> 01:28:50,280 โดยทั่วไปคุณเพียงแค่กลับชื่อ 2253 01:28:50,280 --> 01:28:51,620 และเมื่อคุณกลับมา บางอย่างเช่นนี้คุณ 2254 01:28:51,620 --> 01:28:53,200 ไม่จริงกลับค่า 2255 01:28:53,200 --> 01:28:55,430 >> ดังนั้นสมมติว่าคุณเก็บไว้ ค่าในอาร์เรย์ 2256 01:28:55,430 --> 01:28:57,910 คุณไม่ได้จริง กลับค่าเหล่านั้น 2257 01:28:57,910 --> 01:29:01,515 เช่นถ้าผมกลับ int ฉัน จริงๆกลับสำเนาของค่า 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 แต่ถ้าฉันจะกลับมา บางอย่างเช่นนี้ 2260 01:29:03,850 --> 01:29:06,450 ฉันกลับมาอ้างอิง กับค่าเหล่านั้น 2261 01:29:06,450 --> 01:29:09,090 ดังนั้นฉันกลับมาโดยทั่วไป อยู่หน่วยความจำไปยังค่า 2262 01:29:09,090 --> 01:29:10,079 ที่ทำให้รู้สึก? 2263 01:29:10,079 --> 01:29:10,620 นักเรียน: ใช่ 2264 01:29:10,620 --> 01:29:11,120 Davin: ดี 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 ใช่? 2267 01:29:13,410 --> 01:29:15,430 >> นักเรียน: เมื่อคุณอยู่ โดยใช้ drand กว่าที่นี่ 2268 01:29:15,430 --> 01:29:17,660 คุณไม่ต้องใส่ srand ก่อนที่? 2269 01:29:17,660 --> 01:29:20,320 >> Davin: ไม่ไม่ผมไม่คิดอย่างนั้น 2270 01:29:20,320 --> 01:29:23,040 >> ปล้น: ใช่เพื่อทำคุณมี จะพูดอะไรเกี่ยวกับ srand? 2271 01:29:23,040 --> 01:29:26,900 การเริ่มต้นของคุณไม่เคยบอก srand ที่ทุกคนจะทำ srand ของ null 2272 01:29:26,900 --> 01:29:29,350 ดังนั้น drand ในการทำงานจะเป็นของตัวเอง 2273 01:29:29,350 --> 01:29:33,759 และมันจะเมล็ดโดยอัตโนมัติด้วย เวลาปัจจุบันคือสิ่งที่มันใช้ 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 Davin: ใช่? 2276 01:29:35,675 --> 01:29:40,950 นักเรียน: คุณ [ไม่ได้ยิน] กับตัวเลขหรือไม่ 2277 01:29:40,950 --> 01:29:42,570 Davin: ใช่คุณสามารถ 2278 01:29:42,570 --> 01:29:46,770 นักเรียน: เพื่อให้คุณสามารถ พูดเหมือน 4 ครั้งที่ 2 2279 01:29:46,770 --> 01:29:50,280 สิ่งที่เป็นคุณไม่สามารถคิด แล้ว int สี่ไบต์ 2280 01:29:50,280 --> 01:29:51,020 only-- 2281 01:29:51,020 --> 01:29:53,830 >> Davin: ผมหมายถึงการตอบคำถามที่คุณสามารถ 2282 01:29:53,830 --> 01:29:54,830 [หัวเราะ] 2283 01:29:54,830 --> 01:29:55,780 >> ปล้น: mm ไม่ 2284 01:29:55,780 --> 01:29:56,780 Davin: ใช่ใช่คุณสามารถ 2285 01:29:56,780 --> 01:30:00,197 ถ้าพวกเขาถามคุณว่าใหญ่ int คือ คุณจะไม่สามารถเช่นเดียวกับสี่หรือแปด 2286 01:30:00,197 --> 01:30:02,030 ปล้น: โอ้ดังนั้นหาก คำถามเฉพาะ 2287 01:30:02,030 --> 01:30:04,857 เช่นถ้ามันเป็นปัญหาการเข้ารหัส, คุณควรจะพูดว่าขนาดของ int 2288 01:30:04,857 --> 01:30:06,690 ถ้ามันเป็นตารางหรือ มันบอกว่ากี่ไบต์, 2289 01:30:06,690 --> 01:30:08,808 คุณไม่ควรกรอกข้อมูลลงในขนาดของ ints 2290 01:30:08,808 --> 01:30:11,278 >> นักเรียน: [หัวเราะ] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> Davin: ขวาจึงเป็นเหตุผลว่าทำไม ขนาดของ int ที่สำคัญที่นี่? 2293 01:30:20,580 --> 01:30:23,085 ดังนั้นเช่นถ้าเรากำลังจะ 32 บิต หน่วยประมวลผลหรือสิ่งที่ต้องการที่ 2294 01:30:23,085 --> 01:30:24,300 แล้วมันจะเป็นสี่ไบต์ 2295 01:30:24,300 --> 01:30:26,342 แต่ในบางส่วนของใหม่ สิ่งที่มันอาจจะเป็นอะไร? 2296 01:30:26,342 --> 01:30:27,383 มันอาจจะเป็นแปดใช่มั้ย? 2297 01:30:27,383 --> 01:30:30,550 ดังนั้นเจ้านี่ถ้าคุณเพียงแค่ยากรหัสสี่ แล้วในบางเครื่องก็จะทำงาน 2298 01:30:30,550 --> 01:30:32,180 บางเครื่องก็จะไม่ทำงาน 2299 01:30:32,180 --> 01:30:35,270 แต่ถ้าแบบทดสอบที่เรากำลัง เช่นวิธีการใหญ่คือ int? 2300 01:30:35,270 --> 01:30:35,770 ใส่สี่ 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ปล้นขวา 2303 01:30:39,210 --> 01:30:39,790 Davin: ใช่? 2304 01:30:39,790 --> 01:30:43,192 นักเรียน: งั้นเพราะเรากำลังประกาศ [ไม่ได้ยิน] ที่อยู่ในฟังก์ชั่น, 2305 01:30:43,192 --> 01:30:45,622 เราควรจะใส่ 3 ภายในฟังก์ชันที่? 2306 01:30:45,622 --> 01:30:46,907 หรือเราสามารถใช้มันนอก? 2307 01:30:46,907 --> 01:30:48,740 Davin: คุณสามารถใช้มัน นอกฟังก์ชันที่ 2308 01:30:48,740 --> 01:30:49,890 ดังนั้นเขาจึงขอได้ฟรี 2309 01:30:49,890 --> 01:30:51,700 >> นักเรียน: สูญเสียการติดตาม ของที่ [ไม่ได้ยิน] 2310 01:30:51,700 --> 01:30:54,720 >> ปล้น: โอ้, ฟรีไม่ happen-- ที่เป็นส่วนหนึ่งของความมหัศจรรย์ของ malloc 2311 01:30:54,720 --> 01:30:57,220 คือการที่คุณไม่ได้ จำกัด ขอบเขตท้องถิ่น 2312 01:30:57,220 --> 01:31:00,700 คุณมีการควบคุมเต็มรูปแบบผ่าน ระยะเวลาที่ตัวแปรของคุณมีชีวิตอยู่ 2313 01:31:00,700 --> 01:31:05,380 ดังนั้นเราจึงเรียก malloc ที่นี่ก็อาจจะ เป็นฟังก์ชันแยก 2314 01:31:05,380 --> 01:31:08,670 มันอาจจะเป็น 10 ชั่วโมงต่อมา ที่ในที่สุดเราก็โทรฟรี 2315 01:31:08,670 --> 01:31:11,764 >> Davin: ดังนั้นสำหรับตัวอย่างเช่นคู่ สัปดาห์ต่อจากนี้เมื่อคุณจน 2316 01:31:11,764 --> 01:31:13,680 ทำสะกดพจนานุกรมของคุณ psets คุณจะ 2317 01:31:13,680 --> 01:31:16,410 จะมีฟังก์ชั่นบางอย่างที่ สร้างตันของโหนด 2318 01:31:16,410 --> 01:31:18,630 ดังนั้นคุณ mallocing ตัน ของโหนดในการทำงานนี้ 2319 01:31:18,630 --> 01:31:20,670 และจากนั้นในภายหลัง ฟังก์ชั่นแยกต่างหากคุณ 2320 01:31:20,670 --> 01:31:22,440 จะต้องการที่จะเป็นอิสระโหนดเหล่านั้นทั้งหมด 2321 01:31:22,440 --> 01:31:25,740 เพื่อให้คุณสามารถแท้จริงเพียงแค่ผ่านไป ฟรีตัวชี้เพื่อให้อยู่หน่วยความจำ 2322 01:31:25,740 --> 01:31:26,684 กับสิ่งที่คุณ malloced 2323 01:31:26,684 --> 01:31:27,600 และที่จะได้รับการปรับ 2324 01:31:27,600 --> 01:31:29,725 คุณไม่จำเป็นต้องที่จะเป็นอิสระ, เช่นในฟังก์ชันเดียวกัน 2325 01:31:29,725 --> 01:31:30,449 ใช่? 2326 01:31:30,449 --> 01:31:36,197 >> นักเรียนดังนั้น malloc ตัวแปร [ไม่ได้ยิน] นอก? 2327 01:31:36,197 --> 01:31:37,384 นั่นคือสิ่งที่คุณพูด? 2328 01:31:37,384 --> 01:31:38,300 Davin: รอบอกว่า? 2329 01:31:38,300 --> 01:31:38,800 ขอโทษ 2330 01:31:38,800 --> 01:31:42,300 >> นักเรียน: ถ้าตัวแปร malloc สามารถเป็นอิสระที่ใดก็ได้ในรหัส 2331 01:31:42,300 --> 01:31:44,800 จากนั้นพวกเขาสามารถเข้าถึงได้ ที่ใดก็ได้ในรหัส? 2332 01:31:44,800 --> 01:31:45,800 คุณสามารถเก็บไว้ในประเทศหรือไม่ 2333 01:31:45,800 --> 01:31:47,880 >> Davin: โอ้เธอถาม เหมือนตัวแปร like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> Rob: เพื่อให้คุณยังคงต้อง มีการเรียงลำดับของการอ้างอิงบางส่วน 2336 01:31:55,510 --> 01:31:57,220 เพื่อป้องกัน malloc ของหน่วยความจำ 2337 01:31:57,220 --> 01:31:58,540 ดังนั้นที่นี่เรากำลังกลับมา x 2338 01:31:58,540 --> 01:31:59,040 นักเรียน: โอ้ 2339 01:31:59,040 --> 01:32:01,920 Rob: ถ้าเราไม่ได้กลับ x ที่นี่และครั้งนี้เป็นโมฆะเพียง 2340 01:32:01,920 --> 01:32:04,550 แล้วเราจะมีการเข้าถึงไม่ ตัวชี้ที่ถูก malloced, 2341 01:32:04,550 --> 01:32:05,920 และก็รั่วไหลของหน่วยความจำ 2342 01:32:05,920 --> 01:32:06,690 >> นักเรียน: OK 2343 01:32:06,690 --> 01:32:10,010 >> Davin ดังนั้นเช่นสมมติว่าคุณ มีนี้เช่นขวาที่นี่ 2344 01:32:10,010 --> 01:32:10,510 ปล้นเลขที่ 2345 01:32:10,510 --> 01:32:13,430 Davin: ในฟังก์ชั่นหลักของฉันฉันไม่สามารถ เพียงโทร x นี้และจะเป็นเหมือนตกลง 2346 01:32:13,430 --> 01:32:14,645 ในการทำงานนี้ผมทำอย่างนี้ 2347 01:32:14,645 --> 01:32:14,960 >> ปล้นขวา 2348 01:32:14,960 --> 01:32:17,790 >> Davin: ดังนั้นฉันจะเรียก x ใน เหมือนหลักหรือสิ่งที่ต้องการที่ 2349 01:32:17,790 --> 01:32:18,540 คุณไม่สามารถทำเช่นนั้นได้ 2350 01:32:18,540 --> 01:32:19,600 คุณกำลังจะกลับสิ่งที่ 2351 01:32:19,600 --> 01:32:21,000 แต่สิ่งที่คุณจะกลับมา? 2352 01:32:21,000 --> 01:32:22,130 คุณกำลังจะได้กลับมาอยู่หน่วยความจำ 2353 01:32:22,130 --> 01:32:25,130 และเนื่องจากคุณกลับหน่วยความจำ ที่อยู่ที่สามารถเข้าถึงได้จากที่อื่น 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 คำถามใด ๆ เพิ่มเติมหรือไม่ 2356 01:32:28,255 --> 01:32:28,755 ใช่? 2357 01:32:28,755 --> 01:32:31,213 >> นักเรียน: เป็นฟังก์ชั่นดังกล่าวข้างต้น การตรวจสอบ [ไม่ได้ยิน] 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> Davin: ทำไมฉันไม่จำเป็นต้องทำเช่นนั้น? 2360 01:32:35,005 --> 01:32:35,880 นักเรียน: [ไม่ได้ยิน] 2361 01:32:35,880 --> 01:32:37,755 Davin: เพราะคุณ ไม่ mallocing อะไร 2362 01:32:37,755 --> 01:32:39,640 จึง not-- ใช่มัน ไม่ชอบสตริง 2363 01:32:39,640 --> 01:32:41,160 มันเป็นตัวชี้ที่ใดที่หนึ่ง 2364 01:32:41,160 --> 01:32:42,951 เหล่านี้เป็นค่าเพียง 2365 01:32:42,951 --> 01:32:43,450 นักเรียน: OK 2366 01:32:43,450 --> 01:32:43,949 Davin: ใช่ 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 อะไรอีกหรือไม่ 2369 01:32:48,470 --> 01:32:48,970 Rob: ครับ? 2370 01:32:48,970 --> 01:32:50,386 นักเรียน: แต่เมื่อคุณ [ไม่ได้ยิน] 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> Rob: ดังนั้นเพื่อที่จะเป็นอิสระ หน่วยความจำที่เราจะบอกว่าที่นี่ 2373 01:32:58,690 --> 01:33:01,350 ดังนั้น x เป็นตัวชี้ของเราที่จะ บล็อกของหน่วยความจำ 2374 01:33:01,350 --> 01:33:02,845 เราเป็นอิสระชี้ว่า 2375 01:33:02,845 --> 01:33:04,470 และเราจะไม่จำเป็นต้องทำมันที่นี่ 2376 01:33:04,470 --> 01:33:05,390 เราสามารถทำมันได้ทุกที่ 2377 01:33:05,390 --> 01:33:10,400 แต่คุณโทรฟรีที่ สิ่งที่ผลตอบแทน malloc 2378 01:33:10,400 --> 01:33:12,940 ดังนั้น malloc นี่กลับ สิ่งที่จะถูกเก็บไว้ใน x 2379 01:33:12,940 --> 01:33:14,802 ดังนั้นเราจึงสามารถโทรฟรีใน x 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 คำถามใด ๆ ที่ผ่านมา? 2382 01:33:20,556 --> 01:33:21,701 >> Davin: คำถามใด ๆ ที่ผ่านมา? 2383 01:33:21,701 --> 01:33:22,200 ใช่? 2384 01:33:22,200 --> 01:33:25,152 >> นักเรียน: ขออภัยคุณสามารถอธิบายอีกครั้ง เหตุผลที่คุณจะเป็นอิสระในการมี? 2385 01:33:25,152 --> 01:33:26,630 ทำไม [ไม่ได้ยิน] 2386 01:33:26,630 --> 01:33:27,774 >> Davin: สำหรับที่นี่? 2387 01:33:27,774 --> 01:33:29,109 >> นักเรียน: ใช่เช่นขวาหลังจาก 2388 01:33:29,109 --> 01:33:30,900 Davin: คุณอาจ ไม่ต้องการฟรีที่นี่ 2389 01:33:30,900 --> 01:33:31,630 Rob: คุณอาจจะไม่ 2390 01:33:31,630 --> 01:33:33,060 Davin: ใช่ว่าเรื่องนี้จะไม่ทำอะไรเลย 2391 01:33:33,060 --> 01:33:35,220 นี้จะเหมือนการสร้าง หน่วยความจำทำสิ่งนั้น 2392 01:33:35,220 --> 01:33:37,390 และแล้วทันที ลืมเกี่ยวกับมันใช่ 2393 01:33:37,390 --> 01:33:39,850 >> Rob: แต่เราอาจจะทำเช่น ที่นี่ด้วยเหตุผลบางอย่าง 2394 01:33:39,850 --> 01:33:43,902 เราอาจจะบอกว่า int ดาว และผลตอบแทนเ​​ท่ากับอาร์เรย์ 2395 01:33:43,902 --> 01:33:47,900 ทำสิ่งบางอย่างกับ Y, อาจจะพิมพ์เนื้อหา 2396 01:33:47,900 --> 01:33:49,350 และแล้วในที่สุดเรากำลังทำ 2397 01:33:49,350 --> 01:33:50,626 เราสามารถเป็นอิสระและ 2398 01:33:50,626 --> 01:33:51,501 นักเรียน: [ไม่ได้ยิน] 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 Davin ผมควรจะเลื่อนลงมา? 2401 01:33:59,005 --> 01:34:00,445 ขอบคุณ 2402 01:34:00,445 --> 01:34:00,945 Rob: ดี 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> Davin: ตกลงที่มัน 2405 01:34:03,646 --> 01:34:04,520 Rob: สิทธิทั้งหมดที่ดี 2406 01:34:04,520 --> 01:34:05,070 โชคดี 2407 01:34:05,070 --> 01:34:06,800 >> Davin: ถ้าคุณมีคำถามส่งอีเมลถึงเรา 2408 01:34:06,800 --> 01:34:08,670 โชคดี 2409 01:34:08,670 --> 01:34:10,283