1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> ลำโพง 1: สวัสดีทุกคน 3 00:00:05,680 --> 00:00:07,530 พวกเราจะไปเริ่มต้น 4 00:00:07,530 --> 00:00:09,330 ผมคิดว่าคนจะยังคง จะต้องมีการกรองใน 5 00:00:09,330 --> 00:00:12,840 แต่ในความสนใจของเวลาเพื่อให้เราสามารถ ได้รับพวกคุณออกจากที่นี่ในเวลา 6 00:00:12,840 --> 00:00:14,110 เรากำลังจะเริ่มต้น 7 00:00:14,110 --> 00:00:18,780 เพื่อต้อนรับ CS50 คำถาม 0 ความคิดเห็นที่ 8 00:00:18,780 --> 00:00:23,020 สำหรับบรรดาของคุณที่ไม่ได้ตระหนักถึง แต่คุณมีคำถามในวันพุธที่ 9 00:00:23,020 --> 00:00:25,700 วูฮู 10 00:00:25,700 --> 00:00:29,780 >> ถ้าคุณยังไม่ได้เริ่มเรียนหรือยัง ยังไม่ได้ตระหนักว่านี้มีอยู่ยัง 11 00:00:29,780 --> 00:00:34,070 แบบทดสอบที่ผ่านมาและข้อมูลทั้งหมดที่เกี่ยวกับ การตอบคำถามของคุณอยู่ใน cs50.net/quizzes 12 00:00:34,070 --> 00:00:38,090 มีบางสิ่งที่ดีงามอยู่ในที่นั่น แบบทดสอบที่ผ่านมาจากช่วง 10 13 00:00:38,090 --> 00:00:43,760 ปีเช่นเดียวกับข้อมูล เกี่ยวกับการตอบคำถามนี้และหัวข้อ 14 00:00:43,760 --> 00:00:46,250 ที่จะได้รับการคุ้มครอง 15 00:00:46,250 --> 00:00:48,980 ดังนั้นขอเริ่มต้น 16 00:00:48,980 --> 00:00:54,240 >> ดังนั้นพวกคุณอาจจะจำได้ว่าครั้งแรก วันของการเรียนดาวิดมีผู้ที่อยู่ในโคมไฟ 17 00:00:54,240 --> 00:00:59,650 เพื่อเป็นหลักทุกอย่างที่จะไป ขึ้นภายใต้ประทุนของคอมพิวเตอร์เป็น 18 00:00:59,650 --> 00:01:00,860 ทำในไบนารี 19 00:01:00,860 --> 00:01:04,080 Binary หมายความว่าสิ่งที่มันเสียง เช่น 0 และ 1 20 00:01:04,080 --> 00:01:09,290 มันมีอยู่สองค่าที่ สามารถแสดง 21 00:01:09,290 --> 00:01:14,675 >> ดังนั้นเช่นเดียวกับในวันแรกของส่วน เมื่อเดวิดเปิดแสง 22 00:01:14,675 --> 00:01:21,990 หลอดไฟที่จะเป็นตัวแทนในหรือ 1, เครื่องคอมพิวเตอร์ของเรา เข้าใจไบนารีที่เป็น 0 และ 23 00:01:21,990 --> 00:01:24,110 1, หรือปิด 24 00:01:24,110 --> 00:01:25,360 พื้นฐานของไบนารี 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 สถานที่ที่ทุกคนจะเป็นตัวแทนของ ในสองฐาน 27 00:01:32,470 --> 00:01:36,260 เพื่อให้คุณเพิ่ม 2 0 เพื่อ 1 ถึง 2 ตลอดทางขึ้น 28 00:01:36,260 --> 00:01:41,970 >> ในการคำนวณสิ่งที่คู่ของคุณคือการ ทศนิยมคุณเพียงทำตามสมการนี​​้ 29 00:01:41,970 --> 00:01:42,840 ประเภทสิ่ง 30 00:01:42,840 --> 00:01:49,510 หากคุณมี 1 ในใด ๆ ของสถ​​านที่เหล่านั้น คุณคูณโดยสิ่งที่ 31 00:01:49,510 --> 00:01:53,820 ฐานมันอยู่ในเพิ่มขึ้นและ คุณจะได้รับทศนิยม 32 00:01:53,820 --> 00:01:57,930 ดังนั้นนี่คือวิธีการที่คุณนับ ถึง 5 ในไบนารี 33 00:01:57,930 --> 00:02:01,400 เช่นเดียวกับสิ่งที่เรากำลังทำใน สไลด์ที่ผ่านมานี้เป็นวิธีที่คุณจะ 34 00:02:01,400 --> 00:02:02,650 แสดง 1 ถึง 5 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> ในทำนองเดียวกันเช่นเดียวกับคุณสามารถเพิ่มและ ลบในทศนิยมหรือฐาน 10 หรือ 37 00:02:09,660 --> 00:02:13,040 จริงๆฐานใด ๆ ที่สามารถเพิ่ม และลบในไบนารี 38 00:02:13,040 --> 00:02:18,400 สิ่งที่คุณจะคาดหวังเมื่อคุณ เพิ่มขึ้นสองถ้ามันมากขึ้นเท่ากับ 39 00:02:18,400 --> 00:02:24,220 กว่า 1, คุณพก 1, ทำให้มันเป็น 0, และทำนอกจากนี้วิธีการที่เพียงแค่ 40 00:02:24,220 --> 00:02:29,910 เช่นคุณจะคาดหวังกับปกติ ทศนิยมหรือฐานอื่น ๆ 41 00:02:29,910 --> 00:02:30,970 เย็น 42 00:02:30,970 --> 00:02:35,140 >> ดังนั้นเหมือนที่ผมกล่าวว่าก่อนที่จะทุกอย่างที่ ไปในภายใต้ประทุนของคอมพิวเตอร์ของเรา 43 00:02:35,140 --> 00:02:37,560 จะทำใน 0 และ 1 หรือเลขฐานสอง 44 00:02:37,560 --> 00:02:43,470 ดังนั้นวิธีที่เราจะแสดงตัวอย่างเช่น ตัวอักษรหรือตัวเลขหรือตัวอักษรที่? 45 00:02:43,470 --> 00:02:45,560 และคำตอบที่เป็น ASCII 46 00:02:45,560 --> 00:02:49,380 >> ASCII คือการทำแผนที่ระหว่างตัวละคร ที่เรามักจะเห็นใน 47 00:02:49,380 --> 00:02:53,360 ภาษาอังกฤษเหมือนของบี, ของ C, เน้น, ขีดกลางและ 48 00:02:53,360 --> 00:02:54,910 อะไรอย่างนั้น 49 00:02:54,910 --> 00:02:57,260 และแผนที่ที่ค่า ASCII 50 00:02:57,260 --> 00:03:03,080 ค่า ASCII เป็นเพียงตัวเลขว่า สามารถเข้าใจได้โดยคอมพิวเตอร์ของคุณ 51 00:03:03,080 --> 00:03:07,430 และเช่นเดียวกับที่คุณสามารถทำได้และนอกจากนี้ ลบกับตัวเลขที่คุณสามารถทำได้ 52 00:03:07,430 --> 00:03:10,890 พวกเขาด้วยค่า ASCII 53 00:03:10,890 --> 00:03:14,050 >> ดังนั้นในตัวอย่างนี้สิ่งที่ นี้จะพิมพ์ออกมา? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 ใช่เพียงแค่พื้นที่ B พื้นที่ C พื้นที่ D. ที่ไหนเมาส์ของฉันไป? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 สังเกตเห็นว่าคุณสามารถกำหนด int ที่ 65 58 00:03:43,380 --> 00:03:47,080 และเมื่อคุณพิมพ์ที่ออกมาใช้ ร้อยละ C ก็จะตีความว่าเป็น 59 00:03:47,080 --> 00:03:49,330 ตัวอักษรและจะพิมพ์ออก A. 60 00:03:49,330 --> 00:03:52,800 >> ในทำนองเดียวกันคุณสามารถประกาศ เป็นถ่าน 61 00:03:52,800 --> 00:03:56,860 และเมื่อคุณพิมพ์ออกมาใช้ร้อยละ C ก็จะตีความว่าเป็น 62 00:03:56,860 --> 00:04:05,240 ร้อยละดีและเช่นเดียวกับที่คุณสามารถเพิ่ม หมายเลขคุณสามารถเพิ่มตัวอักษร 63 00:04:05,240 --> 00:04:06,878 ค่า ASCII ในกรณีนี้ 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> ดังนั้นตัวชี้เล็ก ๆ น้อย ๆ สำหรับทุกคน 66 00:04:16,130 --> 00:04:19,610 5 เป็นสตริงไม่ จริงเท่ากับ 5 67 00:04:19,610 --> 00:04:26,610 ดังนั้นวิธีที่เราจะแปลง 5 ถึงสตริงจำนวนเต็ม 5? 68 00:04:26,610 --> 00:04:28,930 ความคิดใด? 69 00:04:28,930 --> 00:04:31,630 ใช่ 70 00:04:31,630 --> 00:04:36,720 >> ดังนั้นถ้าเรามี 5 เป็นสตริง เราสามารถลบ 0 71 00:04:36,720 --> 00:04:37,820 และที่จะให้เรา 5 72 00:04:37,820 --> 00:04:41,670 และในทำนองเดียวกันถ้าเรามี 5 เป็น จำนวนเต็มเพิ่มว่าสตริง 0 73 00:04:41,670 --> 00:04:43,112 และที่ทำให้เราสตริง 5 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 เย็น 76 00:04:48,350 --> 00:04:52,940 >> ตอนนี้จำกลับไปบรรยายที่หนึ่ง เราได้พูดคุยเกี่ยวกับอัลกอริทึม 77 00:04:52,940 --> 00:04:57,260 ดังนั้นทำอย่างไรเราจริงต้องการให้คอมพิวเตอร์ ที่จะทำสิ่งที่น่าสนใจ? 78 00:04:57,260 --> 00:05:00,460 คุณรู้ว่าเพียงแค่การเพิ่มและการลบ ตัวเลขและการพิมพ์สิ่งที่ออกไม่ได้ 79 00:05:00,460 --> 00:05:01,730 ที่น่าตื่นเต้นที่ 80 00:05:01,730 --> 00:05:04,620 ปกติเราต้องการให้คอมพิวเตอร์ของเราที่จะ ดำเนินการชนิดของขั้นตอนวิธีบางอย่าง 81 00:05:04,620 --> 00:05:07,820 บางสิ่งบางอย่างที่ซับซ้อนมากขึ้นเล็กน้อย กว่าคณิตศาสตร์ง่ายๆเพียง 82 00:05:07,820 --> 00:05:11,930 >> อัลกอริทึมเป็นเพียงขั้นตอนโดยขั้นตอนที่กำหนด ของคำแนะนำสำหรับวิธีการดำเนินการ 83 00:05:11,930 --> 00:05:14,640 task-- บาง 84 00:05:14,640 --> 00:05:15,660 เช่นเดียวกับสูตร 85 00:05:15,660 --> 00:05:19,990 คุณอาจจะจำได้ว่าวันแรกของ ชั้นที่เดวิดได้เรานับห้องพัก 86 00:05:19,990 --> 00:05:22,550 ของผู้คนและมีกี่คน อยู่ในห้อง 87 00:05:22,550 --> 00:05:24,480 คุณอาจจะใช้ในการนับ หนึ่งโดยหนึ่ง 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4 89 00:05:25,860 --> 00:05:28,010 ในกรณีที่อัลกอริทึมเวลาเชิงเส้น 90 00:05:28,010 --> 00:05:31,710 >> แต่ดาวิดนำอัลกอริทึมสำหรับ คุณจะนับคนที่อยู่ในห้องพัก 91 00:05:31,710 --> 00:05:37,340 ที่ทุกคนลุกขึ้นยืนคุณพูดของคุณ จำนวนให้กับบุคคลอื่นเพิ่มที่ 92 00:05:37,340 --> 00:05:39,200 จำนวนขึ้นและมีคนคนหนึ่งนั่งลง 93 00:05:39,200 --> 00:05:40,410 และคุณย้ำว่า 94 00:05:40,410 --> 00:05:42,910 นั่นเป็นประเภทหนึ่งของอัลกอริทึม 95 00:05:42,910 --> 00:05:47,520 เราสามารถวิเคราะห์วิธีการที่มีประสิทธิภาพ อัลกอริทึมจะขึ้นอยู่กับว่าจะใช้เวลา 96 00:05:47,520 --> 00:05:49,680 แต่เราจะพูดคุยนิด ๆ หน่อย ๆ เพิ่มเติมเกี่ยวกับที่มา 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> ดังนั้นทุกขั้นตอนวิธีนี้ยังสามารถ จะเขียนใน pseudocode 99 00:05:57,090 --> 00:06:01,120 pseudocode เป็นเพียงภาษาอังกฤษเช่น ไวยากรณ์ที่ใช้ในการแสดง 100 00:06:01,120 --> 00:06:02,420 การเขียนโปรแกรมภาษา 101 00:06:02,420 --> 00:06:06,070 ตัวอย่างเช่นถ้าเราต้องการที่จะขอให้ผู้ใช้ การคาดเดาหมายเลขที่ชื่นชอบเรา 102 00:06:06,070 --> 00:06:08,390 อาจมี pseudocode เช่น 103 00:06:08,390 --> 00:06:09,850 >> ได้รับผู้ใช้เดา 104 00:06:09,850 --> 00:06:13,570 ถ้าเดาถูกต้องบอกพวกเขา พวกเขากำลังถูกต้องอื่นบอกพวกเขา 105 00:06:13,570 --> 00:06:15,560 พวกเขาไม่ได้ถูกต้อง 106 00:06:15,560 --> 00:06:22,530 และ pseudocode เป็นวิธีการได้อย่างง่ายดาย ที่เป็นตัวแทนของความคิดหรืออัลกอริทึม 107 00:06:22,530 --> 00:06:26,910 ดังนั้นตอนนี้เราอาจจะต้องการที่จะเขียนจริง ในภาษาที่คอมพิวเตอร์เครื่องนี้ 108 00:06:26,910 --> 00:06:27,980 อาจจะเข้าใจ 109 00:06:27,980 --> 00:06:35,660 ดังนั้นเราสามารถเขียน pseudocode ของเราและ ตีความว่าเป็นรหัสแหล่งที่มา 110 00:06:35,660 --> 00:06:41,320 >> เพื่อให้ห่างไกลโค้ดต้นฉบับจะต้องปฏิบัติตาม เพื่อไวยากรณ์บางอย่างของ 111 00:06:41,320 --> 00:06:42,490 การเขียนโปรแกรมภาษา 112 00:06:42,490 --> 00:06:45,430 และจนถึงขณะนี้ใน CS50 เราได้ ได้ใช้ส่วนใหญ่ค 113 00:06:45,430 --> 00:06:48,320 ดังนั้นนี้อาจจะมีซอร์สโค้ดของค 114 00:06:48,320 --> 00:06:51,440 ต่อมาในหลักสูตรที่คุณมาคืน ในการติดต่อกับโปรแกรมอื่น ๆ 115 00:06:51,440 --> 00:06:52,480 ภาษาเช่น PHP 116 00:06:52,480 --> 00:06:57,540 หรือถ้าคุณยังใช้เวลาเรียนอื่น ๆ คุณ อาจจะทำ Java, งูใหญ่หรือแม้แต่ OCML 117 00:06:57,540 --> 00:07:01,570 แต่ในภาษาโปรแกรมคของเรานี้เป็น วิธีการที่เราอาจเขียนรหัสที่มาสำหรับ 118 00:07:01,570 --> 00:07:04,760 อัลกอริทึม pseudocode ที่ ผมแค่อธิบายไว้ก่อนหน้า 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> ดังนั้นวิธีการของเครื่องคอมพิวเตอร์ของคุณจริง เข้าใจว่า? 121 00:07:11,430 --> 00:07:14,490 เช่นฉันกล่าวว่าก่อนที่จะเท่านั้นจริงๆ ความเข้าใจในศูนย์และคน 122 00:07:14,490 --> 00:07:17,880 ดังนั้นวิธีที่จะได้รับจากแหล่งที่มา รหัสเพื่อสิ่งที่สามารถ 123 00:07:17,880 --> 00:07:18,960 เข้าใจ? 124 00:07:18,960 --> 00:07:22,920 ดีเรามีบางสิ่งบางอย่าง ที่เรียกว่าคอมไพเลอร์ 125 00:07:22,920 --> 00:07:28,450 >> ถ้าคุณจำกลับมาในส่วนของคุณ psets คุณมีชนิดของโปรแกรมบางอย่าง 126 00:07:28,450 --> 00:07:30,370 เขียนในคไฟล์จุด 127 00:07:30,370 --> 00:07:32,550 แล้วคุณจะพิมพ์ให้ 128 00:07:32,550 --> 00:07:35,970 ดังนั้นสิ่งที่จะทำให้ทำอะไร 129 00:07:35,970 --> 00:07:39,970 >> คุณสามารถพิมพ์ทำให้การรวบรวมของคุณ โปรแกรมเพราะ someone-- 130 00:07:39,970 --> 00:07:42,730 ใครก็ตามที่เขียนพีชุดของคุณ อาจ David-- 131 00:07:42,730 --> 00:07:44,190 สร้างไฟล์ให้ 132 00:07:44,190 --> 00:07:51,320 และที่บอกให้รู้ว่าการทำงานของคุณ คอมไพเลอร์ที่เรียกว่าเสียงดังกราว, จะว่า 133 00:07:51,320 --> 00:07:55,560 แล้วรวบรวมรหัสต้นฉบับของคุณในการคัดค้าน รหัสซึ่งเป็นศูนย์และคน 134 00:07:55,560 --> 00:07:57,720 ว่าคอมพิวเตอร์ของคุณเข้าใจ 135 00:07:57,720 --> 00:08:01,610 แต่เล็ก ๆ น้อย ๆ ต่อมาในวันที่เราจะไป เพิ่มเติมในเชิงลึกเกี่ยวกับคอมไพเลอร์ 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> ดังนั้นจำ pset 0, where-- ใช่ คุณมีคำถาม? 138 00:08:10,800 --> 00:08:11,620 >> ผู้ชม: [ไม่ได้ยิน] 139 00:08:11,620 --> 00:08:12,490 >> ลำโพง 1: ใช่ 140 00:08:12,490 --> 00:08:14,960 ผมคิดว่าพวกเขาเป็นจริง ควรจะออนไลน์ 141 00:08:14,960 --> 00:08:15,120 ใช่ 142 00:08:15,120 --> 00:08:16,572 >> ผู้ชม: มันเหมือน [ไม่ได้ยิน] 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> ลำโพง 1: มันไม่ได้เป็น 145 00:08:20,830 --> 00:08:25,810 อยู่ใน cs50.net/quizzes 146 00:08:25,810 --> 00:08:32,900 >> ผู้ชม: Slash แบบทดสอบการเฉือน 2013, เฉือน 0, และเพียงแค่คลิกผ่าน 147 00:08:32,900 --> 00:08:35,956 แบบทดสอบ 2013 และตอบคำถาม 0, สไลด์ส่วนการตรวจสอบ 148 00:08:35,956 --> 00:08:40,380 >> ลำโพง 1: ใช่ดังนั้นหากพวกคุณต้องการ ดึงมันขึ้นมาและมองไปที่มันด้วยตัวคุณ 149 00:08:40,380 --> 00:08:42,740 คอมพิวเตอร์ของตัวเองที่ดีเกินไป 150 00:08:42,740 --> 00:08:43,130 บอกว่าอีกครั้ง 151 00:08:43,130 --> 00:08:44,546 >> ผู้ชม: [ไม่ได้ยิน] 152 00:08:44,546 --> 00:08:48,780 >> ลำโพง 1: ใช่ [ไม่ได้ยิน] เป็นตัวแปรดัมมี่ 153 00:08:48,780 --> 00:08:49,644 โอ้ใช่? 154 00:08:49,644 --> 00:08:51,372 >> ผู้ชม: [ไม่ได้ยิน] 155 00:08:51,372 --> 00:08:54,300 >> ลำโพง 1: ไม่มีการนัดหยุดงาน ไม่ได้ในการสอบ 156 00:08:54,300 --> 00:08:55,950 ขออภัยคำถามของเธอก็คือเป็น การนัดหยุดงานในการสอบ 157 00:08:55,950 --> 00:08:59,530 และมันไม่ได้ 158 00:08:59,530 --> 00:09:05,780 ดังนั้น pset 0, พวกคุณควรจะมีทั้งหมด ดำเนินการบางอย่างโดยใช้รอยขีดข่วน 159 00:09:05,780 --> 00:09:13,100 และเราได้เรียนรู้บางการเขียนโปรแกรมขั้นพื้นฐาน การสร้างบล็อกโดยใช้รอยขีดข่วน 160 00:09:13,100 --> 00:09:15,590 >> ดังนั้นลองมาดูที่บางส่วน ของการก่อสร้างตึกเหล่านี้ 161 00:09:15,590 --> 00:09:18,170 ที่ทำขึ้นโปรแกรม 162 00:09:18,170 --> 00:09:20,570 แรกคือนิพจน์บูลีน 163 00:09:20,570 --> 00:09:24,540 สำนวนที่บูลีนเป็นคนและ 0 หรืออะไรที่มี 164 00:09:24,540 --> 00:09:25,700 สองค่าที่เป็นไปได้ 165 00:09:25,700 --> 00:09:30,320 ในกรณีนี้จริงหรือเท็จ หรือปิดและใช่หรือไม่ 166 00:09:30,320 --> 00:09:35,390 ตัวอย่างของการที่ง่ายและง่ายมาก, โปรแกรมที่ใช้บูลีน 167 00:09:35,390 --> 00:09:39,140 การแสดงออกที่นี่ 168 00:09:39,140 --> 00:09:43,220 >> ดังนั้นเพื่อให้การแสดงออกบูลีนไป เป็นประโยชน์เรามีผู้ประกอบการบูลีน 169 00:09:43,220 --> 00:09:48,920 เหล่านี้เป็นผู้ประกอบการที่สามารถใช้ เพื่อเปรียบเทียบค่าบางอย่าง 170 00:09:48,920 --> 00:09:52,820 เพื่อให้เรามีหรือไม่เท่ากับน้อย มากกว่าหรือเท่ากับ, มากกว่าหรือ 171 00:09:52,820 --> 00:09:55,130 เท่ากับและน้อยกว่า หรือมากกว่า 172 00:09:55,130 --> 00:09:59,060 แต่ผู้ประกอบการเหล่านี้ไม่ได้มีประโยชน์มาก หากเราไม่สามารถรวมพวกเขาเป็น 173 00:09:59,060 --> 00:10:00,320 เงื่อนไข 174 00:10:00,320 --> 00:10:04,370 >> ดังนั้นพวกคุณอาจจะจำได้ว่าตั้งแต่เริ่มต้น และจากพีของคุณกำหนดว่าเรา 175 00:10:04,370 --> 00:10:05,400 มีเงื่อนไข 176 00:10:05,400 --> 00:10:09,710 พวกเขาจะเป็นหลักเช่นเดียวกับส้อมใน ตรรกะของโปรแกรมของคุณที่ 177 00:10:09,710 --> 00:10:12,670 ดำเนินการขึ้นอยู่กับว่า สภาพจะพบ 178 00:10:12,670 --> 00:10:18,150 ดังนั้นหนึ่งในเงื่อนไขที่เรามี ใช้หลายครั้งในหลักสูตรนี้เป็น 179 00:10:18,150 --> 00:10:21,470 ถ้าอื่นหากการและเงื่อนไขอื่น 180 00:10:21,470 --> 00:10:24,060 >> นี่คือตัวอย่างของวิธีการที่เป็น คุณอาจใช้ที่ 181 00:10:24,060 --> 00:10:28,430 ไม่มีใครทราบความแตกต่างระหว่าง เพียงแค่ใช้ถ้างบทั้งหมด 182 00:10:28,430 --> 00:10:32,530 ทางลงกลอนถ้าอื่นที่ ถ้าและอื่น ๆ รวมกัน? 183 00:10:32,530 --> 00:10:33,013 ใช่? 184 00:10:33,013 --> 00:10:34,263 >> ผู้ชม: [ไม่ได้ยิน] 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> ลำโพง 1: แน่นอน 187 00:10:42,160 --> 00:10:50,210 ดังนั้นถ้าผมมีถ้าทุกทางลงนี้ วิธีที่แม้ว่าสภาพนี้ผลตอบแทน 188 00:10:50,210 --> 00:10:52,800 จริงก็จะยังคงดำเนินการต่อไป การทดสอบอีกสอง 189 00:10:52,800 --> 00:11:00,120 ในขณะที่มีคนอื่นถ้าอื่น คำสั่งหากผลตอบแทนจริง 190 00:11:00,120 --> 00:11:02,640 คนอื่น ๆ จะไม่ได้รับการทดสอบ 191 00:11:02,640 --> 00:11:05,955 คำถามใด ๆ เกี่ยวกับที่? 192 00:11:05,955 --> 00:11:06,890 เย็น 193 00:11:06,890 --> 00:11:12,240 >> เพื่อให้คุณใช้ถ้า-อื่นของอื่น คำสั่งถ้าคุณรู้ว่ามันสามารถเฉพาะ 194 00:11:12,240 --> 00:11:14,470 เป็นหนึ่งในกรณีเหล่านี้ 195 00:11:14,470 --> 00:11:21,550 ดังนั้นเรารู้ว่าถ้า x น้อยกว่า 0 มันเป็น แน่นอนไม่ได้ไปเป็น 196 00:11:21,550 --> 00:11:22,890 มากกว่า 0 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> ถัดไปบล็อกอาคารอื่น ที่เราได้เรียนรู้เป็นลูป 199 00:11:31,480 --> 00:11:33,310 เรามีสามประเภทของลูป 200 00:11:33,310 --> 00:11:35,830 สำหรับลูปในขณะที่ลูป และทำในขณะที่ลูป 201 00:11:35,830 --> 00:11:38,730 และโดยทั่วไปเมื่อคุณนั่งลง เขียนสิ่งที่คุณต้องตัดสินใจ 202 00:11:38,730 --> 00:11:40,060 ที่สามที่คุณต้องการใช้ 203 00:11:40,060 --> 00:11:41,900 ดังนั้นเราจะตัดสินใจที่หนึ่ง? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> โดยทั่วไปเราใช้สำหรับห่วงถ้าเรารู้ กี่ครั้งที่เราต้องการที่จะย้ำ 206 00:11:48,790 --> 00:11:53,650 ผ่านสิ่งที่หรือวิธีการหลายครั้ง เราต้องการที่จะดำเนินงาน 207 00:11:53,650 --> 00:11:58,830 ที่เราใช้ในขณะที่ลูปถ้าเราต้องการบางอย่าง เงื่อนไขที่จะเป็นจริงเพื่อให้ทำงาน 208 00:11:58,830 --> 00:12:03,730 และเราใช้ทำในขณะที่คล้ายกับ ในขณะที่ แต่เราต้องการรหัสของเราที่จะทำงานที่ 209 00:12:03,730 --> 00:12:04,880 อย่างน้อยหนึ่งครั้ง 210 00:12:04,880 --> 00:12:09,410 >> เพื่อทำในขณะที่สิ่งที่อยู่ในสิ่งที่ต้องทำจะ มักจะใช้เวลาอย่างน้อยหนึ่ง 211 00:12:09,410 --> 00:12:13,120 ในขณะที่มีในขณะนั้น อาจไม่ทำงานเลยถ้า 212 00:12:13,120 --> 00:12:15,490 สภาพไม่พอใจ 213 00:12:15,490 --> 00:12:16,740 คำถามใด ๆ กับที่? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> ดังนั้นโครงสร้างของห่วง 216 00:12:22,860 --> 00:12:23,620 พวกคุณทุกคนได้เห็นนี้ 217 00:12:23,620 --> 00:12:25,320 คุณเริ่มต้นมัน 218 00:12:25,320 --> 00:12:26,600 คุณมีชนิดของเงื่อนไขบางอย่าง 219 00:12:26,600 --> 00:12:32,340 ดังนั้นสำหรับตัวอย่างเช่นเราอาจจะเริ่มต้น สำหรับผมเท่ากับ 0 220 00:12:32,340 --> 00:12:34,040 i คือน้อยกว่า 10 221 00:12:34,040 --> 00:12:35,442 และ i ++ 222 00:12:35,442 --> 00:12:39,010 หนึ่งที่ง่ายมากที่เราเคยทำมา 223 00:12:39,010 --> 00:12:42,210 >> สำหรับวงในขณะที่เหมือนกันคุณมี จะมีชนิดของการเริ่มต้นบางอย่าง 224 00:12:42,210 --> 00:12:44,980 บางชนิดของสภาพและ ชนิดของการปรับปรุงบางส่วน 225 00:12:44,980 --> 00:12:51,990 เพื่อให้เราสามารถดำเนินการของเรายังห่วง เป็นห่วงในขณะที่การใช้นี้ 226 00:12:51,990 --> 00:12:56,000 และเช่นเดียวกันกับสิ่งที่ต้องทำในขณะที่ห่วง เราอาจจะมีการเริ่มต้นบางอย่าง 227 00:12:56,000 --> 00:12:58,640 สิ่งที่ดำเนินการปรับปรุงมันและ จากนั้นตรวจสอบสภาพ 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> ฟังก์ชั่นดังนั้นตอนนี้ 230 00:13:05,140 --> 00:13:06,460 เราใส่ทุกอย่างเข้าด้วยกัน 231 00:13:06,460 --> 00:13:10,140 เราอาจต้องการที่จะเขียนบาง ชนิดของฟังก์ชั่น 232 00:13:10,140 --> 00:13:12,790 ฟังก์ชั่นทั่วไปที่คุณอาจจะ ได้เห็นแล้วเป็นหลัก 233 00:13:12,790 --> 00:13:13,770 ที่สำคัญคือฟังก์ชั่น 234 00:13:13,770 --> 00:13:16,160 แต่ก็มีประเภทกลับ int 235 00:13:16,160 --> 00:13:18,470 มันมีชื่อฟังก์ชันหลัก 236 00:13:18,470 --> 00:13:20,810 และมีข้อโต้แย้ง argc และ argv 237 00:13:20,810 --> 00:13:24,040 ดังนั้นหลักเป็นเพียงฟังก์ชั่น 238 00:13:24,040 --> 00:13:27,230 >> ฟังก์ชั่นอื่น ๆ ที่คุณอาจจะมีการใช้ printf printf-- เป็นฟังก์ชัน 239 00:13:27,230 --> 00:13:29,330 GetInt, ToUpper 240 00:13:29,330 --> 00:13:32,010 แต่สิ่งเหล่านี้เกิดขึ้นจะได้รับการ นำมาใช้สำหรับเรา 241 00:13:32,010 --> 00:13:33,270 ชนิดของห้องสมุดบางส่วน 242 00:13:33,270 --> 00:13:37,400 ถ้าพวกคุณจำรวมทั้ง นี้ห้องสมุด CS50.h หรือ 243 00:13:37,400 --> 00:13:38,510 มาตรฐาน I / O ห้องสมุด 244 00:13:38,510 --> 00:13:39,200 ใช่คำถาม? 245 00:13:39,200 --> 00:13:41,610 >> ผู้ชม: เป็นหลักเพียงแค่อยู่ในค? 246 00:13:41,610 --> 00:13:44,740 ไม่ได้เพียงชนิดของ [ไม่ได้ยิน] 247 00:13:44,740 --> 00:13:47,370 >> ลำโพง 1: คำถามคือ ถ้าหลักมีอยู่ในค 248 00:13:47,370 --> 00:13:51,460 และใช่การทำงานทั้งหมด มีหน้าที่หลัก 249 00:13:51,460 --> 00:13:55,290 เป็นชนิดของสิ่งที่จำเป็นสำหรับคอมพิวเตอร์ ที่จะทราบว่าจะเริ่มต้น 250 00:13:55,290 --> 00:13:55,993 ใช้รหัส 251 00:13:55,993 --> 00:13:58,108 >> ผู้ชม: ดังนั้นคุณจะไม่ [ไม่ได้ยิน] 252 00:13:58,108 --> 00:13:59,480 >> ลำโพง 1: เลขที่ 253 00:13:59,480 --> 00:14:00,760 หากมีปัญหาอื่น ๆ 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 เย็น 256 00:14:04,770 --> 00:14:08,050 เช่นดังนั้นเพียงแค่คุณสามารถใช้ฟังก์ชัน ที่เขียนขึ้นสำหรับคุณคุณยังสามารถ 257 00:14:08,050 --> 00:14:10,380 เขียนฟังก์ชันของคุณเอง 258 00:14:10,380 --> 00:14:17,050 นี่คือหน้าที่ที่ใครบางคนอาจจะ ได้เขียนในการคำนวณปริมาณ 259 00:14:17,050 --> 00:14:18,395 คิวยกตัวอย่างเช่น 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 มีประเภทกลับเป็นที่นี่ในกรณีนี้ int, คิวชื่อฟังก์ชันของเราและของเรา 262 00:14:29,500 --> 00:14:31,360 รายการของพารามิเตอร์ 263 00:14:31,360 --> 00:14:34,550 >> และทราบว่าคุณมีการเขียนข้อมูล ประเภทของพารามิเตอร์ที่คุณต้องการ 264 00:14:34,550 --> 00:14:38,660 ใช้หรืออื่น ๆ ฟังก์ชั่นไม่ได้ ทราบชนิดของ 265 00:14:38,660 --> 00:14:41,650 พารามิเตอร์ที่ฉันควรจะยอมรับ 266 00:14:41,650 --> 00:14:48,110 ดังนั้นในกรณีนี้เราต้องการ จำนวนเต็มเป็นอินพุทของเรา 267 00:14:48,110 --> 00:14:50,390 ดังนั้นทำไมเราอาจต้องการที่จะใช้ฟังก์ชั่น? 268 00:14:50,390 --> 00:14:52,800 >> แรกของทั้งหมดที่ดีสำหรับองค์กร 269 00:14:52,800 --> 00:14:56,350 พวกเขาช่วยทำลายรหัสของคุณลง ระเบียบมากขึ้นและทำให้ชิ้น 270 00:14:56,350 --> 00:14:57,960 มันง่ายต่อการอ่าน 271 00:14:57,960 --> 00:14:59,760 ความเรียบง่าย 272 00:14:59,760 --> 00:15:01,740 นี้เป็นสิ่งที่ดีสำหรับการออกแบบ 273 00:15:01,740 --> 00:15:04,570 เมื่อคุณกำลังอ่านชิ้นส่วนของรหัส และฟังก์ชั่นหลักคือจริงๆ 274 00:15:04,570 --> 00:15:07,750 นานจริงๆมันอาจจะยากที่จะ เหตุผลเกี่ยวกับสิ่งที่เกิดขึ้น 275 00:15:07,750 --> 00:15:11,710 ดังนั้นหากคุณทำลายมันลงไปในฟังก์ชั่น มันอาจจะง่ายต่อการอ่าน 276 00:15:11,710 --> 00:15:12,750 และนำมาใช้ความสามารถ 277 00:15:12,750 --> 00:15:16,940 หากคุณมีก้อนของรหัสที่เป็น เรียกว่าหรือเรียกใช้หลายครั้ง 278 00:15:16,940 --> 00:15:20,690 แทนการเขียนใหม่รหัสที่ 10 ครั้ง ในการทำงานหลักของคุณคุณอาจจะ 279 00:15:20,690 --> 00:15:21,440 ต้องการที่จะนำมาใช้ใหม่ 280 00:15:21,440 --> 00:15:25,740 แล้วทุกครั้งที่คุณจำเป็นต้องใช้ว่า ชิ้นส่วนของรหัสเรียกใช้ฟังก์ชัน 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> ดังนั้นตอนนี้ถ้าเราจำได้ว่ากลับไปเริ่มต้น เรายังพูดคุยเกี่ยวกับแนวความคิดไม่กี่ 283 00:15:35,380 --> 00:15:37,680 ซึ่งหนึ่งในนั้นเป็นเกลียว 284 00:15:37,680 --> 00:15:41,120 ด้ายเป็นแนวคิดของหลาย ลำดับของรหัส 285 00:15:41,120 --> 00:15:43,040 การดำเนินงานในเวลาเดียวกัน 286 00:15:43,040 --> 00:15:47,490 ดังนั้นคิดว่ากลับไปวันหนึ่งที่ดาวิดมี พวกคุณออกนับจำนวน 287 00:15:47,490 --> 00:15:48,440 คนในห้อง 288 00:15:48,440 --> 00:15:50,550 >> โดยพื้นฐานแล้วสิ่งที่เกิดขึ้น ที่มีทั้งหมดของพวกคุณอยู่ 289 00:15:50,550 --> 00:15:52,370 ใช้หัวข้อที่แยกต่างหาก 290 00:15:52,370 --> 00:15:55,540 และหัวข้อที่ได้มาร่วมกัน ที่จะได้รับชนิดของคำตอบบางอย่าง 291 00:15:55,540 --> 00:15:58,890 ในทำนองเดียวกันใน Scratch เมื่อคุณมี สไปรท์หลายท่านอาจจะ 292 00:15:58,890 --> 00:16:01,070 มีแมวและสุนัข 293 00:16:01,070 --> 00:16:08,770 และพวกเขาจะพร้อมกัน การเรียกใช้สคริปต์ของตัวเอง 294 00:16:08,770 --> 00:16:10,020 นั่นคือตัวอย่างของเกลียว 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> และแนวความคิดอื่น ๆ ที่เป็น นำมาใช้ในเหตุการณ์ที่เกิดขึ้นเป็นรอยขีดข่วน 297 00:16:18,000 --> 00:16:22,550 และเหตุการณ์ที่เกิดขึ้นเมื่อหลายส่วนของ รหัสของคุณสื่อสารกับแต่ละอื่น ๆ 298 00:16:22,550 --> 00:16:26,840 ใน Scratch นี้ก็คือตอนที่คุณใช้ การควบคุมการออกอากาศและเมื่อฉัน 299 00:16:26,840 --> 00:16:29,500 ได้รับบล็อก 300 00:16:29,500 --> 00:16:35,170 >> และยังอยู่ในปัญหาชุดที่ 4 เราเห็น นิด ๆ หน่อย ๆ ของเหตุการณ์ที่เกิดขึ้นได้เป็นอย่างดี 301 00:16:35,170 --> 00:16:38,250 พวกคุณอาจจะได้ใช้ ห้องสมุด Gevent 302 00:16:38,250 --> 00:16:42,450 และมีฟังก์ชั่น waitForClick ที่คุณกำลังรอ 303 00:16:42,450 --> 00:16:44,300 สำหรับผู้ใช้ที่คลิก 304 00:16:44,300 --> 00:16:47,870 และคลิกของคุณในกรณีนี้จะเป็น เหตุการณ์และรอการคลิกของคุณเป็น 305 00:16:47,870 --> 00:16:49,120 จัดการเหตุการณ์ 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> และยังทำงานอยู่ตลอด psets ของคุณ และการทำงานใน psets ของคุณคุณ 308 00:16:58,630 --> 00:17:01,920 อาจจะได้เข้ามาติดต่อกับ บางส่วนของคำสั่งเหล่านี้ 309 00:17:01,920 --> 00:17:05,579 นี่คือสิ่งที่คุณพิมพ์ลงในของคุณ หน้าต่าง terminal หรืออะไรก็ตามที่หน้าต่าง 310 00:17:05,579 --> 00:17:12,119 ที่ปรากฏขึ้นบนกรัมแก้ไขของคุณไป เป็นหลักนำทางคอมพิวเตอร์ของคุณ 311 00:17:12,119 --> 00:17:19,440 >> ดังนั้นสำหรับตัวอย่างเช่น LS แสดง เนื้อหาของไดเรกทอรี 312 00:17:19,440 --> 00:17:22,510 ไดเรกทอรีให้สร้างโฟลเดอร์ใหม่ 313 00:17:22,510 --> 00:17:24,819 ซีดีเปลี่ยนไดเรกทอรี 314 00:17:24,819 --> 00:17:28,400 RM ลบลบไฟล์ หรือไดเรกทอรีบาง 315 00:17:28,400 --> 00:17:31,050 แล้วลบไดเรกทอรี เอาไดเรกทอรี 316 00:17:31,050 --> 00:17:32,300 >> ผู้ชม: [ไม่ได้ยิน] 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> ลำโพง 1: ใช่แน่ใจว่า 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 ขออภัยคำถามคือถ้าคุณ ขอแนะนำให้วางนี้ 321 00:17:46,040 --> 00:17:48,840 ในแผ่นโกง 322 00:17:48,840 --> 00:17:49,440 มันอาจช่วยให้ 323 00:17:49,440 --> 00:17:51,490 หากคุณมีห้องพักคุณสามารถวางมันลงบน 324 00:17:51,490 --> 00:17:56,170 นอกจากนี้ยังเป็นโดยทั่วไปเพียงแค่ดีพอ ที่จะจำได้เพราะเมื่อคุณใช้มัน 325 00:17:56,170 --> 00:17:59,060 คุณอาจต้องการเพียงแค่ มีมันจำ 326 00:17:59,060 --> 00:18:02,750 ที่จะทำให้ชีวิตของคุณง่ายขึ้นมาก 327 00:18:02,750 --> 00:18:04,000 ฉันไม่ตอบคำถามของคุณ? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> ดังนั้นตอนนี้เราได้พูดคุยนิด ๆ หน่อย ๆ สั้น ๆ เกี่ยวกับห้องสมุด 330 00:18:14,290 --> 00:18:18,570 แต่ทั้งสองคนหลักที่เราได้รับ ใช้เพื่อให้ห่างไกลในหลักสูตรที่มี 331 00:18:18,570 --> 00:18:20,860 มาตรฐาน I / O และ CS50 332 00:18:20,860 --> 00:18:25,410 ชนิดของสิ่งที่จะถูกรวม ใน I / O ห้องสมุดมาตรฐาน? 333 00:18:25,410 --> 00:18:28,410 >> ใช่จนถึงขณะนี้เราได้ใช้ printf 334 00:18:28,410 --> 00:18:31,150 ใน CS50 เราเคยใช้ GetInt และ GetString 335 00:18:31,150 --> 00:18:37,200 และสตริงชนิดข้อมูลยังเกิดขึ้น ที่จะได้รับการประกาศในห้องสมุด CS50 นี้ 336 00:18:37,200 --> 00:18:40,250 เราจะพูดน้อยมากในเชิงลึกเกี่ยวกับ วิธีห้องสมุดทำงานและวิธีที่พวกเขา 337 00:18:40,250 --> 00:18:41,870 มีปฏิสัมพันธ์กับส่วนที่เหลือของรหัสของคุณ 338 00:18:41,870 --> 00:18:46,220 แต่ผู้ที่มีสองคนหลักที่เรา ได้เข้ามาติดต่อกับเพื่อให้ห่างไกลใน 339 00:18:46,220 --> 00:18:48,430 แน่นอน 340 00:18:48,430 --> 00:18:50,050 >> ประเภท 341 00:18:50,050 --> 00:18:58,120 เหล่านี้เป็นสิ่งที่ดีที่จะจำได้ว่า แต่ละประเภทเป็นตัวแทนจากหรือวิธี 342 00:18:58,120 --> 00:19:02,840 ไบต์แต่ละชนิดหลาย requires-- 343 00:19:02,840 --> 00:19:04,990 int 4 ไบต์; ถ่าน, 1 ไบต์ 344 00:19:04,990 --> 00:19:06,550 Float คือ 4 ไบต์ 345 00:19:06,550 --> 00:19:07,782 อะไรคือสิ่งที่สองหรือไม่ 346 00:19:07,782 --> 00:19:09,032 >> ผู้ชม: [ไม่ได้ยิน] 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> ลำโพง 1: ใช่ดังนั้นลอย แต่เป็นสองเท่าของขนาด 349 00:19:16,240 --> 00:19:17,150 สิ่งที่เกี่ยวกับความยาว? 350 00:19:17,150 --> 00:19:18,400 >> ผู้ชม: [ไม่ได้ยิน] 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> ลำโพง 1: ตกลง 353 00:19:24,680 --> 00:19:25,410 อะไรคือสิ่งที่นาน? 354 00:19:25,410 --> 00:19:26,660 >> ผู้ชม: [ไม่ได้ยิน] 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> ลำโพง 1: ใช่สอง int 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 ใช่ 359 00:19:34,705 --> 00:19:36,100 >> ผู้ชม: [ไม่ได้ยิน] 360 00:19:36,100 --> 00:19:38,030 >> ลำโพง 1: [ไม่ได้ยิน] 361 00:19:38,030 --> 00:19:41,860 แล้วนานเป็นสองเท่า 362 00:19:41,860 --> 00:19:42,814 >> ผู้ชม: ไม่ไม่ 363 00:19:42,814 --> 00:19:47,107 ยาวเป็นเพียง int 364 00:19:47,107 --> 00:19:50,910 มันขึ้นอยู่กับสถาปัตยกรรม ก่อน [ไม่ได้ยิน] 365 00:19:50,910 --> 00:19:52,922 และ int มีขนาดเดียวกัน 366 00:19:52,922 --> 00:19:54,172 [ไม่ได้ยิน] 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> ลำโพง 1: ดังนั้นยาวและ int เหมือนกัน 369 00:20:00,920 --> 00:20:02,943 แล้วนาน เป็นสองเท่า int 370 00:20:02,943 --> 00:20:03,910 เย็น 371 00:20:03,910 --> 00:20:05,550 และแล้วสิ่งที่เป็นประเภทสุดท้าย? 372 00:20:05,550 --> 00:20:06,510 >> ผู้ชม: ตัวชี้ 373 00:20:06,510 --> 00:20:10,350 >> ลำโพง 1: ใช่เพื่อให้เราได้เรียนรู้ นิด ๆ หน่อย ๆ เกี่ยวกับตัวชี้ 374 00:20:10,350 --> 00:20:14,015 และคำนึงถึงสิ่งที่ชี้เป็น ชี้ยา่มันอาจจะเป็นดาวถ่าน 375 00:20:14,015 --> 00:20:15,880 หรือ int star-- 376 00:20:15,880 --> 00:20:20,530 มันเสมอ 4 ไบต์สำหรับตัวชี้ 377 00:20:20,530 --> 00:20:21,633 คำถามเกี่ยวกับที่? 378 00:20:21,633 --> 00:20:22,116 ใช่? 379 00:20:22,116 --> 00:20:24,531 >> ผู้ชม: [ไม่ได้ยิน] 380 00:20:24,531 --> 00:20:29,530 >> ลำโพง 1: ดังนั้นยาวและ int เป็น เดียวกันในเครื่อง CS50 นี้ 381 00:20:29,530 --> 00:20:32,302 >> ผู้ชม: เครื่องจะสมบูรณ์ ใช้แทนกันได้ 382 00:20:32,302 --> 00:20:33,510 >> ลำโพง 1: ใช่ 383 00:20:33,510 --> 00:20:36,610 ดังนั้นแล้วนานเป็นสองเท่า int 384 00:20:36,610 --> 00:20:39,250 >> ผู้ชม: นี่คือ 32 bit? 385 00:20:39,250 --> 00:20:40,620 >> ลำโพง 1: 32 บิตใช่ 386 00:20:40,620 --> 00:20:43,572 >> ผู้ชม: ดังนั้น [ไม่ได้ยิน] 387 00:20:43,572 --> 00:20:46,790 >> ลำโพง 1: ใช่ถ้ามันไม่ได้ อย่างชัดเจนว่าคุณ 388 00:20:46,790 --> 00:20:47,870 ต้องถือว่า 32 บิต 389 00:20:47,870 --> 00:20:50,040 >> ผู้ชม: มันจะพูดอะไรบางอย่าง เช่นสมมติว่า 390 00:20:50,040 --> 00:20:51,498 สถาปัตยกรรมเช่นเครื่องใช้ไฟฟ้า 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 64 บิตสิ่งเดียวที่ การเปลี่ยนแปลงมีความปรารถนาและตัวชี้ 393 00:21:01,710 --> 00:21:05,614 พวกเขาทั้งสอง [ไม่ได้ยิน] 394 00:21:05,614 --> 00:21:06,590 >> ลำโพง 1: ใช่? 395 00:21:06,590 --> 00:21:07,566 >> ผู้ชม: คำถาม 396 00:21:07,566 --> 00:21:10,982 ดังนั้นในหนึ่งของการปฏิบัติแบบทดสอบ, จะถามเกี่ยวกับ int ลงนาม 397 00:21:10,982 --> 00:21:15,374 ดังนั้นวิธีการที่จะได้รับการพิจารณาว่า จาก int [ไม่ได้ยิน]? 398 00:21:15,374 --> 00:21:18,140 >> ลำโพง 1: ลงนาม ในนี้ยังมี 4 ไบต์ 399 00:21:18,140 --> 00:21:21,172 แต่สิ่งที่แตกต่างกันเกี่ยวกับการลงนามใน int และ int ลงนาม? 400 00:21:21,172 --> 00:21:22,422 >> ผู้ชม: [ไม่ได้ยิน] 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> ลำโพง 1: ขวา 403 00:21:25,630 --> 00:21:27,570 หนึ่งสามารถเป็นตัวแทนของค่าลบ 404 00:21:27,570 --> 00:21:28,580 แต่วิธีการที่ไม่ได้ทำที่? 405 00:21:28,580 --> 00:21:30,536 >> ผู้ชม: [ไม่ได้ยิน] 406 00:21:30,536 --> 00:21:36,370 >> ลำโพง 1: ใช่มันช่วยประหยัด 1 บิตที่จะเป็นตัวแทนเข้าสู่ระบบ 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 ลงนามมีหนึ่งบิตที่ แสดงให้เห็นถึงสัญญาณที่ 409 00:21:45,040 --> 00:21:48,886 และลงนามเพียงแค่เป็นบวกทั้งหมด 410 00:21:48,886 --> 00:21:50,365 >> ผู้ชม: OK 411 00:21:50,365 --> 00:21:54,230 เพื่อให้คุณบอกว่าสองเป็น สองเท่าของขนาดของลอย? 412 00:21:54,230 --> 00:21:58,202 >> ลำโพง 1: ดับเบิ้ลเป็นสองเท่า ขนาดของลอยใช่ 413 00:21:58,202 --> 00:22:01,639 >> ผู้ชม: วิธีการที่ไม่ชี้ ไปนาน [ไม่ได้ยิน] 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> ลำโพง 1: ดังนั้นคำถามคือวิธีการที่ไม่ ตัวชี้ไปยัง long-- ยาว 416 00:22:10,870 --> 00:22:13,800 วิธีการที่ว่ามีเพียงสี่ไบต์เมื่อ นาน 8 ไบต​​์ของ 417 00:22:13,800 --> 00:22:17,310 ดังนั้นอย่าลืมสิ่งที่เป็นตัวชี้ เป็นหลักมูลค่าพื้นฐานมาก 418 00:22:17,310 --> 00:22:19,046 >> ผู้ชม: [ไม่ได้ยิน] 419 00:22:19,046 --> 00:22:22,670 >> ลำโพง 1: ใช่ดังนั้นตัวชี้ เป็นเพียงสถานที่ตั้งหน่วยความจำ 420 00:22:22,670 --> 00:22:28,040 ดังนั้นมันไม่สำคัญว่าพื้นที่เท่าใด ตัวชี้ที่ชี้ไปที่ 421 00:22:28,040 --> 00:22:32,060 เพียงต้องการไบต์ที่ 4 เพื่อติดตาม สถานที่ตั้งของหน่วยความจำที่ 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 หากมีปัญหาอื่น ๆ 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 เย็น 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> ดังนั้นสิ่งสุดท้ายที่ฉันมี เป็นออกมาตรฐาน 428 00:22:47,460 --> 00:22:51,020 คุณควรจะใช้พวกเขาบ่อย พอที่จะทำให้คุณสามารถจำได้ 429 00:22:51,020 --> 00:22:54,800 แต่นี้คือเมื่อเราใช้ printf ตัวอย่างเช่น 430 00:22:54,800 --> 00:22:59,260 และเรามีตัวยึดตำแหน่งเหล่านี้ที่ ถูกเรียกว่าโค้ดรูปแบบ 431 00:22:59,260 --> 00:23:03,910 >> ดังนั้นร้อยละคถ่านร้อยละฉันสำหรับ int, และเรายังสามารถใช้ร้อยละง 432 00:23:03,910 --> 00:23:05,130 มันเป็นสิ่งเดียวกัน 433 00:23:05,130 --> 00:23:08,200 แต่โดยทั่วไปใน CS50 เรา พยายามที่จะใช้ฉันเป็นร้อยละ 434 00:23:08,200 --> 00:23:09,860 ร้อยละฉสำหรับลอย 435 00:23:09,860 --> 00:23:15,620 LD ร้อยละนานยาวและ ร้อยละสำหรับการสตริง 436 00:23:15,620 --> 00:23:18,550 >> ในทำนองเดียวกันเราได้ใช้ไม่กี่ ของลำดับหนีเหล่านี้ 437 00:23:18,550 --> 00:23:22,431 ตัวอย่างเช่น n เครื่องหมายสำหรับบรรทัดใหม่ 438 00:23:22,431 --> 00:23:26,910 นี้เป็นเพียงสำหรับเมื่อคุณกำลังจัดรูปแบบ รหัสของคุณสำหรับการพิมพ์ฉ 439 00:23:26,910 --> 00:23:27,260 ใช่? 440 00:23:27,260 --> 00:23:28,906 >> ผู้ชม: อะไรคือร้อยละงใช่หรือไม่ 441 00:23:28,906 --> 00:23:31,850 >> ลำโพง 1: ดังนั้นคำถาม จะเป็นสิ่งที่ดีสำหรับร้อยละ? 442 00:23:31,850 --> 00:23:33,270 ร้อยละงสำหรับ ints 443 00:23:33,270 --> 00:23:37,392 ร้อยละงและร้อยละฉันเหมือนกัน 444 00:23:37,392 --> 00:23:41,130 >> ผู้ชม: อะไรคือความแตกต่างระหว่าง n เครื่องหมายและเครื่องหมาย R? 445 00:23:41,130 --> 00:23:45,300 >> ลำโพง 1: ดังนั้นคำถามคือสิ่งที่ ความแตกต่างระหว่าง n ฟันเฟืองและ 446 00:23:45,300 --> 00:23:48,615 ฟันเฟือง R? 447 00:23:48,615 --> 00:23:50,906 ผมคิดว่าเครื่องหมาย R ค่าเท่าใด 448 00:23:50,906 --> 00:23:54,340 >> ผู้ชม: ดังนั้นเครื่องหมายอาร์เพียงหมายถึง กลับไปที่จุดเริ่มต้นของบรรทัด 449 00:23:54,340 --> 00:23:56,670 โดยไม่ต้องจริงจะขึ้นบรรทัดใหม่ 450 00:23:56,670 --> 00:24:01,000 ดังนั้นถ้าคุณพิมพ์เครื่องหมาย R และคุณ กลับไปที่จุดเริ่มต้นของบรรทัด 451 00:24:01,000 --> 00:24:04,005 แล้วคุณพิมพ์สิ่งที่มากขึ้นคุณเขียนทับ สิ่งที่มีอยู่แล้วใน 452 00:24:04,005 --> 00:24:04,390 [ไม่ได้ยิน] 453 00:24:04,390 --> 00:24:06,725 ในขณะที่ n จริงไปที่ใหม่ สายและไป [ไม่ได้ยิน] 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> ลำโพง 1: ดีคำถามอื่น ๆ ? 456 00:24:13,915 --> 00:24:15,430 ขวาทั้งหมด 457 00:24:15,430 --> 00:24:18,617 ฉันจะส่งมันออกไป และที่จะดำเนินต่อไป 458 00:24:18,617 --> 00:24:25,078 >> [APPLAUSE] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: righty ทั้งหมด 461 00:25:09,720 --> 00:25:18,590 ดังนั้นฉันจะพูดคุยเกี่ยวกับความกว้างอีก ช่วงของความคิดจากชั้นเรียนที่มี 462 00:25:18,590 --> 00:25:23,220 ๆ ตัวแทนของสัปดาห์ที่สองและ จุดเริ่มต้นของสัปดาห์ที่สามเริ่มจาก 463 00:25:23,220 --> 00:25:28,690 กับการคัดเลือกนักแสดงซึ่งเป็นเพียงวิธีการ การรักษาค่าของบางประเภทเป็น 464 00:25:28,690 --> 00:25:30,830 ค่าของชนิดที่แตกต่างกัน 465 00:25:30,830 --> 00:25:34,110 เพื่อให้เราสามารถทำเช่นนี้กับตัวอักษรที่จะ ints ลอยไป ints และ 466 00:25:34,110 --> 00:25:35,360 ปรารถนายาวเป็นสองเท่า 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> ทุกสิ่งเหล่านี้สามารถใช้เป็นวิธี ของการรักษาบางค่าที่เป็นตัวเลข 469 00:25:44,500 --> 00:25:48,370 ถ่านลบอื่น ๆ บาง ค่าตัวเลข 470 00:25:48,370 --> 00:25:54,480 ดังนั้นจึงมีปัญหาบางอย่างกับเรื่องนี้ของ แน่นอนที่มาเมื่อคุณโยน 471 00:25:54,480 --> 00:25:57,860 สิ่งที่ต้องการลอยไป ints 472 00:25:57,860 --> 00:26:00,500 ดังนั้นนี่คือแปลกเล็กน้อย 473 00:26:00,500 --> 00:26:03,170 เรามีลอยที่ 1.31 474 00:26:03,170 --> 00:26:05,220 เราคูณด้วย 10,000 475 00:26:05,220 --> 00:26:08,380 แล้วเราพิมพ์เป็น int 476 00:26:08,380 --> 00:26:09,630 ไม่ออกนี้คืออะไร? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10,000 ครั้ง 1.31 479 00:26:14,020 --> 00:26:18,761 ดังนั้น 13,000 เป็นที่คาดเดาหรือไม่ 480 00:26:18,761 --> 00:26:20,685 >> ผู้ชม: ฉันคิดว่ามันเป็น 10,000 481 00:26:20,685 --> 00:26:24,234 >> DAN: ดังนั้นฉันคูณ 10,000 ก่อนที่ฉันหล่อมัน 482 00:26:24,234 --> 00:26:25,202 >> ผู้ชม: โอ้ 483 00:26:25,202 --> 00:26:27,622 จะไม่ได้มีเป็นหนึ่งใน 9 และบาง 0 หมายเลข? 484 00:26:27,622 --> 00:26:29,270 >> DAN: คุณอาจมีบางตัวเลขแปลก 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 ดังนั้นตอนนี้มันเป็น 1.3 เท่า 10,000 487 00:26:37,670 --> 00:26:40,040 เพื่อให้เป็น 13,000 488 00:26:40,040 --> 00:26:41,313 และนี่ weird-- พิเศษ 489 00:26:41,313 --> 00:26:42,160 >> ผู้ชม: 13,100 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13,100 491 00:26:42,650 --> 00:26:44,910 ขอบคุณร็อบ 492 00:26:44,910 --> 00:26:46,610 และนี่ weirdness-- พิเศษ 493 00:26:46,610 --> 00:26:48,060 นี้ 9,9-- 494 00:26:48,060 --> 00:26:53,860 เป็นเพียงเพราะหล่อนี้ จบลงด้วยการปัดเศษลงที่ 495 00:26:53,860 --> 00:26:55,394 มันไม่ควรมี 496 00:26:55,394 --> 00:26:55,871 ใช่ 497 00:26:55,871 --> 00:26:58,256 >> ผู้ชม: หล่อที่เกิดขึ้น หลังจากที่อะไรอีกหรือไม่ 498 00:26:58,256 --> 00:27:03,865 >> DAN: ดังนั้นเพราะฉันมีนี้ในการพิมพ์มัน ไม่คูณนี้ก่อนที่จะ 499 00:27:03,865 --> 00:27:05,230 ไม่หล่อนี้ 500 00:27:05,230 --> 00:27:06,140 >> ผู้ชม: [ไม่ได้ยิน] 501 00:27:06,140 --> 00:27:11,350 >> DAN: ผมคิดว่ามันจะโยนครั้งแรก ใช่ซึ่งจะเป็น 10,000 502 00:27:11,350 --> 00:27:12,610 อะไรอีกหรือไม่ 503 00:27:12,610 --> 00:27:13,330 เย็น 504 00:27:13,330 --> 00:27:16,344 ดังนั้นนี่คือ 13,099 505 00:27:16,344 --> 00:27:17,840 ทำไมนี้เกิดขึ้นได้อย่างไร 506 00:27:17,840 --> 00:27:18,900 ไม่แน่ชัด 507 00:27:18,900 --> 00:27:21,020 >> ลอยจะไม่สมบูรณ์แบบ 508 00:27:21,020 --> 00:27:27,550 พวกเขาสามารถที่จะแสดงตัวเลข จำนวนหนึ่งของตัวเลขที่มีนัยสำคัญ 509 00:27:27,550 --> 00:27:35,120 ดังนั้นหากเราพิมพ์ออกมา 8 มะเดื่อ sig ที่ ลอยนี้เราได้รับชนิดของ 510 00:27:35,120 --> 00:27:36,800 น่าเกลียดมองตัวเลข 511 00:27:36,800 --> 00:27:45,580 และที่เพราะ 1.31 ไม่สามารถถูกต้อง จะแสดงโดยง่าย 512 00:27:45,580 --> 00:27:49,000 อำนาจของสองในเครื่อง 513 00:27:49,000 --> 00:27:53,530 ดังนั้นมันจะจบลงด้วยการที่อยู่ใกล้ที่สุด เดาซึ่งสิ้นสุด 514 00:27:53,530 --> 00:27:55,710 เป็นเพียงเล็กน้อยต่ำ 515 00:27:55,710 --> 00:27:57,730 ทำให้รู้สึก? 516 00:27:57,730 --> 00:27:59,110 ตกลง 517 00:27:59,110 --> 00:28:05,840 >> ตอนนี้เปลี่ยนเป็นวิธีที่แตกต่างกันของ ทำงบเงื่อนไขที่ทุก 518 00:28:05,840 --> 00:28:09,900 เราดูแลเกี่ยวกับการเป็นตัวแปรเดียว 519 00:28:09,900 --> 00:28:16,570 ดังนั้นในตัวอย่างนี้โดยเฉพาะเราไม่ รับจำนวนเต็มจากผู้ใช้ 520 00:28:16,570 --> 00:28:21,070 แล้วเรากำลังมองหาที่ สิ่งที่เป็นจำนวนเต็ม 521 00:28:21,070 --> 00:28:23,500 สันนิษฐานว่ามันเป็นจำนวน ระหว่างหนึ่งและสี่ 522 00:28:23,500 --> 00:28:24,800 นั่นคือสิ่งที่เรากำลังถามหา 523 00:28:24,800 --> 00:28:28,450 >> เพื่อให้คุณทำสวิทช์ของ ชื่อตัวแปร 524 00:28:28,450 --> 00:28:34,290 จากนั้นคุณตั้งขึ้นกรณีที่เป็นไปได้ ค่าที่มันอาจจะ 525 00:28:34,290 --> 00:28:37,730 ดังนั้นกรณีหนึ่งบอกว่ามันเป็นต่ำ 526 00:28:37,730 --> 00:28:41,080 แล้วคุณหยุดที่จะได้ออก สภาพของสวิทช์เพื่อให้ 527 00:28:41,080 --> 00:28:43,270 คุณไม่ได้ให้ไป 528 00:28:43,270 --> 00:28:44,830 >> ใน case-- ต่อไป 529 00:28:44,830 --> 00:28:46,940 ดังนั้นกรณีที่สองและกรณี three-- 530 00:28:46,940 --> 00:28:51,920 ถ้าเป็นกรณีที่สองมันเป็นเพียงแค่หยดลงไป บรรทัดแรกของรหัสที่เห็นเช่นเดียวกับ 531 00:28:51,920 --> 00:28:55,400 กรณีที่สามจนกว่าจะเห็นการทำลาย 532 00:28:55,400 --> 00:29:00,430 ดังนั้นเหตุผลที่คุณจะได้รับกรณีที่หนึ่งไปยัง เพียงพิมพ์ต่ำเป็นเพราะฉัน 533 00:29:00,430 --> 00:29:01,890 มีการหยุดพักที่นี่ 534 00:29:01,890 --> 00:29:05,360 ถ้าผมพูดไม่สนใจ break-- นี้ ถ้าฉันโยน breakaway-- นี้ 535 00:29:05,360 --> 00:29:09,740 มันจะพิมพ์ที่ต่ำและจากนั้นมันจะ พิมพ์กลางและแล้วมันจะทำลาย 536 00:29:09,740 --> 00:29:12,200 >> ดังนั้นการหยุดพักเป็นส่วนสำคัญ ของสวิทช์และเงื่อนไข 537 00:29:12,200 --> 00:29:14,340 พวกเขาควรจะมี 538 00:29:14,340 --> 00:29:20,070 กรณีใด ๆ ที่ไม่ได้ระบุไว้อย่างชัดเจน ได้รับการจัดการโดยค่าเริ่มต้น 539 00:29:20,070 --> 00:29:26,645 ในกรณีที่สวิทช์และควรจะโยน 540 00:29:26,645 --> 00:29:31,363 >> ผู้ชม: ดังนั้น 1, 2, 3, และ 4 จะเป็น n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: ค่าที่ n สามารถ 542 00:29:33,310 --> 00:29:34,654 ใช่ 543 00:29:34,654 --> 00:29:35,146 ใช่? 544 00:29:35,146 --> 00:29:37,606 >> ผู้ชม: ดังนั้นเมื่อคุณมี ที่ [ไม่ได้ยิน] 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: คุณจะพิมพ์ต่ำแล้ว มันจะพิมพ์กลางและ 547 00:29:46,830 --> 00:29:47,400 แล้วมันจะทำลาย 548 00:29:47,400 --> 00:29:50,244 >> ผู้ชม: ทำไมมันจะพิมพ์ กลางหาก [ไม่ได้ยิน] 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: ดังนั้นทุกอย่างภายใต้กรณี ก่อนที่จะแบ่งตกอยู่ภายใต้ 551 00:30:00,550 --> 00:30:09,390 ดังนั้นกรณีที่พิมพ์เป็นกรณีที่อยู่ภายใต้ หนึ่งตามที่เป็นอยู่นี้พิมพ์ต่อไปนี้ 552 00:30:09,390 --> 00:30:09,890 ใช่? 553 00:30:09,890 --> 00:30:11,140 >> ผู้ชม: [ไม่ได้ยิน] 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: ดังนั้นตัวเลขนี้เป็นเพียงโดยเฉพาะอย่างยิ่ง ค่าที่ตัวแปรนี้ 556 00:30:22,170 --> 00:30:23,420 สามารถใช้ใช่มั้ย? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 ไม่ว่าทำให้รู้สึก? 559 00:30:28,490 --> 00:30:28,990 ใช่ 560 00:30:28,990 --> 00:30:31,490 >> ผู้ชม: [ไม่ได้ยิน] 561 00:30:31,490 --> 00:30:34,130 >> DAN: ใช่กรณีที่สองจะพิมพ์ ตรงกลางแล้วหยุดพัก 562 00:30:34,130 --> 00:30:35,380 >> ผู้ชม: [ไม่ได้ยิน] 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: ผมคิดว่าอะไรบ้าง 565 00:30:40,050 --> 00:30:43,855 สิ่งที่ชนิดข้อมูลอื่น ๆ คุณสามารถสลับไป? 566 00:30:43,855 --> 00:30:46,320 >> ผู้ชม: คุณสามารถสลับ กว่าชนิดของข้อมูลใด ๆ 567 00:30:46,320 --> 00:30:50,905 แต่มันหมายถึงอะไรมากกว่าตัวอักษร และ ints และสิ่งที่ต้องการว่าเพราะ 568 00:30:50,905 --> 00:30:55,600 ถ้าคุณกำลังเปลี่ยนไปชี้ ที่ไม่จริงทำให้รู้สึก 569 00:30:55,600 --> 00:30:59,555 เปลี่ยนไปโหลดถ้ามันยังให้ คุณทำอย่างนั้นเพราะจุดลอย 570 00:30:59,555 --> 00:31:02,840 ในความแม่นยำที่คุณจะไม่ได้จริงๆ ต้องการที่จะทำต่อไปว่า 571 00:31:02,840 --> 00:31:07,320 ดังนั้นสวยมากเพียง ints และ ตัวอักษรและสิ่งที่ต้องการที่ 572 00:31:07,320 --> 00:31:12,360 >> DAN: ใช่มันเมื่อคุณมีอย่างชัดเจน ค่าที่คุณรู้ว่าผมคิดว่าอาจจะเป็น 573 00:31:12,360 --> 00:31:14,250 สวิทช์ที่มีประโยชน์จริง 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 ดีหรือไม่? 576 00:31:18,990 --> 00:31:21,370 ตกลง 577 00:31:21,370 --> 00:31:26,180 >> ขอบเขตเป็นช่วงที่ประกาศ ตัวแปรขยาย 578 00:31:26,180 --> 00:31:32,190 ดังนั้นในก้อนเล็ก ๆ น้อย ๆ ของรหัสฉันมี มันจะเต็มไปด้วยข้อผิดพลาด 579 00:31:32,190 --> 00:31:41,450 และเหตุผลที่ผมประกาศ int นี้ ฉันอยู่ในขอบเขตนี้สำหรับวง 580 00:31:41,450 --> 00:31:46,390 แล้วฉันพยายามที่จะอ้างอิงที่ ฉันนอกที่ขอบเขตห่วง 581 00:31:46,390 --> 00:31:50,330 >> ดังนั้นโดยทั่วไปคุณสามารถคิดเกี่ยวกับขอบเขต เป็นอะไรที่คุณประกาศ 582 00:31:50,330 --> 00:31:59,750 ที่มีอยู่ภายในชุดของวงเล็บปีกกาเท่านั้น อยู่ภายในวงเล็บปีกกาที่ 583 00:31:59,750 --> 00:32:04,990 และถ้าคุณพยายามและใช้ตัวแปรที่ ด้านนอกของวงเล็บปีกกาที่คุณจะ 584 00:32:04,990 --> 00:32:08,356 ได้รับข้อผิดพลาดจากคอมไพเลอร์ 585 00:32:08,356 --> 00:32:08,812 ใช่? 586 00:32:08,812 --> 00:32:09,724 >> ผู้ชม: ดังนั้นหนึ่งนี้ไม่ได้ทำงานหรือไม่ 587 00:32:09,724 --> 00:32:11,790 >> DAN: นี้ไม่ได้ผลใช่ 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 สตริง 590 00:32:18,660 --> 00:32:19,780 สตริงถ่าน * 591 00:32:19,780 --> 00:32:22,250 พวกเขากำลังตรงเดียวกัน 592 00:32:22,250 --> 00:32:25,540 พวกเขาเป็นเพียงตัวชี้ไปยังตัวอักษร 593 00:32:25,540 --> 00:32:33,000 และสตริงใด ๆ ที่คุณมีควรจะจบ ด้วยเครื่องหมายทับขวาศูนย์ซึ่งเป็นเพียง 594 00:32:33,000 --> 00:32:34,410 คการประชุม 595 00:32:34,410 --> 00:32:36,680 >> มันถูกเรียกว่าเทอร์มิโมฆะ 596 00:32:36,680 --> 00:32:39,050 และ NULL-- 597 00:32:39,050 --> 00:32:41,670 เงินทุนยังไม่มีทุน U เมืองหลวง L, ทุน L-- 598 00:32:41,670 --> 00:32:44,290 ไม่ได้เช่นเดียวกับ Terminator โมฆะ 599 00:32:44,290 --> 00:32:46,640 นี้เป็นตัวชี้ 600 00:32:46,640 --> 00:32:48,280 นี้เป็นตัวละคร 601 00:32:48,280 --> 00:32:49,530 พวกเขามีความแตกต่างกันมาก 602 00:32:49,530 --> 00:32:50,200 จำได้ 603 00:32:50,200 --> 00:32:52,320 มันจะเป็นแบบทดสอบที่อาจจะ 604 00:32:52,320 --> 00:32:54,040 ผมยังไม่ได้เห็นแบบทดสอบ 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 ใช่? 607 00:32:58,840 --> 00:33:01,232 >> ผู้ชม: ดังนั้นเป็นโมฆะพูดตัวชี้? 608 00:33:01,232 --> 00:33:01,995 >> DAN: ใช่ 609 00:33:01,995 --> 00:33:05,170 >> ผู้ชม: อะไร [ไม่ได้ยิน] 610 00:33:05,170 --> 00:33:10,050 >> DAN: ถ้าพูด malloc เรียกว่าเมื่อคุณ ไม่ได้มีหน่วยความจำเพียงพอที่จะได้รับ 611 00:33:10,050 --> 00:33:14,400 อะไรขนาดที่คุณกำลังถามหา malloc จะกลับมาเป็นโมฆะ 612 00:33:14,400 --> 00:33:19,550 มันเป็นโดยทั่วไปเมื่อใดก็ตามที่ฟังก์ชั่นเป็น ควรจะกลับชี้คุณ 613 00:33:19,550 --> 00:33:22,600 จำเป็นต้องตรวจสอบกับโมฆะเพราะ เป็นโมฆะ good-- สวย 614 00:33:22,600 --> 00:33:25,260 มันเรียงลำดับของค่าขยะ 615 00:33:25,260 --> 00:33:27,050 มันเป็นศูนย์เท่าที่ชี้ไป 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> เมื่อใดก็ตามที่คุณเรียกฟังก์ชัน กลับชี้ว่า 618 00:33:32,250 --> 00:33:35,960 คุณจะต้องการที่จะตรวจสอบให้ แน่ใจหรือว่าตัวชี้ที่ไม่เป็นโมฆะ 619 00:33:35,960 --> 00:33:37,760 เพราะเป็นโมฆะเป็นเรื่องธรรมดามาก 620 00:33:37,760 --> 00:33:40,160 มันเรียงลำดับผลตอบแทนขยะ 621 00:33:40,160 --> 00:33:44,902 ดังนั้นหากสิ่งที่ไม่ได้ไปขวา เพียงแค่กลับ NULL แทน 622 00:33:44,902 --> 00:33:45,898 >> ผู้ชม: [ไม่ได้ยิน] 623 00:33:45,898 --> 00:33:48,922 >> DAN: ใช่และที่นี้ 624 00:33:48,922 --> 00:33:51,750 >> ผู้ชม: [ไม่ได้ยิน] 625 00:33:51,750 --> 00:33:52,800 >> DAN: สะกดมันเช่นนี้ 626 00:33:52,800 --> 00:33:54,150 มันเป็นเทอร์มิโมฆะ 627 00:33:54,150 --> 00:33:56,560 มันเป็นตัวพิมพ์เล็ก N-U-L-L ถ้า คุณสะกดมัน 628 00:33:56,560 --> 00:33:59,860 >> ผู้ชม: และฉันเพิ่งไป กลับมาและผ่านการทดสอบมัน 629 00:33:59,860 --> 00:34:03,010 และถ้าคุณพยายามที่จะนำจุดลอย ค่าลงในสวิทช์ก็จะตะโกนใส่หน้าคุณ 630 00:34:03,010 --> 00:34:05,916 กล่าวว่าคำสั่งต้องมีการแสดงออก ประเภทจำนวนเต็ม 631 00:34:05,916 --> 00:34:07,166 >> DAN: มีคุณไป 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 แต่ใช่สิ่งที่เป็นคำถามอีกครั้งหรือไม่ 634 00:34:12,246 --> 00:34:13,496 >> ผู้ชม: [ไม่ได้ยิน] 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: ดังนั้นเงินทุนที่ยังไม่มีทุน U เมืองหลวง L, ทุน L คือ c สิ่งที่เกิดขึ้นจริง 637 00:34:23,679 --> 00:34:29,719 มันเป็นตัวชี้โมฆะและจะ เพียง แต่ได้รับการปฏิบัติเช่นนี้ 638 00:34:29,719 --> 00:34:33,530 คุณจะไม่เคยพยายามสะกด ตัวละครที่เป็นโมฆะและเห็นใด ๆ 639 00:34:33,530 --> 00:34:35,630 วิธีอื่น ๆ กว่านี้ 640 00:34:35,630 --> 00:34:36,610 ใช่? 641 00:34:36,610 --> 00:34:42,490 >> ผู้ชม: ดังนั้นกลับไปถ่านสูงสุดหรือ สิ่งที่อยู่ในบันทึกก็จะได้ 642 00:34:42,490 --> 00:34:43,960 รวบรวมฟังก์ชั่นเดียวกัน เป็น [ไม่ได้ยิน] 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> ผู้ชม: ดังนั้นที่คุณหมายถึง กลับสูงสุดถ่านจาก getchar หรือ 645 00:34:54,949 --> 00:34:55,444 สิ่งที่มันคืออะไร? 646 00:34:55,444 --> 00:34:55,940 >> ผู้ชม: ใช่ 647 00:34:55,940 --> 00:34:58,620 >> ผู้ชม: ใช่ดังนั้นทั่วไป ระยะสำหรับทุกสิ่งเหล่านั้น 648 00:34:58,620 --> 00:34:59,920 เป็นค่าแมวมอง 649 00:34:59,920 --> 00:35:03,640 ดังนั้นเหมือนกลับ int สูงสุดจาก GetInt และถ่านสูงสุดจาก getchar มัน 650 00:35:03,640 --> 00:35:06,010 ควรจะเป็นเช่นขวาทั้งหมดถ้า สิ่งเหล่านี้จะกลับมาอยู่กับเรา 651 00:35:06,010 --> 00:35:07,210 สิ่งที่ผิดพลาด 652 00:35:07,210 --> 00:35:09,950 >> สำหรับคำแนะนำเราก็เกิดขึ้นได้ ค่ายามนี้ที่ทุกคน 653 00:35:09,950 --> 00:35:10,750 เห็นด้วยกับ 654 00:35:10,750 --> 00:35:13,210 และนี่คือสิ่งที่คุณจะกลับ เมื่อสิ่งที่ผิดไป 655 00:35:13,210 --> 00:35:15,910 ดังนั้นถ่านสูงสุดคือสิ่งที่เรากำลังใช้ เพื่อเป็นตัวแทนของบางสิ่งบางอย่าง 656 00:35:15,910 --> 00:35:18,100 เช่นโมฆะหรือ getchar 657 00:35:18,100 --> 00:35:23,420 >> ผู้ชม: ดังนั้นถ้าคุณกำลังทดสอบ getchar, คุณอาจจะเพียงแค่ใส่โมฆะ? 658 00:35:23,420 --> 00:35:23,910 ที่จะสร้างความแตกต่างได้หรือไม่ 659 00:35:23,910 --> 00:35:25,400 >> DAN: คุณไม่สามารถเพียงแค่ตรวจสอบเป็นโมฆะ 660 00:35:25,400 --> 00:35:30,130 คุณจะต้องตรวจสอบถ่านสูงสุดเพราะ ค่าตอบแทนจากการทำงานเป็น 661 00:35:30,130 --> 00:35:35,416 ตัวอักษรไม่ชี้ 662 00:35:35,416 --> 00:35:35,888 ใช่? 663 00:35:35,888 --> 00:35:38,248 >> ผู้ชม: คำถามนี้ถาม สำหรับความยาวสตริง 664 00:35:38,248 --> 00:35:40,136 ไม่ว่ารวมถึงตัวละครที่เป็นโมฆะหรือไม่ 665 00:35:40,136 --> 00:35:41,000 >> DAN: เลขที่ 666 00:35:41,000 --> 00:35:45,930 และที่จริงวิธีการระยะเวลาในสตริง รู้ที่จะหยุดเพราะมันผ่านไป 667 00:35:45,930 --> 00:35:49,070 อาร์เรย์ของตัวอักษรจนกว่าของคุณ มันเห็นตัวละครที่เป็นโมฆะ 668 00:35:49,070 --> 00:35:51,030 แล้วมันก็เหมือนทุก ขวาฉันทำ 669 00:35:51,030 --> 00:35:52,130 >> ผู้ชม: [ไม่ได้ยิน] ห้า? 670 00:35:52,130 --> 00:35:53,990 >> DAN: สวัสดีจะเป็นห้า 671 00:35:53,990 --> 00:35:55,240 อ้อ 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 ดังนั้นอาร์เรย์ที่มีอย่างต่อเนื่อง บล็อกของหน่วยความจำ 674 00:36:02,880 --> 00:36:08,480 พวกเขาสามารถเข้าถึงได้ทันทีด้วยการพูดว่า ชื่อของอาร์เรย์แล้วในหยิก 675 00:36:08,480 --> 00:36:16,720 จัดฟันสิ่งที่ดัชนีคุณต้องการไป เพื่อที่พวกเขากำลังจัดทำดัชนีจากศูนย์ผ่าน 676 00:36:16,720 --> 00:36:20,100 ความยาวของ 1 ลบอาร์เรย์ 677 00:36:20,100 --> 00:36:23,070 >> และพวกเขากำลังประกาศตามประเภทของ สิ่งที่คุณกำลังจัดเก็บใน 678 00:36:23,070 --> 00:36:29,750 อาร์เรย์ชื่อของอาร์เรย์แล้ว สิ่งที่มีขนาดของอาร์เรย์ที่ 679 00:36:29,750 --> 00:36:36,660 ดังนั้นนี่คืออาร์เรย์ถ่านของความยาว หกที่มีค่าเหล่านี้ 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 ใช่? 682 00:36:42,700 --> 00:36:43,950 >> ผู้ชม: [ไม่ได้ยิน] 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: ใช่ 685 00:36:48,460 --> 00:36:51,340 >> ผู้ชม: [ไม่ได้ยิน] 686 00:36:51,340 --> 00:36:56,700 >> DAN: ถ้าคุณมีสิ่งที่เกิดขึ้น เข้าแถวทำแล้ว 687 00:36:56,700 --> 00:37:02,260 เพื่อให้คุณสามารถระบุนี้แทนเป็น พูดถ่าน, สิ่งที่ชื่อของคุณ 688 00:37:02,260 --> 00:37:12,200 อาร์เรย์เป็นวงเล็บว่างเท่ากับหยิก รั้ง H จุลภาค E จุลภาค L จุลภาค L จุลภาค 689 00:37:12,200 --> 00:37:16,290 O จุลภาคตัวอักษรเป็นโมฆะ และวงเล็บปีกกา 690 00:37:16,290 --> 00:37:18,180 ที่ยังจะทำงานเป็นประกาศ 691 00:37:18,180 --> 00:37:20,886 >> ผู้ชม: [ไม่ได้ยิน] 692 00:37:20,886 --> 00:37:23,110 >> DAN: แล้วคุณจะต้องมี ขนาดทำแล้ว 693 00:37:23,110 --> 00:37:23,896 >> ผู้ชม: [ไม่ได้ยิน] 694 00:37:23,896 --> 00:37:25,146 >> DAN: ใช่ 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 righty ทั้งหมด 697 00:37:32,420 --> 00:37:36,430 อาร์กิวเมนต์บรรทัดคำสั่งเป็นวิธีการของ ได้รับข้อมูลจากผู้ใช้เป็น 698 00:37:36,430 --> 00:37:39,380 ข้อโต้แย้งหลัก 699 00:37:39,380 --> 00:37:40,600 หลักจะใช้เวลาสองอาร์กิวเมนต์ 700 00:37:40,600 --> 00:37:47,680 จำนวนของการขัดแย้งที่จะถูก ผ่านไปตามแนวคำสั่งและ 701 00:37:47,680 --> 00:37:55,340 เวกเตอร์สตริงหรืออาร์เรย์สตริง ทั้งหมดของข้อโต้แย้ง 702 00:37:55,340 --> 00:38:07,840 >> ดังนั้นถ้าผมพูดที่เรียกว่าฟังก์ชั่นเช่น จุดออก 1 พื้นที่ 2 พื้นที่สาม 703 00:38:07,840 --> 00:38:10,110 argc จะ 4 704 00:38:10,110 --> 00:38:17,370 และ argv 0 จะเป็นจุดออก 705 00:38:17,370 --> 00:38:19,130 Argv1 จะเป็น 1 706 00:38:19,130 --> 00:38:23,030 argv2 จะเป็น 2 argv3 จะเป็น 3 ในกรณีที่โดยเฉพาะอย่างยิ่งที่ 707 00:38:23,030 --> 00:38:23,310 ใช่? 708 00:38:23,310 --> 00:38:25,400 >> ผู้ชม: [ไม่ได้ยิน] 709 00:38:25,400 --> 00:38:34,010 >> DAN: องค์ประกอบสุดท้ายในอาร์เรย์ เพราะอาเรย์คือความยาว argc บวก 710 00:38:34,010 --> 00:38:41,050 หนึ่งใน ARGB, องค์ประกอบสุดท้าย เป็นตัวชี้โมฆะ 711 00:38:41,050 --> 00:38:42,580 มันเป็น argc บวก 1 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 ดังนั้นในกรณีที่ฉันเพิ่งกล่าวว่ามัน จะได้รับการ argv 0 เป็นจุดออก 714 00:38:52,150 --> 00:38:56,330 argv 1 คือ 1 argv2 เป็น 2 argv 3 คือ 3 715 00:38:56,330 --> 00:39:03,490 argv 4 ซึ่งเป็นหนึ่งในขนาดใหญ่ กว่า argc จะเป็นโมฆะ 716 00:39:03,490 --> 00:39:04,870 >> และนั่นคือตัวชี้โมฆะ 717 00:39:04,870 --> 00:39:06,590 ใช่ 718 00:39:06,590 --> 00:39:11,250 และที่เพราะสตริงเป็น ดาวถ่านเป็นตัวชี้ 719 00:39:11,250 --> 00:39:14,102 ดังนั้นมันจะเป็นชนิดเดียวกันมี 720 00:39:14,102 --> 00:39:14,595 ใช่? 721 00:39:14,595 --> 00:39:16,074 >> ผู้ชม: สองคำถาม 722 00:39:16,074 --> 00:39:21,004 ดังนั้นหนึ่งในสิ่งที่แตกต่างระหว่าง GetString ชนิดอื่นนอกเหนือจากนี้และ 723 00:39:21,004 --> 00:39:22,483 ในเครื่องยนต์ของผู้ใช้หรือไม่ 724 00:39:22,483 --> 00:39:25,934 และทั้งสองจะถูกเก็บไว้ภายใน หน่วยความจำที่ผ่านมาของคุณ 725 00:39:25,934 --> 00:39:28,399 ดังนั้นเหมือน GetString จะ เป็น [ไม่ได้ยิน] 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: อยู่ที่ไหนก็เก็บ? 728 00:39:33,650 --> 00:39:34,905 ผมไม่ทราบว่ามันเก็บไว้ 729 00:39:34,905 --> 00:39:40,000 >> ผู้ชม: ดังนั้นจริงคุณจะรู้ว่าวิธีใด ๆ ทำงานที่คุณเรียกว่าเป็นข้อโต้แย้ง 730 00:39:40,000 --> 00:39:42,170 จะถูกเก็บไว้ในกองหรือไม่ 731 00:39:42,170 --> 00:39:46,610 ดังนั้น argc และ argv ข้อโต้แย้งหลัก และพวกเขาอยู่ในกองหรือจริงๆ 732 00:39:46,610 --> 00:39:49,131 เหนือสิ่งที่คุณคิดว่าเป็น จุดเริ่มต้นของสแต็ค 733 00:39:49,131 --> 00:39:53,490 อะไรคือส่วนที่อื่น ๆ คำถาม? 734 00:39:53,490 --> 00:39:56,821 >> ผู้ชม: ดังนั้นสิ่งที่ [ไม่ได้ยิน] 735 00:39:56,821 --> 00:40:00,990 >> DAN: ใช่มันเป็นเพียงวิธีการที่แตกต่างกัน ในการได้รับข้อมูลจากผู้ใช้ 736 00:40:00,990 --> 00:40:06,030 หนึ่งนี้เล็กน้อยที่มีประสิทธิภาพมากขึ้นและ มันเป็นการง่ายกว่าสำหรับสคริปต์เพราะคุณ 737 00:40:06,030 --> 00:40:10,070 ก็สามารถผ่านการขัดแย้งกับหลักของคุณ ฟังก์ชั่นมากกว่าที่จะต้องรอ 738 00:40:10,070 --> 00:40:13,400 สำหรับผู้ใช้ถ้าคุณไม่ได้มีผู้ใช้ใด ๆ 739 00:40:13,400 --> 00:40:16,280 >> ผู้ชม: และใช่ได้รับสาย จะเป็น [ไม่ได้ยิน] 740 00:40:16,280 --> 00:40:17,922 มันจะเก็บสิ่งที่คุณต้องการ 741 00:40:17,922 --> 00:40:18,834 >> DAN: ใช่? 742 00:40:18,834 --> 00:40:21,114 >> ผู้ชม: [ไม่ได้ยิน] 743 00:40:21,114 --> 00:40:27,545 >> DAN: ใช่ argv 0 รวมอยู่ด้วยเสมอ เฉือนจุดของการเรียกใช้ฟังก์ชัน 744 00:40:27,545 --> 00:40:28,042 ใช่? 745 00:40:28,042 --> 00:40:29,292 >> ผู้ชม: [ไม่ได้ยิน] 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: ใช่แต่ละข้อโต้แย้งที่มี สิ้นสุดวันที่ในลักษณะเป็นโมฆะเพราะพวกเขา 748 00:40:37,310 --> 00:40:38,310 เป็นสตริง 749 00:40:38,310 --> 00:40:40,892 >> ผู้ชม: [ไม่ได้ยิน] 750 00:40:40,892 --> 00:40:44,116 >> DAN: ใช่ argv argc เป็นตัวชี้โมฆะ 751 00:40:44,116 --> 00:40:45,112 >> ผู้ชม: [ไม่ได้ยิน] 752 00:40:45,112 --> 00:40:47,104 >> DAN: Oh yeah 753 00:40:47,104 --> 00:40:48,100 ใช่ขอโทษ 754 00:40:48,100 --> 00:40:49,594 >> ผู้ชม: ดังนั้น [ไม่ได้ยิน] 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: ดังนั้นคำถามคือถ้าคุณมี บรรทัดคำสั่งจุดเฉือนจุดออก 1, 2, 757 00:41:16,340 --> 00:41:20,410 จะจำนวนของบรรทัดคำสั่ง ข้อโต้แย้งที่มีสองหรือมันจะเป็นสาม? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> ผู้ชม: ผมคิดว่ามันไม่ได้ เรื่องจริงๆ 760 00:41:28,240 --> 00:41:31,370 ฉันมักจะบอกว่าโอ้คุณไม่ผ่าน อาร์กิวเมนต์บรรทัดคำสั่งใด ๆ เมื่อ 761 00:41:31,370 --> 00:41:32,730 เห็นได้ชัดว่าคุณเรียกว่าฟังก์ชั่น 762 00:41:32,730 --> 00:41:37,950 ดังนั้นผมจึงมีแนวโน้มที่จะพูดมากไม่รวม ฟังก์ชั่นจากบรรทัดคำสั่ง 763 00:41:37,950 --> 00:41:40,350 ข้อโต้แย้งถึงแม้ว่ามันจะเป็น รวมอยู่ใน argv 764 00:41:40,350 --> 00:41:42,600 >> DAN: แต่ถ้ามันเป็น test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- และถ้าคุณพูดอะไรบางอย่าง เช่น argc เท่ากับ 3, 766 00:41:46,550 --> 00:41:48,512 คุณอยู่ในสถานะที่ปลอดภัย 767 00:41:48,512 --> 00:41:49,416 ใช่? 768 00:41:49,416 --> 00:41:50,666 >> ผู้ชม: [ไม่ได้ยิน] 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: ผมคิดว่าถ้าแทนการเรียกร้องนี้ ใน argc และสตริงวงเล็บ argv 771 00:42:09,510 --> 00:42:14,350 แต่ยังคงรูปแบบเดียวกันและที่เรียกว่าเพียงแค่ พวกเขามีสิ่งที่แตกต่างกันเช่น 772 00:42:14,350 --> 00:42:16,640 และ b มันจะยังคงทำงานหรือไม่ 773 00:42:16,640 --> 00:42:18,790 และมันจะยังคงทำงาน คุณจะ just-- 774 00:42:18,790 --> 00:42:21,520 แทนการใช้ argc-- ที่คุณต้องการใช้และข 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 ใช่? 777 00:42:25,408 --> 00:42:26,658 >> ผู้ชม: [ไม่ได้ยิน] 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: ดังนั้นคำถามคือ GetString เป็น จะเก็บความทรงจำในกอง 780 00:42:38,850 --> 00:42:42,280 เพราะ GetString เป็น char * 781 00:42:42,280 --> 00:42:47,530 จะเก็บความทรงจำในกองเพราะมัน ตอนนี้เรียก malloc ภายในที่เกิดขึ้นจริง 782 00:42:47,530 --> 00:42:49,258 การดำเนินการของ GetString 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 ตกลงที่จะย้ายที่ 785 00:42:55,090 --> 00:42:55,950 >> การรักษาความปลอดภัย 786 00:42:55,950 --> 00:43:01,090 ดังนั้นเพื่อให้มีความปลอดภัยอย่างแท้จริงที่คุณพึ่งพาไม่มี และคุณอนุญาตให้ไม่มีใครเข้าถึงใด ๆ 787 00:43:01,090 --> 00:43:04,540 ข้อมูลของคุณซึ่งเป็นเหตุผลที่ ทุกคนสร้างเครื่องของตัวเอง 788 00:43:04,540 --> 00:43:09,580 ระบบปฏิบัติการของตัวเองของพวกเขาทั้งหมด โปรแกรมจากรอยขีดข่วนและเห็นได้ชัด 789 00:43:09,580 --> 00:43:13,410 ไม่ได้เชื่อมต่อไปยังเครื่องอื่น ๆ ผ่านทางอินเทอร์เน็ต 790 00:43:13,410 --> 00:43:17,350 ดังนั้นเครื่องคอมพิวเตอร์ที่ไม่ปลอดภัย 791 00:43:17,350 --> 00:43:19,200 พวกเขาเป็นจริง 792 00:43:19,200 --> 00:43:20,940 เราต้องไว้วางใจคนอื่น 793 00:43:20,940 --> 00:43:26,500 >> และความคิดของการรักษาความปลอดภัยที่เป็นที่ที่คุณอยู่ พยายามที่จะ จำกัด จำนวนของ 794 00:43:26,500 --> 00:43:27,540 ความไว้วางใจที่คุณต้องการ 795 00:43:27,540 --> 00:43:32,080 และหนึ่งในวิธีที่คุณทำอย่างนั้น คือผ่านการเข้ารหัส 796 00:43:32,080 --> 00:43:34,950 การเข้ารหัสคือเป็นหลัก เรามีความลับ 797 00:43:34,950 --> 00:43:38,880 >> บางครั้งเราต้องผ่านความลับของเรา พร้อมผ่านการพูดอินเทอร์เน็ตหรือ 798 00:43:38,880 --> 00:43:39,980 สิ่งอื่น ๆ 799 00:43:39,980 --> 00:43:43,180 และเราไม่ต้องการให้คน ทราบความลับเหล่านี้ 800 00:43:43,180 --> 00:43:50,100 ดังนั้นเราจึงเข้ารหัสลับของเราในทาง ที่เราหวังว่าจะไม่มีใครสามารถคิดออก 801 00:43:50,100 --> 00:43:51,600 >> ดังนั้นเราจึง used-- 802 00:43:51,600 --> 00:43:54,340 ผ่านหลักสูตรของ class-- นี้ 803 00:43:54,340 --> 00:44:00,750 สิ่งที่ต้องการเข้ารหัสและซีซาร์ [ไม่ได้ยิน] ซึ่งมีทั้งมาก 804 00:44:00,750 --> 00:44:03,200 วิธีการที่ไม่ปลอดภัยของการเข้ารหัสสิ่งที่ 805 00:44:03,200 --> 00:44:07,930 พวกเขากำลังง่ายที่จะคิดออกสิ่งที่พวกเขา และสิ่งที่เป็นความลับของคุณ 806 00:44:07,930 --> 00:44:12,130 โลกแห่งความจริงที่ใช้มากขึ้น แผนการเข้ารหัสที่ซับซ้อน 807 00:44:12,130 --> 00:44:13,880 และเราจะไม่ได้รับใน มากกว่านั้น 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> การแก้จุดบกพร่อง 810 00:44:19,430 --> 00:44:20,785 GDB ที่ดีที่สุดคือ 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 ฉันจะความเครียดนี้อีกครั้ง 813 00:44:25,810 --> 00:44:30,920 ใช้ GDB ตลอดเวลาทุก เวลาที่คุณมีปัญหา 814 00:44:30,920 --> 00:44:36,030 คำสั่งที่มีประโยชน์ใน GDB เป็น ทำลายซึ่งคุณผ่านทั้งสาย 815 00:44:36,030 --> 00:44:41,330 จำนวนชื่อฟังก์ชันเป็นหลัก ที่ในรหัสของคุณคุณต้องการที่จะหยุด 816 00:44:41,330 --> 00:44:45,600 และสามารถที่จะควบคุม 817 00:44:45,600 --> 00:44:54,140 >> พิมพ์ใช้ตัวแปรและพิมพ์ออกมา สิ่งที่ตัวแปรที่อยู่ที่ว่า 818 00:44:54,140 --> 00:44:55,990 จุดในการดำเนินการของคุณ 819 00:44:55,990 --> 00:45:00,130 ถัดไปจะเลื่อนการดำเนินการของคุณ พร้อมขั้นตอนเดียว 820 00:45:00,130 --> 00:45:05,050 และขั้นตอนขั้นตอนในการทำงาน ในการดำเนินการของคุณ 821 00:45:05,050 --> 00:45:10,480 >> สิ่งอื่น ๆ ที่จะถูกเรียกใช้ซึ่งเป็นวิธีการ คุณเรียกใช้รหัสของคุณจริง 822 00:45:10,480 --> 00:45:16,630 ดำเนินการต่อไปจะใช้เวลาทั้งหมดขั้นตอนที่จำเป็น เพื่อไปยังจุดพักต่อไป 823 00:45:16,630 --> 00:45:18,300 และมีหลายอื่น ๆ อีกมากมาย 824 00:45:18,300 --> 00:45:19,040 มองพวกเขา 825 00:45:19,040 --> 00:45:19,901 พวกเขากำลังดี 826 00:45:19,901 --> 00:45:20,863 ใช่? 827 00:45:20,863 --> 00:45:22,113 >> ผู้ชม: [ไม่ได้ยิน] 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: ใช่ซึ่งเป็นบั๊ก 830 00:45:28,200 --> 00:45:34,230 ดังนั้นดีบักเป็นโปรแกรมที่ ช่วยให้คุณสามารถแก้ปัญหาโปรแกรมของคุณ 831 00:45:34,230 --> 00:45:39,931 มันไม่ได้เป็นโปรแกรมที่พบข้อบกพร่องสำหรับ คุณคิดว่าจะดี 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> และครั้งสุดท้ายสำหรับผมคือการค้นหา 834 00:45:46,040 --> 00:45:51,470 ดังนั้นประเภทของการค้นหาที่เราได้พูดคุย เกี่ยวกับในชั้นนี้มีการค้นหาเชิงเส้น 835 00:45:51,470 --> 00:45:55,960 ซึ่งเป็นเพียงที่คุณมองผ่านแต่ละ องค์ประกอบของพื้นที่ค้นหาอย่างใดอย่างหนึ่ง 836 00:45:55,960 --> 00:46:00,410 องค์ประกอบในเวลาจนกว่าคุณจะพบสิ่งที่ คุณกำลังมองหาหรือจนกว่าคุณจะไปถึง 837 00:46:00,410 --> 00:46:03,350 ในตอนท้ายของพื้นที่การค้นหาของคุณที่ จุดที่คุณบอกว่าคุณไม่สามารถหา 838 00:46:03,350 --> 00:46:06,360 องค์ประกอบที่คุณกำลังมองหา 839 00:46:06,360 --> 00:46:13,450 และเรื่องนี้ต้องใช้เวลาที่ดีที่สุดอย่างต่อเนื่อง ซึ่งเป็น 0 จาก 1 และเส้นที่เลวร้ายที่สุด 840 00:46:13,450 --> 00:46:16,070 เวลาซึ่งเป็น 0 ของ n 841 00:46:16,070 --> 00:46:19,250 >> ค้นหา binary ที่ต้องการ องค์ประกอบสกปรก 842 00:46:19,250 --> 00:46:24,230 คุณจะไปที่ตรงกลางขององค์ประกอบของคุณ ดูว่าองค์ประกอบที่คุณกำลังมองหา 843 00:46:24,230 --> 00:46:30,120 มีขนาดใหญ่ขึ้นหรือเล็กลงกว่าองค์ประกอบ ว่าคุณจะอยู่ที่ตรงกลาง 844 00:46:30,120 --> 00:46:36,510 มันเป็นเรื่องใหญ่ที่คุณบอกว่าด้านล่าง การค้นหาของคุณมีพื้นที่ของคุณ 845 00:46:36,510 --> 00:46:41,550 สถานที่ตั้งปัจจุบันกลาง และคุณเริ่มต้นกระบวนการ 846 00:46:41,550 --> 00:46:46,150 ถ้าเป็นขนาดเล็กที่คุณมองว่า ที่ยกกำลังใช่อะไรขึ้น? 847 00:46:46,150 --> 00:46:47,400 >> ผู้ชม: [ไม่ได้ยิน] 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: ใช่ 850 00:46:54,260 --> 00:46:58,360 ประเภทใดของการจัดเรียงที่ถูกสอนใน ชั้นเป็นเกมที่ยุติธรรมสำหรับการทดสอบ 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [หัวเราะ] 853 00:47:04,920 --> 00:47:10,260 >> DAN: และความจริงที่ว่าคุณไม่ได้มี ที่จะทำมันสำหรับชุดปัญหามันยุติธรรม 854 00:47:10,260 --> 00:47:12,420 เกมสำหรับการทดสอบ 855 00:47:12,420 --> 00:47:15,186 >> ผู้ชม: เราสามารถไปกว่านั้นวิธียา่ 856 00:47:15,186 --> 00:47:17,052 >> DAN: มันจะหายไปกว่า 857 00:47:17,052 --> 00:47:20,496 >> ลำโพงที่ 2: รหัสจริงสำหรับ [ไม่ได้ยิน] อยู่ใน study.cs50.net 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 ดังนั้นถ้าคุณมองไปที่ปัญหาการปฏิบัติ ในหน้าตัดจัดเรียงของ 860 00:47:32,680 --> 00:47:35,880 study.cs50.net มีรหัส สำหรับการดำเนินการผสานการจัดเรียง 861 00:47:35,880 --> 00:47:38,550 ดังนั้นคุณจึงไม่ต้องใช้ ด้วยตัวคุณเองคืนนี้ 862 00:47:38,550 --> 00:47:42,090 แต่ให้แน่ใจว่าคุณเข้าใจมันค่อนข้าง มากกว่าแค่การท่องจำมัน 863 00:47:42,090 --> 00:47:45,035 >> ผู้ชม: [ไม่ได้ยิน] 864 00:47:45,035 --> 00:47:49,720 >> ลำโพงที่ 2: หน้าตัดจัดเรียงใน study.cs50.net มีการปฏิบัติ 865 00:47:49,720 --> 00:47:53,570 ปัญหาว่าถ้าคุณคลิกผ่าน ปัญหาที่ปลายสุดมี 866 00:47:53,570 --> 00:47:56,280 การแก้ปัญหาซึ่งเป็นที่ผสาน การดำเนินการจัดเรียง 867 00:47:56,280 --> 00:47:58,510 แต่ให้แน่ใจว่าคุณเข้าใจมัน มากกว่าแค่การท่องจำมัน 868 00:47:58,510 --> 00:47:59,760 หรือคัดลอกมันลง 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> ผู้ชม: และที่ถูกต้องสมบูรณ์ ปัญหาสำหรับการสอบจะเป็น 871 00:48:06,340 --> 00:48:07,990 สิ่งที่ต้องการที่นี่รายการ 872 00:48:07,990 --> 00:48:12,100 รายการนี​​้ไม่สิ่งที่มีลักษณะเช่นหลังจาก หนึ่งในขั้นตอนของการเลือกการจัดเรียงหรือ 873 00:48:12,100 --> 00:48:13,330 จัดเรียงแทรกหรืออะไรก็ตาม 874 00:48:13,330 --> 00:48:14,940 หนึ่งซ้ำเต็มรูปแบบของรายการ 875 00:48:14,940 --> 00:48:18,530 ดังนั้นแม้ว่าคุณจะไม่สิ้นสุดต้อง รหัสสำหรับมันที่คุณต้องเข้าใจมัน 876 00:48:18,530 --> 00:48:20,440 พอที่จะรู้ว่ามันเป็นไป ที่จะปรับเปลี่ยนอาร์เรย์นี้ 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: นั่นมันสำหรับฉัน 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [APPLAUSE] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hey ทุกคน 883 00:49:07,410 --> 00:49:08,390 ชื่อของฉันคือลูคัส 884 00:49:08,390 --> 00:49:16,840 ฉันจะพูดคุยเกี่ยวกับการเรียกซ้ำทุก ทุกประเภทที่เราได้เรียนรู้และ 885 00:49:16,840 --> 00:49:18,050 นิด ๆ หน่อย ๆ ของตัวชี้ทั้งหมด 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 ดังนั้นครั้งแรกของทั้งหมดเรียกซ้ำ 888 00:49:20,340 --> 00:49:22,951 มันหมายความว่าอะไรที่จะบอกว่า ฟังก์ชั่นเป็น recursive? 889 00:49:22,951 --> 00:49:24,675 >> ผู้ชม: เรียกตัวเอง 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: ตกลงเรียกตัวเองใช่ 891 00:49:26,500 --> 00:49:27,700 ดังนั้นเช่นภาพนี้ยกตัวอย่างเช่น 892 00:49:27,700 --> 00:49:30,280 มันเหมือนกับภาพที่อยู่ภายใน ของภาพและอื่น ๆ 893 00:49:30,280 --> 00:49:35,740 ดังนั้นสำหรับตัวอย่างเช่นคุณสามารถ have-- แดน ที่ได้รับการพูดคุยเกี่ยวกับการค้นหาไบนารี 894 00:49:35,740 --> 00:49:41,840 วิธีหนึ่งที่ค้นหา binary เป็น เวียนเป็นความจริงที่ว่าคุณ 895 00:49:41,840 --> 00:49:43,130 พยายามที่จะหาจำนวน 896 00:49:43,130 --> 00:49:44,250 ดังนั้นคุณจะไปที่ตรงกลาง 897 00:49:44,250 --> 00:49:47,130 แล้วคุณตรวจสอบว่าตัวเลขที่มี ในด้านซ้ายและขวา 898 00:49:47,130 --> 00:49:49,650 >> แล้วถ้าคุณพบว่าออกมาเป็นจำนวนเป็น จะอยู่ทางซ้ายก็เหมือนกัน 899 00:49:49,650 --> 00:49:53,340 สิ่งที่ทำค้นหาอีกครั้ง แต่ เพียงแค่ด้านซ้ายของรายการ 900 00:49:53,340 --> 00:49:57,350 นั่นคือวิธีที่มันฟัง เหมือนว่ามันจะเป็นแบบทั่วถึง 901 00:49:57,350 --> 00:50:01,870 เพื่อที่ว่าทำไมพวกคุณต้องเวียนเกิด โซลูชั่นสำหรับการจัดเรียงเวียน 902 00:50:01,870 --> 00:50:04,270 >> ตกลงดังนั้นนี่คือตัวอย่าง 903 00:50:04,270 --> 00:50:07,280 จึงขอบอกว่าผมต้องการที่จะเลือก ตัวเลขทั้งหมดจาก 1 ถึง n 904 00:50:07,280 --> 00:50:13,790 ฉันสามารถตระหนักดีว่าผลรวมของ n ตัวเลขเป็นบวก n n ลบ 1 ถึง 1 905 00:50:13,790 --> 00:50:17,810 แต่แล้วถ้าฉันมองไปที่ n ลบ 1 บวก n ลบ 2 บวก 1 ที่เดียวกัน 906 00:50:17,810 --> 00:50:20,680 สิ่งที่เป็นข้อสรุปตัวเลข ถึง n ลบ 1 907 00:50:20,680 --> 00:50:25,890 ดังนั้นผมจึงสามารถพูดได้ว่าผลรวมของผลรวมเท่ากับ เท่ากับ n บวกผลรวมของ n ลบ 1 908 00:50:25,890 --> 00:50:28,010 ไม่ว่าทำให้รู้สึก? 909 00:50:28,010 --> 00:50:32,630 >> และฉันก็จะมีอย่างอื่น เรียกว่ากรณีฐานซึ่งก็คือ 910 00:50:32,630 --> 00:50:37,440 ผลรวมของตัวเลขที่เพิ่มขึ้น ให้เป็นศูนย์จะเป็นศูนย์ 911 00:50:37,440 --> 00:50:42,770 ดังนั้นทันทีที่ฉันได้รับไปยังหมายเลข ศูนย์ฉันจะหยุดนับ 912 00:50:42,770 --> 00:50:45,330 ไม่ว่าทำให้รู้สึก? 913 00:50:45,330 --> 00:50:48,120 >> ดังนั้นนี่คือตัวอย่างของวิธีการ ฉันสามารถใช้ที่ 914 00:50:48,120 --> 00:50:49,860 ดังนั้นผมจึงมีฟังก์ชั่นนี้ในบาง 915 00:50:49,860 --> 00:50:51,700 ที่ใช้เวลาจำนวนเต็ม n 916 00:50:51,700 --> 00:50:56,300 ดังนั้นนี่คือครั้งแรกที่ผมตรวจสอบว่า n คือ น้อยกว่าหรือเท่ากับศูนย์ 917 00:50:56,300 --> 00:51:00,310 ดังนั้นถ้ามันน้อยกว่าหรือเท่ากับศูนย์ผม กลับเป็นศูนย์ซึ่งเป็นกรณีฐานของเรา 918 00:51:00,310 --> 00:51:05,690 มิฉะนั้นผมก็สามารถกลับ n บวก ผลรวมของตัวเลขจาก 919 00:51:05,690 --> 00:51:07,190 หนึ่งไปยัง n ลบหนึ่ง 920 00:51:07,190 --> 00:51:09,360 ทำให้รู้สึก? 921 00:51:09,360 --> 00:51:10,100 ตกลง 922 00:51:10,100 --> 00:51:11,610 >> ดังนั้นนี่คือสิ่งที่ดูเหมือนว่า 923 00:51:11,610 --> 00:51:15,260 คุณมีผลรวมของ 2 เท่ากับ 2 บวกผลรวมของ 1 924 00:51:15,260 --> 00:51:18,930 และบางส่วนของที่ 1 เป็น 1 บวก ผลรวมของ 0 ซึ่งเป็น 0 925 00:51:18,930 --> 00:51:20,216 ทำให้รู้สึก? 926 00:51:20,216 --> 00:51:25,342 ดังนั้นหากเรามองไปที่กองของคุณ โปรแกรมนี้เป็นสิ่งที่ดูเหมือนว่า 927 00:51:25,342 --> 00:51:26,820 >> ครั้งแรกที่เรามีหน้าที่หลัก 928 00:51:26,820 --> 00:51:30,320 แล้วหน้าที่หลัก เรียกว่าผลรวม 2 929 00:51:30,320 --> 00:51:36,690 แล้วผลรวม 2 เป็นไปที่จะบอกว่าโอ้ผลรวม 2 เท่ากับ 2 บวกผลรวมของการอย่างใดอย่างหนึ่ง 930 00:51:36,690 --> 00:51:39,460 ดังนั้นฉันจะเพิ่มผลรวมของ 1 ถึงกอง 931 00:51:39,460 --> 00:51:43,860 และผลรวมของ 1 ที่จะเรียกผลรวมของ 0 ซึ่งยังเป็นไปที่จะเพิ่ม 932 00:51:43,860 --> 00:51:44,630 ไปยังกอง 933 00:51:44,630 --> 00:51:49,240 แล้วแต่ละคนเหล่านี้ที่มี ที่ด้านบนของอีกคนหนึ่งต้องกลับ 934 00:51:49,240 --> 00:51:52,020 ก่อนที่คนอื่น ๆ สามารถเก็บไป 935 00:51:52,020 --> 00:51:56,240 >> ดังนั้นสำหรับตัวอย่างเช่นที่นี่ผลรวมของ 0, ครั้งแรกที่จะกลับ 0 936 00:51:56,240 --> 00:51:58,320 และจากนั้นเลือกผลรวมของ 1 937 00:51:58,320 --> 00:52:00,850 แล้วผลรวมของ 1 เป็นไปได้ กลับ 1 ผลรวมของ 2 938 00:52:00,850 --> 00:52:03,900 และในที่สุดผลรวมของ 2 เป็นไป 3 เพื่อกลับไปที่หน้าหลัก 939 00:52:03,900 --> 00:52:05,320 ไม่ว่าทำให้รู้สึก? 940 00:52:05,320 --> 00:52:09,496 >> มันสำคัญมากที่จะเข้าใจว่า สแต็คเป็นคนที่ทำงานและพยายามที่จะ 941 00:52:09,496 --> 00:52:11,980 ดูว่ามันทำให้รู้สึก 942 00:52:11,980 --> 00:52:13,260 ตกลงดังนั้นการเรียงลำดับ 943 00:52:13,260 --> 00:52:16,170 เหตุใดจึงต้องมีการเรียงลำดับความสำคัญ แรกของทั้งหมดหรือไม่ 944 00:52:16,170 --> 00:52:18,260 ทำไมเราควรจะดูแล? 945 00:52:18,260 --> 00:52:20,310 ใคร? 946 00:52:20,310 --> 00:52:20,695 ให้ฉันตัวอย่าง? 947 00:52:20,695 --> 00:52:21,040 ใช่? 948 00:52:21,040 --> 00:52:22,968 >> ผู้ชม: [ไม่ได้ยิน] 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: ใช่ตกลง 950 00:52:24,700 --> 00:52:26,090 เพื่อให้คุณสามารถค้นหาได้อย่างมีประสิทธิภาพมากขึ้น 951 00:52:26,090 --> 00:52:28,580 นั่นเป็นวิธีที่ดี 952 00:52:28,580 --> 00:52:32,462 ดังนั้นสำหรับตัวอย่างเช่นเรามีจำนวนมาก สิ่งที่เป็นจริงในชีวิตของเราที่ 953 00:52:32,462 --> 00:52:32,920 ระบบจะจัดเรียง 954 00:52:32,920 --> 00:52:34,830 ตัวอย่างเช่นพจนานุกรม 955 00:52:34,830 --> 00:52:39,210 >> มันเป็นสิ่งสำคัญมากที่จะมีทั้งหมด คำในประเภทของคำสั่งบางอย่างที่เรา 956 00:52:39,210 --> 00:52:41,970 สามารถเข้าถึงได้อย่างง่ายดาย 957 00:52:41,970 --> 00:52:43,280 นั่นคือสิ่งที่เขาพูด 958 00:52:43,280 --> 00:52:45,530 คุณสามารถค้นหาได้อย่างมีประสิทธิภาพมากขึ้น 959 00:52:45,530 --> 00:52:48,740 คิดว่ามันยากที่จะมี พจนานุกรมคำที่อยู่ใน 960 00:52:48,740 --> 00:52:49,500 ลำดับแบบสุ่ม 961 00:52:49,500 --> 00:52:53,120 คุณจะต้องมองไปที่สวยมาก ทุกคำเดียวจนกว่าคุณจะพบ 962 00:52:53,120 --> 00:52:54,720 คำที่คุณกำลังมองหา 963 00:52:54,720 --> 00:52:58,710 >> หากคุณกำลังใช้ Facebook ยังเมื่อ คุณกำลังมองหาที่เพื่อนของคุณคุณ 964 00:52:58,710 --> 00:53:03,540 จะเห็นว่า Facebook ของคุณใส่ เพื่อนใกล้ชิดด้านบนของคน 965 00:53:03,540 --> 00:53:05,470 ที่คุณไม่ได้พูดคุยกับที่มาก 966 00:53:05,470 --> 00:53:08,080 ถ้าคุณไปตลอดทางจนถึงด้านล่างของ รายชื่อเพื่อนของคุณคุณจะได้เห็น 967 00:53:08,080 --> 00:53:11,250 คนที่คุณอาจจะไม่ได้ จำไว้ว่าคุณเป็นเพื่อนกับ 968 00:53:11,250 --> 00:53:14,590 และนั่นเป็นเพราะทุกประเภท Facebook เพื่อนของคุณขึ้นอยู่กับว่า 969 00:53:14,590 --> 00:53:16,472 ปิดที่คุณอยู่กับพวกเขา 970 00:53:16,472 --> 00:53:17,930 >> ดังนั้นการจัดระเบียบข้อมูล 971 00:53:17,930 --> 00:53:18,450 นอกจากนี้โปเกมอน 972 00:53:18,450 --> 00:53:21,400 ดังนั้นคุณจะเห็นว่า Pokemons ทั้งหมด มีหมายเลข 973 00:53:21,400 --> 00:53:27,210 และที่เหมือนง่าย วิธีการเข้าถึงข้อมูล 974 00:53:27,210 --> 00:53:29,050 >> ผู้ชม: การเข้าถึงโปเกมอน 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: ใช่ 976 00:53:29,890 --> 00:53:32,395 >> ผู้ชม: [ไม่ได้ยิน] 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: อ้อ 978 00:53:33,460 --> 00:53:35,140 ตกลงดังนั้นการจัดเรียงตัวเลือก 979 00:53:35,140 --> 00:53:41,610 การจัดเรียงตัวเลือกที่จะเลือก มูลค่าไม่ได้เรียงลำดับที่เล็กที่สุดของรายการแต่ละ 980 00:53:41,610 --> 00:53:43,300 เวลาในแต่ละซ้ำ 981 00:53:43,300 --> 00:53:46,800 มันเป็นเหมือนการจัดเรียงที่คุณทำ ในหัวของคุณเมื่อคุณกำลังพยายามที่จะ 982 00:53:46,800 --> 00:53:48,430 เรียงลำดับรายการในมือ 983 00:53:48,430 --> 00:53:51,990 >> โดยทั่วไปสิ่งที่คุณทำคือคุณมอง สำหรับจำนวนที่เล็กที่สุด 984 00:53:51,990 --> 00:53:54,280 คุณใส่ไว้ในรายการที่เรียงลำดับ 985 00:53:54,280 --> 00:53:56,230 แล้วที่คุณมองหา จำนวนน้อยที่สุดต่อไป 986 00:53:56,230 --> 00:54:00,080 แล้วคุณจะให้ทำ ที่และอื่น ๆ 987 00:54:00,080 --> 00:54:04,600 >> ดังนั้นการจัดเรียงตัวเลือกเป็นพื้นคุณ เลือกทุกครั้งที่มีขนาดเล็กที่สุด 988 00:54:04,600 --> 00:54:05,750 มูลค่าไม่ได้เรียงลำดับ 989 00:54:05,750 --> 00:54:10,840 ใส่ในตอนท้ายของการจัดเรียง ส่วนหนึ่งของรายการ 990 00:54:10,840 --> 00:54:12,370 และให้ทำอย่างนั้น 991 00:54:12,370 --> 00:54:15,890 ดังนั้นเรามาดูสิ่งที่ได้อย่างรวดเร็ว นี้ดูเหมือนว่า 992 00:54:15,890 --> 00:54:19,340 ดังนั้นนี่คือการจัดเรียง และรายชื่อไม่ได้เรียงลำดับ 993 00:54:19,340 --> 00:54:23,350 >> ดังนั้นสำหรับการจัดเรียงของรายการ มันว่างเปล่าในตอนแรก 994 00:54:23,350 --> 00:54:26,760 แล้วฉันจะเลือก จำนวนน้อยที่สุดที่นี่ซึ่งเป็น 2 995 00:54:26,760 --> 00:54:30,650 ดังนั้นผมจึงได้รับหมายเลข 2 และฉันใส่ ด้านหน้าของรายการ 996 00:54:30,650 --> 00:54:34,910 แล้วผมก็มองหาที่เล็กที่สุดต่อไป องค์ประกอบซึ่งเป็น 3 997 00:54:34,910 --> 00:54:37,050 ดังนั้นผมจึงใส่มันในตอนท้าย ของรายการที่เรียงลำดับ 998 00:54:37,050 --> 00:54:38,140 แล้วผมก็ให้ทำที่ 999 00:54:38,140 --> 00:54:40,040 ผมพบว่า 4 และวางไว้ในตอนท้าย 1000 00:54:40,040 --> 00:54:41,360 ค้นหา 5 และวางไว้ในตอนท้าย 1001 00:54:41,360 --> 00:54:44,830 >> และมองไปที่วิธีการทั้งหมดในครั้งนั้นว่า ฉันพูดใส่ไว้ในตอนท้ายคือ 1002 00:54:44,830 --> 00:54:46,850 โดยทั่วไปการแลกเปลี่ยนสองค่า 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 แล้วสุดท้ายคุณก็ มีองค์ประกอบหนึ่งมากขึ้น 1006 00:54:52,825 --> 00:54:55,870 จึงแยกแล้ว 1007 00:54:55,870 --> 00:54:57,800 >> OK เพื่อแทรกการจัดเรียง 1008 00:54:57,800 --> 00:55:03,180 จัดเรียงแทรกคุณกำลังจะไปยัง สิ่งที่มีการจัดเรียงและ 1009 00:55:03,180 --> 00:55:04,690 รายการไม่ได้เรียงลำดับ 1010 00:55:04,690 --> 00:55:14,540 สิ่งเดียวคือทุกครั้งที่ คุณกำลังเพิ่มองค์ประกอบที่จะเรียงลำดับ 1011 00:55:14,540 --> 00:55:18,170 รายการคุณเพียงแค่เลือกองค์ประกอบที่ ที่อยู่ในหน้าของรายการไม่ได้เรียงลำดับ 1012 00:55:18,170 --> 00:55:20,880 แล้วคุณจะพบว่าสิ่งที่ ตำแหน่งที่ควรจะเป็นในการเรียงลำดับ 1013 00:55:20,880 --> 00:55:22,300 ส่วนหนึ่งของรายการ 1014 00:55:22,300 --> 00:55:25,840 >> ลองมาดูสิ่งที่เป็นเช่นนี้ นี้ทำให้รู้สึกมากขึ้น 1015 00:55:25,840 --> 00:55:29,360 ดังนั้นในขั้นแรกตัวอย่างเช่นฉันพยายาม ใส่บ้านเลขที่สามใน 1016 00:55:29,360 --> 00:55:30,680 ส่วนที่เรียงลำดับของรายการ 1017 00:55:30,680 --> 00:55:31,800 ดังนั้นรายการที่ไม่ได้มีอะไร 1018 00:55:31,800 --> 00:55:34,160 ดังนั้นผมก็สามารถใส่หมายเลข 3 1019 00:55:34,160 --> 00:55:37,480 >> ตอนนี้ฉันต้องการที่จะเพิ่มจำนวน 5 ไป ส่วนที่เรียงลำดับของรายการ 1020 00:55:37,480 --> 00:55:38,900 ดังนั้นผมจึงมองไปที่หมายเลข 5 1021 00:55:38,900 --> 00:55:40,450 ผมสังเกตเห็นว่ามันเป็นมากกว่า 3 1022 00:55:40,450 --> 00:55:41,980 ดังนั้นผมรู้ว่ามันจะเป็นหลังจาก 3 มี 1023 00:55:41,980 --> 00:55:44,100 ดังนั้นผมจึงใส่ 3 และ 5 1024 00:55:44,100 --> 00:55:45,940 >> แล้วผมต้องการที่จะใส่หมายเลข 2 1025 00:55:45,940 --> 00:55:51,630 ผมสังเกตเห็นว่าหมายเลข 2 เป็นจริง สุดท้ายแล้วทั้ง 3 และ 5 1026 00:55:51,630 --> 00:55:54,580 ดังนั้นที่จริงผมต้องใส่มันทั้งหมด วิธีในการเริ่มต้นของรายการ 1027 00:55:54,580 --> 00:55:59,030 ดังนั้นฉันจะต้องชนิดของกะทั้งหมด องค์ประกอบในรายการที่จัดเรียงเพื่อให้ฉันสามารถ 1028 00:55:59,030 --> 00:56:01,970 ทำให้ห้องหมายเลข 2 1029 00:56:01,970 --> 00:56:03,160 >> แล้วฉันจะดูจำนวน 6 1030 00:56:03,160 --> 00:56:05,450 ฉันเห็นว่ามันควรจะเป็นหลังจาก 5 1031 00:56:05,450 --> 00:56:06,240 ดังนั้นผมจึงใส่มันมี 1032 00:56:06,240 --> 00:56:07,965 และในที่สุดฉันมองไปที่หมายเลข 4 1033 00:56:07,965 --> 00:56:11,030 และผมสังเกตเห็นที่ควร อยู่ระหว่าง 3 และ 5 1034 00:56:11,030 --> 00:56:14,870 และจากนั้นฉันใส่มันและมีการเปลี่ยนแปลง ทุกองค์ประกอบอื่น ๆ 1035 00:56:14,870 --> 00:56:16,120 ทำให้รู้สึก? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> ฟองเรียง 1038 00:56:19,150 --> 00:56:25,730 ดังนั้นการจัดเรียงฟองเป็นพื้นสิ่งที่คุณกำลัง จะ do-- เราเรียกว่าฟอง 1039 00:56:25,730 --> 00:56:30,113 จัดเรียงเพราะคุณไปผ่าน list-- เป็นจริงดีกว่าถ้าฉันเพียงแค่แสดง 1040 00:56:30,113 --> 00:56:32,300 ที่คุณชอบเจ้านี่ 1041 00:56:32,300 --> 00:56:35,030 และคุณกำลังจะไปเปรียบเทียบ ตัวเลขที่อยู่ติดกัน 1042 00:56:35,030 --> 00:56:38,410 และคุณกำลังจะไปแลกเปลี่ยนของพวกเขา ตำแหน่งถ้าพวกเขาไม่ได้ 1043 00:56:38,410 --> 00:56:39,190 ในลำดับที่ถูกต้อง 1044 00:56:39,190 --> 00:56:42,570 >> ดังนั้นโดยทั่วไปสิ่งที่จะ เกิดขึ้นที่นี่เช่น 1045 00:56:42,570 --> 00:56:44,160 คุณมี 8 และ 6 1046 00:56:44,160 --> 00:56:47,270 คุณรู้ไหมว่าคำสั่งที่เรียงลำดับจะ จริง ๆ แล้วเป็น 6 และ 5 ใช่มั้ย? 1047 00:56:47,270 --> 00:56:49,540 เพื่อให้คุณกำลังจะเปลี่ยนคำสั่งซื้อ 1048 00:56:49,540 --> 00:56:51,370 แล้วฉันจะดู 8 และ 4 ที่นี่ 1049 00:56:51,370 --> 00:56:52,250 และฉันทำสิ่งเดียวกัน 1050 00:56:52,250 --> 00:56:53,400 ผมเปลี่ยนอีกครั้ง 1051 00:56:53,400 --> 00:56:55,070 และในที่สุด 2 และ 8 1052 00:56:55,070 --> 00:56:56,670 ฉันยังสลับพวกเขา 1053 00:56:56,670 --> 00:57:01,690 >> มันเรียกว่าฟองเรียงเพราะหลังจากที่ แต่ละซ้ำเหล่านี้จริง 1054 00:57:01,690 --> 00:57:05,910 จำนวนมากที่สุดในรายการที่ได้รับทั้งหมด วิธีที่จะสิ้นสุดของรายการ 1055 00:57:05,910 --> 00:57:06,940 ไม่ว่าทำให้รู้สึก? 1056 00:57:06,940 --> 00:57:11,880 เพราะมันช่วยให้การแลกเปลี่ยนมัน และย้ายไปทางขวา 1057 00:57:11,880 --> 00:57:14,440 >> ตกลงดังนั้นนี่คือประโยคที่สอง 1058 00:57:14,440 --> 00:57:17,200 มันจะเป็นสิ่งเดียวกัน 1059 00:57:17,200 --> 00:57:20,190 ฉันจะทำอย่างใดอย่างหนึ่งและแลกเปลี่ยน แล้วสุดท้าย 1060 00:57:20,190 --> 00:57:23,290 ผมว่าไม่มีการแลกเปลี่ยน และรายการจะถูกจัดเรียง 1061 00:57:23,290 --> 00:57:27,460 ดังนั้นในฟองเรียงเราโดยทั่วไปให้ จะผ่านรายการและการแลกเปลี่ยน 1062 00:57:27,460 --> 00:57:32,310 สิ่งจนผมสังเกตเห็นว่าผมไม่ได้ทำ สัญญาใด ๆ ที่ทำซ้ำที่ซึ่ง 1063 00:57:32,310 --> 00:57:34,270 หมายถึงรายการที่ถูกจัดเรียงแล้ว 1064 00:57:34,270 --> 00:57:35,520 ทำให้รู้สึก? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> ขอพูดคุยนิด ๆ หน่อย ๆ เกี่ยวกับการทำงานเวลา 1067 00:57:40,870 --> 00:57:45,165 ดังนั้นพวกคุณจำบิ๊ก O, โอเมก้า, และที? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 ใช่? 1070 00:57:50,990 --> 00:57:53,070 ตกลงสิ่งที่เป็น Big O, แรกของทั้งหมดหรือไม่ 1071 00:57:53,070 --> 00:57:54,315 >> ผู้ชม: [ไม่ได้ยิน] 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: ใช่มันเรียกว่ากรณีที่เลวร้ายที่สุด runtime ซึ่งก็หมายความว่ามันเป็น 1073 00:57:59,070 --> 00:58:03,470 เท่าไหร่ที่คุณคาดหวังว่าโปรแกรม ที่จะใช้ในการทำงาน 1074 00:58:03,470 --> 00:58:04,910 เช่นในแง่เเล้ 1075 00:58:04,910 --> 00:58:06,660 ใน case-- n นี้ 1076 00:58:06,660 --> 00:58:09,150 จำนวนขององค์ประกอบใน รายการในกรณีที่เลวร้ายที่สุด 1077 00:58:09,150 --> 00:58:12,520 เช่นในกรณีที่เป็นไปได้ที่เลวร้ายที่สุด 1078 00:58:12,520 --> 00:58:17,100 >> ดังนั้นสำหรับฟองเรียงตัวอย่างเช่น เรามี O ใหญ่ n ตาราง 1079 00:58:17,100 --> 00:58:20,580 ทำไมเรามีที่? 1080 00:58:20,580 --> 00:58:24,716 ทำไมฟองเรียง Big O n ตาราง? 1081 00:58:24,716 --> 00:58:27,614 >> ผู้ชม: [ไม่ได้ยิน] 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: ใช่ดังนั้นกรณีที่เลวร้ายที่สุดจะเป็น ที่ผมจะต้องทำซ้ำ n 1083 00:58:35,670 --> 00:58:39,260 ดังนั้นแต่ละซ้ำเป็นไป นำองค์ประกอบที่ใหญ่ที่สุดไปยังจุดสิ้นสุด 1084 00:58:39,260 --> 00:58:40,290 ของรายการ 1085 00:58:40,290 --> 00:58:44,230 ดังนั้นกรณีที่เลวร้ายที่สุดที่ฉันมี ที่จะทำสิ่งที่ครั้ง n 1086 00:58:44,230 --> 00:58:48,550 และในแต่ละครั้งที่ผมต้อง ทำสัญญาแลกเปลี่ยน n เพราะผมต้องเปรียบเทียบ 1087 00:58:48,550 --> 00:58:49,870 แต่ละสององค์ประกอบ 1088 00:58:49,870 --> 00:58:53,730 เพื่อที่ว่าทำไมมันยกกำลัง n เพราะมันเป็นครั้ง n n 1089 00:58:53,730 --> 00:59:00,120 >> แล้วเรียงลำดับตัวเลือกนี้ยังมี n ตาราง เพราะสำหรับแต่ละซ้ำฉันต้อง 1090 00:59:00,120 --> 00:59:02,650 มองไปที่ทุกองค์ประกอบเดียว ในรายการ 1091 00:59:02,650 --> 00:59:04,980 แล้วหาที่เล็กที่สุด ซึ่งหมายความว่าฉันต้อง 1092 00:59:04,980 --> 00:59:06,130 มองผ่านองค์ประกอบ n 1093 00:59:06,130 --> 00:59:11,750 และฉันต้องทำเช่นนั้นเพราะครั้ง n ฉันต้องเลือกทุกองค์ประกอบ n 1094 00:59:11,750 --> 00:59:18,273 >> จัดเรียงแทรกยัง n ตาราง เพราะสถานการณ์กรณีที่เลวร้ายที่สุดจะ 1095 00:59:18,273 --> 00:59:20,950 จะเป็นหนึ่งที่ผมต้องใส่ หมายเลข n ขวา? 1096 00:59:20,950 --> 00:59:22,765 ดังนั้นผมรู้อยู่แล้วว่าผมจะ ที่จะมี n ซ้ำ 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 แต่สำหรับแต่ละตัวเลขเหล่านั้นถ้าผมมี ไปดูที่ทั้งหมดของตัวเลขใน 1099 00:59:29,840 --> 00:59:34,380 รายการที่จัดเรียงและนำมันไปตลอดทาง ในด้านหน้าที่จะเป็น n ตาราง 1100 00:59:34,380 --> 00:59:36,230 เพราะมันจะเป็นครั้ง n n อีกครั้ง 1101 00:59:36,230 --> 00:59:38,280 ทำให้รู้สึก? 1102 00:59:38,280 --> 00:59:41,512 สิ่งที่เกี่ยวกับโอเมก้า? 1103 00:59:41,512 --> 00:59:42,886 >> ผู้ชม: [ไม่ได้ยิน] 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: มันเป็นสถานการณ์กรณีที่ดีที่สุด 1105 00:59:44,620 --> 00:59:48,810 ดังนั้นมันก็เหมือนในหลายครั้งสำหรับ การเรียงลำดับสถานการณ์กรณีที่ดีที่สุดคือ 1106 00:59:48,810 --> 00:59:50,660 เมื่อรายการจะถูกจัดเรียงอยู่แล้ว 1107 00:59:50,660 --> 00:59:52,670 เพื่อให้คุณไม่ได้จริงๆต้อง ที่จะทำอะไร 1108 00:59:52,670 --> 00:59:56,290 ฟองเรียงมีที่ดีที่สุด สถานการณ์กรณีที่ n 1109 00:59:56,290 --> 00:59:58,820 ที่พวกคุณรู้ว่าทำไม 1110 00:59:58,820 --> 01:00:00,620 >> ผู้ชม: [ไม่ได้ยิน] 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: ใช่ถ้าคุณติดตาม ไม่ว่าจะเป็นข้อมูลที่มีการปันส่วนการแลกเปลี่ยนใด ๆ หรือ 1112 01:00:05,640 --> 01:00:10,533 ไม่ได้ถ้าคุณมีสิ่งที่ต้องการกำหนดให้ ความจริงถ้ามีซ้ำถ้า 1113 01:00:10,533 --> 01:00:15,140 รายการจะถูกจัดเรียงอยู่แล้วโดยทั่วไป สิ่งที่จะเกิดขึ้นคือผมกำลังจะไป 1114 01:00:15,140 --> 01:00:17,890 พยายามที่จะสลับกันสอง องค์ประกอบที่อยู่ติดกัน 1115 01:00:17,890 --> 01:00:19,920 ฉันจะเห็นว่า ไม่มีการแลกเปลี่ยน 1116 01:00:19,920 --> 01:00:21,230 และฉันก็กลับมาทันที 1117 01:00:21,230 --> 01:00:24,240 >> ดังนั้นก็หมายความว่าฉันเพิ่งมีการ ผ่านรายการครั้งเดียว 1118 01:00:24,240 --> 01:00:28,990 ดังนั้นจึงเป็น n เพราะผมดู องค์ประกอบที่ n 1119 01:00:28,990 --> 01:00:30,930 ทำไมเลือกจัดเรียงตาราง n? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> ใช่แม้ว่ารายการจะถูกจัดเรียงเพื่อ ซ้ำของการจัดเรียงตัวเลือกทุกฉัน 1122 01:00:45,520 --> 01:00:47,590 ต้องเลือกองค์ประกอบอย่างน้อย 1123 01:00:47,590 --> 01:00:49,980 ดังนั้นนั่นหมายความว่าฉันต้องออกไปดู ที่องค์ประกอบทั้งหมดในการคัดเลือก 1124 01:00:49,980 --> 01:00:53,350 รายการและหาขั้นต่ำที่ สำหรับแต่ละซ้ำ 1125 01:00:53,350 --> 01:00:54,600 ไม่ว่าทำให้รู้สึก? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> และดาบแทรกเป็น n เพราะใน กรณีที่ฉันพยายามที่จะแทรก 1128 01:01:04,690 --> 01:01:09,320 ตัวเลขและทั้งหมดของตัวเลขที่เมื่อฉัน พยายามที่จะแทรกให้ผมเห็นว่าพวกเขา 1129 01:01:09,320 --> 01:01:10,510 อยู่ในตำแหน่งที่เหมาะสม 1130 01:01:10,510 --> 01:01:15,120 ฉันจะได้ไม่ต้องไปตรวจสอบอื่น ๆ ทั้งหมด ตัวเลขในรายการที่ไม่ได้เรียงลำดับ 1131 01:01:15,120 --> 01:01:17,170 เพื่อที่ว่าทำไมมันจะเป็น n 1132 01:01:17,170 --> 01:01:19,480 ทำให้รู้สึก? 1133 01:01:19,480 --> 01:01:21,035 และสิ่งที่เป็นที? 1134 01:01:21,035 --> 01:01:23,410 >> ผู้ชม: [ไม่ได้ยิน] 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: สิ่งขอโทษ? 1136 01:01:24,380 --> 01:01:24,960 พูดอีกครั้ง 1137 01:01:24,960 --> 01:01:25,666 >> ผู้ชม: [ไม่ได้ยิน] 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: แน่นอน 1139 01:01:26,490 --> 01:01:31,280 ดังนั้นคุณจะเห็นว่าการเลือกเท่านั้น เก็บไว้ในการผสานการเรียงลำดับมี Thetas 1140 01:01:31,280 --> 01:01:39,920 และนั่นเป็นเพราะคุณมีเพียงที ถ้าทั้งสอง Big O และโอเมก้าเหมือนกัน 1141 01:01:39,920 --> 01:01:41,520 ตกลง 1142 01:01:41,520 --> 01:01:44,210 และในที่สุดผสานการจัดเรียงอยู่ในบันทึกของ n 1143 01:01:44,210 --> 01:01:48,910 >> แล้วขณะที่แดนพูดผสานการจัดเรียง เป็นชนิดเช่นเดียวกับที่ 1144 01:01:48,910 --> 01:01:50,320 คุณค้นหาไบนารี 1145 01:01:50,320 --> 01:01:53,530 เพื่อให้คุณได้รับรายชื่อ 1146 01:01:53,530 --> 01:01:55,170 และคุณกำลังจะลดลงครึ่งหนึ่ง 1147 01:01:55,170 --> 01:02:00,580 แล้วคุณจะตัดพวกเขา ในส่วนที่มีขนาดเล็ก 1148 01:02:00,580 --> 01:02:01,730 แล้วคุณผสานพวกเขา 1149 01:02:01,730 --> 01:02:02,960 พวกคุณจำไว้ว่าใช่มั้ย? 1150 01:02:02,960 --> 01:02:04,960 ตกลงขณะที่เขากำลังพูด 1151 01:02:04,960 --> 01:02:08,330 >> ตกลงตัวชี้ 1152 01:02:08,330 --> 01:02:11,078 ดังนั้นสิ่งที่เป็นตัวชี้ได้หรือไม่ 1153 01:02:11,078 --> 01:02:12,050 >> ผู้ชม: [ไม่ได้ยิน] 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: ที่อยู่ 1155 01:02:12,820 --> 01:02:13,720 ตกลง 1156 01:02:13,720 --> 01:02:18,530 ฉันรู้ว่าเดวิดแสดงให้เห็นพวงของ วิดีโอของบิงกี้และสิ่งที่ชี้ 1157 01:02:18,530 --> 01:02:19,080 กันและกัน 1158 01:02:19,080 --> 01:02:22,960 แต่ผมชอบที่จะคิดของตัวชี้ เป็นเพียงที่อยู่ 1159 01:02:22,960 --> 01:02:26,110 ดังนั้นจึงเป็นตัวแปรที่เป็นไป ในการจัดเก็บที่อยู่ 1160 01:02:26,110 --> 01:02:31,940 >> จึงเป็นเพียงตัวแปรพิเศษนี้ ที่เป็นสี่ไบต์นาน 1161 01:02:31,940 --> 01:02:36,550 โปรดจำไว้ว่าตัวชี้ไปยังสิ่งที่เป็น เสมอสี่ไบต์นานของเรา 32 บิต 1162 01:02:36,550 --> 01:02:39,370 เครื่องดังนั้นกรณีที่มี เครื่องใช้ไฟฟ้า 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 และมันก็มีสถานที่ ของตัวแปรภายในของมัน 1165 01:02:47,050 --> 01:02:50,240 >> ตกลงจึงมีหน่วยความจำนี้โดยทั่วไป 1166 01:02:50,240 --> 01:02:57,420 ดังนั้นบล็อกของหน่วยความจำแต่ละจริงมี ป้ายซึ่งเป็นที่อยู่ของ 1167 01:02:57,420 --> 01:02:58,890 หน่วยความจำ slotty 1168 01:02:58,890 --> 01:03:02,370 ดังนั้นนั่นหมายความว่าฉันจะมี ตัวชี้ชี้ไปที่ 1169 01:03:02,370 --> 01:03:03,380 ใด ๆ ของที่อยู่เหล่านี้ 1170 01:03:03,380 --> 01:03:09,930 ดังนั้นเหตุผลที่ว่าทำไมเราจะใช้ตัวชี้เป็น ถ้าผมต้องจำสถานที่ 1171 01:03:09,930 --> 01:03:12,300 ตัวแปรเฉพาะที่เป็นหน่วยความจำ 1172 01:03:12,300 --> 01:03:16,560 >> และพวกคุณจำได้ว่าหนึ่งในบรรดา กรณีเป็นถ้าฉันมีฟังก์ชั่น 1173 01:03:16,560 --> 01:03:20,820 ถ้ามีจริงอยากให้คุณ แลกเปลี่ยนสำหรับจำนวนจริงฉันจริง 1174 01:03:20,820 --> 01:03:22,110 มีการส่งตัวชี้ 1175 01:03:22,110 --> 01:03:23,460 ไม่ตัวแปร 1176 01:03:23,460 --> 01:03:25,200 ที่พวกคุณจำไว้ว่า? 1177 01:03:25,200 --> 01:03:26,450 between-- ความแตกต่าง 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 สิ่งที่เป็นชื่อหรือไม่ 1180 01:03:34,120 --> 01:03:36,010 เรียกค่าและเรียก โดยการอ้างอิงใช่มั้ย? 1181 01:03:36,010 --> 01:03:36,840 >> ตกลงใช่ 1182 01:03:36,840 --> 01:03:38,330 เพื่อเรียกค่า 1183 01:03:38,330 --> 01:03:43,570 เมื่อคุณเพียงแค่ส่งตัวแปร ทำงานคุณเพียงแค่ส่งค่า 1184 01:03:43,570 --> 01:03:45,610 ดังนั้นคุณจะส่งจริง สำเนาของตัวแปร 1185 01:03:45,610 --> 01:03:49,720 และโปรแกรมของคุณไม่สามารถดูแลน้อย เกี่ยวกับถ้าตัวแปรเดียวกันจริง 1186 01:03:49,720 --> 01:03:51,650 ทำสำเนา 1187 01:03:51,650 --> 01:03:56,330 >> และเรียกโดยการอ้างอิงหมายความว่า ฉันจริงส่งสำเนาของ 1188 01:03:56,330 --> 01:03:57,550 ตัวชี้ไปยังตัวแปรที่ 1189 01:03:57,550 --> 01:04:00,970 ดังนั้นก็หมายความว่าฉันส่ง สถานที่ตั้งของตัวแปรที่ 1190 01:04:00,970 --> 01:04:04,440 ดังนั้นความรู้สึกที่ฉันมีสถานที่ตั้งของ ตัวแปรเมื่อฉันเรียกใช้ฟังก์ชัน 1191 01:04:04,440 --> 01:04:09,700 กับคำแนะนำฉันสามารถที่จะเป็นจริง เปลี่ยนแปลงข้อมูลที่อยู่ในหลัก 1192 01:04:09,700 --> 01:04:12,050 ทำให้รู้สึก? 1193 01:04:12,050 --> 01:04:17,560 >> แม้ว่าตัวชี้เป็นสำเนา ชี้ยังคงมีอยู่ที่แท้จริงของ 1194 01:04:17,560 --> 01:04:20,090 ตัวแปรที่ฉันต้องการที่จะเปลี่ยน 1195 01:04:20,090 --> 01:04:21,920 ทำให้รู้สึก? 1196 01:04:21,920 --> 01:04:24,290 >> ดังนั้นการสร้างตัวชี้ 1197 01:04:24,290 --> 01:04:28,410 โปรดจำไว้ว่าตัวชี้มักจะมี ชนิดที่ว่ามันชี้ 1198 01:04:28,410 --> 01:04:29,890 ไปและจากนั้นดาว 1199 01:04:29,890 --> 01:04:31,030 แล้วคุณจะใส่ชื่อ 1200 01:04:31,030 --> 01:04:35,765 ดังนั้นจำไว้ว่าเมื่อใดก็ตามที่คุณมี สิ่งที่ดาวมันก็เหมือนตัวชี้ไปยัง 1201 01:04:35,765 --> 01:04:38,990 ว่าสิ่งที่ตัวแปร พิมพ์ที่คุณมี 1202 01:04:38,990 --> 01:04:42,850 >> ดังนั้นที่นี่ในดาวเช่นมัน ตัวชี้และจำนวนเต็ม 1203 01:04:42,850 --> 01:04:47,680 แล้วถ่านดาวเป็นตัวชี้ ดาวถ่านและอื่น ๆ 1204 01:04:47,680 --> 01:04:47,960 ใช่? 1205 01:04:47,960 --> 01:04:52,710 >> ผู้ชม: สิ่งที่ถ้าเรามี ตัวชี้ไปยัง n ดารา x 1206 01:04:52,710 --> 01:04:55,255 ฉันรู้ว่าการสร้างตัวชี้ไปยัง x 1207 01:04:55,255 --> 01:04:59,432 มันยังประกาศ x จำนวนเต็ม? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK ดังนั้นเมื่อคุณพูด ​​n ดาว x, คุณไม่ได้สร้างตัวชี้ไปยัง 1209 01:05:05,170 --> 01:05:06,000 ตัวแปร x 1210 01:05:06,000 --> 01:05:08,170 คุณกำลังสร้างตัวชี้ชื่อ x 1211 01:05:08,170 --> 01:05:09,396 >> ผู้ชม: [ไม่ได้ยิน] 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: ดังนั้นเมื่อฉันบอก n ดาว x ฉัน บอกว่าเดี๋ยวก่อนในหน่วยความจำที่ฉันจะ 1213 01:05:14,250 --> 01:05:16,390 รับหนึ่งเหล่านี้สามกล่อง 1214 01:05:16,390 --> 01:05:20,750 และผมจะบอกว่าที่ เป็นไปได้ x ซึ่งเป็น 1215 01:05:20,750 --> 01:05:22,000 จะเป็นตัวชี้ 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 และสิ่งที่น่าสนใจเกี่ยวกับตัวชี้ คือการที่เราบอกว่าพวกเขามี 1218 01:05:30,640 --> 01:05:32,620 4 ไบต์สำหรับเครื่อง 32 บิต 1219 01:05:32,620 --> 01:05:36,320 และให้เหตุผลว่าเป็นเพราะ 4 ไบต์ 32 บิต 1220 01:05:36,320 --> 01:05:40,490 >> และเครื่องที่มี 64 บิตจริง มีที่อยู่ชี้ 1221 01:05:40,490 --> 01:05:43,480 ที่มี 64 บิตนาน 1222 01:05:43,480 --> 01:05:49,820 ดังนั้นมันก็หมายความว่าขนาดของ ที่อยู่ในเครื่องจะแตกต่างกัน 1223 01:05:49,820 --> 01:05:52,270 >> ดังนั้นการอ้างอิงและ dereferencing 1224 01:05:52,270 --> 01:05:54,310 มีสองผู้ประกอบการที่ พวกคุณควรจำไว้ 1225 01:05:54,310 --> 01:05:55,450 แรกคือเครื่องหมาย 1226 01:05:55,450 --> 01:05:56,810 ที่สองคือดาว 1227 01:05:56,810 --> 01:06:05,060 ไม่ได้รับสับสนโดยดาวที่นี้ star เพราะจำได้ว่าใน 1228 01:06:05,060 --> 01:06:06,950 กรณีนี้คุณมี n ดาว 1229 01:06:06,950 --> 01:06:08,700 >> มันก็เหมือนเป็นสิ่งที่ทั้งหมดเข้าด้วยกัน 1230 01:06:08,700 --> 01:06:10,720 ไม่มีดาวพื้นที่ n เป็น 1231 01:06:10,720 --> 01:06:12,070 ดังนั้นก็หมายความว่ามันเป็นคนประเภท 1232 01:06:12,070 --> 01:06:14,870 โปรดจำไว้ว่าเมื่อคุณมี ดาวแปรแสงคุณ 1233 01:06:14,870 --> 01:06:16,230 พูดคุยเกี่ยวกับประเภท 1234 01:06:16,230 --> 01:06:20,540 >> เมื่อคุณมีเพียงดาวแล้ว ชื่อของตัวแปรก็หมายความว่า 1235 01:06:20,540 --> 01:06:24,100 คุณกำลัง dereferencing ชี้ที่ หมายความว่าคุณกำลังมองหาที่ 1236 01:06:24,100 --> 01:06:28,290 ชี้การหาที่อยู่ของมัน ชี้ไปที่จะไปยังที่อยู่ที่ 1237 01:06:28,290 --> 01:06:30,850 และกำลังมองหาที่เมื่อใดก็ตามที่ ที่คุณมี 1238 01:06:30,850 --> 01:06:34,310 ดังนั้นผมจึงบอกนักเรียนของฉันว่าเมื่อคุณมี ดาวคุณควรคิดว่ามันเป็น 1239 01:06:34,310 --> 01:06:36,850 อักษรย่อของเนื้อหาของ 1240 01:06:36,850 --> 01:06:39,770 >> ดังนั้นถ้าคุณมีตัวชี้และคุณ ทำชี้ดาวก็ 1241 01:06:39,770 --> 01:06:41,720 เนื้อหาของตัวชี้ 1242 01:06:41,720 --> 01:06:44,580 เพื่อให้คุณไปกับสิ่งที่มันชี้ไปที่ และดูที่เนื้อหาอย่างต่อเนื่อง 1243 01:06:44,580 --> 01:06:47,730 และเครื่องหมายเหมือนกัน สิ่งที่เป็นที่อยู่ของ 1244 01:06:47,730 --> 01:06:52,560 >> ดังนั้นถ้าฉันมีตัวแปรเเรกเช่นให้ บอกว่าฉันไม่ int เท่ากับ 3-- 1245 01:06:52,560 --> 01:06:56,900 ถ้าผมต้องการที่จะหาที่อยู่ที่ ตัวแปรหน่วยความจำฉันก็จะทำ 1246 01:06:56,900 --> 01:06:58,240 เครื่องหมาย 1247 01:06:58,240 --> 01:07:00,280 ดังนั้นจึงเป็นที่อยู่ของ 1248 01:07:00,280 --> 01:07:01,530 ทำให้รู้สึก? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> ดังนั้นนี่คือตัวอย่าง 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 นี่คือการขาดหายไป int ขและ int ค 1253 01:07:11,530 --> 01:07:16,520 ดังนั้น int เท่ากับ 3 หมายความว่า ฉันจะไปที่หน่วยความจำ 1254 01:07:16,520 --> 01:07:19,870 และฉันจะไปหาสล็อต และใส่หมายเลข 3 ที่นี่ 1255 01:07:19,870 --> 01:07:22,200 >> แล้ว int ขเท่ากับ 4 1256 01:07:22,200 --> 01:07:23,100 ฉันจะทำสิ่งเดียวกัน 1257 01:07:23,100 --> 01:07:25,840 ไปที่หน่วยความจำและใส่หมายเลข 4 ในหนึ่งกล่อง 1258 01:07:25,840 --> 01:07:27,100 และ int เท่ากับ 5 1259 01:07:27,100 --> 01:07:29,740 หากล่องอื่นและใส่หมายเลข 5 1260 01:07:29,740 --> 01:07:36,160 >> ดังนั้นสิ่งที่เป็นสายที่ทำออกมานี้ ต่อปี n ดาวเท่ากับเครื่องหมาย 1261 01:07:36,160 --> 01:07:37,800 ดังนั้นครั้งแรกของทั้งหมด n ดาวต่อปี 1262 01:07:37,800 --> 01:07:39,050 สิ่งที่มันทำอะไร 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> ผู้ชม: [ไม่ได้ยิน] 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: ใช่ดังนั้น n ต่อปีดาวครั้งแรก ประกาศตัวชี้ที่เรียกว่าปี 1266 01:07:47,890 --> 01:07:53,720 และแล้วก็การกำหนดค่าของ ตัวชี้ว่าจะเป็นที่อยู่ของ 1267 01:07:53,720 --> 01:07:55,790 ดังนั้นเครื่องหมาย 1268 01:07:55,790 --> 01:07:58,510 แล้วถ้าฉันทำ PB ดาว สิ่งที่เป็น PB ดาว? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> โอ้ขอโทษ 1271 01:08:03,150 --> 01:08:06,330 นี้ยังขาดหายไป PB ดาว n 1272 01:08:06,330 --> 01:08:07,905 ผมหมายถึงดาวคอมพิวเตอร์ 1273 01:08:07,905 --> 01:08:11,200 ขอโทษด้วยครับ 1274 01:08:11,200 --> 01:08:11,940 มันเป็นสิ่งเดียวกัน 1275 01:08:11,940 --> 01:08:16,408 แต่ตอนนี้ฉันดี AR การสร้างตัวชี้ ไปและจากนั้นชี้ไปยังค 1276 01:08:16,408 --> 01:08:16,886 ใช่? 1277 01:08:16,886 --> 01:08:18,136 >> ผู้ชม: [ไม่ได้ยิน] 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: ใช่ 1280 01:08:26,670 --> 01:08:32,630 ดังนั้นถ้าคุณไปที่หน่วยความจำและคุณจะไป กล่องที่เป็นตัวระบุสำหรับต่อปี 1281 01:08:32,630 --> 01:08:37,149 คุณจริงไป เห็นที่อยู่ของ 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 ใช่? 1285 01:08:43,300 --> 01:08:45,605 >> ผู้ชม: [ไม่ได้ยิน] 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: ใช่ตัวชี้ที่อยู่ 1287 01:08:49,260 --> 01:08:50,120 อย่าลืมว่า 1288 01:08:50,120 --> 01:08:52,800 มันก็เหมือนกับการที่สำคัญที่สุด ส่วนที่เกี่ยวกับตัวชี้ 1289 01:08:52,800 --> 01:08:56,180 มีการจัดเก็บและที่อยู่เป็น กับตัวแปรบาง 1290 01:08:56,180 --> 01:08:56,890 อะไรอีกหรือไม่ 1291 01:08:56,890 --> 01:08:58,370 หากมีปัญหาอื่น ๆ 1292 01:08:58,370 --> 01:08:59,189 ตกลง 1293 01:08:59,189 --> 01:09:00,399 >> ดังนั้นตัวชี้และอาร์เรย์ 1294 01:09:00,399 --> 01:09:08,189 จำได้ว่าตอนที่ผมทำ int อาร์เรย์ 3 โดยทั่วไปสิ่งที่ผมทำคือผมชนิด 1295 01:09:08,189 --> 01:09:12,779 ของประกาศในชี้ 1296 01:09:12,779 --> 01:09:18,960 ดังนั้นอาร์เรย์เป็นชนิดเช่นตัวชี้ไปยัง สถานที่เฉพาะในหน่วยความจำในการที่ฉัน 1297 01:09:18,960 --> 01:09:21,999 จัดสรรสามช่องสำหรับจำนวนเต็ม 1298 01:09:21,999 --> 01:09:23,430 ไม่ว่าทำให้รู้สึก? 1299 01:09:23,430 --> 01:09:30,250 >> ดังนั้นเมื่อผมทำ int อาร์เรย์ 3 สิ่งที่ฉัน ทำโดยทั่วไปคือการสร้างสาม 1300 01:09:30,250 --> 01:09:31,479 ช่องในหน่วยความจำ 1301 01:09:31,479 --> 01:09:33,899 ดังนั้นผมเพียงแค่หาสามช่องในหน่วยความจำ 1302 01:09:33,899 --> 01:09:38,810 ดังนั้นถ้าผมทำแล้วอาร์เรย์ดาวมัน โดยทั่วไปหมายถึงเนื้อหาของอาร์เรย์ 1303 01:09:38,810 --> 01:09:46,180 ซึ่งหมายความว่าฉันลบตัวชี้ฉันไป ไปยังสถานที่ที่มันชี้ไปที่ 1304 01:09:46,180 --> 01:09:47,939 และฉันใส่หมายเลขหนึ่ง 1305 01:09:47,939 --> 01:09:53,729 >> แล้วถ้าฉันทำอาเรย์สตาร์พลัส 1 นั่นคือสิ่งเดียวกับการทำอาร์เรย์ 1306 01:09:53,729 --> 01:09:59,690 วงเล็บหนึ่งซึ่งก็หมายความว่าฉันไป สถานที่ที่ว่ามันชี้ไปที่ 1307 01:09:59,690 --> 01:10:03,000 แล้วบวก 1 ทำให้ ฉันเปลี่ยนตำแหน่งหนึ่ง 1308 01:10:03,000 --> 01:10:06,510 ดังนั้นผมจึงไปที่ตำแหน่งนี้จริง และใส่หมายเลขสอง 1309 01:10:06,510 --> 01:10:10,900 >> และแล้วในที่สุดเมื่อฉันทำ อาร์เรย์บวก 2, ฉันไปที่ 1310 01:10:10,900 --> 01:10:11,825 ชี้อาเรย์ที่ 1311 01:10:11,825 --> 01:10:14,690 แล้วผมก็ย้ายไปยังบล็อกหน่วยความจำ 1312 01:10:14,690 --> 01:10:16,240 และจากนั้นฉันใส่บ้านเลขที่สามที่นี่ 1313 01:10:16,240 --> 01:10:16,600 ใช่? 1314 01:10:16,600 --> 01:10:21,400 >> ผู้ชม: อาร์เรย์ดังนั้นดาวเป็นเพียง บอกว่าจุดแรกมาก 1315 01:10:21,400 --> 01:10:25,090 และคุณสามารถเพิ่ม 1 เพียงเพราะ เราเท่านั้นจริงๆ 1316 01:10:25,090 --> 01:10:27,295 อ้างอิงว่าที่อยู่เป็นครั้งแรก 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: ใช่ 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 ทำไมเราเช่นพูดอาร์เรย์ 0, 1 อาร์เรย์และอาร์เรย์ 2 หรือไม่? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 ฉันพูดทำไมคุณทำ 0, 1, 2, 3 แทน 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 หนึ่งในเหตุผลคือหนึ่งคอมพิวเตอร์ โปรแกรมเมอร์ชอบที่จะเริ่มต้น 1323 01:10:46,550 --> 01:10:47,750 นับตั้งแต่ 0 1324 01:10:47,750 --> 01:10:52,370 สองเป็นเพราะเมื่อคุณทำอาร์เรย์ 0, มันเป็นสิ่งเดียวกับการทำอาร์เรย์ 1325 01:10:52,370 --> 01:10:56,330 บวก 0 ซึ่งหมายความว่าฉันจะไป ตำแหน่งนั้นและฉันทำไม่ได้ 1326 01:10:56,330 --> 01:10:59,320 ข้ามบล็อกหน่วยความจำใด 1327 01:10:59,320 --> 01:11:01,750 ดังนั้นผมจึงไม่ย้ายบล็อกหน่วยความจำใด 1328 01:11:01,750 --> 01:11:02,015 ใช่? 1329 01:11:02,015 --> 01:11:03,265 >> ผู้ชม: [ไม่ได้ยิน] 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: ดังนั้นเธอจึงขอให้สิ่งที่เป็น ความแตกต่างระหว่างการทำ 1332 01:11:12,670 --> 01:11:14,000 นี้หรือทำ malloc 1333 01:11:14,000 --> 01:11:17,550 หนึ่งในความแตกต่างก็คือ int อาร์เรย์ 3 การสร้าง 1334 01:11:17,550 --> 01:11:19,260 อาร์เรย์ในกอง 1335 01:11:19,260 --> 01:11:23,080 และเมื่อฉันทำ malloc มัน สร้างในกอง 1336 01:11:23,080 --> 01:11:25,250 ไม่ว่าทำให้รู้สึก? 1337 01:11:25,250 --> 01:11:28,870 >> ดังนั้นวิธีที่จะ malloc จริงๆทำงานอย่างไร 1338 01:11:28,870 --> 01:11:32,245 ดังนั้นทำไมเรายังต้องใช้ malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 คอมไพเลอร์ของคุณชนิดของตัวเลขออกทั้งหมด ตัวแปรที่คุณประกาศ 1341 01:11:39,700 --> 01:11:44,040 และเขาสร้างพื้นที่สำหรับทุก ของพวกเขาในกอง 1342 01:11:44,040 --> 01:11:47,180 ดังนั้นตัวแปรทั้งหมดของคุณจะ ที่จะเป็นหนึ่งในกอง 1343 01:11:47,180 --> 01:11:49,460 ดังนั้นนี่คือตัวแปรสภาพแวดล้อม 1344 01:11:49,460 --> 01:11:53,850 >> ดังนั้นโดยทั่วไปพื้นที่สำหรับตัวแปรเหล่านั้น ในหน่วยความจำมีการจัดสรรที่ 1345 01:11:53,850 --> 01:11:55,080 รวบรวมเวลา 1346 01:11:55,080 --> 01:11:58,790 ดังนั้นก็หมายความว่าคอมพิวเตอร์ของคุณมี ที่จะรู้ว่าทั้งหมดของตัวแปรเหล่านั้น 1347 01:11:58,790 --> 01:11:59,790 ก่อน 1348 01:11:59,790 --> 01:12:02,500 มันไม่จำเป็นต้องรู้ค่าสิ่งที่ คุณกำลังจะไปใส่ในพวกเขา 1349 01:12:02,500 --> 01:12:05,490 แต่จะต้องรู้ว่า หน่วยความจำที่คุณต้องการ 1350 01:12:05,490 --> 01:12:09,380 >> แต่ตอนนี้ขอบอกว่ายกตัวอย่างเช่น คุณกำลังสร้างอาร์เรย์หรือการ 1351 01:12:09,380 --> 01:12:13,430 สตริงที่คุณกำลังการ จากผู้ใช้ 1352 01:12:13,430 --> 01:12:17,300 ระยะเวลาที่คุณไม่ทราบว่าสตริง เป็นไปได้เช่น 1353 01:12:17,300 --> 01:12:20,600 ดังนั้นคุณจึงไม่ทราบว่าวิธีการหลาย บล็อกหน่วยความจำคุณจัดสรรใช่มั้ย? 1354 01:12:20,600 --> 01:12:24,120 >> จึงไม่ทำให้รู้สึกจริงๆสำหรับ คุณจะบอกว่าใส่ 100 ตัวอักษร 1355 01:12:24,120 --> 01:12:26,420 และแล้วสิ่งที่ถ้าผู้เขียน 150? 1356 01:12:26,420 --> 01:12:27,670 คุณกำลังจะได้รับการเมา 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> ดังนั้นโดยทั่วไปคุณไม่สามารถมั่นใจได้ว่า หน่วยความจำที่คุณต้องการในการจัดสรร 1359 01:12:34,620 --> 01:12:35,960 เมื่อคุณรวบรวมโปรแกรม 1360 01:12:35,960 --> 01:12:38,240 คุณเพียงแค่รู้ว่าในเวลาทำงาน 1361 01:12:38,240 --> 01:12:39,950 เพื่อที่ว่าทำไมคุณมีกอง 1362 01:12:39,950 --> 01:12:47,610 ดังนั้นกองกำลังจะมีหน่วยความจำ ว่าคุณกำลังการจัดสรรในช่วง 1363 01:12:47,610 --> 01:12:50,810 ระยะเวลาของโปรแกรมการทำงาน 1364 01:12:50,810 --> 01:12:55,780 >> ดังนั้นโดยทั่วไปเมื่อคุณทำ malloc สิ่งที่ คุณกำลังทำคือการจัดสรรหน่วยความจำที่ 1365 01:12:55,780 --> 01:13:00,160 runtime ซึ่งหมายความว่าคุณ การตัดสินใจที่ถูกต้องในช่วงเวลานั้นที่คุณ 1366 01:13:00,160 --> 01:13:02,670 ควรจะมีหน่วยความจำที่ 1367 01:13:02,670 --> 01:13:04,210 เพื่อที่ว่าเมื่อคุณกำลังจัดสรรมัน 1368 01:13:04,210 --> 01:13:06,430 ไม่ว่าทำให้รู้สึก? 1369 01:13:06,430 --> 01:13:11,690 >> ดังนั้นจำสแต็คที่มีตัวแปร ที่สร้างขึ้นในเวลารวบรวม 1370 01:13:11,690 --> 01:13:14,560 แล้วกองมีตัวแปร ที่สร้างขึ้นตามที่คุณไป 1371 01:13:14,560 --> 01:13:15,600 กับ malloc ตัวอย่างเช่น 1372 01:13:15,600 --> 01:13:16,850 >> ผู้ชม: [ไม่ได้ยิน] 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: ดังนั้น GetString เป็น จะเรียก malloc 1375 01:13:24,340 --> 01:13:26,710 ให้ฉันพูดคุยเกี่ยวกับ malloc และ ฉันจะอธิบาย GetString 1376 01:13:26,710 --> 01:13:32,000 ดังนั้น malloc เป็นสิ่งเดียวกัน การจัดสรรหน่วยความจำ 1377 01:13:32,000 --> 01:13:34,600 ดังนั้นมันจะจัดสรร หน่วยความจำในกอง 1378 01:13:34,600 --> 01:13:40,010 และมันจะกลับตัวชี้ไปยัง ที่หน่วยความจำที่ได้รับการจัดสรรที่ 1379 01:13:40,010 --> 01:13:43,090 >> ดังนั้นเมื่อคุณ do-- 1380 01:13:43,090 --> 01:13:44,910 ที่นี่สำหรับยกตัวอย่าง 1381 01:13:44,910 --> 01:13:45,830 ชี้ดาว n 1382 01:13:45,830 --> 01:13:50,520 แล้วชี้เท่ากับ malloc ขนาดของนิ้วครั้ง 10 1383 01:13:50,520 --> 01:13:52,110 ฉันกำลังสร้างตัวชี้ 1384 01:13:52,110 --> 01:13:59,020 แล้วผมกำหนดตัวชี้ไปที่ ค่าของตัวชี้ malloc ว่า 1385 01:13:59,020 --> 01:13:59,680 ให้ฉัน 1386 01:13:59,680 --> 01:14:04,150 >> ดังนั้นฉันขอ malloc คุณสามารถจัดสรร พื้นที่ 10 จำนวนเต็ม 1387 01:14:04,150 --> 01:14:05,390 นั่นคือสิ่งที่มันพูดว่า 1388 01:14:05,390 --> 01:14:09,020 และ malloc ให้ฉันกลับ ตัวชี้ไปยังสถานที่ที่ 1389 01:14:09,020 --> 01:14:11,460 ทำให้รู้สึก? 1390 01:14:11,460 --> 01:14:12,270 ตกลง 1391 01:14:12,270 --> 01:14:17,940 ฉันและ GetString คือโดยทั่วไปทำ เรียกร้องให้ malloc เพื่อให้คุณสามารถจัดสรร 1392 01:14:17,940 --> 01:14:21,680 หน่วยความจำในช่วงรันไทม์ 1393 01:14:21,680 --> 01:14:26,460 >> โปรดจำไว้เสมอเพื่อตรวจสอบเป็นโมฆะ เพราะ malloc จะกลับ null 1394 01:14:26,460 --> 01:14:28,200 หากไม่สามารถจัดสรรหน่วยความจำ 1395 01:14:28,200 --> 01:14:31,660 สมมติว่าคุณขอไร้สาระ จำนวนหน่วยความจำ 1396 01:14:31,660 --> 01:14:33,950 คอมพิวเตอร์ของคุณจะไม่เป็น สามารถจัดสรรที่มาก 1397 01:14:33,950 --> 01:14:36,410 >> ดังนั้น malloc เป็นเพียงการไป ที่จะกลับมาเป็นโมฆะ 1398 01:14:36,410 --> 01:14:42,210 ดังนั้นจำไว้เสมอเพื่อตรวจสอบว่า ตัวชี้ที่คุณได้จาก malloc เป็น 1399 01:14:42,210 --> 01:14:45,640 โมฆะหรือไม่เพราะถ้าเป็นคุณอาจ จะ dereferencing ตัวชี้และ 1400 01:14:45,640 --> 01:14:48,340 ก่อให้เกิดความผิดพลาดด้าน 1401 01:14:48,340 --> 01:14:50,930 และสุดท้ายอย่าลืม หน่วยความจำของคุณ 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> malloc คือการสร้างหน่วยความจำในกอง 1404 01:15:00,560 --> 01:15:03,436 และคุณจะต้องเพิ่มหน่วยความจำ ก่อนที่จะสิ้นสุดโครงการ 1405 01:15:03,436 --> 01:15:05,370 ตกลงนั่นคือทั้งหมดที่สำหรับฉัน 1406 01:15:05,370 --> 01:15:07,900 ขออภัยร็อบ 1407 01:15:07,900 --> 01:15:07,950 ขอบคุณ 1408 01:15:07,950 --> 01:15:09,878 >> [APPLAUSE] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: คำถามสุดท้าย ก่อนที่ร็อบมา? 1410 01:15:12,679 --> 01:15:13,138 หรือไม่? 1411 01:15:13,138 --> 01:15:13,597 ใช่? 1412 01:15:13,597 --> 01:15:15,892 >> ผู้ชม: ฉันไม่เห็น นี้หนึ่งออนไลน์ 1413 01:15:15,892 --> 01:15:17,269 คุณอัปโหลดไปยัง? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: ผมคิดว่าเดฟเป็น อัปโหลดเร็ว ๆ นี้ 1415 01:15:19,106 --> 01:15:19,880 >> เดฟ: มันจะถูกโพสต์ 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: มันจะเป็นออนไลน์ 1417 01:15:20,310 --> 01:15:21,175 >> ผู้ชม: มันขึ้น 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: มันได้หรือไม่ 1419 01:15:22,090 --> 01:15:23,157 ตกลง 1420 01:15:23,157 --> 01:15:23,644 ใช่? 1421 01:15:23,644 --> 01:15:27,053 >> ผู้ชม: [ไม่ได้ยิน] 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: ใช่คุณควรจะฟรีทั้งหมด หน่วยความจำที่อยู่ในกอง 1423 01:15:30,285 --> 01:15:31,535 >> ผู้ชม: [ไม่ได้ยิน] 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: ใช่ 1426 01:15:36,160 --> 01:15:39,980 เวลาที่คุณมี malloc วัฒนธรรม คุณควรจะมีวัฒนธรรมฟรี 1427 01:15:39,980 --> 01:15:42,640 หลังจากที่คุณหยุดใช้ตัวแปรที่ 1428 01:15:42,640 --> 01:15:44,800 ดังนั้น malloc และฟรี เสมอกัน 1429 01:15:44,800 --> 01:15:45,410 เพื่อนที่ดีที่สุดของพวกเขา 1430 01:15:45,410 --> 01:15:46,720 ใช่ 1431 01:15:46,720 --> 01:15:47,970 ร็อบ? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: ฉันจะไปได้อย่างรวดเร็ว 1434 01:15:56,850 --> 01:16:00,466 และวิดีโอจะถูกนำขึ้น 1435 01:16:00,466 --> 01:16:01,716 ฉันมีไมค์ใน 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> ตกลงดังนั้นสัปดาห์ที่ห้าสิ่งที่ 1438 01:16:26,230 --> 01:16:27,970 สิ่งแรกที่เราได้เป็นกอง 1439 01:16:27,970 --> 01:16:33,390 ดังนั้นจำไว้ว่ามีเพียงหนึ่งสแต็ค เฟรมต่อการเรียกใช้ฟังก์ชันที่ใช้งาน 1440 01:16:33,390 --> 01:16:34,710 เราจะเห็นว่าในครั้งที่สอง 1441 01:16:34,710 --> 01:16:37,850 และยังจำได้ว่าสิ่งที่จะไปจริง ในแต่ละเฟรมกองกำลังจะเป็น 1442 01:16:37,850 --> 01:16:41,880 ตัวแปรท้องถิ่นของฟังก์ชั่นของเรา ข้อโต้แย้งที่จะผ่านเข้ามาในของเรา 1443 01:16:41,880 --> 01:16:43,880 ฟังก์ชั่นพร้อมกับคู่ สิ่งอื่น ๆ ที่คุณทำไม่ได้จริงๆ 1444 01:16:43,880 --> 01:16:45,260 จำเป็นต้องกังวลเกี่ยวกับ 1445 01:16:45,260 --> 01:16:50,950 >> ดังนั้นนี่คือโปรแกรมตัวอย่างที่ แจ้งให้ทราบล่วงหน้าหลักคือ printfing ผลตอบแทน 1446 01:16:50,950 --> 01:16:52,830 ค่าของ foo 4 1447 01:16:52,830 --> 01:16:57,930 foo เป็นเพียงการไปกลับ ค่าของบาร์ 4 จุลภาค 6 1448 01:16:57,930 --> 01:17:02,380 และบาร์จะตั้งบางท้องถิ่น n ตัวแปรเท่ากับ 4 ครั้ง 6 1449 01:17:02,380 --> 01:17:03,920 แล้วกลับ n 1450 01:17:03,920 --> 01:17:09,130 >> ดังนั้นให้ดูที่กองตลอด ซ้ำที่เกิดขึ้นจริงของโปรแกรมนี้ 1451 01:17:09,130 --> 01:17:10,500 จึงมีด้านล่างของสแต็คของเรา 1452 01:17:10,500 --> 01:17:12,620 โปรดจำไว้ว่ากองโตขึ้น 1453 01:17:12,620 --> 01:17:15,370 ดังนั้นที่ด้านล่างของสแต็คของเราเรา มีกรอบสแต็คสำหรับหลัก 1454 01:17:15,370 --> 01:17:17,000 เมื่อโปรแกรมเริ่มต้นที่สำคัญ อยู่เสมอจะเป็นที่ 1455 01:17:17,000 --> 01:17:18,560 ด้านล่างของสแต็คของเรา 1456 01:17:18,560 --> 01:17:20,880 >> และสิ่งที่อยู่ภายในของเรา กองกรอบหลัก? 1457 01:17:20,880 --> 01:17:23,810 ดังนั้นแม้ว่าจะไม่มีท้องถิ่น ตัวแปรหลักเช่นฉันกล่าวก่อน 1458 01:17:23,810 --> 01:17:29,670 เราได้ argc และ RGV สละพื้นที่ ภายในของกองกรอบหลัก 1459 01:17:29,670 --> 01:17:33,260 ดังนั้นหลักอยู่ในขณะนี้ที่จะไป เรียก foo ฟังก์ชั่น 1460 01:17:33,260 --> 01:17:35,125 และนั่นหมายความว่า foo เป็นไปได้ ได้รับกรอบสแต็คของตัวเอง 1461 01:17:35,125 --> 01:17:36,970 >> ดังนั้นตอนนี้เรากำลังอยู่ภายใน foo ฟังก์ชั่น 1462 01:17:36,970 --> 01:17:38,610 และสิ่งที่ต้องการที่จะไปใน ฟูกรอบของสแต็ค? 1463 01:17:38,610 --> 01:17:41,100 ดี foo มี n อาร์กิวเมนต์ 1464 01:17:41,100 --> 01:17:45,440 และ n เท่ากับ 4 เนื่องจากว่าเป็นสิ่งที่ หลักจะผ่านเป็นอาร์กิวเมนต์ foo ของ 1465 01:17:45,440 --> 01:17:48,490 >> ดังนั้นตอนนี้ foo จะเรียกบาร์ 1466 01:17:48,490 --> 01:17:52,070 สิ่งที่บาร์จะมีภายใน ของกรอบสแต็คได้อย่างไร 1467 01:17:52,070 --> 01:17:55,610 มันมี x เท่ากับ 4 ปีเท่ากับหก 1468 01:17:55,610 --> 01:17:58,540 นั่นไม่ใช่สิ่งที่เรากำลังจะมี ในกรอบกองเพราะบาร์ 1469 01:17:58,540 --> 01:18:00,580 นอกจากนี้ยังมีตัวแปร n ท้องถิ่น 1470 01:18:00,580 --> 01:18:03,370 n และเรากำลังจะตั้งเท่ากับ 24 1471 01:18:03,370 --> 01:18:05,750 >> ดังนั้นตอนนี้บาร์จะกลับ n 1472 01:18:05,750 --> 01:18:09,300 ดังนั้นบาร์จะกลับ 24 ถึง ฟูกรอบสแต็ค 1473 01:18:09,300 --> 01:18:12,560 และเนื่องจากบาร์อยู่ในขณะนี้กลับมาที่ หมายความว่าเรากำลัง popping กรอบสแต็ค 1474 01:18:12,560 --> 01:18:14,250 สำหรับบาร์ออกของสแต็ค 1475 01:18:14,250 --> 01:18:18,430 ดังนั้นสิ่งที่หน่วยความจำที่บาร์ได้ ใช้อยู่ในขณะนี้ออกจากกอง 1476 01:18:18,430 --> 01:18:21,550 >> ตอนนี้ foo ยังเป็นไป 24 เพื่อกลับไปที่หน้าหลัก 1477 01:18:21,550 --> 01:18:25,470 ดังนั้นตอนนี้ foo ที่จะกลับหน่วยความจำ foo ที่ถูกใช้ในการ 'ของ 1478 01:18:25,470 --> 01:18:27,550 กรอบสแต็คที่หายไปยัง 1479 01:18:27,550 --> 01:18:29,660 และตอนนี้เป็นหลักจะเรียก printf 1480 01:18:29,660 --> 01:18:31,660 ดังนั้น printf เป็นเพียงฟังก์ชั่นอื่น 1481 01:18:31,660 --> 01:18:35,320 เมื่อเราเรียก printf ก็เป็นไปได้ กองกรอบอีก printf 1482 01:18:35,320 --> 01:18:36,470 การเรียกใช้ฟังก์ชัน 1483 01:18:36,470 --> 01:18:37,990 >> สิ่งที่เราผ่าน printf? 1484 01:18:37,990 --> 01:18:40,090 นั่นคือสิ่งที่จะไป บนกรอบสแต็คของ 1485 01:18:40,090 --> 01:18:44,970 อย่างน้อยที่สุดเราก็ผ่าน ร้อยละที่ฉันทับขวา n และ 1486 01:18:44,970 --> 01:18:47,180 อาร์กิวเมนต์ 24 1487 01:18:47,180 --> 01:18:50,370 มันอาจจะมีมากขึ้นในการเป็นกองกรอบ ถ้า printf เกิดขึ้นจะใช้บางส่วน 1488 01:18:50,370 --> 01:18:51,200 ตัวแปรท้องถิ่น 1489 01:18:51,200 --> 01:18:51,920 เราไม่ทราบ 1490 01:18:51,920 --> 01:18:53,810 >> แต่ทั้งหมดที่จะไปในของ printf กรอบสแต็ค 1491 01:18:53,810 --> 01:18:55,740 ก็จะดำเนินการ printf 1492 01:18:55,740 --> 01:18:56,830 แล้ว printf ทำ 1493 01:18:56,830 --> 01:18:57,820 มันจะกลับมา 1494 01:18:57,820 --> 01:18:58,960 ในที่สุดหลักคือการทำ 1495 01:18:58,960 --> 01:18:59,860 หลักจะกลับมา 1496 01:18:59,860 --> 01:19:02,020 แล้วโปรแกรมของเราจะทำ 1497 01:19:02,020 --> 01:19:02,480 ใช่? 1498 01:19:02,480 --> 01:19:04,505 >> ผู้ชม: คุณเห็น [ไม่ได้ยิน] 1499 01:19:04,505 --> 01:19:05,900 ข้อโต้แย้ง [ไม่ได้ยิน] 1500 01:19:05,900 --> 01:19:06,830 พารามิเตอร์? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: ดังนั้นมีความแตกต่างที่ลึกซึ้ง ระหว่างการขัดแย้งและพารามิเตอร์ 1502 01:19:09,970 --> 01:19:14,400 และจริงๆในพูดทั่วไปคนมัก เพียงแค่ผสมให้เข้ากันตลอดเวลา 1503 01:19:14,400 --> 01:19:17,550 แต่พารามิเตอร์ที่เป็นทางการ ชื่อของสิ่งที่ 1504 01:19:17,550 --> 01:19:20,180 >> ดังนั้น argc และ argv เป็น พารามิเตอร์หลัก 1505 01:19:20,180 --> 01:19:23,440 การขัดแย้งเป็นสิ่งที่คุณจริง ผ่านในเป็นพารามิเตอร์เหล่านั้น 1506 01:19:23,440 --> 01:19:28,340 จึงมีเมื่อฉันโทร foo 4, 4 เป็นเหตุผลที่ผมผ่านใน 1507 01:19:28,340 --> 01:19:31,460 และ n พารามิเตอร์ภายในของ foo ใช้เวลาอยู่กับค่า 4 1508 01:19:31,460 --> 01:19:32,880 ตั้งแต่ 4 เป็นอาร์กิวเมนต์ 1509 01:19:32,880 --> 01:19:35,826 >> ผู้ชม: [ไม่ได้ยิน] 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n คือตัวแปรท้องถิ่นที่บาร์ 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n คือยังท้องถิ่นเพื่อ foo แต่ เป็นพารามิเตอร์ foo 1513 01:19:44,960 --> 01:19:48,190 มันไม่ได้เป็นตัวแปรท้องถิ่น 1514 01:19:48,190 --> 01:19:48,546 ใช่? 1515 01:19:48,546 --> 01:19:51,180 >> ผู้ชม: [ไม่ได้ยิน] 1516 01:19:51,180 --> 01:19:55,400 >> ROB: บาร์ foo เป็นเพียงการโทรและ กลับมาตอบแทนสิ่งที่บาร์ 1517 01:19:55,400 --> 01:19:56,786 >> ผู้ชม: [ไม่ได้ยิน] 1518 01:19:56,786 --> 01:19:59,591 >> ROB: ใช่เพียงเพื่อดูหลาย เฟรมสแต็ค 1519 01:19:59,591 --> 01:20:00,082 ใช่? 1520 01:20:00,082 --> 01:20:03,519 >> ผู้ชม: ทำไม foo เรียกว่า ก่อนที่จะ printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: ทำไม foo เรียกก่อน printf? 1522 01:20:05,920 --> 01:20:10,740 เพื่อที่ผมจะได้แทนการทำบางสิ่งบางอย่าง เช่น int x เท่ากับ foo 4 1523 01:20:10,740 --> 01:20:12,980 แล้วพิมพ์ x 1524 01:20:12,980 --> 01:20:17,900 แต่ผมรวมฟังก์ชั่น โทรเข้ามาโต้แย้ง printf 1525 01:20:17,900 --> 01:20:23,670 >> แต่สังเกตเห็นว่าเราไม่สามารถจริง ดำเนินการเรียก printf จนกว่าเราจะ 1526 01:20:23,670 --> 01:20:25,610 คิดออกว่า foo จาก 4 เป็น 1527 01:20:25,610 --> 01:20:27,480 ดังนั้นเราจะประเมินนี้ 1528 01:20:27,480 --> 01:20:32,504 และเพียงครั้งเดียวที่ทำจะ ที่จะกลับมาและประเมินผลนี้ 1529 01:20:32,504 --> 01:20:32,990 ใช่? 1530 01:20:32,990 --> 01:20:37,364 >> ผู้ชม: ตั้งแต่บาร์ทั้งสอง [ไม่ได้ยิน] 1531 01:20:37,364 --> 01:20:41,738 มูลค่าทำไมเราไม่ได้ [ไม่ได้ยิน] 1532 01:20:41,738 --> 01:20:44,400 >> ROB: พวกเขาทั้งหมดควรจะเป็น int 1533 01:20:44,400 --> 01:20:46,260 ที่ไม่ได้จับเหนือ หลายที่ผ่านมา 1534 01:20:46,260 --> 01:20:49,010 ดังนั้นมันควรจะเป็นบาร์ int และ int foo เนื่องจากทั้งสองของคนเหล่านั้น 1535 01:20:49,010 --> 01:20:50,460 จะกลับจำนวนเต็ม 1536 01:20:50,460 --> 01:20:54,214 เป็นโมฆะเป็นเพียงว่าพวกเขาจะไม่ เพื่อกลับค่าที่เกิดขึ้นจริง 1537 01:20:54,214 --> 01:20:54,692 ใช่? 1538 01:20:54,692 --> 01:20:58,038 >> ผู้ชม: ถ้าคุณมีสายดังกล่าวข้างต้น กลับมา [ไม่ได้ยิน] 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB บรรทัดข้างต้นกลับมา? 1541 01:21:03,730 --> 01:21:04,410 >> ผู้ชม: ใช่ 1542 01:21:04,410 --> 01:21:10,780 เช่นหากคุณไม่ printf และ [ไม่ได้ยิน] มันจะพิมพ์สองครั้ง 1543 01:21:10,780 --> 01:21:12,992 >> ROB: ดังนั้นภายในของ foo? 1544 01:21:12,992 --> 01:21:15,945 ถ้าเรามี printf ที่นี่? 1545 01:21:15,945 --> 01:21:16,750 >> ผู้ชม: ใช่ 1546 01:21:16,750 --> 01:21:19,510 >> ROB: ดังนั้นถ้าเรามีสิทธิ printf ที่นี่ก็จะพิมพ์ครั้งเดียว 1547 01:21:19,510 --> 01:21:23,400 เนื่องจากเรากำลังเรียก foo ครั้งขวา ที่นี่แล้วเราจะตี printf 1548 01:21:23,400 --> 01:21:24,620 จากนั้นเราจะเรียกบาร์ 1549 01:21:24,620 --> 01:21:25,710 แล้ว foo จะกลับมา 1550 01:21:25,710 --> 01:21:26,275 และที่มัน 1551 01:21:26,275 --> 01:21:30,985 เราเท่านั้นที่เคยพบ printf ครั้ง 1552 01:21:30,985 --> 01:21:31,482 ใช่? 1553 01:21:31,482 --> 01:21:32,973 >> ผู้ชม: [ไม่ได้ยิน] 1554 01:21:32,973 --> 01:21:37,950 printf เรียก foo เพราะเราเป็นครั้งแรก เรียก printf แล้วเรากำลังผ่าน 1555 01:21:37,950 --> 01:21:38,580 ข้อโต้แย้ง 1556 01:21:38,580 --> 01:21:40,960 >> ROB: ดังนั้นในทางทฤษฎีไม่ได้ printf เรียก foo? 1557 01:21:40,960 --> 01:21:42,220 จึงไม่มี 1558 01:21:42,220 --> 01:21:47,360 เพียงเพื่อให้คเป็นไปได้ ดำเนินการสิ่งเหล่านี้ก่อนที่เราจะสามารถ 1559 01:21:47,360 --> 01:21:49,800 การเรียกใช้ฟังก์ชันทั้งหมดของการขัดแย้ง ฟังก์ชั่นต้อง 1560 01:21:49,800 --> 01:21:51,600 ได้รับการประเมินอย่างสมบูรณ์ 1561 01:21:51,600 --> 01:21:53,540 เพื่อให้มีการประเมินนี้อย่างสมบูรณ์? 1562 01:21:53,540 --> 01:21:54,610 ใช่มันเป็นเพียงสตริง 1563 01:21:54,610 --> 01:21:55,480 มันเป็นเพียงค่า 1564 01:21:55,480 --> 01:21:57,200 >> แล้วเราจะต้องสมบูรณ์ การประเมินนี้ 1565 01:21:57,200 --> 01:21:59,720 ครั้งนี้จะทำตอนนี้ทั้งหมดของ ข้อโต้แย้งของตนได้รับการประเมิน 1566 01:21:59,720 --> 01:22:01,982 และตอนนี้เราสามารถทำให้ โทร printf 1567 01:22:01,982 --> 01:22:02,478 ใช่? 1568 01:22:02,478 --> 01:22:03,966 >> ผู้ชม: หนึ่งคำถาม 1569 01:22:03,966 --> 01:22:06,942 หากคุณมีฟังก์ชั่นโมฆะต้อง คุณมีผลตอบแทนอัฒภาค? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: คุณไม่อัฒภาคผลตอบแทน ถ้าคุณมีฟังก์ชั่นเป็นโมฆะ 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 ตกลง 1573 01:22:14,780 --> 01:22:15,830 ดังนั้นตอนนี้บางสิ่งที่กอง 1574 01:22:15,830 --> 01:22:19,640 ดังนั้นกองคือวิธีที่เรากำลังจะไปจัดการ กับการจัดการหน่วยความจำแบบไดนามิก 1575 01:22:19,640 --> 01:22:23,100 และความขัดแย้งโดยตรงกับ กองซึ่งเราจะเรียกโดยอัตโนมัติ 1576 01:22:23,100 --> 01:22:24,100 การจัดการหน่วยความจำ 1577 01:22:24,100 --> 01:22:27,140 >> ดังนั้นในสแต็คที่คุณไม่เคยมี ที่จะจัดการกับวิธีการที่ตัวแปรท้องถิ่น 1578 01:22:27,140 --> 01:22:30,400 กำลังได้รับการผลักดันและโผล่ออกทั้งหมด เหล่านี้กองเฟรมและทุกสิ่งที่ 1579 01:22:30,400 --> 01:22:31,070 คุณไม่ต้องกังวลเกี่ยวกับเรื่องนี้ 1580 01:22:31,070 --> 01:22:32,070 มันเป็นไปโดยอัตโนมัติ 1581 01:22:32,070 --> 01:22:36,990 ดังนั้นกองเป็นคู่มือ 1582 01:22:36,990 --> 01:22:38,070 และ [ไม่ได้ยิน] 1583 01:22:38,070 --> 01:22:41,260 มาจากฟังก์ชั่นเหล่านี้ malloc และฟรี 1584 01:22:41,260 --> 01:22:43,550 >> ดังนั้นนี่คือโปรแกรมอื่น 1585 01:22:43,550 --> 01:22:47,145 ทุกสิ่งที่เรากำลังทำคือ mallocing จำนวนเต็ม 1586 01:22:47,145 --> 01:22:49,360 เรากำลังจัดเก็บไว้ในดาว x 1587 01:22:49,360 --> 01:22:52,520 แน่นอนเราต้องตรวจสอบ เพื่อดูว่า x เป็นโมฆะ 1588 01:22:52,520 --> 01:22:56,400 จากนั้นเราจะเพิ่งตั้งสิ่งที่ x จะชี้ไปถึง 50 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 พิมพ์สิ่งที่ x จะชี้ไป print x และ x แล้วฟรี 1591 01:23:03,260 --> 01:23:08,920 >> ดังนั้นวิธีการนี​​้เป็นจริงจะไปดู ถ้าเรามองไปที่กองและกองของเราหรือไม่ 1592 01:23:08,920 --> 01:23:10,950 ดังนั้นเราจะเริ่มต้นอีกครั้ง 1593 01:23:10,950 --> 01:23:12,580 ด้านล่างของสแต็คของเราก่อน 1594 01:23:12,580 --> 01:23:15,930 โปรดจำไว้ว่าเจ้ากองโดยตรง ตรงข้ามกับสแต็ค? 1595 01:23:15,930 --> 01:23:18,850 ดังนั้นเรากำลังจะมี ด้านบนของกองของเรามีขึ้น 1596 01:23:18,850 --> 01:23:22,590 >> ดังนั้นด้านล่างของสแต็คของเราเรามี กรอบสแต็คของเราสำหรับหลัก 1597 01:23:22,590 --> 01:23:28,000 แต่ก็มีพื้นที่สำหรับ argc, argv และเรา ตอนนี้มีตัวแปร x ท้องถิ่นซึ่ง 1598 01:23:28,000 --> 01:23:30,030 เป็นดาว int 1599 01:23:30,030 --> 01:23:32,240 ดังนั้นเรากำลังจะย้ำ ผ่านโปรแกรมนี้ 1600 01:23:32,240 --> 01:23:34,420 สิ่งแรกที่เรามีคือ เรียกร้องให้ malloc 1601 01:23:34,420 --> 01:23:36,250 >> ดังนั้นเรากำลังทำเรียกร้องให้ malloc 1602 01:23:36,250 --> 01:23:37,100 malloc เป็นฟังก์ชัน 1603 01:23:37,100 --> 01:23:38,770 มันจะได้รับกรอบสแต็ค 1604 01:23:38,770 --> 01:23:40,180 สิ่งที่เราผ่านไป malloc? 1605 01:23:40,180 --> 01:23:41,610 ที่จะเข้าไปข้างใน ของกรอบสแต็ค 1606 01:23:41,610 --> 01:23:45,130 เรากำลังผ่านขนาดของ n ซึ่งคือ 4 1607 01:23:45,130 --> 01:23:49,700 เพื่อให้มีการส่งผ่านไปยัง malloc 1608 01:23:49,700 --> 01:23:50,910 >> สิ่งที่ไม่ malloc ทำอย่างไร 1609 01:23:50,910 --> 01:23:53,820 มันคว้าเราพื้นที่ในกองบางส่วน 1610 01:23:53,820 --> 01:23:55,320 ดังนั้นเรากำลังจะไปที่กอง 1611 01:23:55,320 --> 01:23:57,990 และเรากำลังจะคว้า 4 ไบต์จากกอง 1612 01:23:57,990 --> 01:24:01,500 จึงขอเพียงแค่ให้ที่ ที่อยู่โดยพลการ 1613 01:24:01,500 --> 01:24:06,680 0x123 เพียงแค่แกล้งทำเป็นว่าเป็น ที่อยู่ที่อยู่บนกอง 1614 01:24:06,680 --> 01:24:12,300 >> ดังนั้นสิ่งที่เป็นจริงภายในของที่ พื้นที่ของหน่วยความจำที่อยู่ที่ Ox123? 1615 01:24:12,300 --> 01:24:13,080 ขยะ 1616 01:24:13,080 --> 01:24:15,270 ดังนั้นเราจึงยังไม่ได้เก็บอะไรในนั้น 1617 01:24:15,270 --> 01:24:18,830 ดังนั้นเท่าที่เรารู้ว่ามัน จะเป็นอะไร 1618 01:24:18,830 --> 01:24:20,560 คุณไม่ควรจะถือว่าเป็นศูนย์ 1619 01:24:20,560 --> 01:24:23,870 เป็นไปได้มากที่สุดไม่เป็นศูนย์ 1620 01:24:23,870 --> 01:24:26,260 >> ดังนั้นตอนนี้ผลตอบแทน malloc 1621 01:24:26,260 --> 01:24:28,020 และเราจะทำอย่างไรเมื่อผลตอบแทน malloc? 1622 01:24:28,020 --> 01:24:29,800 เรากำหนดสิ่งที่มันกลับ 1623 01:24:29,800 --> 01:24:32,290 เราตั้งค่า x เท่ากับสิ่งที่ มันจะกลับมา 1624 01:24:32,290 --> 01:24:33,690 ดังนั้นมันคือสิ่งที่กลับมา? 1625 01:24:33,690 --> 01:24:38,150 มันกลับ 0x123 ตั้งแต่ที่เป็น ที่อยู่ของบล็อกของหน่วยความจำที่ 1626 01:24:38,150 --> 01:24:40,850 การจัดสรรเพียงแค่ในกอง 1627 01:24:40,850 --> 01:24:47,160 >> ดังนั้นกลับ 0x123 x อยู่ในขณะนี้จะได้รับการตั้งค่า เท่ากับ 0x123 ซึ่ง pictorially, 1628 01:24:47,160 --> 01:24:52,940 เรามักวาดเป็น x มีที่เกิดขึ้นจริง ลูกศรชี้ไปยังบล็อกที่ 1629 01:24:52,940 --> 01:24:55,820 แต่ x เป็นเพียงการจัดเก็บอยู่ที่ 1630 01:24:55,820 --> 01:24:58,670 ดังนั้นตอนนี้เราจะต้องตรวจสอบว่า x เป็นโมฆะ 1631 01:24:58,670 --> 01:24:59,120 มันไม่ได้เป็นโมฆะ 1632 01:24:59,120 --> 01:25:02,170 เราแกล้งทำเป็นว่า malloc ที่ประสบความสำเร็จ 1633 01:25:02,170 --> 01:25:04,950 >> ดังนั้นตอนนี้ดาว x เท่ากับ 50 1634 01:25:04,950 --> 01:25:08,450 ดังนั้นดาวจำได้ว่ามันหมายความว่า ไปที่ที่อยู่ที่ 1635 01:25:08,450 --> 01:25:12,700 ดังนั้น 0x123 เรากำลังจะไป ไปที่ที่อยู่ที่ 1636 01:25:12,700 --> 01:25:14,660 เพื่อที่จะทำให้เรามีขึ้น 1637 01:25:14,660 --> 01:25:16,310 สิ่งที่เราทำตามที่อยู่ที่? 1638 01:25:16,310 --> 01:25:19,020 เรากำลังจัดเก็บ 50 1639 01:25:19,020 --> 01:25:22,500 >> ดังนั้นหลังจากบรรทัดนี้ว่าเป็นสิ่งที่ สิ่งที่จะไปให้มีลักษณะเหมือน 1640 01:25:22,500 --> 01:25:24,640 ดังนั้นตอนนี้ก็ไม่ได้อีกต่อไป ขยะมีขึ้น 1641 01:25:24,640 --> 01:25:28,910 ตอนนี้เรารู้ว่า 50 อยู่ในที่ อยู่โดยเฉพาะอย่างยิ่งเพราะ 1642 01:25:28,910 --> 01:25:32,410 เราตั้งค่าให้ว่า 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 ดังนั้นตอนนี้เรากำลังจะพิมพ์ฉ 1645 01:25:34,370 --> 01:25:38,490 >> ดังนั้นก่อนที่เราจะพิมพ์ดาว x 1646 01:25:38,490 --> 01:25:39,640 ดังนั้นสิ่งที่เป็นดาว x? 1647 01:25:39,640 --> 01:25:44,300 อีกครั้งดาว x หมายถึงการไปที่ สิ่งที่ x จะชี้ไปที่ 1648 01:25:44,300 --> 01:25:47,140 ดังนั้น x ถูกจัดเก็บ 0x123 ไปที่ 1649 01:25:47,140 --> 01:25:48,490 50 เราได้รับ 1650 01:25:48,490 --> 01:25:50,540 เพื่อให้พิมพ์ว่า f 1651 01:25:50,540 --> 01:25:54,900 และนั่นหมายความว่ามันจะพิมพ์ 50 1652 01:25:54,900 --> 01:25:56,850 แล้วผลตอบแทนที่ 1653 01:25:56,850 --> 01:25:58,340 >> และแล้วเราก็มี printf ที่สอง 1654 01:25:58,340 --> 01:25:59,370 เราตอนนี้ร้อยละหน 1655 01:25:59,370 --> 01:26:01,680 ถ้าคุณยังไม่เห็นมันว่าเป็น เพียงแค่ว่าคุณพิมพ์ตัวชี้ 1656 01:26:01,680 --> 01:26:04,960 ดังนั้นเราจึงมีฉันร้อยละร้อยละ ฉและทุกคนอยู่แล้ว 1657 01:26:04,960 --> 01:26:07,160 ดังนั้นร้อยละ, p พิมพ์ตัวชี้ 1658 01:26:07,160 --> 01:26:08,920 >> ดังนั้น x เป็นตัวชี้ 1659 01:26:08,920 --> 01:26:13,440 ดังนั้นถ้าเราจะพิมพ์ x ตัวเอง เรากำลังพิมพ์สิ่งที่เป็นจริงภายใน 1660 01:26:13,440 --> 01:26:19,220 x ซึ่งเป็น 0x123 ดังนั้นก่อน ฉพิมพ์จะพิมพ์ 50 1661 01:26:19,220 --> 01:26:23,620 ฉพิมพ์ครั้งที่สองที่เกิดขึ้น พิมพ์ 0x123 ใช่? 1662 01:26:23,620 --> 01:26:27,460 >> ผู้ชม: คุณใช้ร้อยละ x ในการพิมพ์ตัวชี้? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: งั้นคุณใช้ร้อยละ x ในการพิมพ์ตัวชี้? 1664 01:26:31,200 --> 01:26:38,350 เพื่อให้คุณสามารถ แต่ร้อยละ x เป็นเพียง โดยทั่วไปสำหรับเช่นถ้าคุณมีบาง 1665 01:26:38,350 --> 01:26:40,325 จำนวนเต็มและคุณต้องการที่จะพิมพ์ เป็นเลขฐานสิบหก 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 นั่นเป็นเพียงวิธีการที่คุณทำอย่างนั้น 1668 01:26:44,880 --> 01:26:47,160 >> ในขณะที่ร้อยละงจะ พิมพ์เป็นทศนิยม 1669 01:26:47,160 --> 01:26:50,310 ที่ถูกเราจะได้รับร้อยละ ง ฉันเป็นเพียงจำนวนเต็ม 1670 01:26:50,310 --> 01:26:52,690 ร้อยละหนเป็นพิเศษ สำหรับคำแนะนำ 1671 01:26:52,690 --> 01:26:54,060 >> ดังนั้น x เป็นตัวชี้ 1672 01:26:54,060 --> 01:26:56,360 เราต้องการที่จะใช้ร้อยละหน 1673 01:26:56,360 --> 01:26:57,937 แต่ร้อยละ x สามารถทำงาน 1674 01:26:57,937 --> 01:26:58,414 ใช่? 1675 01:26:58,414 --> 01:26:59,664 >> ผู้ชม: [ไม่ได้ยิน] 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: ใช่ 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 อย่างน้อยนี้ call-- ดังนั้นฉัน ไม่ได้รวมไว้ในที่นี่ 1680 01:27:13,440 --> 01:27:19,850 แต่ทั้งสองมีปากเสียงมีความจำเป็นต้อง ภายในกรอบของกองนี้ 1681 01:27:19,850 --> 01:27:23,040 พร้อมกับตัวแปรท้องถิ่นใด ๆ printf เกิดขึ้นจะใช้ 1682 01:27:23,040 --> 01:27:27,020 แล้วโทรไปเพื่อ printf ตอนนี้ ภายในของ printf กรอบสแต็คเป็น 1683 01:27:27,020 --> 01:27:33,960 ร้อยละ n พีเครื่องหมายและสิ่งที่ ค่าของ x คือซึ่งเป็น 0x123 1684 01:27:33,960 --> 01:27:34,425 ใช่? 1685 01:27:34,425 --> 01:27:35,675 >> ผู้ชม: [ไม่ได้ยิน] 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: มันจะพิมพ์อะไรบางอย่าง ที่มีลักษณะเช่นนี้ 1688 01:27:40,880 --> 01:27:41,846 >> ผู้ชม: [ไม่ได้ยิน] 1689 01:27:41,846 --> 01:27:44,510 >> ROB: ดังนั้นมันพิมพ์ในรูปแบบที่อยู่ 1690 01:27:44,510 --> 01:27:47,003 ดูเหมือนว่าที่อยู่ 1691 01:27:47,003 --> 01:27:47,494 ใช่? 1692 01:27:47,494 --> 01:27:49,458 >> ผู้ชม: [ไม่ได้ยิน] 1693 01:27:49,458 --> 01:27:51,075 >> ROB: ทำไมคืออะไร? 1694 01:27:51,075 --> 01:27:52,920 >> ผู้ชม: [ไม่ได้ยิน] 1695 01:27:52,920 --> 01:27:55,240 >> ROB: เป็นตัวชี้นี้ทำไมไบต์ที่ 4? 1696 01:27:55,240 --> 01:27:58,500 ดังนั้นจึงมีทั้งกลุ่ม 0 ในหน้านี้ 1697 01:27:58,500 --> 01:28:03,740 ดังนั้นจึงเป็นจริงๆ 0x0000000123 1698 01:28:03,740 --> 01:28:06,510 ในระบบ 64 บิตจะมี ทั้งกลุ่มของศูนย์มากขึ้น 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 ใช่? 1701 01:28:11,900 --> 01:28:13,150 >> ผู้ชม: [ไม่ได้ยิน] 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: ดังนั้น printf แรก เป็นไป print-- 1704 01:28:21,130 --> 01:28:21,980 >> ผู้ชม: [ไม่ได้ยิน] 1705 01:28:21,980 --> 01:28:24,420 >> ROB: ใช่มันจะพิมพ์ สิ่งที่ x จะชี้ไปที่ 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 สตาร์กล่าวว่านี่คืออะไร สิ่งที่ชี้ไปที่ 1708 01:28:29,070 --> 01:28:30,300 คว้ามัน 1709 01:28:30,300 --> 01:28:31,455 ดังนั้นมันจึงเป็นสิ่งที่ชี้ไปที่? 1710 01:28:31,455 --> 01:28:31,850 50 1711 01:28:31,850 --> 01:28:32,410 คว้ามัน 1712 01:28:32,410 --> 01:28:33,390 นั่นคือสิ่งที่เรากำลังจะพิมพ์ 1713 01:28:33,390 --> 01:28:37,020 ในขณะที่หนึ่งต่อไปเราไม่ เพียงแค่พิมพ์ x ตัวเอง 1714 01:28:37,020 --> 01:28:38,850 สิ่งที่อยู่ภายในของ F? 1715 01:28:38,850 --> 01:28:43,710 0x123 1716 01:28:43,710 --> 01:28:44,500 ตกลง 1717 01:28:44,500 --> 01:28:46,620 >> และแล้วในที่สุดเราได้ฟรี 1718 01:28:46,620 --> 01:28:48,040 สิ่งที่เราผ่านไปได้ฟรีหรือไม่ 1719 01:28:48,040 --> 01:28:49,470 เรากำลังผ่าน x 1720 01:28:49,470 --> 01:28:52,380 เวลาที่ฉันแสดงจริงที่ มันอยู่ในกรอบสแต็ค 1721 01:28:52,380 --> 01:28:56,370 >> ดังนั้นเราผ่านค่า 0x123 ที่จะเป็นอิสระ 1722 01:28:56,370 --> 01:28:59,070 ดังนั้นตอนนี้ฟรีรู้สิทธิทั้งหมด ฉันต้องไปถึงกอง 1723 01:28:59,070 --> 01:29:00,050 และฟรีหน่วยความจำที่ 1724 01:29:00,050 --> 01:29:03,920 มันไม่ใช้สิ่งที่ เป็นที่ที่อยู่ 0x123 1725 01:29:03,920 --> 01:29:07,010 >> ดังนั้นฟรีจะไปปล่อย ว่าจากกอง 1726 01:29:07,010 --> 01:29:09,490 ตอนนี้กองของเราเป็นที่ว่างเปล่าอีกครั้ง 1727 01:29:09,490 --> 01:29:11,120 เราไม่มีการรั่วไหลของหน่วยความจำ 1728 01:29:11,120 --> 01:29:12,940 ตอนนี้ฟรีจะกลับมา 1729 01:29:12,940 --> 01:29:16,130 ขอให้สังเกต x ที่ยังคง 0x123 1730 01:29:16,130 --> 01:29:18,240 แต่ที่ตอนนี้หน่วยความจำไม่ถูกต้อง 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 เราควร dereference x ไม่ 1733 01:29:23,986 --> 01:29:24,440 ใช่? 1734 01:29:24,440 --> 01:29:27,240 >> ผู้ชม: การกลับ 0 ซ้ำซ้อน? 1735 01:29:27,240 --> 01:29:28,290 >> ROB นี้ returen 0 ซ้ำซ้อน? 1736 01:29:28,290 --> 01:29:31,110 ใช่ 1737 01:29:31,110 --> 01:29:33,950 เราเพียงแค่ใส่ที่มีเพราะ เรามีหนึ่งคืนสำหรับอากาศ 1738 01:29:33,950 --> 01:29:36,830 ดังนั้นมันก็เหมือนใช่ช่วยให้ รวมถึงผลตอบแทน 0 1739 01:29:36,830 --> 01:29:37,310 ใช่? 1740 01:29:37,310 --> 01:29:38,560 >> ผู้ชม: [ไม่ได้ยิน] 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: ดังนั้นหลังจากที่ x ฟรี, เกิดอะไรขึ้นถ้า เราพยายามที่จะ dereference ตัวชี้? 1743 01:29:45,580 --> 01:29:47,240 เป็นไปได้ว่าไม่มีอะไรผิดพลาด 1744 01:29:47,240 --> 01:29:49,330 เป็นไปได้ว่าเรายังจะได้รับ 50 1745 01:29:49,330 --> 01:29:53,590 >> มันเป็นไปได้ยังว่าหน่วยความจำที่เป็น ขณะนี้ถูกนำมาใช้อย่างอื่น 1746 01:29:53,590 --> 01:29:57,140 ดังนั้นจึงเป็นพฤติกรรมที่ไม่ได้กำหนด 1747 01:29:57,140 --> 01:30:00,772 และไม่ได้กำหนดหมายความว่าอะไร สามารถเกิดขึ้นได้ 1748 01:30:00,772 --> 01:30:01,250 ใช่? 1749 01:30:01,250 --> 01:30:02,500 >> ผู้ชม: [ไม่ได้ยิน] 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: ไม่มีดังนั้นถ้าคุณกำหนด x ไปเป็นอย่างอื่น 1752 01:30:10,830 --> 01:30:15,870 ดังนั้นถ้าที่นี่เรากล่าวว่า x เท่ากับ สิ่ง malloc else-- 1753 01:30:15,870 --> 01:30:17,100 malloc event-- ขนาด 1754 01:30:17,100 --> 01:30:20,180 แล้วว่าบล็อกเดิม ของหน่วยความจำที่ไม่ได้เป็นอิสระ 1755 01:30:20,180 --> 01:30:21,490 และเราได้สูญเสียอย่างเป็นทางการ 1756 01:30:21,490 --> 01:30:23,150 นั่นคือหน่วยความจำรั่ว 1757 01:30:23,150 --> 01:30:25,090 เราได้สูญเสียข้อมูลทั้งหมด เพื่อป้องกันหน่วยความจำที่ 1758 01:30:25,090 --> 01:30:26,827 ดังนั้นไม่มีทางที่เราสามารถที่เคยมันฟรี 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 ตกลงดังนั้นแล้วกลับ 0 หมายถึงการทำ 1761 01:30:36,630 --> 01:30:37,900 >> ทั้งหมดที่ถูกต้องเพื่อให้กองล้น 1762 01:30:37,900 --> 01:30:39,320 อะไรคือความคิดที่นี่? 1763 01:30:39,320 --> 01:30:41,210 ดังนั้นจำกองกำลังลง 1764 01:30:41,210 --> 01:30:43,480 สแต็คที่เกิดขึ้น 1765 01:30:43,480 --> 01:30:48,000 ดังนั้นนี่คือตัวอย่างจากการบรรยายที่ ผมคิดว่าที่สำคัญเป็นเพียงการไป 1766 01:30:48,000 --> 01:30:51,380 เรียก foo ฟังก์ชันนี้ซึ่งเป็นไป จะเรียกตัวเองซ้ำแล้วซ้ำ 1767 01:30:51,380 --> 01:30:52,320 ครั้งแล้วครั้งเล่า 1768 01:30:52,320 --> 01:30:55,370 >> ดังนั้นกองเฟรมจะไป ทำงานตรงเดียวกัน 1769 01:30:55,370 --> 01:30:58,130 ดังนั้นเรากำลังจะเริ่มต้นด้วยหลัก สแต็คเป็นกรอบด้านล่าง 1770 01:30:58,130 --> 01:31:02,000 แล้วหลักที่จะเรียก foo ซึ่ง เป็นไปได้กรอบสแต็ค 1771 01:31:02,000 --> 01:31:04,260 >> แล้ว foo จะเรียก foo อีกครั้งซึ่งเป็นไปได้ 1772 01:31:04,260 --> 01:31:05,500 กองกรอบอื่น 1773 01:31:05,500 --> 01:31:08,270 และจากนั้นอีกครั้งและอีกครั้งและอีกครั้ง และอีกครั้งจนในที่สุดเราทำงาน 1774 01:31:08,270 --> 01:31:09,190 เป็นกอง 1775 01:31:09,190 --> 01:31:11,990 ดังนั้นนี่คือวิธีการที่เราได้รับ กองล้น 1776 01:31:11,990 --> 01:31:14,910 และที่จุดนี้คุณ seg ความผิด 1777 01:31:14,910 --> 01:31:17,335 หรือคุณต้องการจริงๆ seg ความผิดก่อน จุดนี้ แต่ใช่ 1778 01:31:17,335 --> 01:31:19,660 >> ผู้ชม: ถ่ายโอนข้อมูลเป็นหลัก เช่นเดียวกับความผิด seg? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: ดังนั้นคุณจะเห็นการแบ่งส่วน หลักความผิดทิ้ง 1780 01:31:26,140 --> 01:31:28,760 คุณจะได้รับการถ่ายโอนข้อมูลที่สำคัญเมื่อ คุณ seg ความผิด 1781 01:31:28,760 --> 01:31:32,580 และมันก็เหมือนการถ่ายโอนข้อมูลทั้งหมดของ เนื้อหาของหน่วยความจำในปัจจุบันของคุณเพื่อให้ 1782 01:31:32,580 --> 01:31:36,670 ที่คุณสามารถลองและระบุ ทำไมคุณ seg โทษฐาน 1783 01:31:36,670 --> 01:31:37,135 ใช่? 1784 01:31:37,135 --> 01:31:38,385 >> ผู้ชม: [ไม่ได้ยิน] 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: ดังนั้นวิธีการที่ผิดส่วน มีกองล้น 1787 01:31:45,460 --> 01:31:47,060 ดังนั้นไม่จำเป็นต้อง 1788 01:31:47,060 --> 01:31:49,880 ความผิดส่วนหมายความว่าคุณกำลัง หน่วยความจำการสัมผัสในลักษณะ 1789 01:31:49,880 --> 01:31:50,880 คุณไม่ควรจะ 1790 01:31:50,880 --> 01:31:54,750 ดังนั้นวิธีหนึ่งที่เกิดขึ้นคือเมื่อ คุณสแต็คล้นเราเริ่มต้นสัมผัส 1791 01:31:54,750 --> 01:31:58,736 หน่วยความจำในแบบที่เราไม่ควรจะเป็น 1792 01:31:58,736 --> 01:31:59,208 ใช่? 1793 01:31:59,208 --> 01:32:00,458 >> ผู้ชม: [ไม่ได้ยิน] 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: ดังนั้นภายในวง จำกัด 1796 01:32:05,830 --> 01:32:08,770 เช่นนี้เป็นเหมือนไม่มีที่สิ้นสุดซ้ำ ห่วงและเพื่อให้เราได้รับอีก 1797 01:32:08,770 --> 01:32:09,770 กองกรอบแต่ละครั้ง 1798 01:32:09,770 --> 01:32:13,540 แต่ภายในของปกติ ไม่มีที่สิ้นสุดในขณะที่ one-- 1799 01:32:13,540 --> 01:32:16,390 ดีให้ไม่ได้พิมพ์ f-- 1800 01:32:16,390 --> 01:32:17,040 ทำอะไรบางอย่าง 1801 01:32:17,040 --> 01:32:18,390 สิ่งที่ 1802 01:32:18,390 --> 01:32:20,610 >> เราจะไม่ได้รับ กองกรอบอื่น 1803 01:32:20,610 --> 01:32:22,530 เรากำลังจะให้วนลูป ผ่านการเรียนการสอนครั้งนี้ครั้งเดียว 1804 01:32:22,530 --> 01:32:23,920 สแต็คที่ยังไม่เติบโต 1805 01:32:23,920 --> 01:32:27,290 มันเป็นความจริงที่ว่าแต่ละ recursive โทรจะให้เรากรอบสแต็ค 1806 01:32:27,290 --> 01:32:31,231 นั่นเป็นเหตุผลที่เราได้รับกองล้น 1807 01:32:31,231 --> 01:32:31,728 ใช่? 1808 01:32:31,728 --> 01:32:38,189 >> ผู้ชม: ดังนั้นถ้าคุณบอกว่าจะได้รับ ในขณะที่วงแล้ว [ไม่ได้ยิน] 1809 01:32:38,189 --> 01:32:42,000 >> ROB: ดังนั้นถ้าภายในของวงในขณะที่ มี printf คุณยังจะ 1810 01:32:42,000 --> 01:32:42,790 ไม่ใช่ความผิด seg 1811 01:32:42,790 --> 01:32:46,090 ผมก็ไม่ได้ต้องการที่จะสร้างความสับสนให้สิ่งที่ 1812 01:32:46,090 --> 01:32:46,610 มันจะห่วง 1813 01:32:46,610 --> 01:32:48,225 คุณจะได้รับกองเดียว กรอบ printf 1814 01:32:48,225 --> 01:32:49,580 >> printf แล้วจะกลับมา 1815 01:32:49,580 --> 01:32:50,280 แล้วคุณควรที่จะห่วงอีกครั้ง 1816 01:32:50,280 --> 01:32:51,460 คุณจะได้รับกองเดียว กรอบ printf 1817 01:32:51,460 --> 01:32:52,850 มันจะกลับมา 1818 01:32:52,850 --> 01:32:54,060 กรอบกองเดียว 1819 01:32:54,060 --> 01:33:00,215 เพื่อให้คุณไม่ได้รับที่ไม่มีที่สิ้นสุดนี้ ซ้อนขึ้นกรอบสแต็ค 1820 01:33:00,215 --> 01:33:03,185 >> ผู้ชม: [ไม่ได้ยิน] 1821 01:33:03,185 --> 01:33:04,040 >> ROB: ใช่ 1822 01:33:04,040 --> 01:33:09,360 ดังนั้นกองล้นนี้เกิดขึ้น เพราะไม่มีเหล่านี้ 1823 01:33:09,360 --> 01:33:11,600 เรียก foo จะกลับมา 1824 01:33:11,600 --> 01:33:15,250 ดังนั้นหากเรากลับมาแล้วเราจะ เริ่มสูญเสียเฟรมสแต็ค 1825 01:33:15,250 --> 01:33:17,870 แล้วเราจะไม่กองล้น 1826 01:33:17,870 --> 01:33:20,070 และนั่นคือเหตุผลที่คุณต้องกรณีฐาน สำหรับการทำงานส่วนบุคคลของคุณ 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 ใช่? 1829 01:33:23,479 --> 01:33:27,375 >> ผู้ชม: เป็นขนาดที่มีศักยภาพและ กองสำหรับกองเหมือนกันสำหรับ 1830 01:33:27,375 --> 01:33:29,880 โปรแกรมทั้งหมดหรือไม่ 1831 01:33:29,880 --> 01:33:31,910 >> ROB: ประมาณ 1832 01:33:31,910 --> 01:33:35,090 เป็นขนาดที่มีศักยภาพของสแต็คและ กองเดียวกันสำหรับโปรแกรมทั้งหมดหรือไม่ 1833 01:33:35,090 --> 01:33:37,180 ประมาณ 1834 01:33:37,180 --> 01:33:40,080 มีการสุ่มบางอย่างที่จะเป็น ที่กองเริ่มต้นและ 1835 01:33:40,080 --> 01:33:42,400 ที่กองเริ่มต้น 1836 01:33:42,400 --> 01:33:45,870 หากคุณเกิดขึ้นที่จะมีจำนวนมากทั้งจาก ตัวแปรระดับโลกและสิ่งที่คุณอาจ 1837 01:33:45,870 --> 01:33:49,520 จะออกไปจากพื้นที่บางส่วน สำหรับกองของคุณ 1838 01:33:49,520 --> 01:33:54,060 >> ในระบบ 64 บิตคุณจริง มีหน่วยความจำไม่มีที่สิ้นสุด 1839 01:33:54,060 --> 01:33:55,820 มีเพียงมาก 1840 01:33:55,820 --> 01:33:59,250 ระหว่าง 32 บิตและ 64 บิตที่ เป็นความแตกต่างอย่างมีนัยสำคัญ 1841 01:33:59,250 --> 01:34:02,350 >> คุณกำลังจะได้รับมากขึ้นทั้ง กองและพื้นที่กองบน 64 บิต 1842 01:34:02,350 --> 01:34:05,810 ระบบเพราะมีเพียง อยู่ที่ว่าพวกเขาสามารถใช้ 1843 01:34:05,810 --> 01:34:09,360 แต่ในแต่ละระบบก็จะ จะประมาณจำนวนเดียวกันของสแต็ค 1844 01:34:09,360 --> 01:34:10,785 และพื้นที่กอง 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 ขวาทั้งหมด 1847 01:34:15,530 --> 01:34:18,220 >> ดังนั้นสิ่งสุดท้ายคือการสะสม 1848 01:34:18,220 --> 01:34:19,810 ดังนั้นคุณควรจะรู้ว่ากระบวนการนี​​้ 1849 01:34:19,810 --> 01:34:22,240 มีสี่ขั้นตอนใหญ่ 1850 01:34:22,240 --> 01:34:24,400 ดังนั้นคนแรกที่ควร ง่ายต่อการจำ 1851 01:34:24,400 --> 01:34:25,085 ก่อนการประมวลผล 1852 01:34:25,085 --> 01:34:28,390 มันมีก่อนคำนำหน้าในนั้น 1853 01:34:28,390 --> 01:34:32,080 ดังนั้นมันมาก่อนที่ทุกอย่างอื่น 1854 01:34:32,080 --> 01:34:34,000 >> สิ่งที่ต้องจำไว้เป็นกัญชา 1855 01:34:34,000 --> 01:34:37,250 ดังนั้นกัญชากำหนดและกัญชารวมถึง ในทุกที่ 1856 01:34:37,250 --> 01:34:39,560 ผู้ที่มีทั้งหมดก่อนการประมวลผล คำสั่ง 1857 01:34:39,560 --> 01:34:42,030 เหล่านี้เป็นสิ่งที่ ก่อนประมวลผลจะดูแล 1858 01:34:42,030 --> 01:34:43,680 >> ดังนั้นสิ่งที่จะประมวลผลก่อนทำอย่างไร 1859 01:34:43,680 --> 01:34:44,850 มันเป็นสิ่งที่โง่จริงๆ 1860 01:34:44,850 --> 01:34:49,380 ทั้งหมดก็คือค​​วามสามารถในการมีสิ่งเหล่านี้ คัดลอกและตัดและวางการดำเนินงาน 1861 01:34:49,380 --> 01:34:51,790 >> ดังนั้นกัญชารวมถึง i0 มาตรฐานจุดชั่วโมง 1862 01:34:51,790 --> 01:34:52,990 อะไรคือสิ่งที่ทำ? 1863 01:34:52,990 --> 01:34:56,610 มันโลภมาตรฐานจุดชั่วโมง i0 ไฟล์และวางมันลงไปด้านบน 1864 01:34:56,610 --> 01:34:58,960 ที่ใดก็ตามที่มันบอกว่ากัญชารวมถึง มาตรฐานจุดชั่วโมง i0 1865 01:34:58,960 --> 01:35:02,480 >> และกัญชาใด ๆ ที่กำหนดว่าเราได้ เห็นสิ่งที่ว่าทำอะไร 1866 01:35:02,480 --> 01:35:06,730 คัดลอกของค่าที่กัญชา กำหนดถูกกำหนดให้เป็นและวางที่ 1867 01:35:06,730 --> 01:35:08,500 ทุกที่ที่คุณจะใช้ค่า 1868 01:35:08,500 --> 01:35:13,400 ดังนั้น preprocessor ​​ก็ไม่จริง การดำเนินงานที่เรียบง่ายตามข้อความ 1869 01:35:13,400 --> 01:35:15,870 มันจะไม่มีอะไรที่สมาร์ท 1870 01:35:15,870 --> 01:35:18,920 ดังนั้นทุกอย่างอื่นเป็น ซับซ้อนมากขึ้น 1871 01:35:18,920 --> 01:35:22,970 >> ดังนั้นตอนนี้พรีโพรเซสเซอร์ที่เป็น เสร็จแล้วเราจะรวบรวม 1872 01:35:22,970 --> 01:35:24,320 ดังนั้นสิ่งที่จะรวบรวมความหมายว่าอย่างไร 1873 01:35:24,320 --> 01:35:27,310 ตอนนี้เรากำลังจะจากรหัสค รหัสการชุมนุม 1874 01:35:27,310 --> 01:35:27,570 ใช่? 1875 01:35:27,570 --> 01:35:28,820 >> ผู้ชม: [ไม่ได้ยิน] 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: ใช่เราจับได้ว่า 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 ดังนั้นการรวบรวม 1880 01:35:38,660 --> 01:35:40,310 เรากำลังจะจาก c เพื่อประกอบ 1881 01:35:40,310 --> 01:35:42,470 ดังนั้นนี่คือการเปลี่ยนแปลงภาษาที่เกิดขึ้นจริง 1882 01:35:42,470 --> 01:35:45,240 รวบรวมตัวเองหมายความว่าจะจาก ภาษาระดับที่สูงขึ้นเพื่อ 1883 01:35:45,240 --> 01:35:47,340 ภาษาระดับต่ำ 1884 01:35:47,340 --> 01:35:50,720 >> และ c คือภาษาระดับสูง เมื่อเทียบกับการชุมนุม 1885 01:35:50,720 --> 01:35:52,320 การชุมนุมคืออะไร 1886 01:35:52,320 --> 01:35:56,440 คำแนะนำที่มีความสวย มากทำให้ CPU ของคุณ 1887 01:35:56,440 --> 01:35:59,130 แต่คอมพิวเตอร์ของคุณยังคงไม่ ไม่เข้าใจการชุมนุม 1888 01:35:59,130 --> 01:36:01,570 มันเพียง แต่เข้าใจคนและศูนย์ 1889 01:36:01,570 --> 01:36:06,160 ดังนั้นขั้นตอนต่อไปคือการประกอบซึ่ง นำเรามาจากคำแนะนำเหล่านี้ว่า 1890 01:36:06,160 --> 01:36:08,760 CPU ของคุณเข้าใจและจริง แปลพวกเขาเพื่อ 1891 01:36:08,760 --> 01:36:10,820 คนและศูนย์ 1892 01:36:10,820 --> 01:36:13,570 >> ดังนั้น C ถึงการชุมนุมที่จะไบนารี 1893 01:36:13,570 --> 01:36:15,870 แต่ฉันไม่ได้มีปฏิบัติการยัง 1894 01:36:15,870 --> 01:36:19,550 ดังนั้นคิดของห้องสมุด CS50 1895 01:36:19,550 --> 01:36:23,070 เราได้ให้คุณมีฐานสำหรับ ห้องสมุด CS50 นี้ซึ่งมี GetString 1896 01:36:23,070 --> 01:36:24,400 และ GetInt และสิ่งที่ 1897 01:36:24,400 --> 01:36:25,700 >> แต่ CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 ในและของ itself-- ไม่ปฏิบัติการ 1899 01:36:27,650 --> 01:36:29,570 แต่ไม่ได้มีหน้าที่หลัก 1900 01:36:29,570 --> 01:36:32,230 มันเป็นเพียงพวงของไบนารี ที่คุณสามารถใช้ 1901 01:36:32,230 --> 01:36:41,730 ดังนั้นการเชื่อมโยงคือวิธีที่เรานำมารวมกันทั้งหมด ไฟล์ไบนารีที่แตกต่างกันเหล่านี้ 1902 01:36:41,730 --> 01:36:43,110 เป็นปฏิบัติการที่เกิดขึ้นจริง 1903 01:36:43,110 --> 01:36:45,900 หนึ่งที่คุณสามารถพิมพ์ จุดเฉือนจุดออก 1904 01:36:45,900 --> 01:36:51,660 >> ดังนั้นนี้เป็นเหมือนแฟ้มที่คุณ เขียน - สิ่งที่โปรแกรมของคุณค่าเท่าใด 1905 01:36:51,660 --> 01:36:53,620 ceaser จุดค 1906 01:36:53,620 --> 01:36:55,100 แต่ตอนนี้มันได้รับการเรียบเรียง ลงไปที่ฐาน 1907 01:36:55,100 --> 01:36:56,480 ดังนั้น Ceaser จุด o 1908 01:36:56,480 --> 01:36:59,620 และนี่คือ CS50 ของเราห้องสมุดไบนารี 1909 01:36:59,620 --> 01:37:02,284 และพวกเขากำลังถูกรวม เป็นปฏิบัติการเดียว 1910 01:37:02,284 --> 01:37:02,758 ใช่? 1911 01:37:02,758 --> 01:37:04,008 >> ผู้ชม: [ไม่ได้ยิน] 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: ดังนั้นก่อนรวมถึงการจำ กัญชารวมถึงเป็นจริง 1914 01:37:12,710 --> 01:37:13,810 ขั้นตอนก่อนการประมวลผล 1915 01:37:13,810 --> 01:37:14,750 แต่ที่แยกต่างหาก 1916 01:37:14,750 --> 01:37:20,730 ถ้าคุณไม่ได้ใช้ฟังก์ชั่นใด ๆ ที่ อยู่นอกไฟล์เดียวของคุณแล้ว 1917 01:37:20,730 --> 01:37:26,100 ไม่มีคุณไม่จำเป็นต้องเชื่อมโยงอะไร ตั้งแต่คุณมีทุกอย่าง 1918 01:37:26,100 --> 01:37:30,310 >> ที่กล่าวว่า printf จะถูกเชื่อมโยงใน 1919 01:37:30,310 --> 01:37:32,820 ถ้าคุณเคยใช้ printf ว่าเป็นสิ่งที่ ที่ต้องมีการเชื่อมโยงใน 1920 01:37:32,820 --> 01:37:35,740 เพราะคุณไม่ได้เขียนว่า 1921 01:37:35,740 --> 01:37:39,530 และในความเป็นจริง printf โดยอัตโนมัติ เชื่อมโยงใน 1922 01:37:39,530 --> 01:37:42,760 คุณรู้วิธีที่บรรทัดคำสั่งหรือเมื่อ คุณพิมพ์ให้คุณเห็นมันมี 1923 01:37:42,760 --> 01:37:46,690 ลิตร CS50 เส้นประซึ่งมีการเชื่อมโยง ในห้องสมุด CS50? 1924 01:37:46,690 --> 01:37:49,070 printf และสิ่งที่ต้องการที่เป็นไป ที่จะเชื่อมโยงโดยอัตโนมัติ 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 ใด ๆ คำถามอื่น ๆ ในสิ่งที่? 1927 01:37:53,930 --> 01:37:56,280 >> ผู้ชม: [ไม่ได้ยิน] 1928 01:37:56,280 --> 01:37:58,300 >> ROB: การเชื่อมโยง? 1929 01:37:58,300 --> 01:38:03,450 เรามีทั้งกลุ่ม แฟ้มไบนารีที่แตกต่างกัน 1930 01:38:03,450 --> 01:38:06,410 นี่คือตัวอย่างที่ยอมรับ ที่เราใช้เป็นห้องสมุด CS50 1931 01:38:06,410 --> 01:38:09,960 เราได้รวบรวมและให้กับคุณ ไบนารีสำหรับห้องสมุด CS50 นี้ 1932 01:38:09,960 --> 01:38:12,410 >> คุณต้องการใช้ GetString ในโปรแกรมของคุณ 1933 01:38:12,410 --> 01:38:14,750 ดังนั้นคุณจะไปและใช้ GetString 1934 01:38:14,750 --> 01:38:19,700 แต่ไม่มีรหัสไบนารีของฉันสำหรับ GetString เมื่อคุณคอมไพล์รหัสของคุณ 1935 01:38:19,700 --> 01:38:23,140 ลงคุณไม่สามารถเรียกใช้จริงของคุณ โปรแกรมเพราะ GetString สตริงเป็น 1936 01:38:23,140 --> 01:38:25,080 ยังไม่ได้กำหนดไว้อย่างสมบูรณ์ 1937 01:38:25,080 --> 01:38:29,220 >> มันเป็นเพียงเมื่อคุณเชื่อมโยงในไบนารีของฉัน ที่มี GetString ว่าตอนนี้ทั้งหมด 1938 01:38:29,220 --> 01:38:31,130 สิทธิที่จะทำได้จริง ดำเนินการ GetString 1939 01:38:31,130 --> 01:38:32,330 ไฟล์ของฉันเสร็จสมบูรณ์ 1940 01:38:32,330 --> 01:38:34,208 และผมสามารถทำงานนี้ 1941 01:38:34,208 --> 01:38:34,697 ใช่? 1942 01:38:34,697 --> 01:38:37,631 >> ผู้ชม: การเชื่อมโยงแปลง ไบนารีเพื่อปฏิบัติการ? 1943 01:38:37,631 --> 01:38:42,032 ดังนั้นแม้ว่าคุณจะได้ไม่ต้องอื่น ๆ ห้องสมุดจะไม่ได้ยังคงอยู่ 1944 01:38:42,032 --> 01:38:44,477 จำเป็นที่จะต้องแปล [ไม่ได้ยิน] 1945 01:38:44,477 --> 01:38:48,640 >> ROB: ดังนั้นปฏิบัติการ ยังคงอยู่ในไบนารี 1946 01:38:48,640 --> 01:38:51,750 มันเป็นเพียงแค่การรวมทั้ง พวงของไบนารี 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> ผู้ชม: ขอบคุณมาก 1949 01:38:56,591 --> 01:38:58,560 >> ROB: ไม่มีปัญหา 1950 01:38:58,560 --> 01:38:59,540 หากมีปัญหาอื่น ๆ 1951 01:38:59,540 --> 01:39:02,001 มิฉะนั้นเราก็พร้อม 1952 01:39:02,001 --> 01:39:02,690 ขวาทั้งหมด 1953 01:39:02,690 --> 01:39:02,990 ขอบคุณ 1954 01:39:02,990 --> 01:39:03,590 >> [APPLAUSE] 1955 01:39:03,590 --> 01:39:04,490 >> ผู้ชม: ขอบคุณ 1956 01:39:04,490 --> 01:39:05,740 >> ROB: ใช่ 1957 01:39:05,740 --> 01:39:06,582