1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> เจสัน Hirschhorn: ยินดีต้อนรับ A5 ให้ทุกคน 3 00:00:07,820 --> 00:00:11,270 เรามีสัปดาห์ที่น่าตื่นเต้นไปข้างหน้าของเรา ส่วนใหญ่เป็นเพราะมีจำนวนมากดังนั้นใหม่ 4 00:00:11,270 --> 00:00:12,350 ใบหน้าในห้องนี้ 5 00:00:12,350 --> 00:00:12,920 มันยอดเยี่ยม 6 00:00:12,920 --> 00:00:15,740 จำนวนมากของคุณอยู่ที่นี่โดยอุบัติเหตุ ซึ่งเป็นที่ดียิ่งขึ้น 7 00:00:15,740 --> 00:00:18,220 ดังนั้นหวังว่าคุณจะให้เข้าร่วมกับเรา 8 00:00:18,220 --> 00:00:20,220 >> ในสัปดาห์นี้เราจะใช้จ่าย เป็นกลุ่มของส่วน 9 00:00:20,220 --> 00:00:21,870 เตรียมพร้อมสำหรับการตอบคำถาม 10 00:00:21,870 --> 00:00:26,580 ดังนั้นต่อวาระการประชุมของเราเรากำลังจะพูดคุย บิตเกี่ยวกับทรัพยากรสำหรับการเรียนที่ 11 00:00:26,580 --> 00:00:30,350 แต่ยังสำหรับการทดสอบและจากนั้นอีกครั้ง ใช้จ่ายจำนวนมากของการพูดในชั้นเรียน 12 00:00:30,350 --> 00:00:31,390 เกี่ยวกับคำถาม 13 00:00:31,390 --> 00:00:33,900 เมื่อเราดำเนินการเสร็จแล้วตอบของคุณ คำถามหรือถ้าคำถามของคุณ 14 00:00:33,900 --> 00:00:39,010 ธรรมชาตินำเราไปสู่​​การเขียนโปรแกรมบางอย่างผม มีปัญหาตัวอย่างจาก midterms 15 00:00:39,010 --> 00:00:43,180 ที่ผ่านมาว่าเราจะมีชีวิตอยู่รหัสในส่วน ร่วมกันที่ยังนำมาขึ้นอื่น ๆ 16 00:00:43,180 --> 00:00:45,420 หัวข้อที่ดีที่จะครอบคลุม 17 00:00:45,420 --> 00:00:48,280 >> ดังนั้นครั้งแรกที่เราได้ผ่านไปแล้วสำหรับ สองสามสัปดาห์ที่ผ่านมาเพื่อเตือนให้คุณ 18 00:00:48,280 --> 00:00:51,700 ผู้ชายมีตันของทรัพยากร สำหรับหลักสูตรนี้ 19 00:00:51,700 --> 00:00:55,020 มากของพวกเขาจะเป็นประโยชน์อย่างไม่น่าเชื่อ กับคุณที่คุณยังคง 20 00:00:55,020 --> 00:00:57,280 การศึกษาสำหรับการทดสอบ 0 เพราะ มันเป็นบ่ายวันอังคาร 21 00:00:57,280 --> 00:00:59,630 ดังนั้นทั้งหมดที่คุณได้รับ การศึกษาสำหรับบิต 22 00:00:59,630 --> 00:01:02,640 >> มีเอกสารประกอบการบรรยายและแหล่งที่มาเป็น รหัสที่คุณควร 23 00:01:02,640 --> 00:01:04,050 แน่นอนตรวจสอบ 24 00:01:04,050 --> 00:01:05,019 ดูกางเกงขาสั้น 25 00:01:05,019 --> 00:01:07,470 ตรวจสอบ study.cs50.net 26 00:01:07,470 --> 00:01:11,770 แล้วด้านล่างจำนวน ทรัพยากรอื่น ๆ 27 00:01:11,770 --> 00:01:14,020 >> อีกครั้งคำถาม 0 วันพรุ่งนี้ ที่ 01:00 28 00:01:14,020 --> 00:01:18,230 หากคุณยังไม่ได้ดำเนินการตรวจสอบ ออกมาเกี่ยวกับการทดสอบ 0 เอกสาร 29 00:01:18,230 --> 00:01:21,370 หน้าแรกหลักสูตรที่จะคิดออก ที่คุณกำลังการตอบคำถาม 30 00:01:21,370 --> 00:01:25,770 คำถามเริ่มต้นที่ 01:10 และ สิ้นสุด 70 นาทีต่อมา 31 00:01:25,770 --> 00:01:29,610 ดังนั้นถ้าคุณแสดงขึ้นหลังจากที่ 1:10 คุณ จะได้รับนาทีน้อยกว่าที่หลาย ๆ 32 00:01:29,610 --> 00:01:30,940 กว่า 70 ที่จะตอบคำถาม 33 00:01:30,940 --> 00:01:33,570 เพื่อให้แน่ใจว่าคุณอยู่ที่นั่นในเวลา 34 00:01:33,570 --> 00:01:38,690 ถ้าคุณเป็นนักเรียนขยายหรือมี บางพิจารณาการทดสอบอื่น ๆ ก็ 35 00:01:38,690 --> 00:01:40,400 อาจจะไม่เป็นที่ 01:00 วันพรุ่งนี้ 36 00:01:40,400 --> 00:01:43,540 แต่อีกครั้งให้ตรวจสอบเกี่ยวกับการทดสอบ 0 เอกสารที่จะให้แน่ใจว่าคุณรู้ว่าเมื่อไหร่ 37 00:01:43,540 --> 00:01:44,760 คุณกำลังการตอบคำถาม 38 00:01:44,760 --> 00:01:46,440 ที่ผมเขียน 75 นาทีขึ้นที่นี่ 39 00:01:46,440 --> 00:01:48,580 ผมคิดว่าเป็นขวาไม่ 70 40 00:01:48,580 --> 00:01:53,420 >> ครอบคลุมทุกวัสดุจาก 0 สัปดาห์ บรรยายสัปดาห์ที่แล้วในวันพุธที่ 41 00:01:53,420 --> 00:01:59,350 และอีกครั้งในการตอบคำถามนี้ต่อที่ เอกสารคุณจะได้รับหนึ่งในสองด้านและ 8 42 00:01:59,350 --> 00:02:03,770 1/2 โดย 11 แผ่นกระดาษที่คุณได้รับ เพื่อใช้เป็นบันทึกในระหว่างการทดสอบ 43 00:02:03,770 --> 00:02:08,570 หลายคนหากไม่ได้คนส่วนใหญ่มี พบว่าวิธีที่เป็นประโยชน์มากที่สุดคนหนึ่ง 44 00:02:08,570 --> 00:02:11,970 เพื่อการศึกษาสำหรับการทดสอบคือการ ทำให้แผ่นการศึกษา 45 00:02:11,970 --> 00:02:13,730 หนึ่งในหมู่ของพวกเขาเอง 46 00:02:13,730 --> 00:02:17,710 ดังนั้นมองไปที่คนที่ผ่านมาถ้า คุณเคยเห็นคนที่ผ่านมา 47 00:02:17,710 --> 00:02:19,960 เอื้อมมือออกไปเพื่อน ๆ ที่จะเห็นสิ่งที่ พวกเขากำลังวางบนพวกเขา 48 00:02:19,960 --> 00:02:23,610 >> แต่มือลงวิธีที่ดีที่สุดที่คุณสามารถ การศึกษาคือการไปผ่านทุกอย่างและ 49 00:02:23,610 --> 00:02:26,530 ลดลงมันลงไปในสิ่งที่ควรหรือไม่ควร ไม่ได้อยู่บนแผ่นที่ 50 00:02:26,530 --> 00:02:30,570 กระดาษเนื่องจากว่าเป็นเพียงจริงๆ วิธีที่เป็นประโยชน์สำหรับคุณเพื่อให้แน่ใจว่า 51 00:02:30,570 --> 00:02:33,620 คุณจะผ่านทุกอย่างและ มีความคุ้นเคยกับมันบาง 52 00:02:33,620 --> 00:02:36,690 คนส่วนใหญ่เราจะพบถึงแม้ว่าพวกเขา มีแผ่นกระดาษนั่งขวา 53 00:02:36,690 --> 00:02:39,840 ต่อไปกับพวกเขาในการตอบคำถามที่ไม่ได้เปิด ไปเพราะอีกครั้งที่มาก 54 00:02:39,840 --> 00:02:43,290 กระบวนการของการที่จะผ่านข้อมูล ได้ช่วยให้พวกเขาเรียนรู้มัน 55 00:02:43,290 --> 00:02:45,370 >> ไม่มีใครมีคำถามใด ๆ เกี่ยวกับคำถาม 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 มีทุกคน - 58 00:02:51,450 --> 00:02:53,230 ฉันจะไม่ทำแสดงของมือ 59 00:02:53,230 --> 00:02:53,550 ไม่เป็นไร 60 00:02:53,550 --> 00:02:54,790 ผมจะขอให้ผู้ที่ เริ่มเรียน 61 00:02:54,790 --> 00:02:58,360 แต่ผมไม่ต้องการที่จะทำให้คุณ ทั้งหมดไม่ได้ยกมือของคุณ 62 00:02:58,360 --> 00:03:01,290 ดังนั้นฉันต้องการกล่าวว่า - ใช่, AVI, ไปข้างหน้า 63 00:03:01,290 --> 00:03:04,205 >> AVI: สิ่งที่จะเป็นสิ่งที่มีประโยชน์ ใส่หนึ่งเพจเจอร์? 64 00:03:04,205 --> 00:03:05,875 >> นักเรียน: นั่นขึ้นอยู่กับคุณ 65 00:03:05,875 --> 00:03:08,210 >> เจสัน Hirschhorn: คุณจะได้รับ ใช้วิจารณญาณของคุณ 66 00:03:08,210 --> 00:03:13,220 สิ่งที่มีประโยชน์ที่จะนำมาหนึ่งเพจเจอร์ ถ้าคุณกำลังสับสนเกี่ยวกับ O ใหญ่ 67 00:03:13,220 --> 00:03:17,510 runtime ประเภทที่แตกต่างกันของการค้นหา และทุกประเภทใส่ว่ามีใน 68 00:03:17,510 --> 00:03:18,760 แผนภูมิสำรวยมีประโยชน์ 69 00:03:18,760 --> 00:03:22,250 วิธีการที่ถ้าคุณถามว่าเมื่อวันที่ แบบทดสอบคุณไม่ต้องพยายามร่าง 70 00:03:22,250 --> 00:03:23,560 มันออกมาหรือเหตุผลผ่านรันไทม์ 71 00:03:23,560 --> 00:03:24,730 คุณก็สามารถคัดลอกมันลง 72 00:03:24,730 --> 00:03:28,320 ถ้าคุณดูที่แบบทดสอบผ่านมาจำนวนมาก ครั้งมีคำถามเวลาที่ทำงาน 73 00:03:28,320 --> 00:03:34,150 เพื่อที่จะเป็นตัวอย่างที่ดีของ สิ่งที่จะต้องวางอยู่บนหนึ่งในเพจเจอร์ของคุณ 74 00:03:34,150 --> 00:03:37,450 >> สิ่งที่ดีอื่น ๆ ที่จะนำมาถ้าคุณ สับสนเกี่ยวกับวิธีการประกาศ 75 00:03:37,450 --> 00:03:40,570 ฟังก์ชั่นหรือสิ่งที่ชิ้นส่วนที่แตกต่างกันของ การประกาศฟังก์ชันที่มีการเขียน 76 00:03:40,570 --> 00:03:43,400 ว่ามีรุ่นทั่วไป แล้วอาจจะยกตัวอย่างเช่น 77 00:03:43,400 --> 00:03:47,290 หากคุณกำลังสับสนเกี่ยวกับตัวชี้ แผนภาพของวิธีการทำงานเป็นตัวชี้ 78 00:03:47,290 --> 00:03:48,660 อาจจะเป็นประโยชน์จริงๆ 79 00:03:48,660 --> 00:03:52,440 หากคุณกำลังสับสนเกี่ยวกับการเรียกซ้ำ ตัวอย่างฟังก์ชันเวียนเกิดที่มี 80 00:03:52,440 --> 00:03:54,980 นอกจากนี้ยังสามารถพิสูจน์ให้เป็นประโยชน์จริงๆ 81 00:03:54,980 --> 00:03:57,290 ไม่ที่ให้คุณความคิดบางอย่าง 82 00:03:57,290 --> 00:04:01,820 >> AVI: คุณจำเป็นต้องเข้าใจ กระบวนการรวบรวมทั้งหมดเช่น 83 00:04:01,820 --> 00:04:03,220 วิธีการที่ว่าผลงานทั้งหมดหรือไม่ 84 00:04:03,220 --> 00:04:06,620 >> เจสัน Hirschhorn: ทุกอย่าง ที่ได้รับการคุ้มครองได้ 85 00:04:06,620 --> 00:04:08,060 ปรากฏขึ้นในการตอบคำถาม 86 00:04:08,060 --> 00:04:08,930 คำถาม - 87 00:04:08,930 --> 00:04:11,300 แต่อีกครั้งบางสิ่งบางอย่างที่จะเป็น น้ำหนักมากกว่าคนอื่น ๆ 88 00:04:11,300 --> 00:04:14,330 บางสิ่งบางอย่างได้เกิดขึ้นอีกครั้ง และอีกครั้งในชั้นเรียนใน 89 00:04:14,330 --> 00:04:15,590 การบรรยายและส่วน 90 00:04:15,590 --> 00:04:17,220 สิ่งอื่น ๆ ที่ไม่ได้มี มาที่มักจะ 91 00:04:17,220 --> 00:04:22,900 >> เราได้พูดคุยกันมากเกี่ยวกับการรวมและ # l-บางสิ่งบางอย่างและสิ่งที่หมายถึงใน 92 00:04:22,900 --> 00:04:24,390 การรวบรวม 93 00:04:24,390 --> 00:04:29,120 เราได้พูดคุยกันมากเกี่ยวกับ GDB, ยึด, ธงที่แตกต่างกันที่เราใช้เมื่อ 94 00:04:29,120 --> 00:04:33,100 เรารวบรวมสิ่งที่และสิ่งที่ make15 เช่นจริงๆ 95 00:04:33,100 --> 00:04:34,510 หมายถึงและจริงๆไม่ 96 00:04:34,510 --> 00:04:38,110 เรายังไม่ได้พูดคุยมากเกี่ยวกับ ทุกขั้นตอนเดียวใน 97 00:04:38,110 --> 00:04:39,240 การรวบรวม 98 00:04:39,240 --> 00:04:40,410 เราได้พูดคุยเกี่ยวกับเรื่องนี้ยังคง 99 00:04:40,410 --> 00:04:42,550 ดังนั้นจึงยังคงมีบางสิ่งบางอย่างที่คุณ ควรจะคุ้นเคยกับ 100 00:04:42,550 --> 00:04:44,610 แต่อีกครั้งที่เราจะไม่ได้ - 101 00:04:44,610 --> 00:04:49,140 สิ่งที่เกิดขึ้นบ่อยครั้งมากขึ้นในชั้นเรียน มีแนวโน้มที่จะเกิดขึ้นมากขึ้น 102 00:04:49,140 --> 00:04:52,495 และมักจะเป็นมากขึ้น ถ่วงน้ำหนักในการตอบคำถาม 103 00:04:52,495 --> 00:04:53,280 >> เย็น 104 00:04:53,280 --> 00:04:54,580 คำถามอื่น ๆ เกี่ยวกับการทดสอบ 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> ตกลงดังนั้นฉันใส่รายชื่อของ หัวข้อบนกระดาน 107 00:05:00,050 --> 00:05:01,550 ฉันก็ผ่านหลักสูตร 108 00:05:01,550 --> 00:05:07,340 ฉันเดินผ่านส่วนความคิดเห็นจาก เมื่อคืนที่ผ่านและภาพนิ่งเหล่านั้นที่จะเกิดขึ้น 109 00:05:07,340 --> 00:05:13,710 กับรายการที่ไม่ครบถ้วนสมบูรณ์ของหัวข้อ ที่เราได้รับการคุ้มครองเพื่อให้ห่างไกลใน CS50 110 00:05:13,710 --> 00:05:16,800 และสิ่งที่อาจ ปรากฏในการตอบคำถาม 111 00:05:16,800 --> 00:05:19,900 ดังนั้นฉันจะไม่ผ่านไป ทุกหนึ่งเดียวของเหล่านี้ 112 00:05:19,900 --> 00:05:22,370 ที่จะใช้เวลามากขึ้น เวลากว่าที่เรามีตอนนี้ 113 00:05:22,370 --> 00:05:26,880 แต่ผมใส่นี้ขึ้นที่นี่เพื่อหวังเขย่าเบา ๆ หน่วยความจำของคุณเป็นสิ่งที่อาจจะ 114 00:05:26,880 --> 00:05:28,420 หรืออาจจะไม่เป็นที่คุ้นเคยกับคุณ 115 00:05:28,420 --> 00:05:32,850 >> และฉันชอบที่จะใช้จ่ายเป็นจำนวนมาก ส่วนการตอบคำถามเกี่ยวกับ 116 00:05:32,850 --> 00:05:35,130 เหล่านี้หัวข้อหัวข้อที่ ไม่ได้ครอบคลุมที่นี่ 117 00:05:35,130 --> 00:05:36,130 เราสามารถเขียนรหัสเทียม 118 00:05:36,130 --> 00:05:40,010 เราสามารถเขียนโค้ดจริง เพื่อให้แน่ใจว่าคุณ - 119 00:05:40,010 --> 00:05:44,280 ฉันสามารถตอบคำถามของคุณและช่วยให้ ทุกคนเข้าใจพื้นฐาน 120 00:05:44,280 --> 00:05:48,330 จำนวนมากของหัวข้อเหล่านี้เพื่อให้คุณจะรู้สึก เตรียมความพร้อมและความสะดวกสบายที่จะเข้าสู่ 121 00:05:48,330 --> 00:05:50,150 ในวันพรุ่งนี้ทดสอบ 122 00:05:50,150 --> 00:05:52,300 ดังนั้นอ่านผ่านรายการ 123 00:05:52,300 --> 00:05:54,780 คุณหวังว่าจะได้มาส่วน กับคำถามบางส่วนเช่นกัน 124 00:05:54,780 --> 00:05:58,480 เมื่อคุณพร้อมที่จะยกมือของคุณ และเราจะเริ่มต้น 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> เก็บไว้ในใจคำถามที่คุณมี ไม่มีคำถามโง่ 127 00:06:05,200 --> 00:06:06,250 เราเคยได้ยินว่าจำนวนมาก 128 00:06:06,250 --> 00:06:09,490 และคำถามที่คุณมีและฉันยินดีที่ การเดิมพันที่คนอื่น ๆ อีกมากมายทั้ง 129 00:06:09,490 --> 00:06:11,740 นั่งอยู่ที่นี่และดู ออนไลน์ได้เป็นอย่างดี 130 00:06:11,740 --> 00:06:13,770 ดังนั้นคุณจะสามารถช่วยให้ผู้คน โดยการถามคำถาม 131 00:06:13,770 --> 00:06:15,070 มาร์คัส 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: ระหว่างกองและ กองจะมีก่อนการจัดสรร 133 00:06:18,040 --> 00:06:22,880 ร้อยละของหน่วยความจำที่กำหนดให้เป็น นี้สำหรับกองหรือกองหรือไม่ 134 00:06:22,880 --> 00:06:25,010 หรือวิธีการทำงานที่ว่า? 135 00:06:25,010 --> 00:06:26,230 >> เจสัน Hirschhorn: Great คำถาม 136 00:06:26,230 --> 00:06:28,640 ฉันจะกลับมาติดตามนิด ๆ หน่อย ๆ 137 00:06:28,640 --> 00:06:30,910 ไม่ทุกคน - 138 00:06:30,910 --> 00:06:31,660 กรุณาซื่อสัตย์ที่นี่ 139 00:06:31,660 --> 00:06:34,130 ฉันรู้ว่าฉันขอให้คุณที่จะยกระดับของคุณ มือในหน้าของเพื่อนของคุณ 140 00:06:34,130 --> 00:06:38,510 แต่จะมีคนที่รู้สึก อึดอัดกับกองและกอง 141 00:06:38,510 --> 00:06:42,980 และต้องการที่จะไปกว่าที่ และสิ่งเหล่านั้นหมายถึงอะไร 142 00:06:42,980 --> 00:06:43,880 ยกมือของคุณหาก - 143 00:06:43,880 --> 00:06:44,420 ตกลง 144 00:06:44,420 --> 00:06:45,120 ขอบคุณ 145 00:06:45,120 --> 00:06:48,420 ดังนั้นเราจะไปกว่ากองและ กองอย่างรวดเร็วจริงๆแล้ว 146 00:06:48,420 --> 00:06:50,370 ย้ายเข้ามาตอบคำถามของคุณ 147 00:06:50,370 --> 00:06:58,250 >> ดังนั้นหากเราวาดออกจากกล่องที่จะเป็นตัวแทน หน่วยความจำในคอมพิวเตอร์ของคุณสิ่งที่บาง 148 00:06:58,250 --> 00:07:02,160 สิ่งที่ไปในกล่องนี้ 149 00:07:02,160 --> 00:07:03,630 หลัก 150 00:07:03,630 --> 00:07:04,020 ฟังก์ชั่นหลัก 151 00:07:04,020 --> 00:07:05,890 ที่ไม่สำคัญไป 152 00:07:05,890 --> 00:07:08,090 >> นักเรียน: [ไม่ได้ยิน] 153 00:07:08,090 --> 00:07:09,390 >> เจสัน Hirschhorn: ดังนั้นเราจะ วางหลักลงที่นี่ 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 อะไรที่จะไปในกล่องนี้ 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> นักเรียน: ฟังก์ชั่นที่คุณเรียก 158 00:07:18,140 --> 00:07:19,020 >> เจสัน Hirschhorn: ฟังก์ชั่น ที่เราเรียกว่า 159 00:07:19,020 --> 00:07:20,440 และพวกเขาจะไปอยู่ที่ไหน 160 00:07:20,440 --> 00:07:21,300 >> นักศึกษา: ในกอง 161 00:07:21,300 --> 00:07:22,380 >> เจสัน Hirschhorn: พวกเขา ไปในกอง 162 00:07:22,380 --> 00:07:27,350 ดังนั้นเรากำลังจะเรียกสิ่งนี้ว่า สิ่งที่ลงที่นี่กอง 163 00:07:27,350 --> 00:07:31,880 และขึ้นด้านบนเรามีกอง 164 00:07:31,880 --> 00:07:35,450 ดังนั้นหน่วยความจำไม่ได้เป็นเช่นเดียวกับกล่องนี้ 165 00:07:35,450 --> 00:07:37,330 แต่มันเป็นจริงสวยเหมือนกัน 166 00:07:37,330 --> 00:07:40,840 มันจะเป็นจำนวนมากของกล่องกว่า ขึ้นไปขึ้นอยู่กับว่าขนาดใหญ่ของคุณ 167 00:07:40,840 --> 00:07:43,730 คอมพิวเตอร์หรือวิธีการใหญ่หน่วยความจำของคุณ 168 00:07:43,730 --> 00:07:46,950 >> ที่ได้นำมาอ้างอ้าง-"ด้านล่าง" เป็นกอง 169 00:07:46,950 --> 00:07:50,880 และมีสิ่งที่หลาย ๆ ที่ไปในกอง 170 00:07:50,880 --> 00:07:53,840 และผู้ที่ขึ้นอยู่กับฟังก์ชั่น ที่คุณมีในรหัสของคุณ 171 00:07:53,840 --> 00:07:57,780 คุณมักจะมีฟังก์ชั่นหนึ่งในของคุณ รหัสเรียกว่าหลักจึงมีเสมอ 172 00:07:57,780 --> 00:08:00,480 ส่วนลงที่นี่ใน สแต็คที่ทุ่มเทให้กับหลัก 173 00:08:00,480 --> 00:08:03,980 >> ส่วนเหล่านี้ในกอง จะเรียกว่ากองเฟรม 174 00:08:03,980 --> 00:08:09,580 เมื่อคุณเรียกใช้ฟังก์ชันอื่นพูดหลัก เรียกฟังก์ชันการค้นหาแบบไบนารี 175 00:08:09,580 --> 00:08:11,075 เราใส่กรอบอื่นในกอง 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 โดยเฉพาะอย่างยิ่งเราจะไป บริจาคก้อนของหน่วยความจำของเรา 178 00:08:17,320 --> 00:08:22,960 คอมพิวเตอร์ในการจัดเก็บค้นหาแบบไบนารีท้องถิ่น ตัวแปรและเรียกใช้ไบนารี 179 00:08:22,960 --> 00:08:24,150 รหัสการค้นหา 180 00:08:24,150 --> 00:08:26,810 >> ดังนั้นเราจึงเรียกค้นหาแบบไบนารี 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 ในหน่วยความจำอันนี้เรากำลังจะ ในการจัดเก็บตัวแปรท้องถิ่นของตน 183 00:08:33,340 --> 00:08:35,270 เรากำลังจะไปเก็บสาย printf ของ 184 00:08:35,270 --> 00:08:38,159 สิ่งที่เกิดขึ้นฟังก์ชั่นที่เป็น จะถูกเก็บไว้ที่นั่น 185 00:08:38,159 --> 00:08:40,350 ค้นหา binary เป็นไปที่จะดำเนินการ 186 00:08:40,350 --> 00:08:42,210 มันเป็นไปเพื่อให้การดำเนินการ 187 00:08:42,210 --> 00:08:47,450 เป็นคำใน C สิ่งที่หมาย ฟังก์ชั่นที่ควร 188 00:08:47,450 --> 00:08:49,306 เสร็จสิ้นการดำเนินการได้อย่างไร 189 00:08:49,306 --> 00:08:50,040 >> นักเรียน: กลับมา 190 00:08:50,040 --> 00:08:50,870 >> เจสัน Hirschhorn: กลับมา 191 00:08:50,870 --> 00:08:53,230 ดังนั้นเมื่อใดก็ตามที่คุณเห็นคำสั่งกลับให้ สิ้นสุดการทำงาน 192 00:08:53,230 --> 00:08:54,350 เมื่อความนิยมที่ 193 00:08:54,350 --> 00:08:56,740 ค้นหาเพื่อไบนารีจะตีกลับ 194 00:08:56,740 --> 00:09:01,360 เป็นส่วนหนึ่งของหน่วยความจำนี้จะเป็นหลัก เป็นอิสระขึ้น 195 00:09:01,360 --> 00:09:03,510 และที่สำคัญจะกลับไปดำเนินการ 196 00:09:03,510 --> 00:09:07,240 ดังนั้นหลักจะหยุดที่ใดก็ตามที่เป็นโทร ค้นหาแบบไบนารีได้รับค่าตอบแทนบางส่วน 197 00:09:07,240 --> 00:09:08,700 และดำเนินต่อไป 198 00:09:08,700 --> 00:09:10,840 กรอบกองนี้จะหายไป 199 00:09:10,840 --> 00:09:14,810 >> ถ้าเราเรียกฟังก์ชัน recursive ซึ่ง เป็นฟังก์ชันที่เรียกตัวเองกว่า 200 00:09:14,810 --> 00:09:18,480 และมากกว่าที่เราอาจจะได้รับ - บอกว่าเรา ได้ค้นหาไบนารีซ้ำ 201 00:09:18,480 --> 00:09:21,520 เราอาจจะได้รับรุ่นค้นหา binary หนึ่ง ค้นหาแบบไบนารีสองค้นหาแบบไบนารี 202 00:09:21,520 --> 00:09:24,090 สามค้นหาแบบไบนารีสี่ ค้นหาแบบไบนารีห้า 203 00:09:24,090 --> 00:09:27,950 แล้วนี้ค้นหา binary สุดท้ายห้า จะตีกรณีฐานและสแต็ค 204 00:09:27,950 --> 00:09:31,010 เฟรมจะกลับไปและให้ปิด จนกว่าเราจะได้รับกลับไปที่หลัก 205 00:09:31,010 --> 00:09:32,530 เราสามารถไปกว่าการเรียกซ้ำในบิต 206 00:09:32,530 --> 00:09:35,530 แต่ทั้งหมดนี้คือการบอกว่าถ้าคุณ การเรียกฟังก์ชั่นหลายครั้ง 207 00:09:35,530 --> 00:09:39,250 จะมีหลายกอง เฟรมในกอง 208 00:09:39,250 --> 00:09:42,900 >> กองในมืออื่น ๆ เพิ่มขึ้น ที่นี่ไม่ได้สำหรับฟังก์ชั่น 209 00:09:42,900 --> 00:09:44,380 ไม่ได้สำหรับตัวแปรท้องถิ่น 210 00:09:44,380 --> 00:09:48,920 มันสำหรับจัดสรรแบบไดนามิก ตัวแปร 211 00:09:48,920 --> 00:09:57,210 ดังนั้นเหล่านี้เป็นตัวแปรที่สามารถ เริ่มต้นได้ในอย่างใดอย่างหนึ่งหลักหรือ 212 00:09:57,210 --> 00:09:58,640 ทำงานที่สายหลัก 213 00:09:58,640 --> 00:10:00,790 ที่ใดก็ได้ในรหัสของพวกเขา สามารถเริ่มต้นได้ 214 00:10:00,790 --> 00:10:04,360 ในการเริ่มต้นและแบบไดนามิก ตัวแปรจัดสรร 215 00:10:04,360 --> 00:10:06,970 เราทำในสิ่งที่ฟังก์ชั่นใน C ใช้งานหรือไม่ 216 00:10:06,970 --> 00:10:07,600 >> นักเรียน: Malloc 217 00:10:07,600 --> 00:10:09,240 >> เจสัน Hirschhorn: Malloc 218 00:10:09,240 --> 00:10:10,800 คุณโทร malloc 219 00:10:10,800 --> 00:10:12,260 คุณจะได้รับพื้นที่ของหน่วยความจำ 220 00:10:12,260 --> 00:10:15,020 และพื้นที่ของหน่วยความจำที่ อยู่บนกอง 221 00:10:15,020 --> 00:10:18,840 และพื้นที่ของหน่วยความจำที่อยู่ จนกว่าจะมีคุณโทรฟรี 222 00:10:18,840 --> 00:10:22,670 >> ดังนั้นตัวแปรจัดสรรแบบไดนามิกใน กองจะอยู่ได้นานเท่าที่คุณ 223 00:10:22,670 --> 00:10:25,250 ต้องการให้พวกเขาอยู่และพวกเขาจะไม่ ไปจนกว่าคุณจะ 224 00:10:25,250 --> 00:10:26,760 บอกพวกเขาหายไป 225 00:10:26,760 --> 00:10:29,670 คุณสามารถสร้างพวกเขาในการทำงานอย่างใดอย่างหนึ่ง 226 00:10:29,670 --> 00:10:31,930 สแต็คที่ฟังก์ชั่นที่ กรอบจะหายไป 227 00:10:31,930 --> 00:10:35,490 แต่ตัวแปรที่จะยังคงมีอยู่ ในกองจนกว่าจะมีการปลดปล่อย 228 00:10:35,490 --> 00:10:39,650 ที่อาจเกิดขึ้นโดยการทำงานที่เรียกว่า ค้นหาแบบไบนารีหรืออะไรก็ตาม 229 00:10:39,650 --> 00:10:42,580 >> ดังนั้นผู้ตัวแปรที่กองอยู่ที่นั่น ให้นานที่สุดเท่าที่คุณต้องการ 230 00:10:42,580 --> 00:10:43,490 พวกเขาจะอยู่ที่นั่น 231 00:10:43,490 --> 00:10:46,090 และพวกเขาได้รับการใส่ที่นี่ 232 00:10:46,090 --> 00:10:47,450 แล้วที่หน้าหนึ่งได้รับการวางมี 233 00:10:47,450 --> 00:10:50,210 พวกเขาให้ได้รับการเติมเต็มในและพวกเขา อยู่ที่นั่นจนคุณโทรฟรี 234 00:10:50,210 --> 00:10:52,870 >> และเป็นหลักกองและกอง ได้รับคำถามของ Marcus, 235 00:10:52,870 --> 00:10:54,500 เติบโตต่อกันและกัน 236 00:10:54,500 --> 00:10:57,730 และถ้าพวกเขาทำงานเป็นอีกคนหนึ่งที่คุณได้ ใช้เพิ่มหน่วยความจำของคุณใน 237 00:10:57,730 --> 00:11:01,330 คอมพิวเตอร์และโปรแกรมของคุณจะออกจาก เพราะคุณไม่ได้มีหน่วยความจำที่มากขึ้น 238 00:11:01,330 --> 00:11:02,420 เหลือที่จะใช้ 239 00:11:02,420 --> 00:11:07,290 ในระหว่างที่พวกเขามี สิ่งอื่น ๆ ที่อาจเกิดขึ้น 240 00:11:07,290 --> 00:11:10,980 แต่สำหรับขอบเขตของหลักสูตรนี้คุณ ไม่จำเป็นต้องกังวลเกี่ยวกับการที่ 241 00:11:10,980 --> 00:11:12,020 >> เพื่อให้เป็นคำตอบ กับคำถามของคุณ 242 00:11:12,020 --> 00:11:13,520 ไม่ต้องเป็นห่วงนะ 243 00:11:13,520 --> 00:11:15,550 แต่นั่นก็เป็นคำตอบที่ยาว 244 00:11:15,550 --> 00:11:17,800 ทั้งหมดที่คุณต้องรู้คือ กองและสแต็คจะ - 245 00:11:17,800 --> 00:11:18,900 หนึ่งเริ่มที่ด้านล่าง 246 00:11:18,900 --> 00:11:19,570 กองไม่ 247 00:11:19,570 --> 00:11:20,790 กองที่มีขึ้น 248 00:11:20,790 --> 00:11:21,990 พวกเขาจะเติบโตใกล้ชิดกับอีกคนหนึ่ง 249 00:11:21,990 --> 00:11:23,110 >> และถ้าพวกเขาสัมผัสที่เป็นปัญหา 250 00:11:23,110 --> 00:11:24,500 คุณวิ่งออกมาจากหน่วยความจำ 251 00:11:24,500 --> 00:11:28,760 แต่ก็ยังมีนอกเหนือไปจากการรู้ที่ พวกเขามีสิ่งที่จะถูกเก็บไว้ทั้งใน 252 00:11:28,760 --> 00:11:30,512 กองและกอง 253 00:11:30,512 --> 00:11:31,410 เคอร์ติ 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: เมื่อพวกเขาชนกัน คือการที่กองล้นหรือไม่ 255 00:11:33,570 --> 00:11:35,670 >> เจสัน Hirschhorn: เมื่อพวกเขาชนกัน ที่ไม่ล้นกอง 256 00:11:35,670 --> 00:11:38,340 กองล้นเป็นพื้นที่ที่แตกต่างกัน ที่เราสามารถไปกว่าถ้าคุณต้องการที่จะ 257 00:11:38,340 --> 00:11:40,020 ตกลงเราจะกลับมาที่ว่าในบิต 258 00:11:40,020 --> 00:11:42,730 >> นักเรียน: อะไรคือคำที่เรียกว่า เมื่อพวกเขาตีกัน 259 00:11:42,730 --> 00:11:44,450 กองและกองหรือไม่ 260 00:11:44,450 --> 00:11:46,640 >> เจสัน Hirschhorn: สำหรับตอนนี้ ไม่ต้องกังวลเกี่ยวกับ 261 00:11:46,640 --> 00:11:47,750 เพิ่งรู้ - 262 00:11:47,750 --> 00:11:50,530 ฉันจะตอบคำถามว่า หลังเลิกเรียน 263 00:11:50,530 --> 00:11:52,680 ถ้าพวกเขาวิ่งเข้ามาในแต่ละอื่น ๆ ที่คุณวิ่งออกมา ของหน่วยความจำเพราะมีไม่มาก 264 00:11:52,680 --> 00:11:53,330 มีพื้นที่ 265 00:11:53,330 --> 00:11:55,450 >> นักเรียน: ขออภัยสิ่งที่เป็นความผิด seg ของ? 266 00:11:55,450 --> 00:11:58,710 >> เจสัน Hirschhorn: ส่วน ความผิดพลาดสามารถเรียกว่าสำหรับ - 267 00:11:58,710 --> 00:12:02,240 มันขึ้นอยู่กับว่าทำไมความผิด seg ของที่เรียกว่า 268 00:12:02,240 --> 00:12:06,260 บางครั้งกองล้นของคุณก็จะ กล่าวว่าความผิดพลาดเป็นข้อผิด seg ของ 269 00:12:06,260 --> 00:12:08,180 >> นักเรียน: สิ่งที่เกี่ยวกับ dereferencing null ตัวแปร? 270 00:12:08,180 --> 00:12:10,040 คือความผิด seg ของ? 271 00:12:10,040 --> 00:12:11,480 >> เจสัน Hirschhorn: dereferencing null ตัวชี้ - 272 00:12:11,480 --> 00:12:17,850 ตกลงดังนั้นถ้าคุณมีตัวชี้ที่คุณ ตั้งค่าเท่ากับโมฆะตัวชี้จำ 273 00:12:17,850 --> 00:12:20,270 อยู่หน่วยความจำเก็บ เป็นค่าของพวกเขา 274 00:12:20,270 --> 00:12:23,660 และตัวชี้โมฆะเป็นหลัก การจัดเก็บ 0, 0 th- 275 00:12:23,660 --> 00:12:26,670 ที่อยู่ในตัวแปรที่ 276 00:12:26,670 --> 00:12:30,010 ดังนั้น 0x, 0, 0, 0, 0, และอื่น ๆ 277 00:12:30,010 --> 00:12:35,030 ที่อยู่ 0 th-ในความทรงจำที่ไม่ ในภาพของเราที่มีขึ้น 278 00:12:35,030 --> 00:12:38,800 ที่ไหนสักแห่งที่สงวนไว้ สำหรับคอมพิวเตอร์ 279 00:12:38,800 --> 00:12:40,130 เราไม่ได้รับอนุญาตให้สัมผัสมัน 280 00:12:40,130 --> 00:12:44,680 >> ดังนั้นเมื่อโปรแกรมของคุณรันถ้า สิ่งที่พยายามที่จะไปที่หน่วยความจำ 281 00:12:44,680 --> 00:12:48,990 ที่อยู่ 0 มันรู้ว่า ที่เป็นค่าว่าง 282 00:12:48,990 --> 00:12:50,820 มันรู้อะไรที่ควรจะมี 283 00:12:50,820 --> 00:12:53,420 ดังนั้นถ้าคุณพยายามและใช้สิ่งที่มี และรักษาสิ่งที่ต้องการหรือมี 284 00:12:53,420 --> 00:12:58,355 พยายามที่จะไปยังตำแหน่งที่คุณอยู่ จะได้รับความผิด seg ของหรือข้อผิดพลาด 285 00:12:58,355 --> 00:13:00,520 ไม่ว่าจะตอบคำถามของคุณหรือไม่ 286 00:13:00,520 --> 00:13:03,170 >> และตอนนี้เราจะกลับไป กองล้น 287 00:13:03,170 --> 00:13:09,560 สิ่งที่อยู่ในสแต็คที่พวกคุณมี เห็นมาก่อนใน - ขอวาดใกล้ชิด 288 00:13:09,560 --> 00:13:11,966 ขึ้นจากกรอบสแต็ค 289 00:13:11,966 --> 00:13:15,050 ทุกคนจะเห็นว่า? 290 00:13:15,050 --> 00:13:16,650 ดังนั้นเราจึงมีกรอบสแต็คของเรา 291 00:13:16,650 --> 00:13:23,260 เรากำลังบันทึกอาร์เรย์ในท้องถิ่นเป็น ตัวแปรในการทำงานนี้ 292 00:13:23,260 --> 00:13:29,510 ดังนั้นพูดอาร์เรย์ของเรามีห้าจุด 293 00:13:29,510 --> 00:13:33,230 ทั้งห้าของผู้ที่จะถูกเก็บไว้ ในกรอบกองที่ 294 00:13:33,230 --> 00:13:37,540 >> ถ้าเราเริ่มเขียนเกิน ขอบเขตของอาร์เรย์นี้ - 295 00:13:37,540 --> 00:13:43,990 ดังนั้นหากเราเริ่มต้นการเขียนลง ขอบอกว่าเป็น 0 296 00:13:43,990 --> 00:13:46,800 ผู้ที่มีห้าดัชนี ของอาเรย์ของเรา 297 00:13:46,800 --> 00:13:50,980 ถ้าเราเริ่มเขียนเป็นดัชนีที่ 5 ซึ่ง เราไม่ได้มีเวลาที่เรามี 298 00:13:50,980 --> 00:13:55,900 อาร์เรย์ของขนาด 5 เราเริ่มเขียนลงใน ดัชนีที่ 6, 7, 8, 9, เราจะได้รับกอง 299 00:13:55,900 --> 00:13:57,960 ข้อผิดพลาดมากเกิน 300 00:13:57,960 --> 00:14:00,510 >> โดยทั่วไปก็ไม่ได้ - 301 00:14:00,510 --> 00:14:04,910 คุณอาจจะได้รับเป็นปัญหา ถ้าคุณไปกว่าหนึ่ง 302 00:14:04,910 --> 00:14:08,640 แต่โดยทั่วไปแล้วคุณจะได้รับเป็น ปัญหาส่วนใหญ่ถ้าคุณไปกว่าโดยการจับสลาก 303 00:14:08,640 --> 00:14:12,770 และคุณจะไปไกลกว่าที่คุณเขียน ในช่วงที่อยู่ที่การกลับมาของ 304 00:14:12,770 --> 00:14:16,080 ฟังก์ชั่นซึ่งตั้งอยู่ที่ ด้านล่างของกรอบสแต็ค 305 00:14:16,080 --> 00:14:16,520 >> เพราะใช่มั้ย? 306 00:14:16,520 --> 00:14:17,670 คุณ - ใน - ขอโทษ 307 00:14:17,670 --> 00:14:18,550 ไม่ได้ "เพราะขวา." 308 00:14:18,550 --> 00:14:20,470 >> ในกรอบสแต็คที่คุณมี ตัวแปรท้องถิ่นของคุณ 309 00:14:20,470 --> 00:14:27,090 ที่ด้านล่างสุดของกอง กรอบเป็นที่อยู่ผู้ส่ง 310 00:14:27,090 --> 00:14:28,790 นั่นคือสิ่งที่ฟังก์ชั่น ไปเมื่อมันมากกว่า 311 00:14:28,790 --> 00:14:33,750 และถ้าคุณเขียนทับกลับมาที่ อยู่แล้วเมื่อกองกรอบนี้ 312 00:14:33,750 --> 00:14:36,680 เมื่อคุณกำลังจะผ่านกอง กรอบและดำเนินการแต่ละบรรทัดคุณ 313 00:14:36,680 --> 00:14:40,350 จะไปยังที่อยู่ใหม่ของคุณกลับมา ที่เขียนมีแทน 314 00:14:40,350 --> 00:14:40,910 อย่างใดอย่างหนึ่งที่เกิดขึ้นจริง 315 00:14:40,910 --> 00:14:45,050 และนั่นคือวิธีที่เราได้เห็น การละเมิดความปลอดภัยบางอย่าง 316 00:14:45,050 --> 00:14:46,780 สามารถเกิดขึ้นได้กับคอมพิวเตอร์ 317 00:14:46,780 --> 00:14:52,760 >> ดังนั้นกองล้นในระยะสั้นคือเมื่อ คุณเขียนทับส่วนหนึ่งในกอง 318 00:14:52,760 --> 00:14:55,440 คุณควรที่จะใช้ในท้องถิ่น ตัวแปรที่คุณควรจะใช้และ 319 00:14:55,440 --> 00:14:58,070 โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มต้นการเขียนทับ สิ่งที่สำคัญเช่น 320 00:14:58,070 --> 00:14:59,100 กลับที่อยู่ 321 00:14:59,100 --> 00:15:00,090 และที่ที่คุณจะได้รับข้อผิดพลาด 322 00:15:00,090 --> 00:15:03,980 หรืออาจจะได้คุณสามารถเริ่มต้น แม้กระทั่งการเขียนลง - 323 00:15:03,980 --> 00:15:05,370 บอกว่าค้นหา binary เป็น สิทธิเหนือหลัก 324 00:15:05,370 --> 00:15:07,790 ถ้าคุณเขียนทับมากคุณ สามารถเขียนเป็นหลัก 325 00:15:07,790 --> 00:15:10,230 แต่โดยทั่วไปแล้วคุณจะได้รับข้อผิดพลาดก่อนที่จะ แล้วเนื่องจากคอมพิวเตอร์รู้ 326 00:15:10,230 --> 00:15:12,270 คุณกำลังทำสิ่งที่คุณ ไม่ควรทำ 327 00:15:12,270 --> 00:15:12,560 ใช่ 328 00:15:12,560 --> 00:15:13,910 >> นักเรียน: อะไรคือความแตกต่าง ระหว่างกองล้น 329 00:15:13,910 --> 00:15:16,940 และหน่วยความจำล้น? 330 00:15:16,940 --> 00:15:19,420 >> เจสัน Hirschhorn: หน่วยความจำล้น เป็นประเภททั่วไปมากขึ้น 331 00:15:19,420 --> 00:15:20,395 สิ่งที่ผมได้อธิบายเพียง 332 00:15:20,395 --> 00:15:22,610 >> นักศึกษา: ดังนั้นกองล้นเป็น ตัวอย่างของหน่วยความจำล้น 333 00:15:22,610 --> 00:15:23,420 >> เจสัน Hirschhorn: แน่นอน 334 00:15:23,420 --> 00:15:28,700 นี้เป็นอาร์เรย์เราสามารถคิดเป็น กันชนพื้นที่สำหรับสิ่งที่จะไปค่ะ 335 00:15:28,700 --> 00:15:30,600 นี้เป็นหน่วยความจำล้นกอง 336 00:15:30,600 --> 00:15:33,210 เราอาจจะมีหน่วยความจำล้นกอง 337 00:15:33,210 --> 00:15:36,870 ถ้ามีบัฟเฟอร์ซึ่งมักจะมี เป็นอาร์เรย์กองและเรา 338 00:15:36,870 --> 00:15:40,600 เขียนทับขอบเขตเหล่านั้นแล้วเราจะ มีหน่วยความจำล้นกอง 339 00:15:40,600 --> 00:15:44,870 >> ? และนอกเหนือขอบเขตของหลักสูตรนี้ พวกเขากำลังตรวจพบบิตที่แตกต่างกัน 340 00:15:44,870 --> 00:15:48,040 คอมไพเลอร์ที่มีความพิเศษ วิธีการตรวจสอบแต่ละ 341 00:15:48,040 --> 00:15:50,660 แต่หน่วยความจำล้นเป็นทั่วไปมากขึ้น ชนิดของสิ่งที่ฉันอธิบาย 342 00:15:50,660 --> 00:15:54,090 ซึ่งเป็นหน่วยความจำล้นกอง 343 00:15:54,090 --> 00:15:56,240 ไม่ว่าจะตอบคำถามของคุณหรือไม่ 344 00:15:56,240 --> 00:15:57,910 หวาน 345 00:15:57,910 --> 00:16:01,850 >> ได้มีคำถามอื่น ๆ ที่เกี่ยวข้อง ไปยังกองหรือกองหรือไม่ 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 ใช่ 348 00:16:05,510 --> 00:16:08,220 >> นักเรียน: ฉันรู้ว่าคุณต้องสายฟรี เพราะพวกเขาอยู่ในกอง 349 00:16:08,220 --> 00:16:09,305 และคุณไม่ต้องการที่จะรั่วไหลของหน่วยความจำ 350 00:16:09,305 --> 00:16:12,240 แต่คุณจะต้องเป็นอิสระตัวแปรทั่วโลก และสิ่งที่ต้องการที่ 351 00:16:12,240 --> 00:16:14,335 หรือพวกเขาเป็นอิสระโดยอัตโนมัติ 352 00:16:14,335 --> 00:16:15,700 >> เจสัน Hirschhorn: เป็นคำถามที่ดี 353 00:16:15,700 --> 00:16:22,340 ดังนั้นใน CS50.H เราจะสร้างสิ่งนี้ สำหรับคุณที่เรียกว่าสาย 354 00:16:22,340 --> 00:16:23,800 สตริงเป็นจริงคืออะไร 355 00:16:23,800 --> 00:16:24,810 >> นักเรียน: Char ดาว 356 00:16:24,810 --> 00:16:29,180 >> เจสัน Hirschhorn: ดาวถ่านชี้ กับตัวละครที่มีตัวชี้ไปยัง 357 00:16:29,180 --> 00:16:30,650 อาร์เรย์ของตัวอักษร 358 00:16:30,650 --> 00:16:32,210 นั่นคือสิ่งที่เป็นสตริง 359 00:16:32,210 --> 00:16:36,050 ดังนั้นเราจึงจำเป็นที่จะปลดปล่อยมันเพราะ GetString ซึ่งเราใช้มาก - 360 00:16:36,050 --> 00:16:38,370 ชื่อสตริงเท่ากับ GetString - 361 00:16:38,370 --> 00:16:43,560 ที่ mallocs สำหรับเราหน่วยความจำบางอย่างใน กองแล้วกลับชี้ไปยัง 362 00:16:43,560 --> 00:16:47,230 อักษรตัวแรกของที่ สตริงดาวถ่าน 363 00:16:47,230 --> 00:16:52,760 >> ดังนั้นประหนึ่งว่าถ้าคุณยังไม่ได้รับ เขียนฟรีที่ใด ๆ ของสายของคุณ 364 00:16:52,760 --> 00:16:55,600 ที่คุณได้เรียกว่าห่างไกลคุณมี การรั่วไหลของหน่วยความจำบาง 365 00:16:55,600 --> 00:16:57,430 แน่นอนว่าเรายังไม่ได้พูดคุยเกี่ยวกับ มันจึงไม่มีใครในอากาศ 366 00:16:57,430 --> 00:16:58,520 ปัญหาสำหรับการทำมัน 367 00:16:58,520 --> 00:16:59,980 แต่ก้าวไปข้างหน้าใช่ 368 00:16:59,980 --> 00:17:03,990 เมื่อคุณเรียก GetString คุณ mallocing พื้นที่บางส่วนในกอง 369 00:17:03,990 --> 00:17:07,640 และถ้าคุณไม่ได้โทรฟรีในภายหลังว่า สตริงคุณมีหน่วยความจำรั่ว 370 00:17:07,640 --> 00:17:09,440 ที่ตอบคำถามของคุณหรือไม่ 371 00:17:09,440 --> 00:17:10,606 >> ใช่ 372 00:17:10,606 --> 00:17:15,020 >> นักศึกษา: ดังนั้นจะทำอย่างไรที่เราจะใช้ ขวาฟรีก่อนที่จะกลับ? 373 00:17:15,020 --> 00:17:18,510 เหมือนอยู่ในขอบเขตของผมคิดว่าถ้า ที่เราพูดเช่น int main ภายใน 374 00:17:18,510 --> 00:17:24,410 ขอบเขตของรหัสที่ภายในนั้น วงเล็บปีกกาขวาก่อน - 375 00:17:24,410 --> 00:17:26,140 คุณรู้ว่าคุณต้องการ มักจะใส่กลับ 376 00:17:26,140 --> 00:17:27,950 คุณใส่ฟรีก่อนที่ 377 00:17:27,950 --> 00:17:31,000 >> เจสัน Hirschhorn: ดังนั้นคุณสามารถวางฟรี ทุกที่ที่คุณต้องการให้ฟรี 378 00:17:31,000 --> 00:17:33,810 เพราะสิ่งเหล่านี้จะถูกจัดสรรแบบไดนามิก ตัวแปรเพราะพวกเขาสามารถ 379 00:17:33,810 --> 00:17:39,170 อยู่นอกเหนือขอบเขตของโดยเฉพาะอย่างยิ่ง ฟังก์ชั่นถ้าคุณโทร malloc ใน 380 00:17:39,170 --> 00:17:44,140 ฟังก์ชั่นที่แยกจากกันตัวอย่างเช่น GetString คุณสามารถโทรฟรีในหลัก 381 00:17:44,140 --> 00:17:46,050 คุณไม่จำเป็นต้องที่จะเรียกว่า ในฟังก์ชั่นที่เฉพาะเจาะจง 382 00:17:46,050 --> 00:17:47,570 malloc ที่เรียกว่า 383 00:17:47,570 --> 00:17:50,340 แต่คุณไม่จำเป็นที่จะเรียกว่า ก่อนที่จะให้ผลตอบแทนหลัก 384 00:17:50,340 --> 00:17:51,120 >> และมันขึ้นอยู่จริงๆ 385 00:17:51,120 --> 00:17:54,960 มันขึ้นอยู่กับเหตุผลที่คุณ malloced ที่ พื้นที่ในสถานที่แรก 386 00:17:54,960 --> 00:17:57,320 บางคนจะเรียก ฟรีสวยได้อย่างรวดเร็ว 387 00:17:57,320 --> 00:17:59,220 บางคนจะได้โทรฟรีจนถึง ในตอนท้ายของโปรแกรมของพวกเขา 388 00:17:59,220 --> 00:18:00,660 และพวกเขาจะไปถึง และทุกอย่างฟรี 389 00:18:00,660 --> 00:18:03,597 มันขึ้นอยู่กับเหตุผลที่คุณจะเรียกว่า malloc 390 00:18:03,597 --> 00:18:11,270 >> นักเรียน: และสิ่งที่คุณจะพูดว่า ถ้าคุณเรียกใช้ GetString? 391 00:18:11,270 --> 00:18:13,320 คุณจะบอกว่าฟรีอะไร 392 00:18:13,320 --> 00:18:20,040 >> เจสัน Hirschhorn: ดังนั้นไวยากรณ์สำหรับฟรี เป็นเพียงฟรี paren เปิดปิด 393 00:18:20,040 --> 00:18:22,130 paren และชื่อของตัวชี้ 394 00:18:22,130 --> 00:18:26,410 ดังนั้นถ้าคุณเขียนชื่อสตริงเท่ากับ GetString คุณใส่ชื่อของที่นี่ 395 00:18:26,410 --> 00:18:27,760 นั่นคือชื่อของตัวชี้ 396 00:18:27,760 --> 00:18:30,570 และรู้ที่จะเป็นอิสระหน่วยความจำที่ 397 00:18:30,570 --> 00:18:33,920 >> นักศึกษา: ดังนั้นเมื่อมันเพิ่มหน่วยความจำที่ ชี้ยังคงชี้ไปยังสถานที่ที่ 398 00:18:33,920 --> 00:18:34,970 ในหน่วยความจำได้หรือไม่ 399 00:18:34,970 --> 00:18:39,020 หรือเป็นตัวชี้ยังอบของ อยู่ว่ามันชี้ไปที่ 400 00:18:39,020 --> 00:18:40,290 >> เจสัน Hirschhorn: เราควรพยายามที่ 401 00:18:40,290 --> 00:18:41,430 เราควรที่รหัส 402 00:18:41,430 --> 00:18:43,880 ลองกลับมาเมื่อเราได้รับการ รหัสรหัสและขอที่ 403 00:18:43,880 --> 00:18:46,000 และถ้าคุณต้องการที่จะคิดออกคำตอบ นั้นคุณยังสามารถรหัสที่ 404 00:18:46,000 --> 00:18:46,690 ขณะเดียวกัน 405 00:18:46,690 --> 00:18:49,100 แต่นั่นเป็นคำถามที่ดี 406 00:18:49,100 --> 00:18:53,480 >> นักเรียน: มันเป็นไปได้ที่จะ สิ่งที่ฟรีในไม่ช้าเกินไป 407 00:18:53,480 --> 00:18:58,530 เพื่อให้คุณยังคงจำเป็นต้องใช้สำหรับโปรแกรมของคุณ และคุณปลดปล่อยพื้นที่หน่วยความจำที่ 408 00:18:58,530 --> 00:18:59,200 >> เจสัน Hirschhorn: ใช่ 409 00:18:59,200 --> 00:19:03,020 มันเป็นไปได้ถ้าคุณบางอย่างฟรี แล้วคุณจะใช้มันอีกครั้งคุณจะ 410 00:19:03,020 --> 00:19:06,890 วิ่งเข้ามาในข้อผิดพลาด 411 00:19:06,890 --> 00:19:10,810 แต่ที่อยู่กับคุณเพราะคุณเป็นอิสระ บางสิ่งบางอย่างและจากนั้นก็เรียกได้ในภายหลัง 412 00:19:10,810 --> 00:19:13,940 เพื่อให้เป็นความผิดพลาดของโปรแกรม 413 00:19:13,940 --> 00:19:14,780 แต่ใช่ 414 00:19:14,780 --> 00:19:17,760 คุณสามารถเขียนว่า 415 00:19:17,760 --> 00:19:19,240 >> คำถามใด ๆ เพิ่มเติมเกี่ยวกับ - 416 00:19:19,240 --> 00:19:19,760 ใช่ 417 00:19:19,760 --> 00:19:22,820 >> นักศึกษา: ดังนั้นหากคุณควรจะเพียงแค่ อิสระโดยทั่วไปก่อนที่จะ 418 00:19:22,820 --> 00:19:25,490 โปรแกรมสิ้นสุดลงที่หมายความว่าถ้า โปรแกรมจะสิ้นสุดลงและคุณไม่ได้เป็นอิสระมัน 419 00:19:25,490 --> 00:19:27,580 หน่วยความจำที่ยังคงที่กำหนดหรือไม่ 420 00:19:27,580 --> 00:19:31,330 >> เจสัน Hirschhorn: ถ้าโปรแกรมของคุณจะสิ้นสุดลง และคุณลืมบางสิ่งบางอย่างที่จะเป็นอิสระแล้ว 421 00:19:31,330 --> 00:19:34,390 หน่วยความจำที่ได้รับการจัดสรรตลอด อายุการใช้งานของโปรแกรมของคุณ 422 00:19:34,390 --> 00:19:37,670 เมื่อโปรแกรมปิดอย่างสมบูรณ์ หน่วยความจำที่ไม่ได้ไป 423 00:19:37,670 --> 00:19:39,490 จะอยู่ที่นั่นตลอดไป 424 00:19:39,490 --> 00:19:42,080 คอมพิวเตอร์เป็นสมาร์ทพอที่จะรู้ ว่าเมื่อโปรแกรมปิดมัน 425 00:19:42,080 --> 00:19:46,440 ควรกำจัดทั้งหมดของหน่วยความจำที่ ที่เกี่ยวข้องกับโปรแกรมที่ 426 00:19:46,440 --> 00:19:51,240 >> แต่มีเครื่องมือที่คุณสามารถเรียกใช้ กับโปรแกรมการตรวจสอบถ้าเมื่อ 427 00:19:51,240 --> 00:19:54,720 โปรแกรมเสร็จแล้วคุณลืม ฟรีหน่วยความจำบาง 428 00:19:54,720 --> 00:19:57,960 และสำหรับปัญหาต่อไปของคุณที่ตั้ง ที่คุณจะใช้ malloc และการใช้ 429 00:19:57,960 --> 00:20:02,610 ตัวชี้ที่คุณจะทำงานนี้ โปรแกรมในโปรแกรมของคุณเพื่อดูว่า, 430 00:20:02,610 --> 00:20:06,530 เมื่อผลตอบแทนหลักคุณมีบาง สิ่งที่ถูกทิ้งไว้ unfreed 431 00:20:06,530 --> 00:20:09,130 >> ดังนั้นพวกเขาจะไม่อยู่ malloced ตลอดไปในเครื่องคอมพิวเตอร์ของคุณ 432 00:20:09,130 --> 00:20:11,720 ที่จะสิ้นเปลืองเพราะ อย่างรวดเร็วคอมพิวเตอร์ 433 00:20:11,720 --> 00:20:12,960 จะวิ่งออกมาจากหน่วยความจำ 434 00:20:12,960 --> 00:20:16,450 แต่ถ้าพวกเขาทำงานจนกว่าจะสิ้นสุดของคุณ โปรแกรมและพวกเขาไม่ได้เป็นอิสระของคุณและ 435 00:20:16,450 --> 00:20:20,260 โปรแกรมออกที่ยังคงเป็นปัญหา ว่าเครื่องมือนี้จะช่วยให้คุณอยู่ 436 00:20:20,260 --> 00:20:21,520 >> นักเรียนสินค้าที่ Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> เจสัน Hirschhorn: มันเป็น เรียกว่า Valgrind 438 00:20:22,910 --> 00:20:23,520 และคุณจะ - 439 00:20:23,520 --> 00:20:25,780 >> นักเรียน: แต่เราไม่จำเป็นต้องรู้ สำหรับคำถามที่ว่า? 440 00:20:25,780 --> 00:20:27,600 ฉันหมายความว่ามันได้รับการพูดคุยเกี่ยวกับ นิด ๆ หน่อย ๆ ในการบรรยาย 441 00:20:27,600 --> 00:20:33,600 >> เจสัน Hirschhorn: ดังนั้น Valgrind เป็นชื่อของเครื่องมือที่ 442 00:20:33,600 --> 00:20:37,180 รู้ว่าสิ่งที่มันไม่เป็น เพียงพอสำหรับการตอบคำถาม 443 00:20:37,180 --> 00:20:40,200 แต่คุณไม่ได้ใช้มันยังอยู่กับคุณ ปัญหาการตั้งค่าเพราะเราไม่ได้มี 444 00:20:40,200 --> 00:20:43,520 ชุดปัญหาที่ได้รับการจัดการอย่างชัดเจน ด้วย malloc หรือคุณใช้ malloc 445 00:20:43,520 --> 00:20:45,330 เพื่อให้คุณไม่ได้ใช้ Valgrind ยัง 446 00:20:45,330 --> 00:20:47,760 แต่คุณจะใช้งานได้เร็ว แทนที่จะในภายหลัง 447 00:20:47,760 --> 00:20:48,710 >> นักศึกษา: คุณสามารถทำซ้ำ สิ่งที่ Valgrind คืออะไร 448 00:20:48,710 --> 00:20:49,190 >> เจสัน Hirschhorn: ขอโทษ? 449 00:20:49,190 --> 00:20:51,240 >> นักศึกษา: คุณสามารถทำซ้ำสิ่งที่ วัตถุประสงค์ของการ Valgring คืออะไร 450 00:20:51,240 --> 00:20:53,100 >> เจสัน Hirschhorn: Valgrind คือชื่อ - 451 00:20:53,100 --> 00:20:59,890 เช่น GDB จะช่วยให้คุณแก้ปัญหาโปรแกรมของคุณ valgrind จะช่วยให้คุณคิดออกว่า 452 00:20:59,890 --> 00:21:03,210 สิ่งที่ยังไม่ได้รับการปลดปล่อย เมื่อโปรแกรมของคุณปิด 453 00:21:03,210 --> 00:21:05,110 ดังนั้นคุณจะใช้มันในโปรแกรมของคุณ 454 00:21:05,110 --> 00:21:09,230 และออกจากโปรแกรมของคุณและมันจะบอกว่า โปรแกรมของคุณเรียกว่า malloc จำนวนมากนี้ 455 00:21:09,230 --> 00:21:13,670 ครั้งสำหรับหลายไบต์นี้และคุณ เพียง แต่เรียกว่าฟรีนี้หลายครั้ง 456 00:21:13,670 --> 00:21:16,520 และเพื่อให้คุณซ้ายไบต์จำนวนมากเหล่านี้ โดยไม่ถูกปล่อยให้เป็นอิสระ 457 00:21:16,520 --> 00:21:18,050 หรือมันจะบอกคุณได้ทุกอย่างเป็นอิสระ 458 00:21:18,050 --> 00:21:19,070 งานที่ดี 459 00:21:19,070 --> 00:21:19,480 >> นักเรียน: OK 460 00:21:19,480 --> 00:21:21,060 และก็เรียกว่า Valgring? 461 00:21:21,060 --> 00:21:24,940 >> เจสัน Hirschhorn: V-A-L-G-R-I-N-D 462 00:21:24,940 --> 00:21:25,970 >> นักเรียน: คำถามเกี่ยวกับตัวชี้ 463 00:21:25,970 --> 00:21:30,080 เพื่อบอกว่าคุณได้ n ดารา x เท่ากับสิ่งที่ 464 00:21:30,080 --> 00:21:33,330 นั่นเท่ากับสิ่งที่คุณกำลังวาง นั่นคือสิ่งที่ถูกใส่ใน 465 00:21:33,330 --> 00:21:36,120 สิ่งที่ x จะชี้ไปยัง หรือตัวชี้ของ x? 466 00:21:36,120 --> 00:21:37,690 >> เจสัน Hirschhorn: คุณสามารถ ทำซ้ำคำถามหรือไม่ 467 00:21:37,690 --> 00:21:39,340 เราสามารถวาดมันในขณะที่คุณบอกว่ามันได้หรือไม่ 468 00:21:39,340 --> 00:21:42,710 >> นักเรียนในการทดสอบจริง คนที่คุณส่งให้เรามันเป็นเหมือนถ่าน 469 00:21:42,710 --> 00:21:46,520 ความจริงดาวเท่ากับหิน CS50 ใช่ไหม 470 00:21:46,520 --> 00:21:52,190 ดังนั้นหมายความว่าที่หิน CS50 ความจริงคือสิ่งที่จะชี้ไปที่? 471 00:21:52,190 --> 00:21:55,810 >> เจสัน Hirschhorn: คุณกำลังพูดถึง เกี่ยวกับดาวถ่านในสตริงวิธี 472 00:21:55,810 --> 00:21:56,460 ว่าทำงานอย่างไร 473 00:21:56,460 --> 00:21:56,890 ใช่ 474 00:21:56,890 --> 00:21:57,700 ตกลง 475 00:21:57,700 --> 00:21:59,140 ลองวาดรูปนี้ที่นี่ 476 00:21:59,140 --> 00:22:07,100 >> [SIDE สนทนา] 477 00:22:07,100 --> 00:22:11,130 >> เจสัน Hirschhorn: ดังนั้นตัวแปรนี้ เป็นไปได้ของถ่านดาว 478 00:22:11,130 --> 00:22:14,580 วิธีการใหญ่เป็นตัวแปร ประเภทถ่านดาว? 479 00:22:14,580 --> 00:22:15,510 กี่ไบต์? 480 00:22:15,510 --> 00:22:16,450 >> นักเรียน: สี่ 481 00:22:16,450 --> 00:22:18,210 >> เจสัน Hirschhorn: มันเป็นสี่ไบต์ 482 00:22:18,210 --> 00:22:21,420 กี่สิทธิเป็นตัวแปร int ชนิดดาว? 483 00:22:21,420 --> 00:22:22,210 >> นักเรียน: สี่ 484 00:22:22,210 --> 00:22:24,910 >> เจสัน Hirschhorn: สี่ไบต์ 485 00:22:24,910 --> 00:22:28,280 ถ้าเป็นตัวชี้แล้วมันอยู่เสมอ สี่ไบต์เพราะคำแนะนำของพวกเขา 486 00:22:28,280 --> 00:22:30,070 ค่าที่อยู่ในหน่วยความจำ 487 00:22:30,070 --> 00:22:35,160 และที่อยู่ของหน่วยความจำใน CS50 เครื่องใช้สี่ไบต์ยาว 488 00:22:35,160 --> 00:22:42,900 ดังนั้นเมื่อเราเรียก GetString หรือเมื่อเรา พูด stringname เท่ากับและจากนั้นใน 489 00:22:42,900 --> 00:22:46,140 ราคาคู่ใส่สตริง เราจะวาง - 490 00:22:46,140 --> 00:22:46,920 ดีที่แตกต่างกันเล็กน้อย 491 00:22:46,920 --> 00:22:48,630 เราจะไม่ getString เป็นตัวอย่าง 492 00:22:48,630 --> 00:22:52,150 หรือสิ่งที่ถ่านดาว เท่ากับสตริง 493 00:22:52,150 --> 00:22:54,360 ขออภัยให้ฉันตัวอย่างเช่น ที่คุณอ่าน 494 00:22:54,360 --> 00:22:57,590 >> นักเรียนความจริงดาวถ่านเท่ากับ "หิน CS50" ในเครื่องหมายคำพูด 495 00:22:57,590 --> 00:23:02,260 >> เจสัน Hirschhorn: ดังนั้นแห่งนี้นี้ เราจะเรียกตัวแปรนี้ของเรา 496 00:23:02,260 --> 00:23:04,060 วัตถุประสงค์ทั่วไป 497 00:23:04,060 --> 00:23:05,970 เราได้สร้างตัวแปรที่เรียกว่า x 498 00:23:05,970 --> 00:23:07,610 เป็นประเภทถ่านดาว 499 00:23:07,610 --> 00:23:10,950 มันเป็นตัวชี้ให้กับชุดที่ ของตัวละคร 500 00:23:10,950 --> 00:23:12,200 ดังนั้นลงที่นี่ - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> ดังนั้นนี่คือวิธีการที่จะนี้ ทำงานในหน่วยความจำ 503 00:23:25,890 --> 00:23:27,410 นี้จะจัดเก็บอยู่ในหน่วยความจำ 504 00:23:27,410 --> 00:23:31,770 มันจะเก็บที่อยู่หน่วยความจำของ ตัวอักษรตัวแรกในอาร์เรย์ 505 00:23:31,770 --> 00:23:33,830 และจากนั้นเมื่อคุณทำตาม ตัวชี้ที่คุณจะ 506 00:23:33,830 --> 00:23:35,200 ได้รับตัวอักษรตัวแรก 507 00:23:35,200 --> 00:23:38,780 >> และถ้าคุณกำลังอ่านเรื่องนี้เช่น สตริงคอมพิวเตอร์ของคุณเป็นสมาร์ท 508 00:23:38,780 --> 00:23:42,930 พอที่จะรู้อ่านเรื่องทั้งหมดนี้ จนกว่าจะได้รับการฟันเฟือง 0 509 00:23:42,930 --> 00:23:45,530 แต่ถ้าคุณกำลังอ่านมันเป็นตัวละครที่ เวลาดังนั้นคุณ iterating ผ่าน 510 00:23:45,530 --> 00:23:49,910 สายนี้แล้วคุณก็จะอ่าน ตัวละครในเวลาจนกว่าคุณจะไป 511 00:23:49,910 --> 00:23:50,850 เครื่องหมาย 0 512 00:23:50,850 --> 00:23:52,335 ที่ไม่อาจตอบของคุณ คำถามว่า 513 00:23:52,335 --> 00:23:55,610 >> นักเรียน: ใช่ แต่คุณยังไม่ได้ malloced พื้นที่ที่ 514 00:23:55,610 --> 00:23:58,400 สำหรับยังชี้ว่า 515 00:23:58,400 --> 00:24:02,510 >> เจสัน Hirschhorn: ดังนั้นฉันไม่ได้ค่อนข้างแน่ใจว่า ว่าสิ่งที่คุณกำลังมองหาที่ 516 00:24:02,510 --> 00:24:03,640 เพราะผมไม่ได้ทำแบบทดสอบที่ 517 00:24:03,640 --> 00:24:06,370 ที่ควรจะเป็นประโยชน์ ทรัพยากรจาก TF อื่น 518 00:24:06,370 --> 00:24:11,380 ถ้าคุณกำลังสร้างสตริงที่ สแต็คหรือเป็นตัวแปรท้องถิ่นก็จะ 519 00:24:11,380 --> 00:24:16,920 เพียงแค่เป็นอาร์เรย์ของค่าใช้จ่ายมากกว่า โดยทั่วไปดาวถ่านชี้ไปที่ 520 00:24:16,920 --> 00:24:18,600 สตริงอื่น 521 00:24:18,600 --> 00:24:20,550 แต่ผมไม่ทราบว่า 522 00:24:20,550 --> 00:24:25,065 ที่อาจจะชี้ไปยังอีก สตริงในกองได้เป็นอย่างดี 523 00:24:25,065 --> 00:24:27,240 ใช่ 524 00:24:27,240 --> 00:24:31,116 >> นักเรียน: ฉันรู้ว่าคุณจะต้อง จัดสรรหน่วยความจำถ้าตัวชี้เป็น 525 00:24:31,116 --> 00:24:33,360 ได้รับการประกาศภายใน ฟังก์ชั่นอื่น 526 00:24:33,360 --> 00:24:36,740 คุณต้องการที่จะทำสิ่งเดียวกันถ้าหากมันเป็น ถูกประกาศภายในของหลัก 527 00:24:36,740 --> 00:24:39,570 คุณใช้มันภายในของหลัก? 528 00:24:39,570 --> 00:24:43,590 >> เจสัน Hirschhorn: ดังนั้นใช่ 529 00:24:43,590 --> 00:24:46,670 คุณสามารถประกาศตัวชี้ใด ๆ หน่วยความจำที่อยู่ในหน่วยความจำ 530 00:24:46,670 --> 00:24:51,440 มันสามารถจะเป็นที่อยู่หน่วยความจำของท้องถิ่น ตัวแปร แต่อาจเกิด 531 00:24:51,440 --> 00:24:55,760 คนไม่ประกาศอยู่หน่วยความจำ ตัวแปรท้องถิ่นเพราะพวกเขาไป 532 00:24:55,760 --> 00:24:59,890 ไปเมื่อฟังก์ชั่นที่ส่งกลับซึ่ง คือเหตุผลที่เราสิ่ง malloc ทั่วไป 533 00:24:59,890 --> 00:25:04,630 แต่ใช่คุณสามารถประกาศตัวชี้ กับตัวแปรท้องถิ่นอื่น 534 00:25:04,630 --> 00:25:06,360 มันเป็นเพียงแค่โดยทั่วไปไม่ได้ทำ 535 00:25:06,360 --> 00:25:09,480 แต่ฉันสามารถดูที่ว่า สิ่งที่เฉพาะเจาะจงหลังเลิกเรียน 536 00:25:09,480 --> 00:25:10,650 ใช่ 537 00:25:10,650 --> 00:25:12,350 >> นักเรียน: ผมคิดว่านี่คือการจัดเรียง ของสิ่งที่ถูกถาม 538 00:25:12,350 --> 00:25:16,930 มันไม่แปลกที่จะมีการเริ่มต้น ชี้ไม่เป็น 539 00:25:16,930 --> 00:25:20,760 ที่อยู่ แต่เป็นสิ่งที่ ดูเหมือนว่าค่า 540 00:25:20,760 --> 00:25:25,970 ดูเหมือนว่า CS50 เป็นสิ่งที่อยู่ภายใน สิ่งที่มีการชี้ไปที่และ 541 00:25:25,970 --> 00:25:28,820 ไม่ได้อยู่ที่เกิดขึ้นจริงใช่มั้ย 542 00:25:28,820 --> 00:25:30,520 >> เจสัน Hirschhorn: เพื่อให้เป็น ไม่ได้กรณีที่แม้ว่า 543 00:25:30,520 --> 00:25:32,470 นั่นไม่ใช่สิ่งที่เกิดขึ้น 544 00:25:32,470 --> 00:25:35,910 เมื่อคุณประกาศดาวถ่าน, มันเป็นเรื่องที่อยู่ในหน่วยความจำ 545 00:25:35,910 --> 00:25:38,860 ชี้ทุกคนที่อยู่ในหน่วยความจำ ชี้ไปที่สิ่งอื่น 546 00:25:38,860 --> 00:25:41,480 อย่างอื่นที่อาจจะอยู่ใน กอง แต่มักจะอยู่บน 547 00:25:41,480 --> 00:25:43,440 กองในวิธีที่เราจะเห็นมันใช้ 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 แต่ stringname เท่ากับสองครั้งคำพูด "getString" เราจะเห็นว่าเรา 550 00:25:53,500 --> 00:25:55,010 สามารถมองผ่านและรหัสที่ว่า 551 00:25:55,010 --> 00:26:01,190 สตริง GetString ไม่ได้ถูกบันทึกไว้ใน ตัวแปรที่หรือสิ่งที่สตริง 552 00:26:01,190 --> 00:26:04,580 ชื่อไม่ได้ถูกบันทึกไว้ในที่ ตัวแปรเพราะนั่นไม่ใช่วิธีการ 553 00:26:04,580 --> 00:26:06,070 การทำงานของตัวชี้ 554 00:26:06,070 --> 00:26:06,770 ไม่ที่ทำให้รู้สึก? 555 00:26:06,770 --> 00:26:07,170 >> นักเรียน: ใช่ 556 00:26:07,170 --> 00:26:08,570 >> เจสัน Hirschhorn: OK 557 00:26:08,570 --> 00:26:11,690 หวังว่าที่ไม่ได้ ทำให้เกิดความสับสนกับทุกคน 558 00:26:11,690 --> 00:26:15,732 แต่ถ้ามันเป็นเราสามารถมองไปที่มันอีกครั้ง ในบิตเพราะเรากำลังจะเป็นจริง 559 00:26:15,732 --> 00:26:19,240 รหัสอะไรบางอย่างที่จะหวังว่า ทำงานกับสตริงและช่วยให้คุณรู้สึก 560 00:26:19,240 --> 00:26:22,170 สะดวกสบายมากขึ้นกับพวกเขา 561 00:26:22,170 --> 00:26:24,869 >> คำถามอื่น ๆ ที่เกี่ยวข้องกับเหล่านี้ หัวข้อหรือหัวข้ออื่น ๆ ที่ 562 00:26:24,869 --> 00:26:26,119 ผมจะนำกลับมาได้หรือไม่ 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 และ - 565 00:26:34,840 --> 00:26:36,310 ตอนนี้ 566 00:26:36,310 --> 00:26:37,630 ใช่ Alden 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: ดังนั้นนี่คือที่ไม่เกี่ยวข้องอย่างสมบูรณ์ แต่เราก็สามารถไปกว่า 568 00:26:39,860 --> 00:26:42,760 อย่างรวดเร็วจริงๆสิ่งที่เราจำเป็นต้องรู้ เกี่ยวกับความแตกต่างระหว่าง 32 และ 569 00:26:42,760 --> 00:26:46,345 เครื่อง 64-bit? 570 00:26:46,345 --> 00:26:47,740 >> เจสัน Hirschhorn: ใช่ 571 00:26:47,740 --> 00:26:52,111 ดังนั้น 32 บิตเป็นจำนวนไบต์? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: มันเป็นสี่ไบต์ 573 00:26:53,060 --> 00:26:54,360 >> เจสัน Hirschhorn: มันเป็นสี่ไบต์ 574 00:26:54,360 --> 00:26:58,420 และ 64 บิตเป็นจำนวนไบต์? 575 00:26:58,420 --> 00:26:59,112 >> นักเรียน: แปด 576 00:26:59,112 --> 00:27:00,610 >> เจสัน Hirschhorn: แปดไบต์ 577 00:27:00,610 --> 00:27:03,980 ดังนั้นอีกครั้งแปดบิตเป็นหนึ่งไบต์ 578 00:27:03,980 --> 00:27:08,340 เครื่องใช้ CS50 ของคุณคือ เครื่อง 32 บิต 579 00:27:08,340 --> 00:27:13,650 ดังนั้นที่อยู่หน่วยความจำ สี่ไบต์ยาว 580 00:27:13,650 --> 00:27:17,460 มี 2​​ มีถึง 32 อยู่หน่วยความจำ 581 00:27:17,460 --> 00:27:21,310 0-2 ถึง 32 ลบ 1 582 00:27:21,310 --> 00:27:27,630 และผมไม่ได้บวก แต่ที่ อาจขอบเขตของสิ่งที่คุณต้อง 583 00:27:27,630 --> 00:27:35,230 รู้ว่าสำหรับเครื่อง 32 บิตที่หน่วยความจำ ที่อยู่มีอีกสี่ไบต์ยาว 584 00:27:35,230 --> 00:27:39,620 และนั่นคือจำนวนเงินสูงสุด ของที่อยู่หน่วยความจำ 585 00:27:39,620 --> 00:27:41,680 >> นอกจากนี้ชนิดข้อมูล - 586 00:27:41,680 --> 00:27:45,020 นี้อาจจะมีสิ่งที่เป็น กันดีว่าเป็นมูลค่า noting 587 00:27:45,020 --> 00:27:49,610 ขนาดของชนิดข้อมูลขึ้นอยู่กับ เครื่องที่คุณกำลังทำงานกับ 588 00:27:49,610 --> 00:27:56,760 ดังนั้นถ่าน, ตัวเดียวเป็นวิธีการที่ ไบต์จำนวนมากในเครื่อง CS50 ของเราหรือไม่ 589 00:27:56,760 --> 00:27:57,980 หนึ่งไบต์ 590 00:27:57,980 --> 00:28:02,310 และเป็นจริงหนึ่งไบต์เป็น ได้ดีบนเครื่อง 64 บิต 591 00:28:02,310 --> 00:28:05,920 >> และชนิดข้อมูลส่วนใหญ่เป็นหมายเลขเดียวกัน ไบต์ในเครื่องทั้งสอง 592 00:28:05,920 --> 00:28:11,620 แต่บางชนิดข้อมูลจะแตกต่างกัน ในเครื่องทั้งสอง 593 00:28:11,620 --> 00:28:14,590 เพื่อที่จะเป็นที่อาจเกิดขึ้น สิ่งเดียวที่คุณจำเป็นต้องรู้ 594 00:28:14,590 --> 00:28:16,710 >> แต่แม้ที่ผมคิดว่า อยู่นอกเหนือขอบเขต - 595 00:28:16,710 --> 00:28:20,990 ฉันบวกเกือบถ้าคุณมองย้อนกลับไป แบบทดสอบที่เก่าก็บอกว่าสมมติ 596 00:28:20,990 --> 00:28:24,090 การเข้ารหัสปัญหาที่คุณกำลังใช้ เครื่อง 32 บิต 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 แต่มีไปพร้อมกับที่ใน กรณีที่คุณสนใจมี 599 00:28:30,620 --> 00:28:35,920 ชนิดข้อมูลที่เหมือนกัน ขนาดในเครื่องทั้งหมด 600 00:28:35,920 --> 00:28:42,670 >> ถ้าคุณเคยเห็นสิ่งที่ต้องการ uint32_t คุณอาจจะหรืออาจจะ 601 00:28:42,670 --> 00:28:43,260 ไม่ได้เห็นว่า 602 00:28:43,260 --> 00:28:44,290 นั่นเป็นชนิดข้อมูล 603 00:28:44,290 --> 00:28:47,570 ที่บอกว่าเป็น 32 บิตไม่ว่า สิ่งที่เครื่องนี้อยู่ใน 604 00:28:47,570 --> 00:28:50,350 ดังนั้นเมื่อมีคนเขียนแบบพกพา รหัสพวกเขาอาจจะไม่ใช้ ints 605 00:28:50,350 --> 00:28:53,260 พวกเขาจะใช้แทนข้อมูลอื่น ๆ เหล่านี้ ชนิดที่ว่าพวกเขารู้ว่าจะเป็นแบบเดียวกัน 606 00:28:53,260 --> 00:28:54,780 ขนาดในเครื่องเดียวทุก 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 ฮาร์ 609 00:28:58,250 --> 00:29:00,150 >> ฮาร์: ผมมีคำถามเกี่ยวกับ การรวบรวม 610 00:29:00,150 --> 00:29:04,110 ดังนั้นถ้าคุณกำลังเขียนโปรแกรมที่ใช้ ห้องสมุดเช่น CS50 หรือสิ่งที่ 611 00:29:04,110 --> 00:29:06,840 เช่นนั้นฉันรู้ว่าห้องสมุดที่ มีในบางจุดเป็น 612 00:29:06,840 --> 00:29:08,590 รวบรวมและเชื่อมโยงเข้ามา 613 00:29:08,590 --> 00:29:13,380 แต่วิธีการมากที่เกิดขึ้นในระหว่าง การสะสมของโปรแกรมของคุณหรือไม่ 614 00:29:13,380 --> 00:29:15,880 เป็นส่วนหนึ่งของกระบวนการสิ่งที่ห้องสมุดที่ เกิดขึ้นเมื่อคุณกำลัง 615 00:29:15,880 --> 00:29:18,560 รวบรวมโปรแกรมของคุณเองหรือ 616 00:29:18,560 --> 00:29:24,020 >> เจสัน Hirschhorn: ดังนั้นขอไปกว่า โดยทั่วไปขั้นตอนของกระบวนการนี​​้ 617 00:29:24,020 --> 00:29:26,280 คุณเขียนของคุณคไฟล์. 618 00:29:26,280 --> 00:29:33,530 ในแฟ้มของคุณค. คุณ # include ของคุณ ห้องสมุดส่วนหัวเช่น cs50.h. 619 00:29:33,530 --> 00:29:39,480 อะไรที่คมชัดรวมถึง สายทำในการเขียนโปรแกรมของคุณหรือไม่ 620 00:29:39,480 --> 00:29:40,525 Akchar 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: มันจะเพิ่มต้นแบบของ ฟังก์ชั่นจากส่วนหัว 622 00:29:43,350 --> 00:29:45,120 แฟ้มในไลบรารี 623 00:29:45,120 --> 00:29:45,600 >> เจสัน Hirschhorn: แน่นอน 624 00:29:45,600 --> 00:29:49,870 จะเพิ่มฟังก์ชั่นต้นแบบเหล่านั้น รหัสของคุณ 625 00:29:49,870 --> 00:29:55,230 ดังนั้นเมื่อรหัสของคุณจะถูกรวบรวมใน ระยะแรกคอมไพเลอร์รู้ 626 00:29:55,230 --> 00:29:59,250 ที่ฟังก์ชั่นเหล่านี้จริงๆอยู่และ ที่พวกเขาได้รับการกำหนดว่า 627 00:29:59,250 --> 00:30:02,460 ไฟล์. ชั่วโมงไม่รวม คำจำกัดความของฟังก์ชั่นเหล่านี้หรือว่า 628 00:30:02,460 --> 00:30:03,950 พวกเขาทำงานจริง 629 00:30:03,950 --> 00:30:07,960 Cs50.h เพียงแค่มีบางสิ่งบางอย่างที่บอกว่า GetString เป็นสิ่งที่จริงที่ 630 00:30:07,960 --> 00:30:09,270 สามารถเกิดขึ้นได้ 631 00:30:09,270 --> 00:30:14,240 และกล่าวว่า standardio.h printf เป็น สิ่งที่จริงที่สามารถเกิดขึ้น 632 00:30:14,240 --> 00:30:23,190 >> ส่วนหัวดังนั้นภาษาคของคุณด้วย. ไฟล์ที่ได้รับกลายเป็นบางส่วน 633 00:30:23,190 --> 00:30:27,750 รหัสเครื่องสามารถอ่านได้ซึ่งในที่สุด ได้รับกลายเป็นไบนารี 634 00:30:27,750 --> 00:30:30,030 รหัส, 0 และ 1 635 00:30:30,030 --> 00:30:33,590 และนั่นคือรหัสที่ในที่สุด ได้รับการดำเนินการ 636 00:30:33,590 --> 00:30:38,550 -l สาย CS50 - ตัวอย่างเช่น เมื่อคุณกำลังเขียนเสียงดังกราว - 637 00:30:38,550 --> 00:30:41,830 แล้วคุณมี l-CS50, คุณพิมพ์ที่ว่าค่ะ 638 00:30:41,830 --> 00:30:42,180 และคุณจะเห็นว่า 639 00:30:42,180 --> 00:30:43,890 เมื่อคุณเขียนให้คุณจะ เห็นเส้นที่ขึ้นที่นี่ 640 00:30:43,890 --> 00:30:47,740 และเราจะเห็นว่าในที่สองเมื่อ เรารหัสหรือในภายหลังเมื่อเรารหัส 641 00:30:47,740 --> 00:30:50,390 >> แต่สายที่ CS50-ลิตรทำอะไรบางอย่าง บิตที่แตกต่างกว่า 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 อะไรบรรทัดที่ l-CS50 ทำอย่างไร 644 00:30:56,300 --> 00:30:56,820 avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: ผมอยากจะบอกว่ามันเชื่อมโยง ห้องสมุดฟังก์ชั่น 646 00:31:00,310 --> 00:31:02,710 เรียกเช่น. ไฟล์ o 647 00:31:02,710 --> 00:31:08,200 >> เจสัน Hirschhorn: ดังนั้นมาก ใกล้ถ้าไม่จุดบน 648 00:31:08,200 --> 00:31:16,220 l-CS50 ใช้แฟ้มไบนารีและ ผสานกับแฟ้มไบนารีของคุณ 649 00:31:16,220 --> 00:31:21,410 ดังนั้น cs50.h มีจุดในการเปลี่ยนไม่มี cs50.h จากภาษา C เพื่อ binary ทุก 650 00:31:21,410 --> 00:31:23,130 เวลาเดียวที่มันถูกใช้ 651 00:31:23,130 --> 00:31:26,650 ที่จะโง่เนื่องจากว่า จะเสียเวลามาก 652 00:31:26,650 --> 00:31:30,420 ดังนั้นจึงได้รับการเรียบเรียงแล้ว และกลายเป็นที่ปฏิบัติการ 653 00:31:30,420 --> 00:31:35,430 และตอนนี้ก็เป็นไปได้รวม ไฟล์ของคุณที่ท้าย 654 00:31:35,430 --> 00:31:38,370 ดังนั้นผู้ที่ 1 และ 0 ที่จะไป จะรวมกับคนที่คุณ 655 00:31:38,370 --> 00:31:39,150 0 และในตอนท้าย 656 00:31:39,150 --> 00:31:43,670 ดังนั้นตอนนี้คุณจะมีจริงที่เกิดขึ้นจริง 1 และ 0 ของที่กำหนดวิธีการ GetString, 657 00:31:43,670 --> 00:31:47,890 ตัวอย่างเช่นการทำงานหรือวิธี printf, ตัวอย่างเช่นการทำงานของ 658 00:31:47,890 --> 00:31:52,750 >> และสำหรับข้อมูลเพิ่มเติมมี คอมไพเลอร์สั้น ๆ ที่ช่วยให้เนทที่ 659 00:31:52,750 --> 00:31:55,410 คุณควรตรวจสอบที่จะไป ผ่านขั้นตอนเหล่านี้ 660 00:31:55,410 --> 00:31:56,050 แต่ - 661 00:31:56,050 --> 00:31:56,560 ใช่ 662 00:31:56,560 --> 00:32:01,700 >> นักเรียน: พวกเขามักจะอยู่ในไฟล์ o. เมื่อพวกเขากำลังในรูปแบบห้องสมุด 663 00:32:01,700 --> 00:32:06,764 พร้อมที่จะผสานการเชื่อมโยง - เช่น พวกเขาอยู่ในรหัสเลขฐานสองหรือไม่ 664 00:32:06,764 --> 00:32:07,600 >> เจสัน Hirschhorn: OK 665 00:32:07,600 --> 00:32:08,420 อะไร - 666 00:32:08,420 --> 00:32:11,780 >> นักเรียนสินค้าที่เสมอกรณี ห้องสมุดเมื่อคุณเชื่อมโยงได้อย่างไร 667 00:32:11,780 --> 00:32:12,500 >> เจสัน Hirschhorn: ใช่ 668 00:32:12,500 --> 00:32:17,300 ดังนั้นจึงมี. s ไฟล์ซึ่งจะเป็น รหัสเครื่องซึ่งจะเป็น 669 00:32:17,300 --> 00:32:17,975 ความลับกับคุณ 670 00:32:17,975 --> 00:32:19,410 คุณไม่จำเป็นต้องกังวลเกี่ยวกับการที่ 671 00:32:19,410 --> 00:32:24,930 แต่โดยทั่วไปใช่พวกเขาจะ เป็น. ไฟล์ o พร้อมที่จะไป 672 00:32:24,930 --> 00:32:27,170 >> นักศึกษา: ดังนั้นเมื่อคุณส่งสินค้าไป ห้องสมุด, คุณเพียงส่ง 673 00:32:27,170 --> 00:32:28,880 เอช. และ o. 674 00:32:28,880 --> 00:32:32,210 คุณไม่ส่งค. หรือ s. 675 00:32:32,210 --> 00:32:33,070 >> เจสัน Hirschhorn: ดังนั้น - 676 00:32:33,070 --> 00:32:36,260 และนี่คือในระยะสั้นนี้เช่นกันถ้า ข้อมูลนี้น่าจะมา 677 00:32:36,260 --> 00:32:36,700 เล็ก ๆ น้อย ๆ ได้อย่างรวดเร็ว 678 00:32:36,700 --> 00:32:39,870 แต่สั้นในคอมไพเลอร์ พูดคุยเกี่ยวกับเรื่องนี้เป็นอย่างดี 679 00:32:39,870 --> 00:32:43,290 เมื่อคุณส่งห้องสมุดถ้าคุณส่ง เอช. ไฟล์ส่วนหัวที่บรรดา 680 00:32:43,290 --> 00:32:46,290 ต้นแบบฟังก์ชั่นและ 1 และ 0 นั่นคือทั้งหมดที่คุณจำเป็นต้องให้ 681 00:32:46,290 --> 00:32:50,640 คุณไม่จำเป็นต้องที่จะให้วิธีการที่ ฟังก์ชั่นการทำงานของคไฟล์. 682 00:32:50,640 --> 00:32:56,360 เพราะจุดที่เป็นนามธรรมหรือ ชี้ APIs, จุดที่ SPL นี้ 683 00:32:56,360 --> 00:32:59,650 ห้องสมุดแบบพกพา Stanford ก็ เพื่อให้คุณไม่ต้องกังวลเกี่ยวกับวิธีการใหม่ 684 00:32:59,650 --> 00:33:04,220 GRect ทำงานหรือวิธีการย้ายงาน หรือวิธีการเพิ่มผลงาน 685 00:33:04,220 --> 00:33:06,520 ทั้งหมดที่คุณต้องรู้คือการเพิ่มที่ เป็นฟังก์ชั่นที่คุณสามารถ 686 00:33:06,520 --> 00:33:08,880 ใช้และมันไม่นี้ 687 00:33:08,880 --> 00:33:12,760 ดังนั้นคุณไม่จำเป็นต้องรู้วิธี ก็เขียนใน C. คุณเพียงแค่ต้อง 688 00:33:12,760 --> 00:33:15,460 รู้ว่าที่นี่มีฟังก์ชั่นสิ่งที่พวกเขา ทำและที่นี่มี 1 และ 0 689 00:33:15,460 --> 00:33:18,870 เมื่อคุณต้องการที่จะใช้พวกเขา 690 00:33:18,870 --> 00:33:19,530 >> เย็น 691 00:33:19,530 --> 00:33:26,980 คำถามใด ๆ เพิ่มเติมเกี่ยวกับคอมไพเลอร์ หรือหัวข้ออื่น ๆ ในคณะกรรมการหรือไม่ 692 00:33:26,980 --> 00:33:30,300 >> นักเรียน: ฉันมีคำถาม ฟังก์ชั่นการใช้ซ้ำ 693 00:33:30,300 --> 00:33:31,170 คำถามเกี่ยวกับการเรียกซ้ำ 694 00:33:31,170 --> 00:33:33,030 ผมมีความรู้สึกที่จะเกิดขึ้น 695 00:33:33,030 --> 00:33:38,310 เพื่อให้ได้อย่างรวดเร็วผ่าน เรียกซ้ำกับการที่เฉพาะเจาะจง 696 00:33:38,310 --> 00:33:40,690 เช่นฟังก์ชั่นแฟ 697 00:33:40,690 --> 00:33:44,920 เพราะนี่เป็นตัวอย่างที่ มักจะมาขึ้นหรือจะใช้ 698 00:33:44,920 --> 00:33:46,170 เพื่อแสดงให้เห็นการเรียกซ้ำ 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> ดังนั้น "4" การอ่านเป็นปัจจัย 4 701 00:33:56,410 --> 00:33:59,120 และสิ่งที่ไม่ 4 ปัจจัยหมายถึงอะไร 702 00:33:59,120 --> 00:34:00,696 สิ่งที่จะทำอย่างไร 703 00:34:00,696 --> 00:34:02,235 คุณจะคำนวณปัจจัย 4? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 ครั้ง 3 ครั้ง 2 ครั้งที่ 1 706 00:34:07,960 --> 00:34:11,889 >> ดังนั้นวิธีที่จะเขียน 4 ปัจจัยอื่น คือการเขียนนี้ 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 ครั้ง 3 ปัจจัย 709 00:34:19,022 --> 00:34:22,080 เพราะ 3 ปัจจัยคือ 3 ครั้ง 2 ครั้งที่ 1 710 00:34:22,080 --> 00:34:27,580 ดังนั้น 4 ครั้ง 3 ปัจจัยคือ 4 ครั้งที่ 3 ครั้งที่ 2 ครั้งที่ 1 711 00:34:27,580 --> 00:34:32,679 นี่คือเหตุผลที่ปัจจัยเป็นใหญ่ ผู้สมัครสำหรับการเรียกซ้ำเพราะ 712 00:34:32,679 --> 00:34:36,630 ชัดเจนว่ามีอะไรบางอย่างที่ เกิดขึ้นซ้ำแล้วซ้ำแล้วซ้ำอีกใน 713 00:34:36,630 --> 00:34:39,820 ขนาดเล็กจำนวนมากในสิ่งที่จนกว่า คุณถึงจุดสิ้นสุด 714 00:34:39,820 --> 00:34:42,570 เมื่อคุณมาถึง 1, 1 ปัจจัยคือ 1 715 00:34:42,570 --> 00:34:43,719 คุณไม่สามารถไปไกล 716 00:34:43,719 --> 00:34:47,219 0 ปัจจัยที่ถูกกำหนดให้เป็น 1 717 00:34:47,219 --> 00:34:50,679 ดังนั้นเมื่อคุณได้รับที่จะ 1 หรือ 0, คุณ ที่ปลายและคุณสามารถ 718 00:34:50,679 --> 00:34:53,219 เริ่มที่จะกลับขึ้น 719 00:34:53,219 --> 00:34:59,540 ดังนั้นถ้าเราอยากจะเขียนซ้ำ ฟังก์ชั่นในการคำนวณปัจจัย, 720 00:34:59,540 --> 00:35:02,170 ที่เรากำลังจะเขียนบาง pseudocode ที่ตอนนี้ 721 00:35:02,170 --> 00:35:03,300 ก่อนที่เราจะเขียน pseudocode ที่ - 722 00:35:03,300 --> 00:35:05,660 ฉันจะให้พวกคุณไม่กี่นาที การเขียนรหัสเทียมหรือเพียงแค่คิด 723 00:35:05,660 --> 00:35:09,600 เกี่ยวกับมัน - มีสองสิ่งที่ทุก ความต้องการฟังก์ชั่นซ้ำ 724 00:35:09,600 --> 00:35:12,530 สิ่งที่ทั้งสองสิ่งที่มีอะไรบ้าง 725 00:35:12,530 --> 00:35:13,220 >> JACK: มันมีการเรียกตัวเอง 726 00:35:13,220 --> 00:35:13,680 >> เจสัน Hirschhorn: โนอาห์? 727 00:35:13,680 --> 00:35:14,460 โอ้แจ็ค 728 00:35:14,460 --> 00:35:15,100 เอาเลย 729 00:35:15,100 --> 00:35:16,640 >> JACK: มันมีการเรียกตัวเอง 730 00:35:16,640 --> 00:35:19,220 >> เจสัน Hirschhorn: ดังนั้นซ้ำ ฟังก์ชั่นจำเป็นต้องมีการเรียกซ้ำ, 731 00:35:19,220 --> 00:35:20,220 เรียกร้องให้ตัวเอง 732 00:35:20,220 --> 00:35:20,770 ที่หนึ่ง 733 00:35:20,770 --> 00:35:21,510 และสิ่งที่เป็นสิ่งอื่น ๆ 734 00:35:21,510 --> 00:35:22,250 >> JACK: กรณีฐาน 735 00:35:22,250 --> 00:35:23,780 >> เจสัน Hirschhorn: กรณีฐาน 736 00:35:23,780 --> 00:35:26,940 กรณีฐานคือที่นี่คือเมื่อเราหยุด 737 00:35:26,940 --> 00:35:29,510 ดังนั้นการทำงานของคุณได้รับการเรียกว่า 738 00:35:29,510 --> 00:35:31,410 กรณีฐานมาก่อน 739 00:35:31,410 --> 00:35:33,710 คุณต้องการที่จะทราบว่าคุณอยู่ที่ปลาย 740 00:35:33,710 --> 00:35:37,110 และถ้าคุณไม่ได้อยู่ที่ท้ายที่สุดคุณ โทรซ้ำของคุณ 741 00:35:37,110 --> 00:35:39,880 และคุณจะไปผ่านฟังก์ชั่นนี้อีกครั้ง ตรวจสอบกรณีฐานของคุณอีกครั้ง 742 00:35:39,880 --> 00:35:42,575 หากคุณไม่ได้ท้ายที่สุดคุณทำ อื่นโทรซ้ำ, 743 00:35:42,575 --> 00:35:44,130 และอื่น ๆ และอื่น ๆ 744 00:35:44,130 --> 00:35:47,110 >> นั่นเป็นเหตุผลที่ฟังก์ชั่นซ้ำเสมอ ต้องการผู้ที่กรณีฐานและผู้ที่ 745 00:35:47,110 --> 00:35:48,210 โทรซ้ำ 746 00:35:48,210 --> 00:35:51,280 หากคุณไม่ได้มีการเรียกซ้ำมัน จะไม่เป็นฟังก์ชั่นซ้ำ 747 00:35:51,280 --> 00:35:53,210 หากคุณไม่ได้มีกรณีฐาน คุณจะไปและตลอดไป 748 00:35:53,210 --> 00:35:54,780 ก็จะไม่มีที่สิ้นสุด 749 00:35:54,780 --> 00:35:57,870 และกรณีฐานเสมอมาก่อน เพราะคุณมักจะต้องการที่จะตรวจสอบ 750 00:35:57,870 --> 00:36:00,420 ถ้าคุณอยู่ที่ปลายแรก 751 00:36:00,420 --> 00:36:04,770 ดังนั้นก่อนที่เราจะทำบาง pseudocode ทำไม คุณไม่ใช้เวลาสักครู่เพื่อคิดเกี่ยวกับ 752 00:36:04,770 --> 00:36:09,360 วิธีการทำงานของปัจจัยซ้ำ จะได้รับการเขียน 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> นอกจากนี้ให้มากที่สุดเท่าที่คุณกำลังทำเขียน มันออกมาบนแผ่นกระดาษเป็น 755 00:36:26,010 --> 00:36:27,960 สิ่งที่คุณจะต้อง ทำในการทดสอบในวันพรุ่งนี้ 756 00:36:27,960 --> 00:36:32,160 ดังนั้นการปฏิบัติที่อาจจะดีที่จะทำให้ แน่ใจว่ารหัสที่คุณกำลังเขียน 757 00:36:32,160 --> 00:36:34,420 ลงบนแผ่นกระดาษ - 758 00:36:34,420 --> 00:36:35,160 หรือคุณสามารถทำเช่นนั้นได้ 759 00:36:35,160 --> 00:36:36,710 คุณจะรู้ว่าที่มีเครื่องหมาย 760 00:36:36,710 --> 00:36:37,660 คุณจำไวยากรณ์ 761 00:36:37,660 --> 00:36:40,400 เพราะคุณไม่สามารถที่จะมี คอมไพเลอร์บอกคุณทำผิดพลาด 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> นอกจากนี้ตามเส้นที่ในวันพรุ่งนี้เมื่อ คุณมีการเข้ารหัสปัญหาถ้าคุณ 764 00:37:07,240 --> 00:37:11,490 จะรีบไปเวลาหรือถ้าคุณเป็นอย่างมาก สับสนเป็นวิธีการที่คุณควรจะ 765 00:37:11,490 --> 00:37:16,030 เขียนสิ่งที่โดยเฉพาะอย่างยิ่งในคมัน จะ behoove คุณเขียนหลอกรหัส 766 00:37:16,030 --> 00:37:18,160 หรือเขียนความเห็นในได้เป็นอย่างดี 767 00:37:18,160 --> 00:37:21,940 เพราะมีเครดิตบางส่วนสำหรับ คำถามจำนวนมากเกี่ยวกับการตอบคำถาม 768 00:37:21,940 --> 00:37:24,840 ดังนั้นคุณอาจต้องรีบหรือคุณ เพียงแค่อาจจะสับสน 769 00:37:24,840 --> 00:37:28,030 เขียนในความคิดเห็นหรือหลอกรหัส มักจะเป็นวิธีที่คุณ 770 00:37:28,030 --> 00:37:29,360 สามารถได้รับเครดิตบางส่วน 771 00:37:29,360 --> 00:37:31,440 >> ดังนั้นอย่าปล่อยให้บางสิ่งบางอย่าง ว่างในการตอบคำถาม 772 00:37:31,440 --> 00:37:33,490 มีบทลงโทษสำหรับการไม่ได้ วางสิ่งค่ะ 773 00:37:33,490 --> 00:37:37,650 ในความเป็นจริงวางในรหัสหลอกหรือ ความเห็นจะไปช่วยปราบ 774 00:37:37,650 --> 00:37:40,410 คิดออกถ้าคุณรู้ว่าสิ่งที่จริง คุณกำลังพูดถึงและอาจจะได้รับรางวัล 775 00:37:40,410 --> 00:37:42,030 คุณมีเครดิตบางส่วนสำหรับการที่ 776 00:37:42,030 --> 00:37:44,510 >> นอกจากนี้ตามเส้นที่เขียนไว้อย่างชัดเจน 777 00:37:44,510 --> 00:37:47,650 ถ้าเราไม่สามารถจริงๆสิ่งที่คุณกำลังเขียน เราจะไม่โทรหาคุณ 778 00:37:47,650 --> 00:37:49,900 เวลาเที่ยงคืนวันพรุ่งนี้ตัวเลข สิ่งที่คุณเขียน 779 00:37:49,900 --> 00:37:51,520 เรากำลังจะใช้เวลาปิดจุด 780 00:37:51,520 --> 00:37:56,570 เขียนไว้อย่างชัดเจนเพื่อให้เราสามารถได้ยินหรือเปล่า เราสามารถอ่านสิ่งที่คุณเขียน 781 00:37:56,570 --> 00:38:00,230 >> และถ้ามันบอกว่าสองประโยค ไม่ได้เขียนย่อหน้า 782 00:38:00,230 --> 00:38:02,280 ทำตามคำแนะนำ 783 00:38:02,280 --> 00:38:03,500 เขียนไว้อย่างชัดเจน 784 00:38:03,500 --> 00:38:07,720 และเขียนในความเห็นเหล่านั้นหรือ pseudocode คำถามที่อาจ 785 00:38:07,720 --> 00:38:10,270 ที่ได้รับรางวัลบางส่วนเครดิต 786 00:38:10,270 --> 00:38:12,520 >> ตกลงขอไปที่ปัจจัย 787 00:38:12,520 --> 00:38:15,000 ดังนั้นเราจึงมีปัจจัยฟังก์ชั่น 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 ถ้าฉันเป็นจริงเขียนนี้ใน C สิ่งที่ฉันจำเป็นต้องใส่ก่อนที่ชื่อ 790 00:38:21,550 --> 00:38:22,800 ของการทำงานหรือไม่ 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 ประเภทผลตอบแทนซึ่งในการนี​​้ กรณีที่เราจะให้มัน int 793 00:38:30,060 --> 00:38:35,450 แล้วภายในวงเล็บปีกกาเป็น สิ่งที่จะไปภายในวงเล็บปีกกากับ 794 00:38:35,450 --> 00:38:36,850 ฟังก์ชั่นหรือไม่ 795 00:38:36,850 --> 00:38:37,950 >> นักเรียนประเภทอาร์กิวเมนต์ 796 00:38:37,950 --> 00:38:39,150 >> เจสัน Hirschhorn: ข้อโต้แย้งของมัน 797 00:38:39,150 --> 00:38:42,680 ดังนั้นปัจจัยอาจจะ ใช้อาร์กิวเมนต์ 798 00:38:42,680 --> 00:38:44,500 มันอาจจะใช้เวลาเพียงหนึ่งอาร์กิวเมนต์ 799 00:38:44,500 --> 00:38:49,450 และเราจะบอกว่ามันจะใช้เวลา จำนวนเต็มเรียกว่า x 800 00:38:49,450 --> 00:38:52,770 และอีกครั้งเมื่อเขียนเป็นต้นแบบของ ฟังก์ชั่นหรือการเขียนฟังก์ชั่น 801 00:38:52,770 --> 00:38:57,110 ในรหัสของคุณก่อนที่จะกำหนดว่าคุณ เขียนชนิดข้อมูลและชื่อของ 802 00:38:57,110 --> 00:39:01,370 ตัวแปรสำหรับการทำงานที่ว่ามีเพียง 803 00:39:01,370 --> 00:39:06,350 ดังนั้นคุณสามารถส่งผ่านบางส่วนในจำนวนนี้ ฟังก์ชั่นก็จะถูกเรียกว่า x 804 00:39:06,350 --> 00:39:07,340 ภายใน 805 00:39:07,340 --> 00:39:08,755 >> เรามีฟังก์ชั่นแฟคของเรา 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 เราจำเป็นต้องมีสองสิ่งที่กรณีฐาน และโทรซ้ำ 808 00:39:15,850 --> 00:39:20,900 กรณีฐานสำหรับปัจจัยคืออะไร 809 00:39:20,900 --> 00:39:24,850 คนที่เขียนมันออกมาและผู้ที่ไม่ได้ พูด แต่สิ่งที่เป็นฐาน 810 00:39:24,850 --> 00:39:26,100 กรณีปัจจัย? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> นักศึกษา: ถ้า n มีค่าน้อย กว่า 2, 1 คืน 813 00:39:30,930 --> 00:39:33,520 >> เจสัน Hirschhorn: ถ้า n เป็น น้อยกว่า 2, 1 คืน 814 00:39:33,520 --> 00:39:37,216 ฉันชอบที่เนื่องจากว่า ดูแล 0 และ 1 815 00:39:37,216 --> 00:39:45,290 ดังนั้นเราจะทำ x <2, 1 คืน 816 00:39:45,290 --> 00:39:47,870 ถ้าเราได้รับผ่าน 0, ถ้าเราได้รับ ผ่านไป 1 ฟังก์ชั่นนี้จะ 817 00:39:47,870 --> 00:39:49,790 ทันทีกลับ 1 818 00:39:49,790 --> 00:39:54,020 ถ้าเราได้รับผ่านบางส่วนมากขึ้นจำนวน กว่าหรือเท่ากับ 2 เรากำลังจะ 819 00:39:54,020 --> 00:39:55,370 มีการเรียกซ้ำของเรา 820 00:39:55,370 --> 00:39:57,855 >> และเพื่อให้เป็นวิธีที่จะทำงาน 821 00:39:57,855 --> 00:40:01,070 สามารถคนอื่นที่ทำงานเกี่ยวกับเรื่องนี้ ที่ไม่ได้พูดยังให้ฉัน 822 00:40:01,070 --> 00:40:07,380 โทรซ้ำสำหรับการทำงานนี้ ใน pseudocode? 823 00:40:07,380 --> 00:40:10,770 ถ้าเราได้รับการส่งผ่านไปใน x จำนวน และมันเป็นเรื่องที่ยิ่งใหญ่กว่า 2 สิ่งที่ 824 00:40:10,770 --> 00:40:13,370 ที่เราต้องการจะทำอย่างไร 825 00:40:13,370 --> 00:40:17,930 นอกจากนี้เรายังมีตัวอย่างที่เขียนไว้ใน ด้านที่อาจจะให้คำแนะนำ 826 00:40:17,930 --> 00:40:20,770 >> นักเรียน: Call x ครั้ง ปัจจัยของ x ลบ 1? 827 00:40:20,770 --> 00:40:22,020 >> เจสัน Hirschhorn: แน่นอนขวา 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 เรากำลังจะกลับ x ครั้ง ปัจจัยของ x ลบ 1 830 00:40:37,750 --> 00:40:41,810 และว่าแม้ว่าที่ผมเขียนขึ้น โดยทั่วไปสิ่งที่คุณกล่าวว่าในภาษาอังกฤษ 831 00:40:41,810 --> 00:40:44,580 ฟังก์ชั่นนี้ปัจจัย จะได้รับการเรียกอีกครั้ง 832 00:40:44,580 --> 00:40:46,320 มันจะรันบน x ลบ 1 833 00:40:46,320 --> 00:40:49,320 มันจะกลับมาพร้อมกับจำนวนเต็มบางส่วนและ แล้วมันจะคูณสองเหล่านี้ 834 00:40:49,320 --> 00:40:52,050 ร่วมกันและค่าที่จะได้รับ กลับไปยังสิ่งที่เรียกว่า 835 00:40:52,050 --> 00:40:55,010 ฟังก์ชั่นปัจจัยที่อาจ เป็นตัวอย่างของคนอื่น 836 00:40:55,010 --> 00:40:58,420 ฟังก์ชั่นนี้ปัจจัย 837 00:40:58,420 --> 00:41:01,360 >> เพื่อให้เป็นตัวอย่างของการเวียนเกิด ฟังก์ชั่นมาก 838 00:41:01,360 --> 00:41:02,530 ฟังก์ชั่นซ้ำง่ายๆ 839 00:41:02,530 --> 00:41:04,530 แต่ส่วนใหญ่ของพวกเขาจะเป็นเช่นนี้ 840 00:41:04,530 --> 00:41:11,170 หากคุณต้องการซ้ำท​​ี่ดี ท้าทายสำหรับการทดสอบให้ลองเขียนโปรแกรม 841 00:41:11,170 --> 00:41:13,230 ค้นหาแบบไบนารีซ้ำ 842 00:41:13,230 --> 00:41:18,950 เพราะถ้าคุณได้ค้นหาไบนารี ปัญหาตั้งสามคุณอาจทำมัน 843 00:41:18,950 --> 00:41:21,730 ซ้ำในวงในขณะที่ 844 00:41:21,730 --> 00:41:23,700 >> แต่มันยังสามารถเขียน ซ้ำ 845 00:41:23,700 --> 00:41:26,310 คุณจะต้องมีการเขียนของคุณเอง ฟังก์ชั่นแยกต่างหากที่จะใช้เวลาบางส่วน 846 00:41:26,310 --> 00:41:29,020 อาร์กิวเมนต์บรรทัดคำสั่งแตกต่างกัน - หรือ ไม่อาร์กิวเมนต์บรรทัดคำสั่งบางอย่าง 847 00:41:29,020 --> 00:41:30,910 ข้อโต้แย้งที่แตกต่างกันเพียงปกติ 848 00:41:30,910 --> 00:41:33,870 แต่คุณสามารถเขียนค้นหาแบบไบนารี ซ้ำได้เป็นอย่างดี 849 00:41:33,870 --> 00:41:36,190 >> นักศึกษา: ดังนั้นคุณอาจจะได้เขียนยัง แทน x ลบ 1 คุณ 850 00:41:36,190 --> 00:41:39,502 อาจมีการเขียน x ลบ ลบหรือคุณอาจจะมี 851 00:41:39,502 --> 00:41:40,830 เขียนลบลบ x 852 00:41:40,830 --> 00:41:44,740 คุณสามารถได้อย่างรวดเร็วเพียงแค่อธิบายว่าทำไม เหล่านั้นจะเป็นสิ่งที่แตกต่างกัน 853 00:41:44,740 --> 00:41:49,510 ต้องการสิ่งที่แตกต่างระหว่าง x ลบลบและลบลบ x? 854 00:41:49,510 --> 00:41:51,320 >> เจสัน Hirschhorn: ไม่ฉันไม่ได้ จะไปลงที่ 855 00:41:51,320 --> 00:41:55,500 แต่ผมจะพูดคุยกับคุณเกี่ยวกับเรื่องนี้หลังจาก ชั้น x ลบลบลบลบ x 856 00:41:55,500 --> 00:41:57,780 พร่อง x 1 857 00:41:57,780 --> 00:41:59,090 แต่พวกเขาทำมันแตกต่างกันเล็กน้อย 858 00:41:59,090 --> 00:42:00,340 แต่ผมไม่ต้องการที่จะไปลงที่ 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 คำถามอื่น ๆ เกี่ยวกับการเรียกซ้ำ หรือฟังก์ชั่นนี้ 861 00:42:09,090 --> 00:42:10,140 ที่ไม่จริงแม้แต่ pseudocode 862 00:42:10,140 --> 00:42:15,060 ที่พื้นในรหัส C คุณจะเขียนนี้ 863 00:42:15,060 --> 00:42:19,393 >> ตกลงคำถามอื่น ๆ เกี่ยวกับหัวข้อที่นี่? 864 00:42:19,393 --> 00:42:19,864 ใช่ 865 00:42:19,864 --> 00:42:23,130 >> นักเรียน: ฉันมี rundown รวดเร็วของ ลอยจุดและความแม่นยำ 866 00:42:23,130 --> 00:42:24,260 >> เจสัน Hirschhorn: ลอย จุดและความแม่นยำ 867 00:42:24,260 --> 00:42:26,920 สามารถคนอย่างรวดเร็วจริงๆ ให้ฉัน rundown ของ 868 00:42:26,920 --> 00:42:28,210 ลอยจุดและความแม่นยำ 869 00:42:28,210 --> 00:42:30,420 ทุกท่านต้องทำเช่นนี้สำหรับคุณ ปัญหาการตั้งค่าเพื่อให้คุณกำลังทั้งหมด 870 00:42:30,420 --> 00:42:31,700 คุ้นเคยกับมัน 871 00:42:31,700 --> 00:42:35,090 หรืออาจจะไม่ทั้งหมดของคุณ 872 00:42:35,090 --> 00:42:36,602 ใคร? 873 00:42:36,602 --> 00:42:39,530 ให้ฉันเป็นจุดเริ่มต้น 874 00:42:39,530 --> 00:42:40,750 ลอยจุดและความแม่นยำ 875 00:42:40,750 --> 00:42:42,380 สิ่งที่เป็นปัญหาหรือไม่ 876 00:42:42,380 --> 00:42:42,960 ใช่ 877 00:42:42,960 --> 00:42:43,680 วิกตอเรีย 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: วาเนสซ่า 879 00:42:44,480 --> 00:42:45,285 >> เจสัน Hirschhorn: วาเนสซ่า 880 00:42:45,285 --> 00:42:45,680 ขอโทษ 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: มีเพียงจำนวน จำกัด ของ ของตัวเลขที่สามารถแสดง 882 00:42:51,550 --> 00:42:57,930 เพราะคุณอยู่ในในของเรา กรณีระบบ 32 บิต 883 00:42:57,930 --> 00:43:03,080 ดังนั้นคุณชนิดของต้อง ทำให้ตัวเลขบาง 884 00:43:03,080 --> 00:43:03,910 >> เจสัน Hirschhorn: เพื่อให้เป็น ตรงขวา 885 00:43:03,910 --> 00:43:08,110 มีเพียงจำนวนหนึ่งของเป็น ตัวเลขที่สามารถแสดง 886 00:43:08,110 --> 00:43:11,770 หากคุณคูณตัวเลขสองมีขนาดใหญ่มาก มันอาจจะล้นจำนวน 887 00:43:11,770 --> 00:43:13,950 ของคุณมีช่องว่างที่จะเป็นตัวแทน จำนวนเต็ม 888 00:43:13,950 --> 00:43:17,930 นั่นเป็นเหตุผลที่บางครั้งเราใช้ ยาวยาวแทน int 889 00:43:17,930 --> 00:43:19,210 ที่มีช่องว่างมากขึ้น 890 00:43:19,210 --> 00:43:21,210 ที่สามารถถือจำนวนมาก 891 00:43:21,210 --> 00:43:24,310 >> ความแม่นยำลอยจุดจะทำอย่างไรกับ ว่า แต่ยังมีจะทำอย่างไรกับ 892 00:43:24,310 --> 00:43:29,300 ความจริงที่ว่าตัวเลขทศนิยมเป็น ไม่ได้เป็นตัวแทนเสมอ 893 00:43:29,300 --> 00:43:29,540 ขอโทษ 894 00:43:29,540 --> 00:43:31,280 ผมขอนำกลับมานี้ขึ้น 895 00:43:31,280 --> 00:43:36,610 เลขฐานสิบ 1.0 ไม่ได้เสมอ แทนเหมือนที่คุณคาดหวัง 896 00:43:36,610 --> 00:43:40,770 1.000000000 897 00:43:40,770 --> 00:43:50,360 บางครั้งมันเป็นแสดงเป็น 1.000000001 หรือ 0.999999999 898 00:43:50,360 --> 00:43:52,780 มันอาจจะถึง 89 โยน ในบางแห่งมี 899 00:43:52,780 --> 00:43:56,560 ดังนั้นตัวเลขทศนิยมที่ไม่ แสดงว่าเหมือนกับที่คุณต้องการ 900 00:43:56,560 --> 00:43:58,430 คาดว่าพวกเขาจะเป็นตัวแทน 901 00:43:58,430 --> 00:44:00,010 >> ดังนั้นในการกำหนดปัญหา - 902 00:44:00,010 --> 00:44:00,860 ว่าเป็นเรื่องที่สอง - 903 00:44:00,860 --> 00:44:05,290 ตั้งสองปัญหาที่เราจัดการกับ หมายเลขจุดลอยเมื่อเราต้องการ 904 00:44:05,290 --> 00:44:08,690 พวกเขาจะเป็นตัวแทนของสิ่งที่เราต้องการ พวกเขาจะเป็นตัวแทนของจำนวน 905 00:44:08,690 --> 00:44:12,860 ของเหรียญหรือจำนวนของเซ็นต์, เราคูณด้วย 100 906 00:44:12,860 --> 00:44:14,750 เรากลมพวกเขา 907 00:44:14,750 --> 00:44:18,660 แล้วเราตัดทุกอย่าง หลังจุดทศนิยม 908 00:44:18,660 --> 00:44:22,020 นั่นคือเพื่อให้แน่ใจว่าพวกเขาจะ จริงเท่ากับว่าสิ่งที่เราต้องการ 909 00:44:22,020 --> 00:44:22,410 พวกเขาให้เท่ากับ 910 00:44:22,410 --> 00:44:26,870 >> เพราะเมื่อคุณใช้สิ่งที่ ลอยและเปิดเป็น int คุณ 911 00:44:26,870 --> 00:44:29,860 ตัดทุกอย่างไปทางขวา ของจุดทศนิยม 912 00:44:29,860 --> 00:44:33,900 เพราะมีบางจุดลอย ไม่แน่ชัด, 100.000 อาจจะ 913 00:44:33,900 --> 00:44:37,440 แสดงเป็น 99.999999999 914 00:44:37,440 --> 00:44:40,350 และถ้าคุณเพียงแค่ตัดออกทุกอย่างเพื่อ ที่เหมาะสมทันทีที่คุณกำลังจะ 915 00:44:40,350 --> 00:44:41,600 ได้รับหมายเลขที่ไม่ถูกต้อง 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 ใช่ 918 00:44:44,180 --> 00:44:45,290 >> นักเรียน: ผมมีคำถาม เกี่ยวกับการคัดเลือกนักแสดง 919 00:44:45,290 --> 00:44:47,500 สิ่งที่สั่งซื้อที่ไม่ได้เกิดขึ้นมีอะไรบ้าง 920 00:44:47,500 --> 00:44:54,480 หากคุณต้องการทำลอยวงเล็บ 1 แบ่ง 10, ไม่ได้ทำ 1 หารด้วย 10 921 00:44:54,480 --> 00:44:58,910 แล้วได้รับ 0.1 จากนั้นเปิด ลงลอย? 922 00:44:58,910 --> 00:45:01,470 >> เจสัน Hirschhorn: ถ้าคุณทำ ลอย 1 หารด้วย 10 - 923 00:45:01,470 --> 00:45:02,550 >> นักเรียน: ใช่แล้วเท่ากับ - 924 00:45:02,550 --> 00:45:04,240 ดีก็จะปกติ มีความเท่าเทียมกันใน - 925 00:45:04,240 --> 00:45:04,690 ใช่ 926 00:45:04,690 --> 00:45:06,760 คุณต้องการที่จะให้มันลอยใช่ไหม 927 00:45:06,760 --> 00:45:12,790 >> เจสัน Hirschhorn: ตกลงดังนั้นเรากำลังจะ การใช้งานที่ทำต่อไปในการหา 928 00:45:12,790 --> 00:45:15,390 คำตอบของคำถามเหล่านี้ ผ่านการเข้ารหัส 929 00:45:15,390 --> 00:45:18,180 เพราะคุณอาจจะมีจำนวนมาก คำถามเหล่านี้นาทีและเป็นวิธีที่ดี 930 00:45:18,180 --> 00:45:19,100 การแก้พวกเขาจะผ่านการเข้ารหัส 931 00:45:19,100 --> 00:45:21,320 ดังนั้นเรากำลังจะรหัสนี้ในขณะนี้ และจากนั้นเราจะกลับไป 932 00:45:21,320 --> 00:45:24,020 รหัสคำถามที่คุณมี 933 00:45:24,020 --> 00:45:24,950 >> ดังนั้นบรรทัดแรก - 934 00:45:24,950 --> 00:45:29,390 ผมไม่ควรจะเขียนมัน - สิ่งที่เป็น สิ่งแรกที่เราต้องการจะทำเมื่อเรา 935 00:45:29,390 --> 00:45:32,250 เปิดไฟล์ใหม่ใน Gedit? 936 00:45:32,250 --> 00:45:34,190 >> นักเรียน: รวม 937 00:45:34,190 --> 00:45:35,920 >> เจสัน Hirschhorn: รวมอะไร 938 00:45:35,920 --> 00:45:37,952 >> นักเรียน: ห้องสมุด CS50 939 00:45:37,952 --> 00:45:39,920 >> เจสัน Hirschhorn: OK 940 00:45:39,920 --> 00:45:42,590 อะไรที่เราควรจะรวมอยู่ 941 00:45:42,590 --> 00:45:46,820 เรากำลังจะไปตรวจสอบสิ่งที่เกิดขึ้น เมื่อคุณโยนสิ่งที่จะลอย 942 00:45:46,820 --> 00:45:48,605 แต่เราทำในสิ่งที่จำเป็นต้องมีถ้าเรา จะเขียนโปรแกรม C? 943 00:45:48,605 --> 00:45:49,300 >> นักเรียน: มาตรฐาน I / O 944 00:45:49,300 --> 00:45:50,625 >> เจสัน Hirschhorn: stdio.h 945 00:45:50,625 --> 00:45:54,880 เราจริงไม่จำเป็นต้องนี้ โปรแกรม cs50.h แม้ว่ามันจะเป็น 946 00:45:54,880 --> 00:45:55,920 มักจะเป็นประโยชน์ที่จะรวมไว้ 947 00:45:55,920 --> 00:45:58,260 แต่เราไม่เคยต้อง stdio.h 948 00:45:58,260 --> 00:45:59,660 >> นักศึกษา: เมื่อเขียนโปรแกรมใน C? 949 00:45:59,660 --> 00:46:15,770 >> เจสัน Hirschhorn: เมื่อเขียนโปรแกรมใน C. 950 00:46:15,770 --> 00:46:17,090 >> ดังนั้นผมจึงบันทึกเป็นไฟล์นี้ค. 951 00:46:17,090 --> 00:46:18,590 ฉันจะได้รับบางส่วนเน้นไวยากรณ์ดี 952 00:46:18,590 --> 00:46:22,890 ที่ผมเขียนเป็นโมฆะภายในหลัก 953 00:46:22,890 --> 00:46:24,792 สิ่งที่ไม่เป็นโมฆะหมายความว่าอย่างไร 954 00:46:24,792 --> 00:46:26,740 >> นักศึกษา: ไม่ได้ใช้ใด ๆ อาร์กิวเมนต์บรรทัดคำสั่ง 955 00:46:26,740 --> 00:46:28,900 >> เจสัน Hirschhorn: หมายถึงความว่างเปล่าในการนี​​้ กรณีที่หลักไม่ได้ใช้ใด ๆ 956 00:46:28,900 --> 00:46:29,700 อาร์กิวเมนต์บรรทัดคำสั่ง 957 00:46:29,700 --> 00:46:32,720 ในกรณีอื่น ๆ ก็หมายความว่าฟังก์ชั่น ไม่ใช้อาร์กิวเมนต์บรรทัดคำสั่ง 958 00:46:32,720 --> 00:46:36,560 หรือฟังก์ชั่นถ้าผมจะเขียนเป็นโมฆะ หลัก (void) ที่จะบอกว่าหลัก 959 00:46:36,560 --> 00:46:38,460 ไม่กลับอะไร 960 00:46:38,460 --> 00:46:39,960 ดังนั้นเป็นโมฆะเพียงหมายถึงอะไร 961 00:46:39,960 --> 00:46:42,510 สิ่งที่ผมจะเขียนถ้าผมต้อง ใช้อาร์กิวเมนต์บรรทัดคำสั่ง? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> นักเรียน: int อาร์คสตริงอาร์โวลต์ 964 00:46:47,150 --> 00:46:49,055 >> เจสัน Hirschhorn: int argc argv สตริง 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 เป็นสิทธิที่? 967 00:46:55,572 --> 00:46:58,720 >> นักเรียน: มันวงเล็บ argv ถ่านดาว 968 00:46:58,720 --> 00:47:01,730 >> เจสัน Hirschhorn: ดังนั้นคุณสามารถเขียน วงเล็บสตริง argv หรือ argv ถ่านดาว 969 00:47:01,730 --> 00:47:03,710 วงเล็บ แต่คุณต้องวงเล็บ 970 00:47:03,710 --> 00:47:06,290 เพราะ argv เป็นอาร์เรย์ ของสตริงจำ 971 00:47:06,290 --> 00:47:07,360 มันไม่ใช่แค่หนึ่งสตริง 972 00:47:07,360 --> 00:47:10,350 ดังนั้นสตริง argv เป็นที่นี่ที่ สายหนึ่งที่เรียกว่า argv 973 00:47:10,350 --> 00:47:13,630 วงเล็บ argv สตริงที่นี่ อาร์เรย์ของสตริง 974 00:47:13,630 --> 00:47:17,865 ดังนั้นวงเล็บ int argc argv สตริง จะเป็นสิ่งที่ฉัน 975 00:47:17,865 --> 00:47:18,810 อาจจะเขียน 976 00:47:18,810 --> 00:47:23,050 >> ดังนั้นคุณจึงต้องการที่จะบันทึกในจำนวนเต็ม 977 00:47:23,050 --> 00:47:24,285 >> นักเรียน: ใช่จำนวนเต็ม 978 00:47:24,285 --> 00:47:25,840 หรือในการลอย 979 00:47:25,840 --> 00:47:26,710 >> เจสัน Hirschhorn: ในลอย? 980 00:47:26,710 --> 00:47:30,790 เหมือนลอย x เท่ากับ 1 หารด้วย 10 981 00:47:30,790 --> 00:47:32,040 >> เจสัน Hirschhorn: OK 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 ฉันจะพิมพ์ออกมาลอยใน printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 คืออะไร? 986 00:47:46,714 --> 00:47:47,560 >> นักเรียน% ฉ 987 00:47:47,560 --> 00:47:48,300 >> เจสัน Hirschhorn: f% 988 00:47:48,300 --> 00:47:50,810 อะไรจำนวนเต็ม 989 00:47:50,810 --> 00:47:52,110 งหรือฉัน 990 00:47:52,110 --> 00:47:53,000 สิ่งที่สตริงหรือไม่ 991 00:47:53,000 --> 00:47:54,240 >> นักเรียน: s 992 00:47:54,240 --> 00:47:56,140 >> เจสัน Hirschhorn: s 993 00:47:56,140 --> 00:47:57,550 ฉันจะได้รับสายใหม่ได้อย่างไร 994 00:47:57,550 --> 00:47:58,800 >> นักเรียน: n แบคสแลช 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> เจสัน Hirschhorn: สิ่งใดที่ฉันกลับมา ถ้าทำงานหลักถูกต้องหรือไม่ 997 00:48:07,100 --> 00:48:08,360 >> นักเรียน: 0 998 00:48:08,360 --> 00:48:09,430 ฉันจะต้องเขียนเส้นที่แม้ว่า? 999 00:48:09,430 --> 00:48:10,170 >> นักเรียน: เลขที่ 1000 00:48:10,170 --> 00:48:11,513 ตกลงเราจะไม่เขียนมันแล้ว 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 ทุกคนสามารถอ่านได้หรือไม่ 1003 00:48:17,190 --> 00:48:18,485 ดูเหมือนบิตขนาดเล็ก 1004 00:48:18,485 --> 00:48:20,160 ทุกคนสามารถมองเห็นหรือควร ฉันจะทำให้มันใหญ่ 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 ผมคิดว่ากล้องที่เราจะทำ มันบิตขนาดใหญ่แม้ว่า 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> เจสัน Hirschhorn: ถ้าผมต้องการที่จะเปิดการทำงานนี้ . c ไฟล์ลงในปฏิบัติการสิ่งที่ 1009 00:48:38,410 --> 00:48:39,260 ฉันจะเขียน? 1010 00:48:39,260 --> 00:48:41,610 >> นักเรียน: ตรวจทดสอบ 1011 00:48:41,610 --> 00:48:42,080 >> เจสัน Hirschhorn: ขอโทษ? 1012 00:48:42,080 --> 00:48:42,790 >> นักเรียน: ตรวจทดสอบ 1013 00:48:42,790 --> 00:48:44,040 >> เจสัน Hirschhorn: ตรวจทดสอบ 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 เราได้พูดคุยเกี่ยวกับ บรรทัดนี้ก่อนหน้านี้ 1016 00:48:48,410 --> 00:48:49,140 เสียงดังกราว 1017 00:48:49,140 --> 00:48:51,270 อะไรเสียงดังกราวหรือไม่ 1018 00:48:51,270 --> 00:48:52,200 ชื่อของคอมไพเลอร์ 1019 00:48:52,200 --> 00:48:53,920 สิ่งที่สายนี้ 1020 00:48:53,920 --> 00:48:55,580 >> นักเรียน: ตั้งขึ้นสำหรับการใช้ GDB 1021 00:48:55,580 --> 00:48:59,230 >> เจสัน Hirschhorn: ชุด มันขึ้นอยู่กับการใช้งานของ GDB 1022 00:48:59,230 --> 00:49:02,338 บรรทัดนี้สิ่งที่ 1023 00:49:02,338 --> 00:49:03,290 >> นักเรียน: รหัสที่มา 1024 00:49:03,290 --> 00:49:06,010 >> เจสัน Hirschhorn: นั่น แฟ้มแหล่งที่มา, คไฟล์. 1025 00:49:06,010 --> 00:49:08,150 สิ่งใดที่ทั้งสองสายจะทำอย่างไร 1026 00:49:08,150 --> 00:49:10,245 หรือทั้งสองไม่ได้สาย 1027 00:49:10,245 --> 00:49:12,300 >> นักเรียน: มันชื่อมันทดสอบ 1028 00:49:12,300 --> 00:49:15,410 >> เจสัน Hirschhorn: ดังนั้น o รีบกล่าวว่า ชื่อมันมีอะไรบางอย่างที่แตกต่างกัน 1029 00:49:15,410 --> 00:49:16,790 และที่นี่คุณจะเรียกมันว่าการทดสอบ 1030 00:49:16,790 --> 00:49:18,900 ถ้าฉันไม่ได้มีที่ใน สิ่งที่มันจะตั้งชื่อนี้ 1031 00:49:18,900 --> 00:49:20,260 >> นักเรียน: a.out 1032 00:49:20,260 --> 00:49:22,340 >> เจสัน Hirschhorn: a.out 1033 00:49:22,340 --> 00:49:25,366 สิ่งนี้จะทำอย่างไร 1034 00:49:25,366 --> 00:49:27,670 >> นักเรียน: ลิงค์ห้องสมุดคณิตศาสตร์ 1035 00:49:27,670 --> 00:49:29,550 >> เจสัน Hirschhorn: มันเชื่อมโยง ในห้องสมุดคณิตศาสตร์ 1036 00:49:29,550 --> 00:49:32,880 เราไม่ได้รวมห้องสมุดคณิตศาสตร์ แต่ ตั้งแต่ที่ร่วมกันเพื่อให้พวกเขาได้ 1037 00:49:32,880 --> 00:49:35,780 ทำให้เขียนเสมอรวม ห้องสมุดคณิตศาสตร์ 1038 00:49:35,780 --> 00:49:39,050 และเช่นเดียวกันนี้รวมถึง ห้องสมุด CS50 1039 00:49:39,050 --> 00:49:43,010 >> ตกลงดังนั้นหากเรารายการตอนนี้เรามี ปฏิบัติการที่เรียกว่าการทดสอบ 1040 00:49:43,010 --> 00:49:45,150 ที่จะดำเนินการเรื่องนี้ผมเขียนทดสอบ 1041 00:49:45,150 --> 00:49:48,330 ผมเห็นว่าจุดลอยของฉัน ตามที่คาดไว้เท่ากับ 0 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 ไม่ว่า - 1044 00:49:51,590 --> 00:49:52,060 ดังนั้น - 1045 00:49:52,060 --> 00:49:55,210 >> นักเรียน: แล้วถ้าคุณใส่ลอยตอนนี้ เหมือนที่คุณโยนมันลอย - 1046 00:49:55,210 --> 00:49:56,870 >> เจสัน Hirschhorn: โพลล์ 1 ถึงลอยได้หรือไม่ 1047 00:49:56,870 --> 00:49:59,180 >> นักศึกษา: ไม่โยนสิ่งที่เต็ม - 1048 00:49:59,180 --> 00:49:59,500 ใช่ 1049 00:49:59,500 --> 00:50:02,460 หากคุณเพียงแค่ไม่ว่าจะ ที่ทำให้มันเป็น 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> เจสัน Hirschhorn: ตกลงอย่างรวดเร็วจริงๆ 1 หารด้วย 10, ผู้ที่มี 1051 00:50:07,170 --> 00:50:08,690 จำนวนเต็มถูกแบ่งออก 1052 00:50:08,690 --> 00:50:13,580 ดังนั้นเมื่อคุณแบ่งจำนวนเต็มพวกเขากำลัง 0, และคุณประหยัดที่ 0 1053 00:50:13,580 --> 00:50:17,170 ลอยเพราะเฉือนเป็น แบ่งจำนวนเต็มเพียง 1054 00:50:17,170 --> 00:50:19,180 ดังนั้นตอนนี้เรากำลังเปลี่ยนบางสิ่งบางอย่าง ลงลอย 1055 00:50:19,180 --> 00:50:21,650 >> ลองดูสิ่งที่เกิดขึ้น 1056 00:50:21,650 --> 00:50:22,900 เราจะทำให้การทดสอบ 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 ดังนั้นตอนนี้เราจะเห็นว่าเฉือนที่ไม่ได้ แบ่งจำนวนเต็มมันก็ลอย 1059 00:50:31,090 --> 00:50:32,640 ส่วนจุดที่ 1060 00:50:32,640 --> 00:50:35,700 เพราะหนึ่งในข้อโต้แย้งของ ได้รับการโยนไปลอย 1061 00:50:35,700 --> 00:50:38,380 ดังนั้นตอนนี้มันก็บอกว่าการรักษานี้ ส่วนเหมือนที่เรากำลังติดต่อกับ 1062 00:50:38,380 --> 00:50:40,140 จุดที่ลอยไม่ได้กับจำนวนเต็ม 1063 00:50:40,140 --> 00:50:42,760 และเพื่อให้เราได้คำตอบที่เราคาดหวัง 1064 00:50:42,760 --> 00:50:44,620 >> ลองดูสิ่งที่เกิดขึ้น - 1065 00:50:44,620 --> 00:50:47,103 อุ่ย 1066 00:50:47,103 --> 00:50:51,646 ถ้าผมอยากจะพิมพ์ทศนิยมมากขึ้น จุดว่าฉันจะทำอย่างนั้น 1067 00:50:51,646 --> 00:50:55,550 >> นักเรียน: จุดจุดฉหรือเป็นจำนวนมาก ตำแหน่งทศนิยมตามที่คุณต้องการ 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> เจสัน Hirschhorn: ดังนั้นฉันพิมพ์ 10 จุดทศนิยม 1070 00:51:04,440 --> 00:51:06,610 และตอนนี้เราจะเห็นเราได้รับ บางสิ่งที่แปลก 1071 00:51:06,610 --> 00:51:09,650 และที่จะไปกลับไปที่คำถามของคุณ เกี่ยวกับจุดลอยไม่แน่ชัด 1072 00:51:09,650 --> 00:51:10,950 มีสิ่งที่แปลกที่เก็บไว้ในที่นี่ 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> ตกลงที่ไม่ตอบคำถามของคุณหรือไม่ 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 คุณไม่ต้องการอะไรอีก รหัสได้อย่างรวดเร็ว 1077 00:51:20,200 --> 00:51:25,470 >> นักเรียน: ฉันแค่อยากจะดูหรือ ไม่ได้ถ้าคุณอิสระขึ้นตัวชี้บางอย่าง 1078 00:51:25,470 --> 00:51:30,410 ไม่ว่าจะเป็นตัวชี้ว่ายังคงมีการเก็บไว้ใน มันอยู่ในสิ่งที่มันเคยเป็น 1079 00:51:30,410 --> 00:51:32,170 ชี้ไปก่อนหน้านี้ 1080 00:51:32,170 --> 00:51:34,100 >> เจสัน Hirschhorn: ตกลง จึงขอทำอย่างนั้น 1081 00:51:34,100 --> 00:51:38,030 PTR ดาวถ่านนี้สร้างตัวแปร เรียกว่า PTR ประเภทถ่านดาว 1082 00:51:38,030 --> 00:51:39,280 ฉันจะเขียน malloc อย่างไร 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: เพียง malloc 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 แต่แล้วมันจะต้องมีขนาดของและ ในกรณีนี้ผมคิดว่าคุณต้องการ 1087 00:51:51,040 --> 00:51:52,465 จะชี้ไปยังถ่าน 1088 00:51:52,465 --> 00:51:54,450 ดังนั้นมันจะเป็นถ่าน 1089 00:51:54,450 --> 00:51:57,520 >> เจสัน Hirschhorn: OK เพื่อให้มากขึ้น ทั่วไป, Inside - 1090 00:51:57,520 --> 00:51:58,770 ขอแก้ไข 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 ภายใน malloc ที่คุณต้องการจำนวน ของไบต์ในกอง 1093 00:52:09,260 --> 00:52:12,320 โดยทั่วไปสิ่งที่เราได้เห็นว่าเรา ทำคือการที่เรากำลังจะ malloc 1094 00:52:12,320 --> 00:52:14,940 สตริงเช่นหรือ อาร์เรย์ของจำนวนเต็ม 1095 00:52:14,940 --> 00:52:21,600 ดังนั้นหากเราต้องการจำนวนเต็ม 10 หรือ 10 ตัวอักษร 10 จะทำให้เรามี 10 1096 00:52:21,600 --> 00:52:24,370 แล้วขนาดของตัวอักษรจะให้ เราขนาดของตัวอักษรที่อยู่ใน 1097 00:52:24,370 --> 00:52:25,120 กรณีนี้เป็น 1 ไบต์ 1098 00:52:25,120 --> 00:52:26,250 เราได้รับ 10 ไบต์ 1099 00:52:26,250 --> 00:52:28,540 ถ้าเราจะเขียนขนาดของ int, ที่จะทำให้เรามี 40 ไบต์ 1100 00:52:28,540 --> 00:52:31,520 >> มากขึ้นโดยทั่วไปภายในของ malloc คือจำนวนของไบต์ที่คุณต้องการ 1101 00:52:31,520 --> 00:52:34,620 ในกรณีนี้เราได้รับ 1 ไบต์ 1102 00:52:34,620 --> 00:52:36,900 ซึ่งดูเหมือนว่าการใช้งานแปลก ของ malloc แต่สำหรับเรา 1103 00:52:36,900 --> 00:52:38,470 เพื่อทำให้ความรู้สึก 1104 00:52:38,470 --> 00:52:40,420 ดังนั้นจึงมีว่า 1105 00:52:40,420 --> 00:52:43,420 >> เรากำลังจะเรียกฟรี 1106 00:52:43,420 --> 00:52:47,040 เราจะกำจัดมันและเราใช้ PTR อีกครั้ง 1107 00:52:47,040 --> 00:52:48,750 และสิ่งที่คุณไม่ต้องการที่จะตรวจสอบ 1108 00:52:48,750 --> 00:52:50,550 >> นักเรียน: ฉันแค่อยากจะตรวจสอบว่า หรือไม่ได้มีอะไร 1109 00:52:50,550 --> 00:52:51,900 ภายในของมัน 1110 00:52:51,900 --> 00:52:53,050 >> เจสัน Hirschhorn: ดังนั้นไม่ว่า มันชี้ไปที่อะไร 1111 00:52:53,050 --> 00:52:57,740 >> นักเรียน: ใช่ว่าไม่ว่าจะเป็น มันยังคงมีอยู่หน่วยความจำ 1112 00:52:57,740 --> 00:53:02,220 >> เจสัน Hirschhorn: ดังนั้นคุณจึงต้องการ ในการตรวจสอบค่าของ PTR หรือไม่ 1113 00:53:02,220 --> 00:53:03,470 >> นักเรียน: ใช่ว่า 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> เจสัน Hirschhorn: สิ่งใดที่ฉันเขียนที่นี่ ถ้าผมต้องการที่จะตรวจสอบค่าของ 1116 00:53:10,160 --> 00:53:11,880 จุด - สิ่งที่จอร์แดน ค่ากล่าวว่า 1117 00:53:11,880 --> 00:53:13,720 หรือสิ่งที่ถูกเก็บไว้ภายในของ PTR? 1118 00:53:13,720 --> 00:53:14,620 >> นักเรียนที่อยู่ในหน่วยความจำ 1119 00:53:14,620 --> 00:53:16,330 >> เจสัน Hirschhorn: ที่อยู่หน่วยความจำ 1120 00:53:16,330 --> 00:53:20,520 ดังนั้นถ้าผมเขียนเพียงแค่นี้ก็จะ ให้ฉันค่าของ PTR 1121 00:53:20,520 --> 00:53:22,800 และฉันจะพิมพ์ออกมา อยู่หน่วยความจำได้หรือไม่ 1122 00:53:22,800 --> 00:53:26,470 สิ่งที่สตริงรูปแบบ สำหรับที่อยู่หน่วยความจำได้หรือไม่ 1123 00:53:26,470 --> 00:53:27,430 >> นักเรียน% พี 1124 00:53:27,430 --> 00:53:28,050 >> เจสัน Hirschhorn:% พี 1125 00:53:28,050 --> 00:53:29,500 % s เป็นสตริง 1126 00:53:29,500 --> 00:53:30,750 % พีเพื่อชี้ 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 เป็นสิทธิที่? 1129 00:53:43,540 --> 00:53:44,790 ที่เหมาะสม 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 ดังนั้น PTR เท่ากับ - 1132 00:53:51,040 --> 00:53:53,350 ก็ยังคงมีบางสิ่งบางอย่างอยู่ในนั้น 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 นี่อาจจะเป็นมากขึ้น คำถามที่น่าสนใจ 1135 00:53:57,645 --> 00:53:59,198 อะไรบรรทัดที่ทำอย่างไร 1136 00:53:59,198 --> 00:54:00,830 >> นักศึกษา: ความผิดพลาด Seg 1137 00:54:00,830 --> 00:54:01,310 >> เจสัน Hirschhorn: อะไรนะ? 1138 00:54:01,310 --> 00:54:02,678 >> นักเรียน: ฉันคิดว่ามัน seg ความผิดพลาด 1139 00:54:02,678 --> 00:54:03,574 >> เจสัน Hirschhorn: หืมม? 1140 00:54:03,574 --> 00:54:04,920 >> นักเรียน: ฉันคิดว่ามันจะเป็นความผิด seg 1141 00:54:04,920 --> 00:54:08,265 >> เจสัน Hirschhorn: ดังนั้นบรรทัดนี้ ของรหัส PTR, ดาว, สิ่งที่ 1142 00:54:08,265 --> 00:54:10,152 ไม่ดาวหมายถึงอะไร 1143 00:54:10,152 --> 00:54:11,240 >> นักเรียน: เนื้อหาของ 1144 00:54:11,240 --> 00:54:11,560 >> เจสัน Hirschhorn: ใช่ 1145 00:54:11,560 --> 00:54:13,910 ไปที่จะได้รับเนื้อหาของ 1146 00:54:13,910 --> 00:54:16,830 ดังนั้นนี่จะไปถึงหน่วยความจำ ที่อยู่ที่นั่นและให้ฉันที่ 1147 00:54:16,830 --> 00:54:21,030 ผมใช้ c% ที่นี่เพราะมี เป็นตัวละครที่เก็บไว้ที่นั่น 1148 00:54:21,030 --> 00:54:23,390 ดังนั้นเรากำลังจะไปที่ที่เราอยู่ เพิ่งเห็น - หรือมันอาจจะเป็น 1149 00:54:23,390 --> 00:54:25,190 นิด ๆ หน่อย ๆ ที่แตกต่างกันนี้ เวลาที่เราเรียกใช้โปรแกรม 1150 00:54:25,190 --> 00:54:28,010 แต่เราจะไปยังที่อยู่ที่ ซึ่งเรารู้ว่ายังคงมีอยู่ 1151 00:54:28,010 --> 00:54:29,260 และดูสิ่งที่มี 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> ดังนั้นมันไม่ได้เป็นความผิด seg 1154 00:54:37,110 --> 00:54:38,970 มันก็ไม่ได้ทำให้เรามีอะไร 1155 00:54:38,970 --> 00:54:43,350 มันอาจจะให้เราจริง บางสิ่งบางอย่างเราก็ไม่สามารถดูได้ 1156 00:54:43,350 --> 00:54:45,110 และที่จะไปกลับไปที่ความคิดนี้ - 1157 00:54:45,110 --> 00:54:47,270 และเราจะไม่ได้รับมากเกินไปใน นี้เพราะที่เกิน 1158 00:54:47,270 --> 00:54:48,460 ขอบเขตของหลักสูตรนี้ 1159 00:54:48,460 --> 00:54:51,260 แต่เราพูดคุยเกี่ยวกับที่นี่ถ้าเรา ไปเกินขอบเขตของอาร์เรย์โดย 1160 00:54:51,260 --> 00:54:54,890 1 เราอาจจะไม่ได้รับในปัญหา 1161 00:54:54,890 --> 00:54:58,550 >> บางครั้งเมื่อคุณเพิ่งออกไปโดยที่ 1 คุณกำลังทำบางอย่างผิดปกติและคุณ 1162 00:54:58,550 --> 00:54:59,220 อาจจะได้รับในปัญหา 1163 00:54:59,220 --> 00:55:00,820 แต่คุณไม่เคยได้รับในปัญหา 1164 00:55:00,820 --> 00:55:05,170 มันขึ้นอยู่กับวิธีการมากของสิ่งที่ไม่ดีคุณ ไม่ว่าคุณกำลังจะได้รับในปัญหา 1165 00:55:05,170 --> 00:55:07,790 ซึ่งไม่ได้บอกว่าจะเลอะเทอะ ด้วยรหัสของคุณ 1166 00:55:07,790 --> 00:55:12,080 แต่มันเป็นเรื่องที่จะบอกว่าโปรแกรมจะไม่ เสมอออกแม้ว่าคุณจะไปที่ไหนสักแห่ง 1167 00:55:12,080 --> 00:55:14,130 คุณไม่ควรที่จะไป 1168 00:55:14,130 --> 00:55:18,170 >> ตัวอย่างที่ดีของที่มีจำนวนมาก คนที่อยู่ในปัญหาของพวกเขาตั้ง 3 ซึ่ง 1169 00:55:18,170 --> 00:55:22,350 เป็น 15 ไม่ได้ตรวจสอบ ขอบเขตของคณะกรรมการ 1170 00:55:22,350 --> 00:55:25,860 เพื่อให้คุณมองไปทางซ้ายมองไป ขวามองไปด้านบนมอง 1171 00:55:25,860 --> 00:55:27,000 ไปที่ด้านล่าง 1172 00:55:27,000 --> 00:55:31,540 แต่คุณไม่ได้ตรวจสอบเพื่อดูว่าด้านบน เป็นจริงไปได้บนกระดาน 1173 00:55:31,540 --> 00:55:35,220 และคนจำนวนมากที่ไม่ว่าและ เปิดที่อยู่ในโปรแกรมของพวกเขาทำงาน 1174 00:55:35,220 --> 00:55:38,960 อย่างสมบูรณ์แบบเพราะในกรณีที่คณะที่ ที่เก็บไว้ในหน่วยความจำถ้าคุณไปหนึ่ง 1175 00:55:38,960 --> 00:55:42,300 ดังกล่าวข้างต้นหรือตรวจสอบว่าหน่วยความจำ ที่อยู่มีไม่อะไร 1176 00:55:42,300 --> 00:55:44,870 โดยเฉพาะอย่างยิ่งที่น่ากลัวเกี่ยวกับที่ ดังนั้นโปรแกรมของคุณไม่ได้ 1177 00:55:44,870 --> 00:55:45,970 จะตะโกนใส่หน้าคุณ 1178 00:55:45,970 --> 00:55:48,870 >> แต่เรายังจะใช้เวลาปิดจุดถ้า คุณไม่ได้ตรวจสอบว่าเพราะคุณ 1179 00:55:48,870 --> 00:55:50,850 กำลังทำสิ่งที่คุณไม่ได้ ควรที่จะทำและคุณอาจมี 1180 00:55:50,850 --> 00:55:51,860 อากาศในปัญหา 1181 00:55:51,860 --> 00:55:54,040 ราคาที่แม้ว่าคุณอาจไม่ได้ 1182 00:55:54,040 --> 00:55:57,790 ดังนั้นนี้คือการแสดงให้เห็นว่าใช่ เรายังคงสามารถไปกับมัน 1183 00:55:57,790 --> 00:55:59,010 และเราจะไม่ได้รับใน ปัญหาในกรณีนี้ 1184 00:55:59,010 --> 00:56:04,000 ถ้าเราพยายามที่จะทำอ่าน 100 ตัวอักษรต่อไปเราต้องการ 1185 00:56:04,000 --> 00:56:06,000 อาจจะได้รับในปัญหา 1186 00:56:06,000 --> 00:56:09,400 และคุณสามารถอ่านรห​​ัสที่อยู่ถัดจาก 100 ตัวอักษรถ้าคุณต้องการด้วยการทำบางอย่าง 1187 00:56:09,400 --> 00:56:10,110 การเรียงลำดับของการวน 1188 00:56:10,110 --> 00:56:10,850 ใช่ 1189 00:56:10,850 --> 00:56:16,250 >> นักเรียน: เนื่องจากเราได้รับมอบหมายว่า พื้นที่ค่าจริงเราจะไม่ 1190 00:56:16,250 --> 00:56:17,050 จริงจะสามารถที่จะเห็นอะไร 1191 00:56:17,050 --> 00:56:21,740 เราควรพยายามด้วยการตั้งค่าที่ เท่ากับชอบคหรืออะไร 1192 00:56:21,740 --> 00:56:22,640 >> เจสัน Hirschhorn: Great คำถาม 1193 00:56:22,640 --> 00:56:25,340 ฉันจะตั้งค่าที่ว่า - 1194 00:56:25,340 --> 00:56:28,980 สิ่งที่บรรทัดของรหัสฉันจะเขียนในบรรทัด เจ็ดที่จะทำสิ่งที่คุณกล่าวว่า 1195 00:56:28,980 --> 00:56:34,040 >> นักเรียน: Star PTR เท่ากับเดียว อ้างคท้ายคำพูดเดียว 1196 00:56:34,040 --> 00:56:36,970 >> เจสัน Hirschhorn: ดังนั้นที่วาง ตัวอักษร C, ในสถานที่นั้น 1197 00:56:36,970 --> 00:56:40,200 เพราะอีกดาวที่ วิธีการไปที่มี 1198 00:56:40,200 --> 00:56:43,320 และเมื่อนำมาใช้ในด้านซ้ายมือของ ผู้ประกอบการที่ได้รับมอบหมายที่เท่ากับ 1199 00:56:43,320 --> 00:56:47,270 ลงเราจะไม่ได้รับที่ มูลค่ามากตามที่กำหนดค่าที่ 1200 00:56:47,270 --> 00:56:48,520 ตอนนี้ขอดูสิ่งที่เกิดขึ้น 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> เรานำสิ่งที่มี และมันก็มี 1203 00:56:56,770 --> 00:56:58,000 เราเรียกว่าฟรี 1204 00:56:58,000 --> 00:57:00,100 บางสิ่งที่อาจจะเกิดขึ้น ในกอง 1205 00:57:00,100 --> 00:57:01,890 ดังนั้นจึงไม่ได้มีอีกต่อไป 1206 00:57:01,890 --> 00:57:07,440 แต่อีกครั้งที่เราไม่ได้รับ ปัญหาสำหรับไปที่นั่น 1207 00:57:07,440 --> 00:57:10,260 >> ฉันทำเช่นนี้ออกมาในรหัสเพื่อแสดงให้เห็นถึง ที่มากของเหล่านี้ 1208 00:57:10,260 --> 00:57:12,410 คำถามที่คุณมีที่พวกเขากำลัง ที่น่าสนใจจริงๆ 1209 00:57:12,410 --> 00:57:13,650 คำตอบเป็นจำนวนมากเวลา 1210 00:57:13,650 --> 00:57:15,260 และพวกเขากำลังคำถามที่ดีจริงๆ 1211 00:57:15,260 --> 00:57:19,010 และคุณสามารถคิดพวกเขาออกใน ของคุณเองหากยกตัวอย่างเช่น 1212 00:57:19,010 --> 00:57:19,990 เราไม่ได้อยู่ในส่วน 1213 00:57:19,990 --> 00:57:20,940 ใช่ 1214 00:57:20,940 --> 00:57:24,430 >> นักเรียน: เพราะคุณไม่ได้ส่ง ชี้ทุกที่คุณจะต้อง 1215 00:57:24,430 --> 00:57:26,530 ใช้ malloc? 1216 00:57:26,530 --> 00:57:28,400 >> เจสัน Hirschhorn: ดังนั้นนี้ไปกลับ คำถามแรกของคุณ 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 มันเป็นเพียงตัวแปรในประเทศหรือไม่ 1219 00:57:29,980 --> 00:57:32,280 malloc ที่นี่ไม่ได้เป็นที่น่าสนใจ 1220 00:57:32,280 --> 00:57:35,260 การใช้ malloc ที่นี่ไม่ได้ ที่น่าสนใจเพราะมันเป็น 1221 00:57:35,260 --> 00:57:36,500 เพียงตัวแปรท้องถิ่น 1222 00:57:36,500 --> 00:57:40,970 >> นักศึกษา: ดังนั้นคุณสามารถทำถ่าน PTR ดาวเท่ากับสวัสดี? 1223 00:57:40,970 --> 00:57:41,400 >> เจสัน Hirschhorn: โอ้ 1224 00:57:41,400 --> 00:57:43,300 ดังนั้นเราจะได้รับกลับในขณะนี้ คำถามแรกของคุณ 1225 00:57:43,300 --> 00:57:46,885 ฉันคิดว่าคุณไม่พอใจ กับคำตอบของฉัน 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 เช่นเดียวกับที่ 1228 00:57:49,226 --> 00:57:49,682 >> นักเรียน: ใช่ 1229 00:57:49,682 --> 00:57:50,932 รอ 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> เจสัน Hirschhorn: และสถานที่ที่ คุณต้องการที่จะพิมพ์ออกมา 1232 00:57:57,850 --> 00:58:00,026 ดังนั้นเราจะพิมพ์ออกสตริงเช่นนั้นหรือไม่ 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> นักเรียน: ที่น่าสนใจ 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> เจสัน Hirschhorn: ดังนั้นนี้พูดอย่างนี้ อาร์กิวเมนต์ที่มีชนิดของตัวละคร 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 ดังนั้นนี้ควรจะเป็นตัวละคร 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> นักเรียน: เพียงแค่ใช้เวลาหนึ่งก่อน 1241 00:58:26,280 --> 00:58:28,610 >> เจสัน Hirschhorn: ดังนั้นนี้ คือสิ่งที่ฉันกล่าวว่าก่อนที่จะ 1242 00:58:28,610 --> 00:58:34,240 เช่นฉันกล่าวว่ายังไม่ได้จัดเก็บ สตริงภายในตัวชี้ตัวแปร 1243 00:58:34,240 --> 00:58:35,120 มันเก็บ - 1244 00:58:35,120 --> 00:58:36,350 >> นักเรียน: ค่าแรก ของสตริง 1245 00:58:36,350 --> 00:58:40,810 >> เจสัน Hirschhorn: ที่อยู่ของ ค่าแรกของสตริง 1246 00:58:40,810 --> 00:58:46,940 ถ้าเราจะพิมพ์ออกมานี้เรากำลัง ได้รับค่าที่อยู่ภายในตัวชี้ 1247 00:58:46,940 --> 00:58:51,005 และเราจะเห็นว่ามันเป็นจริง อยู่หน่วยความจำ 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> ไม่ที่ทำให้รู้สึก? 1250 00:58:56,440 --> 00:58:56,940 ขอโทษ 1251 00:58:56,940 --> 00:58:58,996 รอไม่ว่าคำตอบของคุณ คำถามแม้ว่า 1252 00:58:58,996 --> 00:58:59,790 >> นักเรียน: ใช่ 1253 00:58:59,790 --> 00:59:05,830 >> เจสัน Hirschhorn: บรรทัดของรหัสนี้เป็น การสร้างสตริงและหลังจากนั้นอีก 1254 00:59:05,830 --> 00:59:09,115 ตัวชี้ตัวแปรที่ชี้ สตริงที่อาร์เรย์ที่ 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 ใช่ 1257 00:59:14,980 --> 00:59:19,200 >> นักศึกษา: ดังนั้นถ้าเราไปหน่วยความจำหนึ่ง อยู่ต่อไปเราจะได้รับต่อชั่วโมงหรือไม่ 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 มันได้รับการจัดเก็บเป็นสตริง? 1260 00:59:23,150 --> 00:59:24,400 >> เจสัน Hirschhorn: เช่นเดียวกับเราได้ - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 ดังนั้นนี่คือที่มีค่าที่จะทำ 1263 00:59:30,790 --> 00:59:33,780 นี่คือการคำนวณจุดที่คุณผู้ชาย ได้เห็นมาก่อนและควรจะ 1264 00:59:33,780 --> 00:59:35,550 ค่อนข้างพอใจกับ 1265 00:59:35,550 --> 00:59:36,905 นี้จะคล้ายกับการเขียน - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 ถ้าเราจะเขียนบรรทัดของรหัสนี้ เราได้เห็นสัญกรณ์อาร์เรย์ก่อน 1268 00:59:46,350 --> 00:59:55,900 นี้จะให้เราสอง ค่าในอาร์เรย์นี้ชั่วโมง 1269 00:59:55,900 --> 01:00:05,010 >> ถ้าเราทำอย่างนี้นี้ยังควรให้ เราค่าที่สองในอาร์เรย์ 1270 01:00:05,010 --> 01:00:08,320 เพราะมันเป็นไปไม่ได้กับหน่วยความจำ ที่อยู่ของสิ่งแรก แต่ 1271 01:00:08,320 --> 01:00:10,530 อยู่หน่วยความจำของสิ่งที่มากกว่าหนึ่ง 1272 01:00:10,530 --> 01:00:14,360 แล้ว dereferences ประกอบดาว ตัวชี้ที่ 1273 01:00:14,360 --> 01:00:16,940 และอีกครั้งที่เรามาดู 1274 01:00:16,940 --> 01:00:18,664 เราได้รับเอชอีกครั้ง 1275 01:00:18,664 --> 01:00:20,980 >> นักเรียน: สิ่งที่ไม่ตรง dereference หมายถึงอะไร 1276 01:00:20,980 --> 01:00:23,650 >> เจสัน Hirschhorn: dereference เป็นคำแฟนซีสำหรับการเดินทางไปยัง 1277 01:00:23,650 --> 01:00:26,390 ไปที่นั้นและได้รับสิ่งที่มี คือการ dereference ตัวชี้ 1278 01:00:26,390 --> 01:00:28,240 มันเป็นเพียงคำแฟนซีสำหรับที่ 1279 01:00:28,240 --> 01:00:29,986 >> นักศึกษา: ถ้าเราต้องการที่จะพิมพ์ สตริงทั้งสามารถเรา 1280 01:00:29,986 --> 01:00:31,930 ทำเครื่องหมายชี้? 1281 01:00:31,930 --> 01:00:33,490 >> เจสัน Hirschhorn: ตกลงเราเป็น จะหยุดที่นี่ 1282 01:00:33,490 --> 01:00:35,480 พวกเราจะไปสิ้นสุดที่นี่ 1283 01:00:35,480 --> 01:00:41,760 เครื่องหมายจะช่วยให้คุณที่อยู่ของ สถานที่ดังนั้นเมื่อคุณทำเครื่องหมายของ 1284 01:00:41,760 --> 01:00:44,080 ตัวแปรจะช่วยให้คุณอยู่ ที่ตัวแปรที่ถูกเก็บไว้ 1285 01:00:44,080 --> 01:00:48,580 ตัวชี้เครื่องหมายที่จะทำให้คุณ ที่อยู่ของ PTR PTR ที่อยู่ในหน่วยความจำ 1286 01:00:48,580 --> 01:00:50,140 >> เราไม่ได้จะไปใน กับตัวอย่างนี้ 1287 01:00:50,140 --> 01:00:52,640 คุณสามารถคิดออกเหล่านี้ สิ่งที่ตัวคุณเอง 1288 01:00:52,640 --> 01:00:55,740 แต่ครั้งนี้อาจแม้จะผา บิตเกินกว่าสิ่งที่คุณจำเป็นต้องรู้เพื่อ 1289 01:00:55,740 --> 01:00:58,000 ขอบเขตของการนี​​้ระยะกลาง - 1290 01:00:58,000 --> 01:00:59,070 หรือตอบคำถามนี้แทน 1291 01:00:59,070 --> 01:01:00,270 ขอโทษ 1292 01:01:00,270 --> 01:01:03,770 >> เราจะเดินหน้าต่อไปเพราะผมจะ ชอบที่จะทำอย่างใดอย่างหนึ่งปัญหาการเข้ารหัส 1293 01:01:03,770 --> 01:01:05,100 ก่อนที่เวลาจะขึ้น 1294 01:01:05,100 --> 01:01:09,340 และเราจะให้รหัสสิ่งที่ผมคิดว่า เป็นที่น่าสนใจที่สุดของเหล่านี้ 1295 01:01:09,340 --> 01:01:11,020 ตัวอย่าง atoi 1296 01:01:11,020 --> 01:01:14,520 ดังนั้นนี่เป็นคำถามที่ คำถามที่สองปีที่ผ่านมา 1297 01:01:14,520 --> 01:01:17,810 และฉันมีไว้ในคณะกรรมการที่นี่ 1298 01:01:17,810 --> 01:01:20,680 >> คนถูกถามเกี่ยวกับการตอบคำถาม - 1299 01:01:20,680 --> 01:01:23,640 พวกเขาได้รับ tesxt น้อยมากขึ้นใน คำถาม แต่ผมตัดออก 1300 01:01:23,640 --> 01:01:26,640 ข้อความเพราะมันเป็นที่ไม่จำเป็น สำหรับวัตถุประสงค์ของเราในขณะนี้ 1301 01:01:26,640 --> 01:01:29,180 มันเป็นเพียงแค่พื้นหลังบาง กับสิ่งที่ได้ atoi 1302 01:01:29,180 --> 01:01:31,425 แต่คุณทุกคนรู้และมีความ คุ้นเคยกับ atoi 1303 01:01:31,425 --> 01:01:35,620 >> ผมขอแนะนำให้คุณรหัสนี้ บนแผ่นกระดาษ 1304 01:01:35,620 --> 01:01:39,310 ฉันยังแนะนำให้คุณใช้กลยุทธ์ที่ ที่เราได้ไปแล้วกว่า 1305 01:01:39,310 --> 01:01:41,040 จำนวนมากในส่วนของเรา 1306 01:01:41,040 --> 01:01:44,130 ก่อนให้แน่ใจว่าคุณเข้าใจ สิ่งที่ atoi ของการทำ 1307 01:01:44,130 --> 01:01:47,580 วาดภาพหรือมากับ ภาพจิตของมันอยู่ในหัวของคุณ 1308 01:01:47,580 --> 01:01:51,120 ถัดไปเขียนออก pseudocode นี้ 1309 01:01:51,120 --> 01:01:53,120 ในการตอบคำถามถ้าทั้งหมดที่คุณได้รับคือ pseudocode อย่างน้อยคุณ 1310 01:01:53,120 --> 01:01:54,550 ใส่อะไรลง 1311 01:01:54,550 --> 01:02:00,070 แล้วแผนที่ pseudocode ที่ลงบน C. หากคุณมีการตรวจสอบในของคุณ 1312 01:02:00,070 --> 01:02:03,760 pseudocode เช่นตรวจสอบว่าสิ่งที่ เป็นที่ 1 ที่แผนที่บนถ้า 1313 01:02:03,760 --> 01:02:05,750 สภาพและอื่น ๆ 1314 01:02:05,750 --> 01:02:07,850 และในที่สุดรหัสโปรแกรมใน C. 1315 01:02:07,850 --> 01:02:15,000 >> ดังนั้นกลับไป atoi ไปและใช้เวลาห้านาที รหัสนี้บนแผ่น 1316 01:02:15,000 --> 01:02:19,480 กระดาษซึ่งอาจจะเกี่ยวกับ ระยะเวลาที่คุณจะใช้เวลาใน 1317 01:02:19,480 --> 01:02:21,260 คำถามที่จะ atoi รหัส 1318 01:02:21,260 --> 01:02:27,060 ห้าถึง 15 นาทีห้าถึง 12, ห้าถึง 10 นาทีเป็นเรื่องเกี่ยวกับจำนวนเงินที่ 1319 01:02:27,060 --> 01:02:30,150 เวลาที่คุณจะใช้จ่ายเกี่ยวกับเรื่องนี้ คำถามในแบบทดสอบ 1320 01:02:30,150 --> 01:02:31,670 ดังนั้นใช้เวลาห้านาทีตอนนี้กรุณา 1321 01:02:31,670 --> 01:02:35,957 และถ้าคุณมีคำถามใด ๆ เพิ่ม มือและฉันจะมารอบของคุณ 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [CONVERSATIONS SIDE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> เจสัน Hirschhorn: OK ดังนั้น ที่ห้านาที 1326 01:08:37,580 --> 01:08:39,880 ที่อาจจะเกี่ยวกับปริมาณของ เวลาที่คุณต้องการใช้จ่ายในการที่เกี่ยวกับการทดสอบที่ 1327 01:08:39,880 --> 01:08:42,120 อาจจะต่ำสุดของช่วงเวลานั้น 1328 01:08:42,120 --> 01:08:44,010 เราจะสรุปในบิต 1329 01:08:44,010 --> 01:08:45,740 ให้เราเริ่มต้นการเข้ารหัสนี้ 1330 01:08:45,740 --> 01:08:49,479 และถ้าเราไม่ได้รับทั้งหมดทางผ่าน คำตอบนี้และนี้ 1331 01:08:49,479 --> 01:08:54,189 คำถามทดสอบที่มีอยู่อีกครั้ง 2011 เป็นฤดูใบไม้ร่วงเมื่อคำถามนี้ 1332 01:08:54,189 --> 01:08:54,913 ปรากฏตัวในการทดสอบ 1333 01:08:54,913 --> 01:08:57,830 >> และมันก็คุ้มค่าที่แปดจุด ในการตอบคำถามแล้ว 1334 01:08:57,830 --> 01:09:01,140 แปดจุดที่อยู่ในระดับไฮเอนด์ของ จำนวนของจุดบางสิ่งบางอย่างที่มีค่า 1335 01:09:01,140 --> 01:09:04,790 คำถามส่วนใหญ่จะอยู่ในช่วง หนึ่งถึงหกจุด 1336 01:09:04,790 --> 01:09:08,500 ดังนั้นนี่คือความท้าทายมากขึ้น คำถามเพื่อตรวจสอบว่า 1337 01:09:08,500 --> 01:09:09,750 ทุกคนสามารถได้รับฉันเริ่มต้นได้อย่างไร 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> โดยทั่วไปสิ่งที่เราจะ ที่จะต้องการจะทำอย่างไรกับนี้ 1340 01:09:15,380 --> 01:09:17,550 ทำงาน atoi เหตุผล? 1341 01:09:17,550 --> 01:09:19,569 สิ่งที่เราต้องการจะทำอย่างไร 1342 01:09:19,569 --> 01:09:22,279 ดังนั้นเรากำลังจะเขียน pseudocode บาง 1343 01:09:22,279 --> 01:09:24,090 >> นักเรียน: แปลงตัวอักษร เป็นจำนวนเต็ม 1344 01:09:24,090 --> 01:09:26,700 >> เจสัน Hirschhorn: แปลงตัวอักษร เป็นจำนวนเต็ม 1345 01:09:26,700 --> 01:09:27,479 ตกลง 1346 01:09:27,479 --> 01:09:30,870 ดังนั้นวิธีการที่จำนวนตัวอักษรที่เรา จะต้องไปผ่าน 1347 01:09:30,870 --> 01:09:32,295 >> นักเรียน: ทั้งหมดของพวกเขา 1348 01:09:32,295 --> 01:09:34,100 >> นักเรียน: ตัวละครทั้งหมด ในสตริง 1349 01:09:34,100 --> 01:09:35,540 >> เจสัน Hirschhorn: ทั้งหมดของ ตัวอักษรในสตริง 1350 01:09:35,540 --> 01:09:42,180 ดังนั้นหากเราต้องการที่จะไปผ่านทุก ตัวละครในสตริงสิ่งที่เป็นสิ่งที่ 1351 01:09:42,180 --> 01:09:44,560 ใน C ที่เราเคยเห็นที่ได้รับอนุญาต เราจะผ่านไปทุก 1352 01:09:44,560 --> 01:09:45,939 ตัวละครในสตริง? 1353 01:09:45,939 --> 01:09:46,819 >> นักศึกษา: สำหรับวง 1354 01:09:46,819 --> 01:09:48,069 >> เจสัน Hirschhorn: สำหรับวง 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 ดังนั้นเราจะห่วงผ่าน ตัวละครทุกตัวใน s 1357 01:09:55,330 --> 01:10:00,940 >> แล้วเราเป็นสิ่งที่จะต้องการที่จะทำ เมื่อเราได้รับตัวละครรึเปล่า 1358 01:10:00,940 --> 01:10:02,480 บอกว่าเรากำลังจะผ่านไป 90 1359 01:10:02,480 --> 01:10:03,460 เราได้รับ 9 1360 01:10:03,460 --> 01:10:04,240 มันเป็นตัวละคร 1361 01:10:04,240 --> 01:10:07,440 สิ่งที่เราต้องการจะทำอย่างไรกับ ตัวละครที่ 9? 1362 01:10:07,440 --> 01:10:10,082 >> นักเรียน: ลบมันออกมาจากตัวละคร 0? 1363 01:10:10,082 --> 01:10:11,860 >> นักเรียนเพิ่ม 0? 1364 01:10:11,860 --> 01:10:13,350 >> เจสัน Hirschhorn: ลบ มันออกมาจากตัวละคร 0? 1365 01:10:13,350 --> 01:10:13,800 >> นักเรียน: ใช่ 1366 01:10:13,800 --> 01:10:15,573 >> เจสัน Hirschhorn: ทำไม คุณต้องการที่จะทำเช่นนั้น 1367 01:10:15,573 --> 01:10:16,560 >> นักเรียน: [ไม่ได้ยิน] 1368 01:10:16,560 --> 01:10:17,010 มูลค่า 1369 01:10:17,010 --> 01:10:18,380 int ค่าของมัน 1370 01:10:18,380 --> 01:10:21,580 >> เจสัน Hirschhorn: ตกลงดังนั้นเราจึงใช้เวลา 9 ตัวอักษรที่ลบจาก 1371 01:10:21,580 --> 01:10:25,820 0 ตัวละครที่จะได้รับ เลข 9 ที่เกิดขึ้นจริง 1372 01:10:25,820 --> 01:10:27,070 หวาน 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 และคุณจะรู้ว่าตัวละครที่ 9 ลบ 0 ตัวละครคือ 9? 1375 01:10:37,000 --> 01:10:39,222 แผนภูมิสิ่งที่คุณไม่ดู? 1376 01:10:39,222 --> 01:10:43,130 >> นักเรียน: มีเหตุผลเก้า สถานที่ระหว่าง 9 และ 0 1377 01:10:43,130 --> 01:10:44,620 หรือคุณอาจจะมองไปที่ตาราง ASCII 1378 01:10:44,620 --> 01:10:45,120 >> เจสัน Hirschhorn: ตาราง ASCII 1379 01:10:45,120 --> 01:10:46,490 แต่ใช่คุณถูกต้องเช่นกัน 1380 01:10:46,490 --> 01:10:47,780 ดังนั้นเราลบ 0 1381 01:10:47,780 --> 01:10:49,010 ดังนั้นตอนนี้เรามีจำนวนเต็ม 9 1382 01:10:49,010 --> 01:10:49,970 และเราทำในสิ่งที่ต้องการจะทำอย่างไรกับที่ 1383 01:10:49,970 --> 01:10:54,970 ถ้าเรามี 90 ก็จำนวนเต็มแรก เราได้สิ่งที่เราต้องการจะทำอย่างไร 1384 01:10:54,970 --> 01:10:58,180 >> นักเรียน: ฉันใส่ในจำนวนเต็มชั่วคราว อาร์เรย์แล้วทำคณิตศาสตร์กับมัน 1385 01:10:58,180 --> 01:11:02,088 หลังจากนั้นจะทำให้มันกลายเป็นที่สิ้นสุด 1386 01:11:02,088 --> 01:11:03,020 >> เจสัน Hirschhorn: OK 1387 01:11:03,020 --> 01:11:06,990 >> นักศึกษา: คุณสามารถเริ่มต้นที่จุดสิ้นสุดของ อาร์เรย์และแล้วก้าวไปข้างหน้าเพื่อ 1388 01:11:06,990 --> 01:11:10,350 ว่าทุกครั้งที่คุณเดินหน้าต่อไป คุณคูณด้วย 10 1389 01:11:10,350 --> 01:11:10,830 >> เจสัน Hirschhorn: OK 1390 01:11:10,830 --> 01:11:12,250 ที่เสียงเหมือนสวย ความคิดที่น่าสนใจ 1391 01:11:12,250 --> 01:11:16,040 เราสามารถเริ่มต้นที่จุดสิ้นสุดของอาเรย์ของเรา และเราสามารถใช้ strleng 1392 01:11:16,040 --> 01:11:17,030 เราสามารถใช้ strleng ที่นี่ 1393 01:11:17,030 --> 01:11:18,870 เราจะได้รับความยาวของสตริงของเรา 1394 01:11:18,870 --> 01:11:20,100 เราเริ่มต้นในช่วงปลาย 1395 01:11:20,100 --> 01:11:29,170 และ + คนแรกเราก็ใช้เวลาที่ จำนวนเต็มและบางทีเราสร้างเช่น 1396 01:11:29,170 --> 01:11:32,270 ตัวแปรจำนวนเต็มใหม่ขึ้นด้านบนที่ เราเก็บทุกอย่าง 1397 01:11:32,270 --> 01:11:37,340 ดังนั้นเราจึงห่วงผ่านถ่านทุก s จาก กลับไปที่หน้าเราลบ 0 1398 01:11:37,340 --> 01:11:42,790 แล้วเราจะเอามันและขึ้นอยู่กับ ซึ่งมันก็คือเราคูณ 1399 01:11:42,790 --> 01:11:45,860 โดยอำนาจของ 10 1400 01:11:45,860 --> 01:11:50,644 เพราะคนแรกที่สิ่งที่เราทำ คูณตัวขวาสุดโดย? 1401 01:11:50,644 --> 01:11:51,440 >> นักเรียน 10 0 1402 01:11:51,440 --> 01:11:53,170 >> เจสัน Hirschhorn: 10 0 1403 01:11:53,170 --> 01:11:56,010 สิ่งใดที่เราคูณสอง ตัวขวาสุดโดย? 1404 01:11:56,010 --> 01:11:57,450 >> นักเรียน: [ไม่ได้ยิน] 1405 01:11:57,450 --> 01:11:57,960 >> เจสัน Hirschhorn: อะไรนะ? 1406 01:11:57,960 --> 01:11:59,150 >> นักเรียน: 10 ถึง 1 1407 01:11:59,150 --> 01:12:00,420 >> เจสัน Hirschhorn: 10 ถึง 1 1408 01:12:00,420 --> 01:12:03,754 ตัวขวาสุดที่สาม 1409 01:12:03,754 --> 01:12:04,580 >> นักเรียน 10 ถึง 2 1410 01:12:04,580 --> 01:12:05,350 >> เจสัน Hirschhorn: 10 ถึง 2 1411 01:12:05,350 --> 01:12:07,200 >> นักเรียน: ขอโทษนะฉันไม่เข้าใจ สิ่งที่เรากำลังทำอยู่ที่นี่ 1412 01:12:07,200 --> 01:12:08,640 >> เจสัน Hirschhorn: ตกลง ขอกลับไปแล้ว 1413 01:12:08,640 --> 01:12:12,500 ดังนั้นเรากำลังจะได้รับ ผ่านในสตริง 1414 01:12:12,500 --> 01:12:14,470 เพราะเรากำลังเขียน atoi 1415 01:12:14,470 --> 01:12:15,260 ดังนั้นเราจึงได้รับการส่งผ่านไปในสาย 1416 01:12:15,260 --> 01:12:17,640 บอกว่าเรากำลังจะผ่านไป ในสาย 90 1417 01:12:17,640 --> 01:12:19,930 >> สิ่งแรกที่เรากำลังจะทำคือการตั้ง ตัวแปรจำนวนเต็มใหม่ที่เรากำลัง 1418 01:12:19,930 --> 01:12:22,150 เพียงแค่จะสร้าง เป็นจำนวนเต็มใหม่ของเรา 1419 01:12:22,150 --> 01:12:24,630 นั่นคือสิ่งที่เรากำลังจะ ที่จะกลับมาในตอนท้าย 1420 01:12:24,630 --> 01:12:30,110 เราจำเป็นต้องไปผ่านทุกตัวอักษรใน สตริงเพราะเราได้กำหนด 1421 01:12:30,110 --> 01:12:34,430 ที่เราจำเป็นต้องสัมผัสกันอย่างใดอย่างหนึ่งและ แล้วเพิ่มเป็นจำนวนเต็มใหม่ของเรา 1422 01:12:34,430 --> 01:12:36,330 >> แต่เราไม่สามารถเพียงแค่เพิ่มเป็นจำนวน 1423 01:12:36,330 --> 01:12:38,270 เราก็ไม่สามารถใช้เวลา 9 และ เพิ่ม 9 ถึงจำนวนเต็มของเรา 1424 01:12:38,270 --> 01:12:40,560 มันขึ้นอยู่กับสิ่งที่เกิดขึ้น มันอยู่ในสาย 1425 01:12:40,560 --> 01:12:42,960 เรากำลังจะต้องคูณ โดยอำนาจของ 10 1426 01:12:42,960 --> 01:12:45,580 เพราะนั่นคือวิธีการที่ฐาน 10 ผลงาน 1427 01:12:45,580 --> 01:12:49,050 >> ดังนั้นเรากำลังจะได้รับที่เกิดขึ้นจริง ตัวอักษรหรือตัวเลขที่เกิดขึ้นจริง 1428 01:12:49,050 --> 01:12:53,860 จำนวนโดยการลบตัวละคร 0 จากตัวละคร 9 เหมือนที่เราทำกับ 1429 01:12:53,860 --> 01:12:57,560 ลบตัวอักษรทุนจาก สิ่งที่ตัวละครของเรามีหนึ่งใน 1430 01:12:57,560 --> 01:12:58,120 ปัญหาเหล​​่านั้น 1431 01:12:58,120 --> 01:13:04,190 ดังนั้นเราจริงจะได้รับหมายเลขจาก 0 ถึง 9 บันทึกเป็นจำนวนจริงและเราจะ 1432 01:13:04,190 --> 01:13:07,590 คูณด้วยพลังงานจาก 10 ขึ้น กับสถานที่ที่เราอยู่ในสาย 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 แล้วเรากำลังจะเพิ่มกลับ เป็นตัวแปรจำนวนเต็มใหม่ของเรา 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> ดังนั้นสิ่งนี้จะมีลักษณะที่จะ ได้ - เราจะวาดกว่าที่นี่ 1437 01:13:37,890 --> 01:13:40,086 ถ้าเราได้รับการส่งผ่านไปในสาย 90 - 1438 01:13:40,086 --> 01:13:41,336 >> นักเรียน: [ไม่ได้ยิน] 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> เจสัน Hirschhorn: แต่ atoi ใช้สตริง 1441 01:13:45,540 --> 01:13:46,350 ดังนั้นเรากำลังจะผ่านไป ที่ถือค​​รอง 1442 01:13:46,350 --> 01:13:49,900 เราจะได้รับการส่งผ่านไปใน 90 1443 01:13:49,900 --> 01:13:51,540 เราไปจากด้านหลังไปด้านหน้า 1444 01:13:51,540 --> 01:13:53,920 เราใช้ 0 1445 01:13:53,920 --> 01:13:55,080 >> นักเรียน: ฉันขอโทษ 1446 01:13:55,080 --> 01:13:55,880 อาจจะเป็นคนโง่ 1447 01:13:55,880 --> 01:13:59,440 ถ้าเราได้รับการส่งผ่านไปในสตริง ทำไมเป็น 90 สิ่งที่เรากำลัง 1448 01:13:59,440 --> 01:14:00,260 ได้รับการส่งผ่านไปมีอะไรบ้าง 1449 01:14:00,260 --> 01:14:03,160 90 เพราะเป็นจำนวนเต็ม 1450 01:14:03,160 --> 01:14:06,820 >> เจสัน Hirschhorn: เพราะ atoi ใช้เวลา สตริงและเปลี่ยนมันเป็นจำนวนเต็ม 1451 01:14:06,820 --> 01:14:08,320 ตัวแทนของสตริงที่ 1452 01:14:08,320 --> 01:14:13,650 แต่สาย 90 ไม่ได้เป็นจำนวนเต็ม 90 หรือ 90 จำนวน 1453 01:14:13,650 --> 01:14:17,920 สาย 90 เป็นอาร์เรย์ของทั้งสองหรือ ตัวละครทั้งสามค่อนข้าง 9 1454 01:14:17,920 --> 01:14:22,740 ตัวอักษร 0 ตัวอักษรและ 0 ทับขวาตัวอักษร 1455 01:14:22,740 --> 01:14:26,260 >> และเรากำลังเขียน atoi เพราะสำหรับ ตัวอย่างเช่นเมื่อคุณใช้คำสั่ง 1456 01:14:26,260 --> 01:14:30,230 อาร์กิวเมนต์บรรทัดและจะถูกบันทึกไว้ใน argv ก็บันทึกเป็นสตริง 1457 01:14:30,230 --> 01:14:32,940 แต่ถ้าคุณต้องการที่จะรักษามันเป็นตัวเลข คุณต้องการที่จะแปลงเป็น 1458 01:14:32,940 --> 01:14:34,700 เลขที่เกิดขึ้นจริง 1459 01:14:34,700 --> 01:14:37,210 ซึ่งเราได้ชุดใดชุดหนึ่งปัญหาของเรา 1460 01:14:37,210 --> 01:14:38,800 ซึ่งที่เราทำในจำนวน ของชุดปัญหาของเรา 1461 01:14:38,800 --> 01:14:41,690 ทุกคนที่เอาจำนวนเต็ม เป็นอาร์กิวเมนต์บรรทัดคำสั่ง 1462 01:14:41,690 --> 01:14:46,490 เพื่อที่ว่าทำไมฟังก์ชัน atoi ของเรา ใช้เวลาสตริง 1463 01:14:46,490 --> 01:14:51,910 >> ดังนั้นอีกครั้งในตัวอย่างของเราที่นี่เรา จะใช้เวลาหนึ่งที่ผ่านมา 1464 01:14:51,910 --> 01:14:55,050 เรากำลังจะลบตัวอักษร 0 จากนั้นเพราะตัวละคร 0 1465 01:14:55,050 --> 01:14:58,810 ลบออกด้วยอักขระ 0 จะช่วยให้คุณ 0 จำนวนจริงตามที่ 1466 01:14:58,810 --> 01:15:00,950 คณิตศาสตร์ ASCII ที่เราทำ 1467 01:15:00,950 --> 01:15:04,870 >> เพราะตัวละครจะแสดงเป็น แตกต่างจากของพวกเขาที่เกิดขึ้นจริง - 1468 01:15:04,870 --> 01:15:08,830 เป็นตัวละครที่ยกตัวอย่างเช่น ตัวพิมพ์เล็กเป็น 97 1469 01:15:08,830 --> 01:15:10,260 มันไม่ - โอ๊ะ! 1470 01:15:10,260 --> 01:15:13,290 มันไม่ใช่สิ่งที่คุณคาดหวัง ให้เป็น 0 ตัวอย่างเช่น 1471 01:15:13,290 --> 01:15:16,200 ดังนั้นคุณต้องลบ ตัวละครที่จะได้รับ 0 1472 01:15:16,200 --> 01:15:18,950 >> ดังนั้นเรากำลังจะทำที่นี่ เพื่อให้ได้จำนวนที่เกิดขึ้นจริง 1473 01:15:18,950 --> 01:15:22,560 และจากนั้นเราจะคูณด้วย พลังงานจาก 10 ขึ้นอยู่กับที่ 1474 01:15:22,560 --> 01:15:27,030 ที่อยู่ในสายแล้วใช้เวลาที่ และเพิ่มผู้ถือสถานที่ของเรา 1475 01:15:27,030 --> 01:15:32,520 ตัวแปรเพื่อให้เราสามารถขึ้นมาด้วย จำนวนเต็มใหม่ของเราสุดท้าย 1476 01:15:32,520 --> 01:15:35,080 ไม่ที่ทำให้รู้สึกถึงทุกคนหรือไม่ 1477 01:15:35,080 --> 01:15:37,730 >> ดังนั้นเราจะไม่ให้รหัสนี้ ตอนนี้เพราะเรา 1478 01:15:37,730 --> 01:15:38,830 ที่ได้รับในเวลาสั้น 1479 01:15:38,830 --> 01:15:40,860 ฉันขอโทษสำหรับระยะเวลาของการที่ 1480 01:15:40,860 --> 01:15:44,620 แต่นี้คือสิ่งที่หวังว่าคุณจะ จะสามารถที่จะทำในคำถาม - ที่ 1481 01:15:44,620 --> 01:15:47,710 อย่างน้อยที่สุดได้รับ pseudocode นี้ เขียนออกมา 1482 01:15:47,710 --> 01:15:50,840 >> แล้วถ้าเราจะเขียน pseudocode จริงเราสามารถทำเช่นนี้ 1483 01:15:50,840 --> 01:15:51,490 สวยได้อย่างรวดเร็ว 1484 01:15:51,490 --> 01:15:55,230 แต่ละบรรทัดของความเห็นของเราที่เราเขียน นี่แปลว่าเกี่ยวกับ 1485 01:15:55,230 --> 01:15:56,970 หนึ่งบรรทัดของรหัส C 1486 01:15:56,970 --> 01:16:01,780 ประกาศตัวแปรการเขียนใหม่ ห่วงการลบบางบาง 1487 01:16:01,780 --> 01:16:07,070 คูณและการกำหนดบางส่วน 1488 01:16:07,070 --> 01:16:09,020 เราต้องการอาจยังต้องการที่จะ เขียนเส้นผลตอบแทน 1489 01:16:09,020 --> 01:16:12,040 นอกจากนี้เรายังอาจต้องการที่จะใส่ การตรวจสอบบางอย่างในที่นี่ 1490 01:16:12,040 --> 01:16:12,655 ใช่ 1491 01:16:12,655 --> 01:16:15,720 >> นักศึกษา: ดังนั้นเราจึงสามารถรักษา ในฐานะที่เป็นสายที่เกิดขึ้นจริง 1492 01:16:15,720 --> 01:16:18,730 เพราะผมรู้ว่ามันเป็นเพียงแค่ที่อยู่ 1493 01:16:18,730 --> 01:16:22,090 เช่นเดียวกับวิธีการที่คุณจะได้รับความยาวของ สตริงถูกส่งผ่าน 1494 01:16:22,090 --> 01:16:25,310 >> เจสัน Hirschhorn: ดังนั้นวิธีการทำ ความยาวของสายได้หรือไม่ 1495 01:16:25,310 --> 01:16:25,830 strlen 1496 01:16:25,830 --> 01:16:26,660 >> นักเรียน: strlen ใช่ 1497 01:16:26,660 --> 01:16:30,550 แต่คุณสามารถใส่ในฐานะ อาร์กิวเมนต์สำหรับการที่ 1498 01:16:30,550 --> 01:16:34,620 >> เจสัน Hirschhorn: ดังนั้น strlen ใช้เวลาดาวถ่าน 1499 01:16:34,620 --> 01:16:38,090 และเป็นไปตามดาวถ่านที่และมัน ช่วยให้การนับจนกว่าจะได้รับการ 1500 01:16:38,090 --> 01:16:41,865 เครื่องหมาย 0 strlen เป็นจริง หนึ่งในโปรแกรมอื่น ๆ ที่เรา 1501 01:16:41,865 --> 01:16:42,850 กำลังจะรหัส 1502 01:16:42,850 --> 01:16:44,560 นั่นเป็นอีกคนหนึ่งที่ดีที่จะรหัส 1503 01:16:44,560 --> 01:16:47,270 หนึ่งที่ง่ายขึ้นเล็กน้อยเพราะถ้า คุณจะคิดเกี่ยวกับการที่ 1504 01:16:47,270 --> 01:16:47,830 แนวคิด - 1505 01:16:47,830 --> 01:16:51,620 ผมก็บอกว่ามันออกมาดัง ๆ - strlen ดังต่อไปนี้ ชี้และช่วยให้ไปและ 1506 01:16:51,620 --> 01:16:54,210 การนับและการติดตามจน คุณมาถึงเครื่องหมาย 0 1507 01:16:54,210 --> 01:16:56,530 >> นักเรียน: ตกลงได้มัน 1508 01:16:56,530 --> 01:17:00,200 >> เจสัน Hirschhorn: ดังนั้นที่ดีที่สุดของ โชคดีในการตอบคำถาม 0 วันพรุ่งนี้ 1509 01:17:00,200 --> 01:17:03,170 หากคุณมีคำถามใด ๆ ที่ฉันจะ จะอยู่นอกหลังจากนี้ 1510 01:17:03,170 --> 01:17:05,610 อย่าลังเลที่จะส่งอีเมลฉัน 1511 01:17:05,610 --> 01:17:08,480 เอื้อมมือออกไปลุยด้วยตัวคุณเองถ้าคุณ ไม่ได้อยู่ในส่วนของฉันหรือได้รับของฉัน 1512 01:17:08,480 --> 01:17:10,005 อีเมลถ้าคุณต้องการมัน 1513 01:17:10,005 --> 01:17:13,140 >> หากคุณต้องการที่จะแปลกออกและเพียงแค่ส่ง อีเมล์อีเมล์หมดไส้หมดพุงฉันจะ 1514 01:17:13,140 --> 01:17:16,710 ส่งคุณกลับมาเหมือนหน้ายิ้ม, หรือเหมือนเรื่องตลกหรือสิ่งที่ 1515 01:17:16,710 --> 01:17:18,190 ดังนั้นอย่าลังเลที่จะทำเช่นนั้นได้เป็นอย่างดี 1516 01:17:18,190 --> 01:17:20,750 โชคดีอีกครั้งและผมจะ เห็นคุณในสัปดาห์หน้าทั้งหมด 1517 01:17:20,750 --> 01:17:23,435