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