1 00:00:00,000 --> 00:00:11,320 2 00:00:11,320 --> 00:00:13,260 >> DAVID ลัน: สวัสดีและ ยินดีต้อนรับกลับไป CS50 3 00:00:13,260 --> 00:00:14,860 ดังนั้นนี่คือจุดสิ้นสุดของสัปดาห์ที่สี่ 4 00:00:14,860 --> 00:00:16,680 เพียงหนึ่งในการประกาศครั้งแรก 5 00:00:16,680 --> 00:00:19,600 ที่เรียกว่าห้าจันทร์ดังนั้น ขึ้นมานี้มาจันทร์ 6 00:00:19,600 --> 00:00:22,800 นี่คือโอกาสที่จะเปลี่ยนจาก SAT / UNSAT ให้เกรดเป็นตัวอักษรหรือจาก 7 00:00:22,800 --> 00:00:24,130 เกรดเป็นตัวอักษร SAT / UNSAT 8 00:00:24,130 --> 00:00:27,130 annoyingly กระบวนการที่จะต้อง ลายเซ็นเพราะคุณต้องกรอก 9 00:00:27,130 --> 00:00:28,770 ออกหนึ่งในบรรดารูปแบบเพิ่ม / ลดลงสีชมพู 10 00:00:28,770 --> 00:00:31,680 >> เพราะในทางเทคนิค SAT / UNSAT รุ่นและรุ่นเกรดเป็นตัวอักษร 11 00:00:31,680 --> 00:00:33,320 มีตัวเลขที่แตกต่างกันแคตตาล็อก 12 00:00:33,320 --> 00:00:34,240 แต่ไม่มีเรื่องใหญ่ 13 00:00:34,240 --> 00:00:36,620 เพียงแค่มาถึงผมหรือร็อบ หรือลอเรนที่จุดใด ๆ 14 00:00:36,620 --> 00:00:39,550 หรือส่งอีเมลถึงเราถ้าคุณไม่ได้ชนิด ของเอกสารที่คุณต้องการในวันนี้และเรา 15 00:00:39,550 --> 00:00:43,410 จะต้องแน่ใจว่าจะช่วยให้คุณใช้ ดูแลว่าก่อนที่จันทร์ 16 00:00:43,410 --> 00:00:45,780 >> ขวาทั้งหมดดังนั้นวันนี้ - 17 00:00:45,780 --> 00:00:47,630 จริงมีบิตของการสะท้อนของ 18 00:00:47,630 --> 00:00:51,070 เราสามารถโทนฉันลงเล็กน้อย? 19 00:00:51,070 --> 00:00:51,730 ตกลง 20 00:00:51,730 --> 00:00:54,850 ดังนั้นวันนี้เราจะแนะนำหัวข้อ ที่รู้จักกันเป็นตัวชี้ 21 00:00:54,850 --> 00:00:57,770 และฉันจะยอมรับว่าเป็นหนึ่งใน หัวข้อที่ซับซ้อนมากขึ้นว่าเรามีแนวโน้มที่จะ 22 00:00:57,770 --> 00:01:00,960 ครอบคลุมในชั้นนี้หรือจริงๆใด ๆ หลักสูตรเบื้องต้นที่ใช้ C. 23 00:01:00,960 --> 00:01:05,510 >> แต่ใช้คำของฉันสำหรับมันโดยเฉพาะอย่างยิ่ง ถ้าใจของคุณรู้สึกก้มลงอีกเล็กน้อย 24 00:01:05,510 --> 00:01:07,100 ในวันนี้และในสัปดาห์ที่จะมาถึง 25 00:01:07,100 --> 00:01:10,340 มันไม่ได้เป็นตัวแทนของคุณได้รับ เลวร้ายใดที่นี้มันก็หมายความว่า 26 00:01:10,340 --> 00:01:13,360 มันเป็นหัวข้อที่มีความซับซ้อนโดยเฉพาะอย่างยิ่ง ฉันสัญญาว่าเพียงไม่กี่สัปดาห์ 27 00:01:13,360 --> 00:01:17,610 ด้วยเหตุนี้ดูเหมือนจะเกินไปอย่างยอดเยี่ยม ตรงไปตรงมาในการหวนกลับ 28 00:01:17,610 --> 00:01:18,720 >> ผมยังจำได้จนถึงทุกวันนี้ 29 00:01:18,720 --> 00:01:22,190 ผมกำลังนั่งอยู่ในเอลเลียต Dining Hall, นั่งถัดจาก TF Nishat ฉันเมธา 30 00:01:22,190 --> 00:01:24,070 ที่มีถิ่นที่อยู่ของเอลเลียตบ้านเป็น 31 00:01:24,070 --> 00:01:26,340 และด้วยเหตุผลบางอย่างนี้ หัวข้อการคลิกเพียง 32 00:01:26,340 --> 00:01:29,430 ซึ่งก็คือการบอกว่าฉันก็พยายามที่ กับมันสำหรับจำนวนของเวลาที่บาง แต่ฉัน 33 00:01:29,430 --> 00:01:33,610 จะทำของฉันดีที่สุดที่จะช่วยให้หลีกเลี่ยงการใด ๆ ดังกล่าว การต่อสู้กับหัวข้อว่าในท้ายที่สุด 34 00:01:33,610 --> 00:01:34,580 ที่มีประสิทธิภาพมาก 35 00:01:34,580 --> 00:01:37,350 >> ในความเป็นจริงหนึ่งในหัวข้อที่เราจะหารือเกี่ยวกับ ในสัปดาห์ที่จะมาถึงที่ 36 00:01:37,350 --> 00:01:41,130 รักษาความปลอดภัยของและวิธีที่คุณสามารถจริง ใช้ประโยชน์จากเครื่องในรูปแบบ 37 00:01:41,130 --> 00:01:42,320 ที่ไม่ได้ตั้งใจ 38 00:01:42,320 --> 00:01:45,850 และ exploitations เหล่านั้นมักจะมี ผลมาจากข้อบกพร่องผิดพลาดที่เรา 39 00:01:45,850 --> 00:01:49,740 ทำให้คนโดยไม่เข้าใจบางอย่าง ของการดำเนินงานพื้นฐาน 40 00:01:49,740 --> 00:01:52,250 รายละเอียดผ่านทางโปรแกรมที่จะทำ 41 00:01:52,250 --> 00:01:55,410 >> ตอนนี้เพื่อให้ดูเหมือนทั้งหมดของผู้ใช้มากขึ้น เป็นกันเอง, ฉันคิดว่าฉันเล่น 10 42 00:01:55,410 --> 00:01:59,680 ตัวอย่างที่สองของ claymation เล็ก ๆ น้อย ๆ รูปที่ชื่อบิงกี้ที่ถูกนำไป 43 00:01:59,680 --> 00:02:03,020 ชีวิตโดยเพื่อนของเราที่ Stanford, Parlante ศาสตราจารย์นิค 44 00:02:03,020 --> 00:02:06,753 ดังนั้นให้ฉันเพื่อให้คุณนี้ ทีเซอร์ของบิงกี้ที่นี่ 45 00:02:06,753 --> 00:02:09,520 >> [เล่นภาพวิดีโอ] 46 00:02:09,520 --> 00:02:10,380 >> -เฮ้บิงกี้ 47 00:02:10,380 --> 00:02:11,050 ตื่นนอน 48 00:02:11,050 --> 00:02:13,610 ก็ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน 49 00:02:13,610 --> 00:02:14,741 >> มีอะไรที่? 50 00:02:14,741 --> 00:02:16,440 เรียนรู้เกี่ยวกับตัวชี้? 51 00:02:16,440 --> 00:02:17,928 โอ้ Goodie 52 00:02:17,928 --> 00:02:18,920 >> [เล่นวิดีโอจบ] 53 00:02:18,920 --> 00:02:20,670 >> DAVID ลัน: นั่นคือ Stanford สาขาวิชาวิทยาการคอมพิวเตอร์ 54 00:02:20,670 --> 00:02:23,194 ดังนั้นเพิ่มเติมเกี่ยวกับการที่จะมาถึง 55 00:02:23,194 --> 00:02:24,930 >> [APPLAUSE] 56 00:02:24,930 --> 00:02:26,660 >> DAVID ลัน: ขออภัยนิค 57 00:02:26,660 --> 00:02:30,680 >> ดังนั้นจำได้ว่าครั้งสุดท้ายที่เราสิ้นสุดเมื่อวันที่ นี้น่าตื่นเต้นที่น่าตื่นเต้นจริงๆ 58 00:02:30,680 --> 00:02:32,960 โดยฟังก์ชั่นนี้ เพียงแค่ไม่ได้ทำงาน 59 00:02:32,960 --> 00:02:34,960 อย่างน้อยอย่างสังหรณ์ใจมันให้ความรู้สึก เหมือนมันควรจะทำงาน 60 00:02:34,960 --> 00:02:37,600 เพียงแค่การแลกเปลี่ยนค่า ของจำนวนเต็มสองจำนวน 61 00:02:37,600 --> 00:02:40,915 แต่จำได้ว่าตอนที่เราพิมพ์ออกมา ค่าเดิมในหนึ่งหลักและ 62 00:02:40,915 --> 00:02:44,210 สองพวกเขาก็ยังคงเป็นหนึ่งและ สองและไม่ได้และเป็นหนึ่งในสอง 63 00:02:44,210 --> 00:02:46,070 >> เพื่อให้ฉันจริงสลับ ไปยังเครื่องใช้ไฟฟ้า 64 00:02:46,070 --> 00:02:50,180 และที่ผมเขียนขึ้นเล็กน้อยของรหัสโครงกระดูกใน ความก้าวหน้าของที่นี่ที่ผมอ้างว่า x 65 00:02:50,180 --> 00:02:52,500 จะเป็น 1, y จะเป็น 2 66 00:02:52,500 --> 00:02:54,810 จากนั้นผมก็พิมพ์ออกมาทั้งสองของพวกเขา ค่า F กับการพิมพ์ 67 00:02:54,810 --> 00:02:57,540 >> จากนั้นผมก็เรียกร้องลงที่นี่ที่ เรากำลังจะเปลี่ยนพวกเขา 68 00:02:57,540 --> 00:03:00,800 ผมออกจากจุดที่ว่างเปล่าที่นี่สำหรับเราที่จะ กรอกข้อมูลลงในวันนี้ในเวลาเพียงสักครู่ 69 00:03:00,800 --> 00:03:03,380 จากนั้นฉันจะอ้างว่า ตัวแปรทั้งสองได้รับเปลี่ยน 70 00:03:03,380 --> 00:03:04,770 แล้วฉันจะพิมพ์ พวกเขาออกมาอีกครั้ง 71 00:03:04,770 --> 00:03:07,090 และเพื่อหวังว่าผมจะเห็น 1, 2 72 00:03:07,090 --> 00:03:07,380 2, 1 73 00:03:07,380 --> 00:03:09,830 ที่ง่ายสุดคือ เป้าหมายตอนนี้ 74 00:03:09,830 --> 00:03:12,430 >> ดังนั้นทำอย่างไรเราไปเกี่ยวกับการแลกเปลี่ยน ตัวแปรทั้งสอง? 75 00:03:12,430 --> 00:03:17,220 ดีถ้าผมเสนอนี่ที่ถ้วยเหล่านี้ อาจเป็นตัวแทนของหน่วยความจำในคอมพิวเตอร์ 76 00:03:17,220 --> 00:03:19,070 นี้เป็นเพียงไม่กี่กัดนี้ เป็นอีกหนึ่งกัดไม่กี่ 77 00:03:19,070 --> 00:03:23,260 อาจอาสาสมัครที่เราได้มาขึ้นและ ผสมเครื่องดื่มบางอย่างเราถ้าคุ้นเคย? 78 00:03:23,260 --> 00:03:23,920 มาขึ้น 79 00:03:23,920 --> 00:03:24,815 คุณชื่ออะไร? 80 00:03:24,815 --> 00:03:25,260 >> JESS: Jess 81 00:03:25,260 --> 00:03:25,690 >> DAVID ลัน: Jess 82 00:03:25,690 --> 00:03:26,540 มาขึ้น Jess 83 00:03:26,540 --> 00:03:29,180 ถ้าคุณไม่รังเกียจที่เราต้องใส่ Google แก้วกับคุณเพื่อให้เราสามารถ 84 00:03:29,180 --> 00:03:30,430 ทำให้เป็นอมตะนี้ 85 00:03:30,430 --> 00:03:32,800 86 00:03:32,800 --> 00:03:34,670 ตกลงแก้ว 87 00:03:34,670 --> 00:03:37,250 บันทึกวิดีโอ 88 00:03:37,250 --> 00:03:43,103 และตกลงเราเป็นที่ดีที่จะ ไปกับเจนี่ 89 00:03:43,103 --> 00:03:43,810 ทั้งหมดขวา 90 00:03:43,810 --> 00:03:45,120 Nice to meet you 91 00:03:45,120 --> 00:03:47,720 >> ดังนั้นสิ่งที่ฉันอยากให้คุณทำที่นี่ - ถ้าคุณทำได้อย่างรวดเร็ว - 92 00:03:47,720 --> 00:03:51,040 เพียงแค่เราเทครึ่งแก้วสีส้ม น้ำครึ่งแก้วนม, 93 00:03:51,040 --> 00:03:55,710 ที่เป็นตัวแทนของตัวเลขที่มีประสิทธิภาพ 1 ในหนึ่งถ้วยและที่ 2 ในถ้วยอื่น ๆ 94 00:03:55,710 --> 00:04:01,380 95 00:04:01,380 --> 00:04:02,630 >> นี้เป็นไปได้ภาพที่ดี 96 00:04:02,630 --> 00:04:04,910 97 00:04:04,910 --> 00:04:05,860 >> JESS: ขออภัย 98 00:04:05,860 --> 00:04:06,330 >> DAVID ลัน: ไม่ไม่ 99 00:04:06,330 --> 00:04:08,703 ก็ OK 100 00:04:08,703 --> 00:04:10,120 ไนซ์ 101 00:04:10,120 --> 00:04:12,950 ขวาทั้งหมดเพื่อให้เรามีสี่ไบต์ มูลค่าของน้ำส้ม 102 00:04:12,950 --> 00:04:14,460 เราจะเรียกมันว่ามูลค่า 1 103 00:04:14,460 --> 00:04:16,579 ตอนนี้อีกสี่ไบต์มูลค่าของนม 104 00:04:16,579 --> 00:04:18,519 จะเรียกว่า 2 มูลค่า 105 00:04:18,519 --> 00:04:20,440 ดังนั้น x และ y ตามลำดับ 106 00:04:20,440 --> 00:04:23,450 >> ทั้งหมดขวาดังนั้นตอนนี้ถ้างานในมือ - สำหรับคุณ Jess ในด้านหน้าของทั้งหมด 107 00:04:23,450 --> 00:04:24,270 เพื่อนร่วมชั้นของคุณ - 108 00:04:24,270 --> 00:04:28,510 คือการการสลับค่าของ x และ y ดังกล่าว ที่เราต้องการในน้ำส้ม 109 00:04:28,510 --> 00:04:32,070 ถ้วยอื่น ๆ และนมในถ้วยนี้วิธีการ อาจจะคุณ - ก่อนที่คุณจะทำจริง 110 00:04:32,070 --> 00:04:34,020 มัน - ไปเกี่ยวกับการทำเช่นนี้? 111 00:04:34,020 --> 00:04:35,220 >> ตกลงตัดสินใจที่ชาญฉลาด 112 00:04:35,220 --> 00:04:36,340 ดังนั้นคุณต้องมีหน่วยความจำมากขึ้นอีกนิด 113 00:04:36,340 --> 00:04:38,190 เพื่อขอจัดสรรชั่วคราว ถ้วยถ้าคุณจะ 114 00:04:38,190 --> 00:04:40,540 และตอนนี้ดำเนินการต่อไปสลับ x และ y 115 00:04:40,540 --> 00:04:52,950 116 00:04:52,950 --> 00:04:53,530 >> ยอดเยี่ยม 117 00:04:53,530 --> 00:04:54,420 ทำอย่างนั้นได้เป็นอย่างดี 118 00:04:54,420 --> 00:04:55,670 ขอบคุณมากเจส 119 00:04:55,670 --> 00:04:59,520 120 00:04:59,520 --> 00:05:00,020 นี่ไง 121 00:05:00,020 --> 00:05:01,950 ของที่ระลึกเล็ก ๆ น้อย ๆ 122 00:05:01,950 --> 00:05:04,350 >> OK เพื่อให้เห็นได้ชัดในความคิดง่ายสุด 123 00:05:04,350 --> 00:05:07,500 สมบูรณ์ใช้งานง่ายที่เราจำเป็นต้องบิต พื้นที่จัดเก็บมากขึ้น - ในรูปแบบนี้ 124 00:05:07,500 --> 00:05:09,750 ถ้วย - ถ้าเราจริงต้องการ สลับสองตัวแปรเหล่านี้ 125 00:05:09,750 --> 00:05:11,110 ดังนั้นขอทำตรงนั้น 126 00:05:11,110 --> 00:05:14,330 ขึ้นที่นี่ในระหว่างที่ฉันเรียกร้องฉัน จะต้องทำบางอย่างสลับฉันจะ 127 00:05:14,330 --> 00:05:15,720 ไปข้างหน้าและประกาศชั่วคราว 128 00:05:15,720 --> 00:05:17,980 และฉันจะตั้งค่าให้เท่ากับการพูด, x 129 00:05:17,980 --> 00:05:21,110 >> แล้วฉันจะเปลี่ยนค่าของ x เช่นเดียวกับเจสไม่ได้อยู่ที่นี่กับ 130 00:05:21,110 --> 00:05:23,200 นมและน้ำผลไม้สีส้ม ให้เท่ากับ y 131 00:05:23,200 --> 00:05:27,460 และฉันจะเปลี่ยน y จะเท่ากับ ที่จะไม่ x เพราะตอนนี้เราจะ 132 00:05:27,460 --> 00:05:29,530 ติดอยู่ในวงกลม แต่ค่อนข้าง temp 133 00:05:29,530 --> 00:05:33,170 ฉันชั่วคราว - หรือที่ Jess ชั่วคราวใส่น้ำส้ม 134 00:05:33,170 --> 00:05:35,460 ก่อนที่จะ clobbering ว่า ถ้วยด้วยนม 135 00:05:35,460 --> 00:05:37,250 >> เพื่อให้ฉันไปข้างหน้าในขณะนี้และทำให้เรื่องนี้ 136 00:05:37,250 --> 00:05:39,210 มันเรียกว่า noswap.c 137 00:05:39,210 --> 00:05:41,190 และตอนนี้ให้ฉันทำงานไม่มี Swap 138 00:05:41,190 --> 00:05:43,910 และอันที่จริงผมเห็นถ้าฉันขยาย หน้าต่างนิด ๆ หน่อย ๆ ว่า 139 00:05:43,910 --> 00:05:45,160 x 1, y คือ 2 140 00:05:45,160 --> 00:05:47,230 แล้ว x 2, y 1 141 00:05:47,230 --> 00:05:51,910 >> แต่จำได้ว่าในวันจันทร์เราทำสิ่งที่ น้อยแตกต่างกันอย่างไรครับ 142 00:05:51,910 --> 00:05:56,760 ดำเนินการแทนฟังก์ชันช่วยเหลือ, ถ้าคุณจะว่าจริง ๆ แล้วเป็นโมฆะ 143 00:05:56,760 --> 00:05:58,010 ผมเรียกมันว่า swap 144 00:05:58,010 --> 00:06:01,600 ผมให้มันสองพารามิเตอร์และฉันเรียกว่า พวกเขาและฉันเรียกพวกเขาว่าข 145 00:06:01,600 --> 00:06:04,380 >> ตรงไปตรงมาที่ฉันสามารถเรียกพวกเขาว่า x และ y 146 00:06:04,380 --> 00:06:06,040 ไม่มีอะไรที่จะหยุดอะไร ฉันจากการทำที่ 147 00:06:06,040 --> 00:06:08,140 แต่ผมจะเถียงมันแล้ว เล็ก ๆ น้อย ๆ ที่ไม่ชัดเจน 148 00:06:08,140 --> 00:06:11,910 เพราะการเรียกคืนวันจันทร์ที่เรา อ้างว่าพารามิเตอร์เหล่านี้ 149 00:06:11,910 --> 00:06:13,650 สำเนาของค่าที่ส่งเข้า 150 00:06:13,650 --> 00:06:15,640 ดังนั้นจึงเป็นเพียง messes กับของคุณ ใจผมคิดว่าถ้าคุณใช้ 151 00:06:15,640 --> 00:06:17,370 ว่าตัวแปรเดียวกัน 152 00:06:17,370 --> 00:06:20,150 >> ดังนั้นฉันแทนจะเรียกพวกเขา และ b เพียงเพื่อความชัดเจน 153 00:06:20,150 --> 00:06:21,840 แต่เราจะเรียกพวกเขามากที่สุด สิ่งที่เราต้องการ 154 00:06:21,840 --> 00:06:26,280 และฉันจะคัดลอกและวาง ได้อย่างมีประสิทธิภาพรหัสจากมีขึ้นนี้ 155 00:06:26,280 --> 00:06:27,170 ลงที่นี่ 156 00:06:27,170 --> 00:06:29,110 เพราะผมเพิ่งเห็นว่าการทำงาน 157 00:06:29,110 --> 00:06:30,790 ดังนั้นที่อยู่ในรูปร่างที่ดีงาม 158 00:06:30,790 --> 00:06:37,390 และฉันจะเปลี่ยนฉันไป x, x ของฉัน เพื่อ, y ขของฉันและ y ของฉันไปที่ข 159 00:06:37,390 --> 00:06:39,130 >> ดังนั้นในคำอื่น ๆ ตรรกะเดียวกันแน่นอน 160 00:06:39,130 --> 00:06:40,850 สิ่งเดียวที่แน่นอนว่าเจสได้ 161 00:06:40,850 --> 00:06:44,350 แล้วสิ่งหนึ่งที่ฉันต้องทำขึ้น ที่นี่แน่นอนคือตอนนี้เรียกนี้ 162 00:06:44,350 --> 00:06:45,990 ฟังก์ชั่นหรือเรียกใช้ฟังก์ชันนี้ 163 00:06:45,990 --> 00:06:50,430 ดังนั้นผมจึงจะเรียกฟังก์ชั่นนี้มีสอง ปัจจัยการผลิต, x และ y, และกดบันทึก 164 00:06:50,430 --> 00:06:52,300 >> ทั้งหมดขวาดังนั้นพื้นฐาน สิ่งเดียวกัน 165 00:06:52,300 --> 00:06:55,570 ในความเป็นจริงผมอาจจะทำโปรแกรม โดยไม่จำเป็นที่ซับซ้อนโดย 166 00:06:55,570 --> 00:07:00,820 การเขียนฟังก์ชั่นที่เพียงการ บางหกบรรทัดของรหัสในขณะที่ผม 167 00:07:00,820 --> 00:07:02,970 ก่อนหน้านี้ได้ดำเนินการ นี้ในเวลาเพียงสาม 168 00:07:02,970 --> 00:07:06,230 >> เพื่อให้ฉันไปข้างหน้าในขณะนี้และ remake นี้ทำให้ไม่มี Swap 169 00:07:06,230 --> 00:07:07,920 ทั้งหมดขวาฉันเมาขึ้นที่นี่ 170 00:07:07,920 --> 00:07:11,290 นี้ควรจะเป็นข้อผิดพลาดที่คุณอาจ ดูมากขึ้นทั่วไปว่าเป็นของคุณ 171 00:07:11,290 --> 00:07:12,380 โปรแกรมที่ได้รับความซับซ้อนมากขึ้น 172 00:07:12,380 --> 00:07:13,470 แต่มีการแก้ไขที่ง่ายที่สุด 173 00:07:13,470 --> 00:07:15,650 ผมขอเลื่อนกลับขึ้นไปที่นี่ 174 00:07:15,650 --> 00:07:18,190 >> และข้อผิดพลาดแรกที่ฉันเห็นคืออะไร 175 00:07:18,190 --> 00:07:19,520 ประกาศโดยปริยาย 176 00:07:19,520 --> 00:07:21,466 ที่ไม่ปกติจะระบุอะไร? 177 00:07:21,466 --> 00:07:22,830 โอ้ฉันลืมต้นแบบ 178 00:07:22,830 --> 00:07:26,900 ฉันลืมที่จะสอนคอมไพเลอร์ที่ swap จะไปอยู่แม้เขาจะ 179 00:07:26,900 --> 00:07:28,920 ไม่ได้อยู่ที่จุดเริ่มต้นมาก ของโปรแกรม 180 00:07:28,920 --> 00:07:35,780 ดังนั้นฉันแค่จะพูดเป็นโมฆะ swap, int, int b, อัฒภาค 181 00:07:35,780 --> 00:07:37,280 >> ดังนั้นฉันไม่ได้ไป reimplement มัน 182 00:07:37,280 --> 00:07:39,140 แต่ตอนนี้มันตรงกับสิ่งที่ลงไปที่นี่ 183 00:07:39,140 --> 00:07:42,530 แจ้งให้ทราบและขาดอัฒภาค ที่นี่ซึ่งไม่ได้เป็นสิ่งที่จำเป็นเมื่อ 184 00:07:42,530 --> 00:07:43,200 การดำเนินการ 185 00:07:43,200 --> 00:07:46,010 >> เพื่อให้ฉัน remake นี้ทำให้ไม่มี Swap 186 00:07:46,010 --> 00:07:46,910 รูปร่างที่ดีมาก 187 00:07:46,910 --> 00:07:48,130 เรียกใช้ swap ไม่ 188 00:07:48,130 --> 00:07:48,740 และด่ามัน 189 00:07:48,740 --> 00:07:51,650 ตอนนี้เรากลับว่าเราอยู่ที่ไหนในวันจันทร์ที่ สิ่งที่ไม่ได้สลับ 190 00:07:51,650 --> 00:07:55,410 >> และคำอธิบายที่ใช้งานง่ายเป็นสิ่งที่ สำหรับเหตุผลที่เป็นกรณีนี้? 191 00:07:55,410 --> 00:07:56,380 อ้าง? 192 00:07:56,380 --> 00:07:57,630 >> ลูกศิษย์: [ได้ยิน] 193 00:07:57,630 --> 00:08:04,140 194 00:08:04,140 --> 00:08:05,230 >> DAVID ลัน: ว่า 195 00:08:05,230 --> 00:08:07,330 ดังนั้น a และ b เป็นสำเนาของ x และ y 196 00:08:07,330 --> 00:08:10,680 และในความเป็นจริงเวลาใด ๆ ที่คุณเคย เรียกใช้ฟังก์ชันป่านนี้ว่า 197 00:08:10,680 --> 00:08:12,540 ผ่านตัวแปรเช่น ints - 198 00:08:12,540 --> 00:08:14,470 เช่นเดียวกับการแลกเปลี่ยนคาดว่าจะอยู่ที่ - 199 00:08:14,470 --> 00:08:16,270 พวกคุณได้รับผ่านในสำเนา 200 00:08:16,270 --> 00:08:19,150 >> ตอนนี้นั่นหมายความว่ามันต้องใช้เวลานิด ๆ หน่อย ๆ ของเวลาเสี้ยววินาทีสำหรับ 201 00:08:19,150 --> 00:08:23,270 คอมพิวเตอร์เพื่อคัดลอกบิตจากที่หนึ่ง ตัวแปรเป็นบิตของอีกคนหนึ่ง 202 00:08:23,270 --> 00:08:24,610 แต่ที่ไม่ดังกล่าวเป็นเรื่องใหญ่ 203 00:08:24,610 --> 00:08:25,920 แต่พวกเขากระนั้นสำเนา 204 00:08:25,920 --> 00:08:30,020 >> และดังนั้นตอนนี้ในบริบทของการแลกเปลี่ยน, ผมประสบความสำเร็จในความเป็นจริง 205 00:08:30,020 --> 00:08:31,180 เปลี่ยน a และ b 206 00:08:31,180 --> 00:08:33,000 ในความเป็นจริงขอทำอย่างรวดเร็ว ตรวจสอบสติ 207 00:08:33,000 --> 00:08:36,830 ฉพิมพ์เป็น i%, บรรทัดใหม่ 208 00:08:36,830 --> 00:08:38,770 และเสียบขอใน 209 00:08:38,770 --> 00:08:41,830 ตอนนี้ขอทำสิ่งเดียวกันด้วย b 210 00:08:41,830 --> 00:08:43,640 และให้ทำสิ่งเดียวกันที่นี่ 211 00:08:43,640 --> 00:08:47,260 >> และตอนนี้ให้ฉันคัดลอกบรรทัดเดียวกันนั้น อีกครั้งที่ด้านล่างของฟังก์ชั่น 212 00:08:47,260 --> 00:08:51,250 หลังจากสามบรรทัดของฉันที่น่าสนใจ อาจมีการดำเนินการและ 213 00:08:51,250 --> 00:08:53,270 พิมพ์ A และ B อีกครั้ง 214 00:08:53,270 --> 00:08:56,030 ดังนั้นตอนนี้ขอให้นี้ทำให้ไม่มี Swap 215 00:08:56,030 --> 00:08:58,430 ผมขอให้หน้าต่าง terminal บิตสูงเพื่อให้เราสามารถมองเห็น 216 00:08:58,430 --> 00:08:59,520 มากกว่านั้นในครั้งเดียว 217 00:08:59,520 --> 00:09:00,860 >> และเรียกใช้ swap ไม่ 218 00:09:00,860 --> 00:09:04,000 x 1, y คือ 2 คือ 1 b คือ 2 219 00:09:04,000 --> 00:09:06,070 แล้วเป็น 2 ข 1 220 00:09:06,070 --> 00:09:09,390 ดังนั้นจึงมีการทำงานเช่นเดียวกับเจส ได้ที่นี่ภายในของ swap 221 00:09:09,390 --> 00:09:13,090 แต่แน่นอนว่ามันมีผลกระทบไม่ เกี่ยวกับตัวแปรในหลัก 222 00:09:13,090 --> 00:09:15,360 >> ดังนั้นเราจึงเห็นเคล็ดลับซึ่งให้เรา สามารถแก้ไขปัญหานี้ใช่มั้ย? 223 00:09:15,360 --> 00:09:19,560 เมื่อคุณต้องเผชิญกับการกำหนดขอบเขตนี้ ปัญหาคุณสามารถถ่อเพียงและทำให้ x 224 00:09:19,560 --> 00:09:22,400 และ y สิ่งที่ชนิดของตัวแปรแทน? 225 00:09:22,400 --> 00:09:23,390 >> คุณสามารถทำให้พวกเขาทั่วโลก 226 00:09:23,390 --> 00:09:27,560 วางไว้ที่ส่วนบนสุดของไฟล์ ในขณะที่เราไม่ได้แม้จะอยู่ในเกมจาก 15 227 00:09:27,560 --> 00:09:28,890 เราใช้ตัวแปรทั่วโลก 228 00:09:28,890 --> 00:09:32,420 แต่ในบริบทของ 15 เกม, มันสมควรที่จะมีการทั่วโลก 229 00:09:32,420 --> 00:09:37,170 ตัวแปรที่เป็นตัวแทนของคณะกรรมการเพราะ ความสมบูรณ์ของ 15.c คือทั้งหมดที่ 230 00:09:37,170 --> 00:09:38,650 เกี่ยวกับการใช้เก​​มที่ 231 00:09:38,650 --> 00:09:41,470 นั่นคือแฟ้มที่มีอยู่ว่าจะทำอย่างไร 232 00:09:41,470 --> 00:09:44,170 >> แต่ในกรณีนี้ที่นี่ผม เรียกฟังก์ชั่นการแลกเปลี่ยน 233 00:09:44,170 --> 00:09:45,380 ผมต้องการที่จะสลับสองตัวแปร 234 00:09:45,380 --> 00:09:48,950 และมันควรจะเริ่มต้นที่จะรู้สึกเลอะเทอะเพียง ถ้าแก้ปัญหาทั้งหมดของเรา 235 00:09:48,950 --> 00:09:51,300 ปัญหาเมื่อเราทำงานในขอบเขต ประเด็นคือทำให้มันทั่วโลก 236 00:09:51,300 --> 00:09:54,730 เพราะอย่างรวดเร็วโปรแกรมของเราคือ จะกลายเป็นค่อนข้างเป็นระเบียบ 237 00:09:54,730 --> 00:09:57,760 และเราไม่ว่ามากเท่าที่จำเป็น ผลที่ตามมาใน 15.c. 238 00:09:57,760 --> 00:10:00,470 >> แต่ปรากฎว่ามี วิธีที่ดีกว่าออกไปโดยสิ้นเชิง 239 00:10:00,470 --> 00:10:05,600 ให้ฉันจริงไปกลับและลบ พิมพ์ของ f เพียงเพื่อลดความซับซ้อนของรหัสนี้ 240 00:10:05,600 --> 00:10:09,160 และแจ้งให้เราเสนอว่า นี้แน่นอนจะไม่ดี 241 00:10:09,160 --> 00:10:15,990 แต่ถ้าฉันแทนเครื่องหมายดอกจันเพิ่มในบางส่วน และดาวผมแทนสามารถเปิดการทำงานนี้ 242 00:10:15,990 --> 00:10:18,670 ฟังก์ชั่นเป็นหนึ่งที่ ในการปฏิบัติงานจริง 243 00:10:18,670 --> 00:10:25,020 >> เพื่อให้ฉันกลับไปที่นี่และยอมรับว่า เครื่องหมายดอกจันอยู่เสมอยาก 244 00:10:25,020 --> 00:10:26,170 ดังนั้นฉันจะบอกว่าดาว 245 00:10:26,170 --> 00:10:27,660 ฉันเพิ่งจะสารภาพถึงที่หนึ่ง 246 00:10:27,660 --> 00:10:28,190 ทั้งหมดขวา 247 00:10:28,190 --> 00:10:30,190 และตอนนี้สิ่งที่ฉันจะ ที่จะทำแทน? 248 00:10:30,190 --> 00:10:34,130 >> ดังนั้นก่อนอื่นผมจะต้องระบุ ว่าแทนที่จะผ่านเข้าไปใน int 249 00:10:34,130 --> 00:10:37,980 swap ฟังก์ชันที่ฉันแทน จะไปบอกว่าดาว int 250 00:10:37,980 --> 00:10:39,170 ตอนนี้ดาวอะไรบ่งชี้? 251 00:10:39,170 --> 00:10:41,970 นี่คือความคิดของตัวชี้ที่ว่า บิงกี้ตัวละคร claymation เป็น 252 00:10:41,970 --> 00:10:43,465 หมายถึงช่วงเวลาที่ผ่านมา 253 00:10:43,465 --> 00:10:47,610 >> ดังนั้นถ้าเราบอกว่า int ดาว, ความหมายของ ในตอนนี้ก็คือจะไม่เป็น 254 00:10:47,610 --> 00:10:49,110 ที่ผ่านมาโดยค่าของมัน 255 00:10:49,110 --> 00:10:50,350 มันจะไม่ได้คัดลอกมาค่ะ 256 00:10:50,350 --> 00:10:54,700 แต่ที่อยู่ของคือ จะต้องผ่านระบบ 257 00:10:54,700 --> 00:10:57,840 >> ดังนั้นจำภายในของคอมพิวเตอร์ของคุณที่ เป็นทั้งกลุ่มของหน่วยความจำอย่างอื่น 258 00:10:57,840 --> 00:10:58,760 ที่รู้จักกันเป็นแรม 259 00:10:58,760 --> 00:11:00,520 และ RAM ที่เป็นเพียง ทั้งกลุ่มของไบต์ 260 00:11:00,520 --> 00:11:03,320 ดังนั้นถ้า Mac หรือ PC ของคุณมี สองกิกะไบต์คุณมี 2 261 00:11:03,320 --> 00:11:05,760 พันล้านไบต์ของหน่วยความจำ 262 00:11:05,760 --> 00:11:08,440 >> ตอนนี้ขอเพียงแค่คิดว่าเพียงเพื่อ เก็บสิ่งที่ดีและเป็นระเบียบเรา 263 00:11:08,440 --> 00:11:09,450 กำหนดที่อยู่ - 264 00:11:09,450 --> 00:11:10,170 จำนวน - 265 00:11:10,170 --> 00:11:12,270 เพื่อทุก byte ของ RAM ในคอมพิวเตอร์ของคุณ 266 00:11:12,270 --> 00:11:15,410 ไบต์แรกมากของคนเหล่านั้น 2 พันล้านเป็นเลขศูนย์ 267 00:11:15,410 --> 00:11:18,572 หนึ่งต่อไปคือจำนวนไบต์หมายเลขหนึ่ง สองทุกทางขึ้น, dot dot 268 00:11:18,572 --> 00:11:20,530 จุดประมาณ 2 พันล้าน 269 00:11:20,530 --> 00:11:23,640 >> ดังนั้นคุณจำนวนไบต์ที่สามารถ ของหน่วยความจำในคอมพิวเตอร์ของคุณ 270 00:11:23,640 --> 00:11:26,460 ดังนั้นสมมติว่านั่นคือสิ่งที่ เราหมายถึงที่อยู่ 271 00:11:26,460 --> 00:11:31,360 ดังนั้นเมื่อผมเห็น int ดาวมันเกิดอะไรขึ้น ที่จะผ่านเข้าไปในการแลกเปลี่ยนในขณะนี้คือ 272 00:11:31,360 --> 00:11:32,830 ที่อยู่ของ 273 00:11:32,830 --> 00:11:37,150 ไม่คุ้มค่า แต่สิ่งที่ไปรษณีย์ ที่อยู่เป็นเพื่อที่จะพูด - 274 00:11:37,150 --> 00:11:38,810 ทำเลที่ตั้งอยู่ในแรม 275 00:11:38,810 --> 00:11:41,250 >> และเช่นเดียวกันสำหรับ b, ฉันจะ ที่จะพูดในสิ่งเดียวกัน 276 00:11:41,250 --> 00:11:42,720 Int, ดาว, b 277 00:11:42,720 --> 00:11:46,350 เช่นกันในทางเทคนิคดาว อาจจะไปในสถานที่อื่น ๆ 278 00:11:46,350 --> 00:11:50,140 แต่เราจะมาตรฐานในการเป็นดาว ขวาถัดจากชนิดข้อมูล 279 00:11:50,140 --> 00:11:54,080 >> ดังนั้นสลับลายเซ็นในขณะนี้หมายความว่าให้ฉัน ที่อยู่ของ int และโทร 280 00:11:54,080 --> 00:11:55,400 ที่อยู่ 281 00:11:55,400 --> 00:11:58,690 และให้ฉันที่อยู่ของอีกคนหนึ่ง int และเรียก b ที่อยู่ที่ 282 00:11:58,690 --> 00:12:01,120 >> แต่ตอนนี้รหัสของฉันที่นี่มีการเปลี่ยนแปลง 283 00:12:01,120 --> 00:12:03,470 เพราะถ้าฉันประกาศชั่วคราว int - 284 00:12:03,470 --> 00:12:05,580 ซึ่งยังคงเป็นประเภท int - 285 00:12:05,580 --> 00:12:08,700 แต่ฉันเก็บอยู่ในนั้น, สิ่งที่ชนิดของค่า? 286 00:12:08,700 --> 00:12:12,870 ต้องมีความชัดเจนฉันวางกับ รหัสที่เขียนในตอนนี้? 287 00:12:12,870 --> 00:12:14,360 >> ผมวางในสถานที่ 288 00:12:14,360 --> 00:12:16,500 แต่ฉันไม่สนใจเกี่ยวกับ สถานที่ในขณะนี้ใช่มั้ย? 289 00:12:16,500 --> 00:12:21,940 อุณหภูมิที่มีอยู่เพียง Jess 'ถ้วยที่สาม มีตัวตนเพื่อวัตถุประสงค์อะไร? 290 00:12:21,940 --> 00:12:23,090 เพื่อเก็บค่า 291 00:12:23,090 --> 00:12:24,830 นมหรือน้ำผลไม้สีส้ม 292 00:12:24,830 --> 00:12:28,520 ไม่จริงเก็บที่อยู่ของ อย่างใดอย่างหนึ่งของสิ่งเหล่านั้นที่รู้สึก 293 00:12:28,520 --> 00:12:31,200 เล็ก ๆ น้อย ๆ ไร้สาระในความเป็นจริงนี้ บริบทโลกแล้ว 294 00:12:31,200 --> 00:12:34,990 >> ดังนั้นจริงๆสิ่งที่ฉันต้องการที่จะใส่ในอุณหภูมิ ไม่ได้เป็นที่อยู่ของ แต่ 295 00:12:34,990 --> 00:12:36,180 เนื้อหาของ 296 00:12:36,180 --> 00:12:41,930 ดังนั้นถ้าเป็นตัวเลขเช่น 123 นี้ 123 ไบต์ของหน่วยความจำที่เพียงแค่ 297 00:12:41,930 --> 00:12:45,090 เกิดขึ้นจะครอบครองว่าค่า ในเกิดขึ้นจะครอบครอง 298 00:12:45,090 --> 00:12:49,040 >> ถ้าผมต้องการที่จะไปอยู่ที่ ผมต้องบอกว่าดาว 299 00:12:49,040 --> 00:12:52,610 ในทำนองเดียวกันถ้ามีการเปลี่ยนแปลงอะไร ตามที่อยู่ที่ผมเปลี่ยน 300 00:12:52,610 --> 00:12:53,570 นี้จะเริ่มต้น 301 00:12:53,570 --> 00:12:58,185 ถ้าผมต้องการที่จะเก็บไว้ในสิ่งที่เป็นที่ สถานที่กับสิ่งที่อยู่ในที่ตั้ง 302 00:12:58,185 --> 00:13:02,180 ที่ b, b ดาวดาว 303 00:13:02,180 --> 00:13:05,340 >> ดังนั้นในระยะสั้นแม้ว่านี้ไม่มาก จมในยัง - และฉันจะไม่คาดหวัง 304 00:13:05,340 --> 00:13:06,560 ว่าจะอย่างรวดเร็ว - 305 00:13:06,560 --> 00:13:11,100 ตระหนักดีว่าทั้งหมดที่ฉันทำคือการ prefixing ดาวเหล่านี้ไปยังตัวแปรของฉัน 306 00:13:11,100 --> 00:13:13,350 คำกล่าวที่ว่าไม่คว้าค่า 307 00:13:13,350 --> 00:13:14,520 อย่าเปลี่ยนค่า 308 00:13:14,520 --> 00:13:17,600 แต่ให้ไปที่ที่อยู่เหล่านั้น และได้รับค่า 309 00:13:17,600 --> 00:13:21,430 ไปที่ที่อยู่ที่และการเปลี่ยนแปลง มูลค่าที่นั่น 310 00:13:21,430 --> 00:13:25,500 >> ดังนั้นตอนนี้ให้ฉันเลื่อนกลับขึ้นไปด้านบน เพียงเพื่อแก้ไขบรรทัดนี้ที่นี่เพื่อ 311 00:13:25,500 --> 00:13:27,690 เปลี่ยนต้นแบบเพื่อให้ตรงกับ 312 00:13:27,690 --> 00:13:30,280 แต่ตอนนี้ผมต้องการที่จะทำสิ่งหนึ่งที่อื่น ๆ 313 00:13:30,280 --> 00:13:35,500 โดยสัญชาตญาณถ้าฉันได้เปลี่ยนประเภท ของการขัดแย้งแลกเปลี่ยนที่คาดหวัง 314 00:13:35,500 --> 00:13:37,245 ผมทำในสิ่งที่คนอื่นต้องการ มีการเปลี่ยนแปลงในรหัสของฉัน? 315 00:13:37,245 --> 00:13:39,750 316 00:13:39,750 --> 00:13:40,840 >> เมื่อผมเรียกว่า swap 317 00:13:40,840 --> 00:13:43,340 เพราะตอนนี้สิ่ง am ผมผ่านไปแลกยัง? 318 00:13:43,340 --> 00:13:47,450 ค่า x และค่า y หรือ นมและน้ำผลไม้สีส้ม 319 00:13:47,450 --> 00:13:48,510 แต่ฉันไม่ต้องการที่จะทำอย่างนั้น 320 00:13:48,510 --> 00:13:51,060 ผมแทนต้องการผ่านในอะไร 321 00:13:51,060 --> 00:13:53,050 สถานที่ตั้งของ x และ สถานที่ตั้งของ y 322 00:13:53,050 --> 00:13:55,300 อะไรที่อยู่ทางไปรษณีย์ของพวกเขา, เพื่อที่จะพูด 323 00:13:55,300 --> 00:13:57,600 >> ดังนั้นจะทำอย่างไรที่มีเครื่องหมายของ 324 00:13:57,600 --> 00:13:59,260 ชนิดสัญลักษณ์ของเสียงเช่นที่อยู่ 325 00:13:59,260 --> 00:14:03,240 ดังนั้น n, เครื่องหมาย, ที่อยู่ ของ x และที่อยู่ของ y 326 00:14:03,240 --> 00:14:06,790 ดังนั้นจึงเป็นเจตนาที่เราใช้ เครื่องหมายเมื่อเรียกฟังก์ชั่น, 327 00:14:06,790 --> 00:14:10,230 และดาวเมื่อประกาศและเมื่อ การใช้ฟังก์ชั่น 328 00:14:10,230 --> 00:14:14,220 >> และเพียงแค่คิดว่าเป็นเครื่องหมาย ที่อยู่ของผู้ประกอบการและเป็นดาว 329 00:14:14,220 --> 00:14:15,490 ไปที่นั่นประกอบ - 330 00:14:15,490 --> 00:14:18,640 หรือมากกว่าได้อย่างถูกต้อง ดำเนินการ dereference 331 00:14:18,640 --> 00:14:23,480 เพื่อให้เป็นจำนวนมากทั้งจากคำพูดเพียงเพื่ออะไร บอกว่าตอนนี้เราหวังว่าจะ swap 332 00:14:23,480 --> 00:14:24,440 ความถูกต้อง 333 00:14:24,440 --> 00:14:26,550 >> ให้ฉันไปข้างหน้าและทำ - 334 00:14:26,550 --> 00:14:30,940 ให้เปลี่ยนชื่อไฟล์จริงเกรงว่า โปรแกรมนี้ยังคงถูกเรียกว่า swap ไม่มี 335 00:14:30,940 --> 00:14:33,240 ผมเรียกร้องว่าเราจะเรียกมันว่า swap.c ขณะนี้ 336 00:14:33,240 --> 00:14:35,670 เพื่อให้สับเปลี่ยน 337 00:14:35,670 --> 00:14:37,520 Dot, เฉือน, swap 338 00:14:37,520 --> 00:14:40,210 >> และตอนนี้แน่นอน x เป็น 1, y คือ 2 339 00:14:40,210 --> 00:14:44,040 แล้ว x 2, y เป็นหนึ่ง 340 00:14:44,040 --> 00:14:46,500 ดีขอดูว่าเราไม่สามารถทำเช่นนี้ แตกต่างกันเล็กน้อยเป็นสิ่งที่คน 341 00:14:46,500 --> 00:14:47,180 เกิดขึ้นที่นี่ 342 00:14:47,180 --> 00:14:51,250 แรกให้ฉันขยายของเรา วาดภาพหน้าจอที่นี่ 343 00:14:51,250 --> 00:14:54,160 และแจ้งให้เรานำเสนอสำหรับช่วงเวลาที่ - และ ทุกครั้งที่ผมวาดที่นี่จะได้รับการสะท้อน 344 00:14:54,160 --> 00:14:58,660 มีขึ้นตอนนี้ - ให้ฉันเสนอว่า ที่นี่ทั้งกลุ่มของหน่วยความจำของหรือ 345 00:14:58,660 --> 00:15:00,540 แรมภายในของคอมพิวเตอร์ของฉัน 346 00:15:00,540 --> 00:15:04,140 >> และจะเป็นจำนวนกัด สมมติว่า 1 347 00:15:04,140 --> 00:15:05,720 นี้จะมีจำนวนไบต์ 2 348 00:15:05,720 --> 00:15:08,220 และฉันจะทำทั้งกลุ่มมากขึ้นและ แล้วพวงของจุด dot dot ไป 349 00:15:08,220 --> 00:15:10,880 แสดงให้เห็นว่ามี 2 พันล้าน สิ่งเหล่านี้ 350 00:15:10,880 --> 00:15:13,520 4, 5, และอื่น ๆ 351 00:15:13,520 --> 00:15:17,055 >> จึงมีห้าครั้งแรกไบต์ ของหน่วยความจำคอมพิวเตอร์ของฉัน 352 00:15:17,055 --> 00:15:17,560 ขวาทั้งหมด? 353 00:15:17,560 --> 00:15:19,060 น้อยมากจาก 2 พันล้าน 354 00:15:19,060 --> 00:15:21,120 แต่ตอนนี้ผมจะนำเสนอ ดังต่อไปนี้ 355 00:15:21,120 --> 00:15:27,490 ฉันจะเสนอว่า x เป็นไป เก็บหมายเลข 1 และ y เป็นไป 356 00:15:27,490 --> 00:15:29,690 ในการจัดเก็บหมายเลข 2 357 00:15:29,690 --> 00:15:35,000 และแจ้งให้เราไปข้างหน้าในขณะนี้และเป็นตัวแทน ค่าเหล่านี้ดังต่อไปนี้ 358 00:15:35,000 --> 00:15:41,510 >> ขอทำดังต่อไปนี้ 359 00:15:41,510 --> 00:15:42,870 ให้ฉันเพียงแค่หนึ่งวินาที 360 00:15:42,870 --> 00:15:44,150 หนึ่งวินาที 361 00:15:44,150 --> 00:15:45,680 ตกลง 362 00:15:45,680 --> 00:15:47,560 ฉันต้องการที่จะทำให้เรื่องนี้เล็ก ๆ น้อย ๆ - 363 00:15:47,560 --> 00:15:50,440 ให้ทำเช่นนี้อีกครั้ง 364 00:15:50,440 --> 00:15:53,250 มิฉะนั้นฉันจะไปและการใช้ ตัวเลขเดียวกันโดยไม่ตั้งใจ, 365 00:15:53,250 --> 00:15:54,230 หลายครั้ง 366 00:15:54,230 --> 00:15:57,320 >> ดังนั้นเราจึงมีตัวเลขที่แตกต่างกัน พูดคุยเกี่ยวกับขอเรียกไบต์นี้ 367 00:15:57,320 --> 00:16:03,391 123, 124, 125, 126, และ dot dot dot 368 00:16:03,391 --> 00:16:08,400 และเรียกร้องให้ฉันตอนที่ฉันกำลังจะไป ใส่ค่า 1 ที่นี่และมูลค่า 2 369 00:16:08,400 --> 00:16:11,990 นี่หรือที่เรียกว่า x และ y 370 00:16:11,990 --> 00:16:15,300 ดังนั้นมันจึงเกิดขึ้นเพียงเพื่อ นี่คือ x, y นี้ 371 00:16:15,300 --> 00:16:18,180 >> และเพียงแค่มีโอกาสสุ่มบาง คอมพิวเตอร์ระบบปฏิบัติการ, 372 00:16:18,180 --> 00:16:21,890 ที่เกิดขึ้นในการวางตำแหน่งที่ x 123 373 00:16:21,890 --> 00:16:25,590 และ y จบลงด้วยการที่สถานที่ 124 - 374 00:16:25,590 --> 00:16:26,330 เจ้ากรรมมัน 375 00:16:26,330 --> 00:16:28,700 ฉันควรจะมีการแก้ไขนี้ 376 00:16:28,700 --> 00:16:34,040 โอ้ฉันจริงๆต้องการทำเช่นนี้? 377 00:16:34,040 --> 00:16:37,340 ใช่ฉันต้องการการแก้ไขปัญหานี้และ b ที่เหมาะสมเกี่ยวกับเรื่องนี้ในวันนี้ 378 00:16:37,340 --> 00:16:39,950 ขออภัยใหม่นี้ 379 00:16:39,950 --> 00:16:45,020 >> 127, 131, และฉันไม่ต้องการที่จะเป็นนี้ ที่ซับซ้อน แต่ฉันไม่เปลี่ยนทำไม 380 00:16:45,020 --> 00:16:46,340 ตัวเลขที่มี? 381 00:16:46,340 --> 00:16:48,360 เพราะฉันต้องการ ints ไป ความเป็นจริงสี่ไบต์ 382 00:16:48,360 --> 00:16:49,810 ดังนั้นขอเป็นทางทวารหนั​​กสุดเกี่ยวกับเรื่องนี้ 383 00:16:49,810 --> 00:16:53,800 ดังนั้นถ้าหากเกิดขึ้น 1 จะ addressed 123, 2 เป็นไปได้ตามที่อยู่ 384 00:16:53,800 --> 00:16:55,730 127 เพราะมันเป็นเพียงแค่ 4 ลาก่อนออกไป 385 00:16:55,730 --> 00:16:56,210 นั่นคือทั้งหมดที่ 386 00:16:56,210 --> 00:16:58,640 และเราจะลืมเกี่ยวกับทุก ที่อยู่อื่น ๆ ในโลก 387 00:16:58,640 --> 00:17:03,320 >> ดังนั้น x เป็นสถานที่ที่ 123, y อยู่ที่ 127 สถานที่ตั้ง 388 00:17:03,320 --> 00:17:05,770 และตอนนี้สิ่งที่ฉันทำจริง ต้องการจะทำอย่างไร? 389 00:17:05,770 --> 00:17:10,099 เมื่อผมเรียกว่า swap ขณะนี้สิ่งที่ จริงที่เกิดขึ้น? 390 00:17:10,099 --> 00:17:14,920 ดีเมื่อผมเรียกว่า swap ผมผ่านใน ที่อยู่ของ x และ y ที่อยู่ของ 391 00:17:14,920 --> 00:17:18,540 ดังนั้นสำหรับตัวอย่างเช่นถ้าทั้งสองชิ้น ของกระดาษในขณะนี้เป็นตัวแทนของทั้งสอง 392 00:17:18,540 --> 00:17:23,510 ข้อโต้แย้งและ b เพื่อแลกเปลี่ยนสิ่งที่ฉัน จะเขียนในวันแรกของเหล่านี้ 393 00:17:23,510 --> 00:17:27,720 ที่ฉันจะเรียกจะเรียกว่า? 394 00:17:27,720 --> 00:17:30,610 >> ตรง 123 395 00:17:30,610 --> 00:17:31,905 ดังนั้นนี้ฉันเรียกร้องคือ 396 00:17:31,905 --> 00:17:32,955 นี้เป็นพารามิเตอร์ 397 00:17:32,955 --> 00:17:35,856 ผมใส่ที่อยู่ของ x ในนั้น 398 00:17:35,856 --> 00:17:38,152 >> ว่าคืออะไร? 399 00:17:38,152 --> 00:17:40,890 >> ว่าคืออะไร? 400 00:17:40,890 --> 00:17:41,190 >> ไม่ไม่ 401 00:17:41,190 --> 00:17:41,720 ไม่เป็นไร 402 00:17:41,720 --> 00:17:42,570 ยังดียังคงดี 403 00:17:42,570 --> 00:17:43,530 ดังนั้นนี่คือ 404 00:17:43,530 --> 00:17:46,240 และตอนนี้เมื่อชิ้นที่สองของกระดาษ, นี้เป็นไปได้ b และสิ่งที่ฉัน 405 00:17:46,240 --> 00:17:49,010 จะต้องเขียนบน ชิ้นส่วนของกระดาษนี้ 406 00:17:49,010 --> 00:17:50,080 127 407 00:17:50,080 --> 00:17:53,720 >> ดังนั้นสิ่งเดียวที่มีการเปลี่ยนแปลงตั้งแต่ บอกหน้าที่ของเราในเรื่องนี้คือ 408 00:17:53,720 --> 00:17:58,590 มากกว่าอักษร 1 และ 2 ผม จะผ่านใน 123 และ 127 409 00:17:58,590 --> 00:18:02,130 และตอนนี้ฉันจะใส่ภายในเหล่านี้ ของกล่องนี้ไหม? 410 00:18:02,130 --> 00:18:04,640 เพื่อให้กล่องสีดำในขณะนี้แสดงให้เห็นถึง swap ฟังก์ชัน 411 00:18:04,640 --> 00:18:07,230 >> ในขณะที่ตอนนี้ขอมีใครสักคน ใช้ฟังก์ชั่นการแลกเปลี่ยน 412 00:18:07,230 --> 00:18:09,090 คนที่นี่จะ ต้องการอาสาสมัคร? 413 00:18:09,090 --> 00:18:09,560 มาขึ้น 414 00:18:09,560 --> 00:18:11,080 คุณชื่ออะไร? 415 00:18:11,080 --> 00:18:11,460 ชาร์ลี 416 00:18:11,460 --> 00:18:12,080 ขวาทั้งหมด, ชาร์ลี 417 00:18:12,080 --> 00:18:14,810 มาขึ้น 418 00:18:14,810 --> 00:18:17,310 >> ดังนั้นชาร์ลีจะไปเล่น บทบาทของกล่องดำของเรา 419 00:18:17,310 --> 00:18:21,460 ชาร์ลีและสิ่งที่ฉันต้องการให้คุณทำ ขณะนี้มีการดำเนินการแลกเปลี่ยนในลักษณะ 420 00:18:21,460 --> 00:18:25,320 ที่ให้ทั้งสองที่อยู่ คุณได้จริงที่เกิดขึ้น 421 00:18:25,320 --> 00:18:26,330 เพื่อเปลี่ยนแปลงค่า 422 00:18:26,330 --> 00:18:28,290 และฉันจะกระซิบในหูของคุณ วิธีการทำงานที่นี่ทีวี 423 00:18:28,290 --> 00:18:29,930 >> เพื่อไปข้างหน้าและคุณกล่องดำ 424 00:18:29,930 --> 00:18:30,920 ไปถึงที่นั่น 425 00:18:30,920 --> 00:18:34,054 สิ่งใดที่คุณมองเห็นค่าและ สิ่งที่คุณเห็นค่า B หรือไม่? 426 00:18:34,054 --> 00:18:36,740 >> CHARLIE: คือ 123 และ B 127 427 00:18:36,740 --> 00:18:37,530 >> DAVID ลัน: ตกลงว่า 428 00:18:37,530 --> 00:18:38,940 ตอนนี้หยุดที่นั่นเพื่อรอสักครู่ 429 00:18:38,940 --> 00:18:41,680 สิ่งแรกที่คุณกำลังจะทำตอนนี้ ตามรหัส - ที่ 430 00:18:41,680 --> 00:18:43,220 ตอนนี้ผมจะดึงขึ้นบนหน้าจอ - 431 00:18:43,220 --> 00:18:46,750 เป็นไปได้ที่จะจัดสรรเล็ก ๆ น้อย ๆ บิตของหน่วยความจำที่เรียกว่าอุณหภูมิ 432 00:18:46,750 --> 00:18:48,850 ดังนั้นฉันจะไปข้างหน้าและ ให้หน่วยความจำที่ 433 00:18:48,850 --> 00:18:52,210 >> ดังนั้นนี้จะเป็นตัวแปรที่สาม ว่าคุณมีสามารถเข้าถึงได้ 434 00:18:52,210 --> 00:18:54,080 คุณเรียกว่าชั่วคราว 435 00:18:54,080 --> 00:18:57,120 และสิ่งที่คุณจะเขียน บนชิ้นส่วนอุณหภูมิของกระดาษ? 436 00:18:57,120 --> 00:19:02,524 437 00:19:02,524 --> 00:19:03,470 >> CHARLIE: ชี้ขวา? 438 00:19:03,470 --> 00:19:04,790 >> DAVID ลัน: ตกลงกันไม่ได้ ชี้จำเป็นต้องมี 439 00:19:04,790 --> 00:19:07,230 ดังนั้นบรรทัดของรหัสที่ฉันได้ เน้นในด้านขวามือ, 440 00:19:07,230 --> 00:19:07,900 ขอเริ่มต้นมี 441 00:19:07,900 --> 00:19:08,890 มันบอกว่าดาว 442 00:19:08,890 --> 00:19:11,670 ดังนั้นในปัจจุบันคือการจัดเก็บ 123 443 00:19:11,670 --> 00:19:16,660 และเพียงแค่สังหรณ์ใจอะไร ไม่ดาว 123 หมายความว่าอย่างไร 444 00:19:16,660 --> 00:19:21,630 >> แต่โดยเฉพาะถ้าเป็น 123, ดาวหมายความว่าอะไร 445 00:19:21,630 --> 00:19:22,560 ค่าของ 446 00:19:22,560 --> 00:19:24,580 หรือมากกว่าลวกไปที่นั่น 447 00:19:24,580 --> 00:19:28,620 เพื่อให้ฉันเสนอว่าถือใน มือของคุณไปข้างหน้าและรักษาที่ 448 00:19:28,620 --> 00:19:29,430 ราวกับว่ามันเป็นแผนที่ 449 00:19:29,430 --> 00:19:32,940 และเดินตัวเองไปยังคอมพิวเตอร์ หน่วยความจำและพบว่าสิ่งที่เป็นเรา 450 00:19:32,940 --> 00:19:36,520 ที่ 123 สถานที่ตั้ง 451 00:19:36,520 --> 00:19:37,720 อย่างแน่นอน 452 00:19:37,720 --> 00:19:41,100 >> ดังนั้นเราจะเห็นที่ 123 สถานที่ตั้ง เป็นสิ่งที่เห็นได้ชัด? 453 00:19:41,100 --> 00:19:44,240 ตกลงดังนั้นสิ่งที่มูลค่าตอนนี้คุณ ไปใส่ลงในอุณหภูมิ? 454 00:19:44,240 --> 00:19:44,750 อย่างแน่นอน 455 00:19:44,750 --> 00:19:45,600 ดังนั้นไปข้างหน้าและทำอย่างนั้น 456 00:19:45,600 --> 00:19:51,280 และเขียนหมายเลข 1 บนแผ่น กระดาษที่มีบรรดาศักดิ์ขณะนี้อุณหภูมิ 457 00:19:51,280 --> 00:19:53,540 >> และตอนนี้ขั้นตอนต่อไปว่า คุณกำลังจะดำเนินการ 458 00:19:53,540 --> 00:19:54,310 เป็นไปได้ว่า 459 00:19:54,310 --> 00:19:57,820 ดีทางด้านขวามือของ บรรทัดถัดไปของรหัสเป็นดาว b b ของ 460 00:19:57,820 --> 00:19:59,260 แน่นอนเก็บที่อยู่ 461 00:19:59,260 --> 00:20:02,270 ที่อยู่ 127 462 00:20:02,270 --> 00:20:06,620 Star B หมายถึงอะไรลวกพูด? 463 00:20:06,620 --> 00:20:08,700 >> ไปยังตำแหน่งที่ 464 00:20:08,700 --> 00:20:14,988 เพื่อไปข้างหน้าและหาเราเกี่ยวกับสิ่ง ที่ 127 สถานที่ตั้ง 465 00:20:14,988 --> 00:20:15,480 ตกลง 466 00:20:15,480 --> 00:20:19,170 แน่นอนที่ 127 สถานที่, ยังคงเป็นค่า 2 467 00:20:19,170 --> 00:20:24,060 ดังนั้นสิ่งที่คุณจะเก็บในขณะนี้ที่ สิ่งที่ตั้งอยู่ใน? 468 00:20:24,060 --> 00:20:26,860 ดังนั้นวิธีการที่ดาวไปที่สถานที่ 469 00:20:26,860 --> 00:20:29,770 สถานที่คืออะไร? 470 00:20:29,770 --> 00:20:30,430 >> อย่างแน่นอน 471 00:20:30,430 --> 00:20:34,190 ดังนั้นตอนนี้ถ้าคุณต้องการที่จะเปลี่ยน อยู่ที่ว่าสิ่งที่สถานที่ตั้ง - 472 00:20:34,190 --> 00:20:36,470 ฉันจะไปข้างหน้าและทำงาน ยางลบอยู่ที่นี่ 473 00:20:36,470 --> 00:20:37,760 และตอนนี้จะนำมันกลับมาอยู่บนแปรง 474 00:20:37,760 --> 00:20:42,190 สิ่งที่คุณจำนวนจะเขียน ในกล่องเปล่าที่ตอนนี้หรือไม่ 475 00:20:42,190 --> 00:20:42,850 >> อย่างแน่นอน 476 00:20:42,850 --> 00:20:46,470 ดังนั้นสายนี้ของรหัสจะชัดเจน - ให้ ฉันหยุดสิ่งชาร์ลีทำและ 477 00:20:46,470 --> 00:20:51,730 ชี้ออกจากที่นี่สิ่งที่เขาทำได้เพียง เขียนลงในกล่องที่ 123 สถานที่ตั้ง 478 00:20:51,730 --> 00:20:55,150 ค่าที่ก่อนหน้านี้ที่ B 479 00:20:55,150 --> 00:20:59,140 และเพื่อให้เราได้ดำเนินการในขณะนี้แน่นอน นี้บรรทัดที่สองของรหัส 480 00:20:59,140 --> 00:21:01,920 >> ตอนนี้โชคไม่ดีที่มี ยังคงเป็นหนึ่งสายที่เหลือ 481 00:21:01,920 --> 00:21:04,900 ตอนนี้สิ่งที่อยู่ในอุณหภูมิอย่างแท้จริง? 482 00:21:04,900 --> 00:21:06,200 มันเห็นได้ชัดว่าหมายเลขหนึ่ง 483 00:21:06,200 --> 00:21:07,020 ที่ไม่อยู่ 484 00:21:07,020 --> 00:21:09,380 มันเป็นเพียงตัวเลขการจัดเรียงของ ตัวแปรจากหนึ่งสัปดาห์ 485 00:21:09,380 --> 00:21:13,520 >> และตอนนี้เมื่อคุณบอกว่าดาว b นั่นหมายความว่า ไป b ที่อยู่ซึ่งเป็นของ 486 00:21:13,520 --> 00:21:15,090 แน่นอนที่นี่ 487 00:21:15,090 --> 00:21:16,020 ดังนั้นเมื่อคุณได้รับมี - 488 00:21:16,020 --> 00:21:18,320 ฉันจะไปข้างหน้าและลบสิ่งที่เป็นจริง มี - และสิ่งที่คุณ 489 00:21:18,320 --> 00:21:20,820 จะเขียนตอนที่ 127 สถานที่? 490 00:21:20,820 --> 00:21:22,010 >> CHARLIE: อุณหภูมิซึ่งเป็นหนึ่งใน 491 00:21:22,010 --> 00:21:23,430 >> DAVID ลัน: อุณหภูมิซึ่งเป็นหนึ่งใน 492 00:21:23,430 --> 00:21:25,670 และเกิดอะไรขึ้นกับอุณหภูมิสิ่งในที่สุด? 493 00:21:25,670 --> 00:21:26,600 ดีเราไม่ทราบจริงๆ 494 00:21:26,600 --> 00:21:27,420 เราไม่สนใจจริงๆ 495 00:21:27,420 --> 00:21:31,090 เวลาที่เราได้ดำเนินการฟังก์ชั่นใด ๆ ป่านนี้ใด ๆ ตัวแปรท้องถิ่นที่คุณมี 496 00:21:31,090 --> 00:21:31,890 เป็นท้องถิ่นอย่างแท้จริง 497 00:21:31,890 --> 00:21:33,060 และพวกเขาก็หายไป 498 00:21:33,060 --> 00:21:35,040 พวกเขากำลังยึดการดำเนินงาน ระบบในที่สุด 499 00:21:35,040 --> 00:21:39,800 >> ดังนั้นความจริงที่ว่าอุณหภูมิยังคงมี มูลค่า 1 เป็นประเภทพื้นฐาน 500 00:21:39,800 --> 00:21:41,150 ทึ่งกับเรา 501 00:21:41,150 --> 00:21:43,100 ทั้งหมดขวาดังนั้นรอบของการปรบมือ ถ้าเราสามารถชาร์ลี 502 00:21:43,100 --> 00:21:46,400 ทำได้ดีมาก 503 00:21:46,400 --> 00:21:51,520 >> ทั้งหมดขวาดังนั้นสิ่งที่มากขึ้นไม่ นี้หมายความว่าเราจะต้องทำอย่างไร 504 00:21:51,520 --> 00:21:54,400 ดังนั้นมันจึงกลับกลายเป็นว่าเราได้รับ โกหกสีขาวไม่กี่ 505 00:21:54,400 --> 00:21:55,540 สำหรับค่อนข้างบางเวลา 506 00:21:55,540 --> 00:21:59,990 จริงมันกลับกลายเป็นว่าสตริง, ทุกเวลานี้ไม่ได้จริงๆ 507 00:21:59,990 --> 00:22:02,190 ลำดับของตัวอักษรต่อ se 508 00:22:02,190 --> 00:22:03,980 ชนิดของมันคืออย่างสังหรณ์ใจ 509 00:22:03,980 --> 00:22:08,270 >> แต่พูดในทางเทคนิคสตริง ชนิดข้อมูลที่เราประกาศภายในของ 510 00:22:08,270 --> 00:22:12,170 CS50 ห้องสมุดเพื่อลดความซับซ้อนในโลก สำหรับสองสามสัปดาห์แรกของการเรียน 511 00:22:12,170 --> 00:22:20,130 อะไรสตริงจริงๆคือที่อยู่ ของตัวละครในบางส่วนของแรม 512 00:22:20,130 --> 00:22:25,530 สตริงเป็นจริงเป็นจำนวนมากเช่น 123 หรือ 127, ที่เกิดขึ้นปักปัน 513 00:22:25,530 --> 00:22:28,420 สตริงที่จะเริ่มขึ้นใน หน่วยความจำของคอมพิวเตอร์ของคุณ 514 00:22:28,420 --> 00:22:31,870 >> แต่มันก็ไม่ได้เป็นตัวแทน สตริงต่อ se ตัวเอง 515 00:22:31,870 --> 00:22:33,460 และเราจะได้เห็นดังต่อไปนี้ 516 00:22:33,460 --> 00:22:35,980 ให้ฉันไปข้างหน้าและเปิดขึ้น รหัสที่ในบางส่วน 517 00:22:35,980 --> 00:22:38,340 วันนี้ตัวอย่างรหัสแหล่งที่มา 518 00:22:38,340 --> 00:22:42,225 และฉันจะไปข้างหน้าและเปิด ขึ้นสมมติว่าการเปรียบเทียบ-0.c 519 00:22:42,225 --> 00:22:44,830 520 00:22:44,830 --> 00:22:48,790 นี้เป็นโปรแกรมที่รถที่เป็นไป ที่จะดำเนินการดังต่อไปนี้ 521 00:22:48,790 --> 00:22:49,040 >> เป็นครั้งแรก 522 00:22:49,040 --> 00:22:50,420 ฉันจะพูดอะไรบางอย่าง 523 00:22:50,420 --> 00:22:52,660 แล้วฉันจะไปข้างหน้าและ รับสายจากผู้ใช้ 524 00:22:52,660 --> 00:22:53,750 ในบรรทัดถัดไปที่ 525 00:22:53,750 --> 00:22:55,370 แล้วฉันจะบอกอีกครั้ง 526 00:22:55,370 --> 00:22:57,540 แล้วฉันจะได้รับอีก สตริงจากผู้ใช้ 527 00:22:57,540 --> 00:23:00,390 >> และแจ้งให้ทราบว่าผมแสดงให้เห็นถึงหนึ่งใน สตริงในตัวแปรที่เรียกว่า s และ 528 00:23:00,390 --> 00:23:03,040 อีกคนหนึ่งของสายเหล่านี้ ในตัวแปรที่เรียกว่า T 529 00:23:03,040 --> 00:23:07,480 และตอนนี้ฉันจะไปเรียกร้องมาก เหตุผลว่าถ้า s เท่ากับเท่ากับ T, 530 00:23:07,480 --> 00:23:08,940 สตริงเหมือนกัน 531 00:23:08,940 --> 00:23:09,970 คุณพิมพ์ในสิ่งเดียวกัน 532 00:23:09,970 --> 00:23:11,830 อื่นสตริงเป็น ไม่ได้ในสิ่งเดียวกัน 533 00:23:11,830 --> 00:23:15,440 >> หลังจากที่ทุกคนถ้าใส่เราสอง ints สอง ตัวอักษรสองลอยสองคู่ใด ๆ 534 00:23:15,440 --> 00:23:18,400 เป็นชนิดข้อมูลที่เราได้พูดคุยเกี่ยวกับ ป่านนี้เพื่อเปรียบเทียบพวกเขา - 535 00:23:18,400 --> 00:23:22,070 จำได้ว่าเราทำชัดเจนมากในขณะที่ที่ผ่านมา ที่คุณไม่ทำเช่นนี้เพราะ 536 00:23:22,070 --> 00:23:25,840 เครื่องหมายเท่ากับเดียวเป็นของหลักสูตร ดำเนินการมอบหมาย 537 00:23:25,840 --> 00:23:26,820 เพื่อที่จะเป็นข้อผิดพลาด 538 00:23:26,820 --> 00:23:29,260 >> เราใช้เครื่องหมายเท่ากับเท่ากัน ซึ่งแน่นอนเปรียบเทียบ 539 00:23:29,260 --> 00:23:31,050 สิ่งเพื่อความเท่าเทียมกันจริง 540 00:23:31,050 --> 00:23:32,275 แต่ผมเรียกร้องนี้เป็นรถ 541 00:23:32,275 --> 00:23:37,400 ถ้าฉันไปข้างหน้าและทำให้การเปรียบเทียบศูนย์ และจุดเฉือนกันแล้วเปรียบเทียบศูนย์ 542 00:23:37,400 --> 00:23:39,700 และฉันพิมพ์ในสมมติว่าสวัสดี 543 00:23:39,700 --> 00:23:41,590 และจากนั้นเราจะมาทักทายอีกครั้ง 544 00:23:41,590 --> 00:23:46,040 แท้จริงสิ่งเดียวกันคอมพิวเตอร์ ผมเรียกร้องสิ่งที่แตกต่างที่พิมพ์ 545 00:23:46,040 --> 00:23:47,640 >> ตอนนี้บางทีฉันเพียงแค่พิมพ์ผิดบางสิ่งบางอย่าง 546 00:23:47,640 --> 00:23:49,910 ผมจะพิมพ์ชื่อของฉันในเวลานี้ 547 00:23:49,910 --> 00:23:52,580 ผมหมายถึงสวัสดี 548 00:23:52,580 --> 00:23:54,770 สวัสดี 549 00:23:54,770 --> 00:23:57,360 มันแตกต่างกันทุกครั้งเดียว 550 00:23:57,360 --> 00:23:58,430 >> ดีที่เป็นเหตุผลว่าทำไม? 551 00:23:58,430 --> 00:24:00,140 อะไรจริงที่เกิดขึ้น ภายใต้ฝากระโปรง? 552 00:24:00,140 --> 00:24:03,270 ดีสิ่งที่จริงที่เกิดขึ้นภายใต้ เครื่องดูดควันเป็นสตริงแล้ว 553 00:24:03,270 --> 00:24:07,410 ฉันพิมพ์ในครั้งแรกที่ยกตัวอย่างเช่น คำว่าสวัสดีของหลักสูตร 554 00:24:07,410 --> 00:24:11,660 แต่ถ้าเราเป็นตัวแทนที่อยู่ภายใต้ เครื่องดูดควัน, จำได้ว่า 555 00:24:11,660 --> 00:24:13,470 สตริงในอาร์เรย์ 556 00:24:13,470 --> 00:24:15,040 และเราได้กล่าวว่าเท่าในอดีตที่ผ่านมา 557 00:24:15,040 --> 00:24:20,200 >> ดังนั้นถ้าฉันวาดอาร์เรย์ที่เช่นนี้ฉัน จะไปเป็นตัวแทนของสิ่งที่ค่อนข้าง 558 00:24:20,200 --> 00:24:23,030 คล้ายกับสิ่งที่เราทำสักครู่ที่ผ่านมา 559 00:24:23,030 --> 00:24:25,390 และมีจริงอย่างที่ พิเศษที่นี่เกินไป 560 00:24:25,390 --> 00:24:28,090 เราทำในสิ่งที่ถูกที่กำหนด จุดสิ้นสุดของสตริงทุก? 561 00:24:28,090 --> 00:24:30,760 ใช่นี้เป็นศูนย์เครื่องหมายทับขวาซึ่งเป็น เพียงวิธีการที่เป็นตัวแทน, 562 00:24:30,760 --> 00:24:33,610 ตัวอักษร 00000000 563 00:24:33,610 --> 00:24:35,680 0 แปดบิตในแถว 564 00:24:35,680 --> 00:24:37,610 >> ผมไม่ทราบว่าตรงไปตรงมา หลังจากนี้สิ่ง 565 00:24:37,610 --> 00:24:40,090 นั่นเป็นเพียงพวง RAM มากขึ้น ภายในของคอมพิวเตอร์ของฉัน 566 00:24:40,090 --> 00:24:40,970 แต่เรื่องนี้เป็นอาร์เรย์ 567 00:24:40,970 --> 00:24:42,260 เราได้พูดคุยเกี่ยวกับอาร์เรย์ก่อน 568 00:24:42,260 --> 00:24:45,010 และเรามักจะพูดคุยเกี่ยวกับอาร์เรย์ ในฐานะที่เป็นสถานที่ตั้งศูนย์, 569 00:24:45,010 --> 00:24:46,580 แล้วหนึ่งแล้วสอง 570 00:24:46,580 --> 00:24:47,950 แต่เพียงเพื่อความสะดวก 571 00:24:47,950 --> 00:24:49,380 และที่ว่าญาติทั้งหมด 572 00:24:49,380 --> 00:24:53,010 >> เมื่อคุณจริงได้รับหน่วยความจำจาก คอมพิวเตอร์ก็มีความแน่นอนใด ๆ 573 00:24:53,010 --> 00:24:55,450 2 พันล้านไบต์บางแปลกที่อาจเกิดขึ้น 574 00:24:55,450 --> 00:24:59,100 ดังนั้นจริงๆภายใต้ประทุน, ทั้งหมดในเวลานี้ใช่ 575 00:24:59,100 --> 00:25:01,670 นี้เป็นอย่างดีอาจจะเป็นศูนย์วงเล็บ 576 00:25:01,670 --> 00:25:04,780 แต่ถ้าคุณขุดลึกใต้ เครื่องดูดควัน, ที่จริง 577 00:25:04,780 --> 00:25:07,000 จำนวนที่อยู่ 123 578 00:25:07,000 --> 00:25:09,150 นี่คือที่อยู่ 124 579 00:25:09,150 --> 00:25:11,040 นี่คือที่อยู่ 125 580 00:25:11,040 --> 00:25:12,540 >> และฉันไม่ได้กรูขึ้นในเวลานี้ 581 00:25:12,540 --> 00:25:15,840 เหล่านี้เป็นหนึ่งไบต์ ห่างกันด้วยเหตุผลอะไร 582 00:25:15,840 --> 00:25:17,930 วิธีการใหญ่ถ่านคืออะไร? 583 00:25:17,930 --> 00:25:19,170 ถ่านเป็นเพียงหนึ่งไบต์ 584 00:25:19,170 --> 00:25:20,570 int โดยทั่วไปจะมีสี่ไบต์ 585 00:25:20,570 --> 00:25:24,850 เพื่อที่ว่าทำไมฉันทำมัน 123, 127, 131 และอื่น ๆ 586 00:25:24,850 --> 00:25:27,560 ตอนนี้ฉันสามารถเก็บคณิตศาสตร์ที่เรียบง่าย และเพียงแค่ทำบวก 1 587 00:25:27,560 --> 00:25:30,510 และนี่คือตอนนี้สิ่งที่เกิดขึ้นจริง เมื่ออยู่ภายใต้ฝากระโปรง 588 00:25:30,510 --> 00:25:37,760 >> ดังนั้นเมื่อคุณประกาศอะไรเช่นนี้, สตริง s นี้เป็นจริง - 589 00:25:37,760 --> 00:25:39,170 มันจะเปิดออก - 590 00:25:39,170 --> 00:25:41,190 ดาวถ่าน 591 00:25:41,190 --> 00:25:44,640 ระดับของหลักสูตรหมายถึง ที่อยู่ตัวชี้ aka 592 00:25:44,640 --> 00:25:46,200 ดังนั้นจึงเป็นที่อยู่ของบางสิ่งบางอย่าง 593 00:25:46,200 --> 00:25:47,510 มันคืออะไรที่อยู่ของ? 594 00:25:47,510 --> 00:25:47,760 >> ดี - 595 00:25:47,760 --> 00:25:51,680 ฉันเป็นคนเดียวที่สามารถมองเห็นได้มาก จุดสำคัญที่ฉันทำหรือคิดว่า 596 00:25:51,680 --> 00:25:52,560 ฉันทำ 597 00:25:52,560 --> 00:25:55,270 สตริงดังนั้น - 598 00:25:55,270 --> 00:25:57,180 สิ่งที่น่าเศร้าคือผมมีจอภาพ มีสิทธิที่ฉัน 599 00:25:57,180 --> 00:25:58,100 จะได้เห็นว่า 600 00:25:58,100 --> 00:26:00,990 >> ขวาทั้งหมดดังนั้นสตริง s คือสิ่งที่ ผมประกาศไปก่อนหน้านี้ 601 00:26:00,990 --> 00:26:04,600 แต่ปรากฎขอบคุณเล็ก ๆ น้อย ๆ มายากลใน CS50 ห้องสมุดทั้งหมดนี้ 602 00:26:04,600 --> 00:26:08,780 สตริงมีเวลาอย่างแท้จริง รับดาวถ่าน 603 00:26:08,780 --> 00:26:11,310 ดาวอีกครั้งหมายถึง ตัวชี้หรือที่อยู่ 604 00:26:11,310 --> 00:26:14,180 ความจริงที่ว่ามันขนาบข้าง คำถ่านหมายความว่ามัน 605 00:26:14,180 --> 00:26:15,970 ที่อยู่ของตัวละคร 606 00:26:15,970 --> 00:26:23,100 >> ดังนั้นหากรับสายที่เรียกว่าและฉันพิมพ์ ใน H-E-L-L-O, นำเสนอในขณะนี้สิ่งที่ได้รับ 607 00:26:23,100 --> 00:26:27,330 สตริงตัวอักษรที่ได้รับการกลับมาของ เวลานี้แม้ว่าเราจะได้มากกว่า 608 00:26:27,330 --> 00:26:29,980 สมจริงสมจังโลก? 609 00:26:29,980 --> 00:26:33,310 สิ่งที่ไม่รับสายจริง กลับเป็นค่าตอบแทนหรือไม่? 610 00:26:33,310 --> 00:26:35,830 611 00:26:35,830 --> 00:26:38,720 >> 123 ในกรณีนี้เช่น 612 00:26:38,720 --> 00:26:42,630 ก่อนหน้านี้เราได้กล่าวว่ารับสาย เพียงสตริงกลับลำดับ 613 00:26:42,630 --> 00:26:43,300 อักขระ 614 00:26:43,300 --> 00:26:44,790 แต่ที่บิตของการโกหกสีขาว 615 00:26:44,790 --> 00:26:48,010 วิธีรับสายจริงๆ ภายใต้ประทุนคือจะได้รับ 616 00:26:48,010 --> 00:26:48,930 สตริงจากผู้ใช้ 617 00:26:48,930 --> 00:26:51,530 มัน plops ตัวอักษรที่ เขาหรือเธอชนิดในหน่วยความจำ 618 00:26:51,530 --> 00:26:54,680 มันทำให้เป็นศูนย์เครื่องหมายทับขวาที่สิ้นสุด ลำดับของตัวอักษรเหล่านั้น 619 00:26:54,680 --> 00:26:57,310 >> แต่แล้วสิ่งที่ไม่รับสาย แท้จริงกลับ? 620 00:26:57,310 --> 00:27:02,710 แท้จริงมันส่งกลับที่อยู่ของ ไบต์แรกในแรมที่ 621 00:27:02,710 --> 00:27:04,130 มันถูกนำมาใช้เพื่อความแข็งแรงที่ 622 00:27:04,130 --> 00:27:07,500 และปรากฎว่าเพียงแค่กลับมา ที่อยู่คนเดียว 623 00:27:07,500 --> 00:27:12,120 ตัวอักษรตัวแรกในสตริงที่เป็น เพียงพอสำหรับการค้นหาทั้งหมดของ 624 00:27:12,120 --> 00:27:12,630 สตริง 625 00:27:12,630 --> 00:27:16,930 >> ในคำอื่น ๆ รับสายไม่ได้ ที่จะกลับมา 123 และ 124 และ 125 626 00:27:16,930 --> 00:27:19,950 แต่ไม่ได้มีให้ฉันยาว รายการทั้งหมดของไบต์ที่ 627 00:27:19,950 --> 00:27:20,740 สตริงของฉันใช้ 628 00:27:20,740 --> 00:27:22,670 เพราะพวกเขากำลังทั้งหมดกลับไปด้านหลัง 629 00:27:22,670 --> 00:27:28,160 และสองตามที่อยู่แรกผม สามารถคิดออกว่าสตริงสิ้นสุด 630 00:27:28,160 --> 00:27:29,910 ได้อย่างไร 631 00:27:29,910 --> 00:27:33,490 >> null อักขระพิเศษ เครื่องหมายทับขวาเป็นศูนย์ในตอนท้าย 632 00:27:33,490 --> 00:27:35,430 ดังนั้นในคำอื่น ๆ ถ้า คุณผ่านรอบ - 633 00:27:35,430 --> 00:27:36,530 ภายในของตัวแปร - 634 00:27:36,530 --> 00:27:41,300 ที่อยู่ของถ่านและคุณสมมติ ที่จุดสิ้นสุดของสตริงใด ๆ ใด ๆ 635 00:27:41,300 --> 00:27:45,040 ลำดับของตัวอักษรที่เป็นมนุษย์เรา คิดของสตริงถ้าคุณคิดว่า 636 00:27:45,040 --> 00:27:48,600 ในตอนท้ายของสตริงดังกล่าวมี ศูนย์เครื่องหมายทับขวา, คุณทอง 637 00:27:48,600 --> 00:27:52,430 เพราะคุณสามารถหา จุดสิ้นสุดของสตริง 638 00:27:52,430 --> 00:27:54,870 >> ตอนนี้สิ่งที่จริงๆแล้วจะ ในโปรแกรมนี้ 639 00:27:54,870 --> 00:27:59,990 โปรแกรมนี้คือเหตุผลที่ เปรียบเทียบ-0.c, รถ? 640 00:27:59,990 --> 00:28:01,690 อะไรกันแน่ที่ถูกเปรียบเทียบ? 641 00:28:01,690 --> 00:28:02,420 อ้าง? 642 00:28:02,420 --> 00:28:05,000 >> ลูกศิษย์: [ได้ยิน] 643 00:28:05,000 --> 00:28:05,730 >> DAVID ลัน: ว่า 644 00:28:05,730 --> 00:28:08,350 มันเปรียบเทียบสถานที่ ของสตริง 645 00:28:08,350 --> 00:28:12,420 ดังนั้นหากผู้ใช้มีการพิมพ์ในสวัสดีครั้งเดียว เป็นฉันได้หน่วยความจำอาจท้าย 646 00:28:12,420 --> 00:28:13,430 มองเช่นนี้ 647 00:28:13,430 --> 00:28:18,210 หากผู้ใช้ประเภทแล้วในสวัสดีอีกครั้ง แต่โดยการเรียกรับสายอีกครั้ง c คือ 648 00:28:18,210 --> 00:28:21,800 ไม่ฉลาดโดยเฉพาะอย่างยิ่งถ้าคุณไม่ได้สอน มันจะฉลาดโดยการเขียนโค้ด 649 00:28:21,800 --> 00:28:22,430 >> C - 650 00:28:22,430 --> 00:28:23,860 คอมพิวเตอร์และอื่น ๆ โดยทั่วไป - 651 00:28:23,860 --> 00:28:27,370 ถ้าคุณพิมพ์ในคำว่าสวัสดีอีกครั้ง คุณรู้ว่าคุณกำลังจะได้รับ 652 00:28:27,370 --> 00:28:31,480 คุณเพิ่งจะได้รับแถวที่สอง หน่วยความจำที่ใช่จะเกิดขึ้น 653 00:28:31,480 --> 00:28:35,510 การจัดเก็บ H-E-L-L-O และอื่น ๆ 654 00:28:35,510 --> 00:28:38,240 >> มันจะมีลักษณะเดียวกันเพื่อ มนุษย์เรา แต่ที่อยู่นี้ 655 00:28:38,240 --> 00:28:39,460 อาจจะไม่ 123 656 00:28:39,460 --> 00:28:42,470 มันอาจจะเกิดขึ้นเพียงเพื่อว่า ระบบปฏิบัติการมีบางส่วนที่มีอยู่ 657 00:28:42,470 --> 00:28:45,430 พื้นที่สำหรับกรณีที่สถานที่ตั้ง - 658 00:28:45,430 --> 00:28:49,820 ขอพูดอะไรโดยพลการ เช่นนี้เป็นสถานที่ตั้ง 200 659 00:28:49,820 --> 00:28:51,620 และนี่คือสถานที่ตั้ง 201 660 00:28:51,620 --> 00:28:53,060 และนี่คือสถานที่ตั้ง 202 661 00:28:53,060 --> 00:28:55,730 เรามีความคิดที่ว่าไม่มี จะอยู่ในหน่วยความจำ 662 00:28:55,730 --> 00:28:59,110 >> แต่สิ่งที่นี้หมายถึงก็คือว่าสิ่งที่เป็น จะถูกเก็บไว้ในท้ายที่สุด s หรือไม่? 663 00:28:59,110 --> 00:29:00,750 123 664 00:29:00,750 --> 00:29:04,860 สิ่งที่จะถูกเก็บไว้ในที ในตัวอย่างนี้โดยพล? 665 00:29:04,860 --> 00:29:06,300 จำนวน 200 666 00:29:06,300 --> 00:29:11,410 และสิ่งที่หมายถึงแล้วจะเห็นได้ชัด, 123 ไม่เท่ากับ 200 667 00:29:11,410 --> 00:29:14,940 และดังนั้นนี้ถ้าเงื่อนไขไม่เคย ประเมินไปจริง 668 00:29:14,940 --> 00:29:18,430 เพราะสตริงได้รับคือการใช้ที่แตกต่างกัน ชิ้นของหน่วยความจำในแต่ละครั้ง 669 00:29:18,430 --> 00:29:20,360 >> ตอนนี้เราสามารถดูนี้อีกครั้ง ในอีกตัวอย่างหนึ่ง 670 00:29:20,360 --> 00:29:23,764 ให้ฉันไปข้างหน้าและเปิดสำเนา 0.c- 671 00:29:23,764 --> 00:29:28,770 ผมเรียกร้องว่าตัวอย่างนี้เป็นไป ลอง - แต่ล้มเหลว - เพื่อคัดลอกสองสตริง 672 00:29:28,770 --> 00:29:29,910 ดังต่อไปนี้ 673 00:29:29,910 --> 00:29:31,730 >> ฉันจะพูดอะไรบางอย่าง ให้กับผู้ใช้ 674 00:29:31,730 --> 00:29:34,490 ผมก็จะได้รับ สตริงและเรียกมัน 675 00:29:34,490 --> 00:29:36,400 และตอนนี้ฉันทำนี้ที่นี่ 676 00:29:36,400 --> 00:29:37,990 เรากล่าวถึงนี้ในขณะที่กลับ 677 00:29:37,990 --> 00:29:42,490 แต่เมื่ออาจได้รับผลตอบแทน null สตริง อีกตัวละครพิเศษหรือพิเศษ 678 00:29:42,490 --> 00:29:45,050 สัญลักษณ์สมมติว่า 679 00:29:45,050 --> 00:29:45,900 ถ้ามันออกมาจากหน่วยความจำ 680 00:29:45,900 --> 00:29:48,970 >> ตัวอย่างเช่นหากผู้ใช้ที่เป็นจริง เป็นเรื่องยากและชนิดที่เลวร้าย 681 00:29:48,970 --> 00:29:51,220 จำนวนตัวอักษรที่ แป้นพิมพ์และฮิตใส่ 682 00:29:51,220 --> 00:29:54,580 ถ้าจำนวนตัวอักษรที่เพียงแค่ไม่สามารถ พอดีในสิ่งที่แรมบ้า 683 00:29:54,580 --> 00:29:57,820 เหตุผลที่ดีอาจจะรับสาย ได้เป็นอย่างดีกลับมาเป็นโมฆะ 684 00:29:57,820 --> 00:30:01,080 >> หรือถ้าโปรแกรมของคุณเองจะทำมาก ของสิ่งอื่น ๆ และมีเพียง 685 00:30:01,080 --> 00:30:03,790 หน่วยความจำไม่พอสำหรับการรับสาย จะประสบความสำเร็จมันอาจสิ้นสุด 686 00:30:03,790 --> 00:30:05,240 ขึ้นโมฆะกลับ 687 00:30:05,240 --> 00:30:07,160 แต่ขอได้ถูกต้องแม่นยำมากขึ้น เป็นสิ่งที่นี้คือ 688 00:30:07,160 --> 00:30:10,280 อะไรคือสิ่งที่ชนิดข้อมูลของ s จริงเหรอ? 689 00:30:10,280 --> 00:30:11,610 ดาว Char 690 00:30:11,610 --> 00:30:14,560 >> ดังนั้นมันจะเปิดออกตอนนี้เราสามารถปอกเปลือก กลับชั้นของโมฆะ 691 00:30:14,560 --> 00:30:17,500 เปิดออกเป็นโมฆะ - ใช่, อย่างเห็นได้ชัด สัญลักษณ์พิเศษ 692 00:30:17,500 --> 00:30:19,190 แต่มันเป็นสิ่งที่เป็นจริง? 693 00:30:19,190 --> 00:30:25,220 จริงๆ null เป็นเพียงสัญลักษณ์ที่เรา มนุษย์ใช้เพื่อเป็นตัวแทนของศูนย์เช่นกัน 694 00:30:25,220 --> 00:30:29,010 >> ดังนั้นผู้เขียนของ C และคอมพิวเตอร์ มากกว่าปกติจึงตัดสินใจปีที่ผ่านมา 695 00:30:29,010 --> 00:30:30,010 ที่คุณรู้ว่าสิ่งที่ 696 00:30:30,010 --> 00:30:34,850 ทำไมเราไม่มั่นใจว่าผู้ใช้ไม่มี ข้อมูลเป็นสิ่งที่เคยเคยเคย 697 00:30:34,850 --> 00:30:36,730 เก็บไว้ที่ศูนย์ก่อน? 698 00:30:36,730 --> 00:30:39,610 ในความเป็นจริงแม้จะอยู่ในตัวอย่างของฉันโดยพลการ ก่อนที่ผมไม่ได้เริ่มต้นนับ 699 00:30:39,610 --> 00:30:40,390 ไบต์ที่ศูนย์ 700 00:30:40,390 --> 00:30:41,540 ผมเริ่มที่หนึ่ง 701 00:30:41,540 --> 00:30:44,950 เพราะผมรู้ว่าคนที่อยู่ในโลก ได้ตัดสินใจที่จะเป็นศูนย์สำรอง 702 00:30:44,950 --> 00:30:47,970 ไบต์ใน RAM ของทุกคนเป็น บางสิ่งที่พิเศษ 703 00:30:47,970 --> 00:30:52,020 >> เป็นเหตุผลที่ทุกเวลาที่คุณต้องการ ส่งสัญญาณว่าสิ่งที่ได้ไปผิด 704 00:30:52,020 --> 00:30:55,960 ในเรื่องเกี่ยวกับที่อยู่ที่คุณกลับมา null - หรือที่เรียกเป็นศูนย์ - 705 00:30:55,960 --> 00:30:59,410 และเพราะคุณรู้ว่าไม่มี legit ข้อมูลที่ศูนย์ที่อยู่อย่างเห็นได้ชัด 706 00:30:59,410 --> 00:31:00,400 นั่นหมายความว่าข้อผิดพลาด 707 00:31:00,400 --> 00:31:04,080 และที่ว่าทำไมเราโดยการประชุมตรวจสอบ สำหรับสิ่งที่เป็นโมฆะและผลตอบแทน 708 00:31:04,080 --> 00:31:06,260 หนึ่งเดียวในกรณีดังกล่าว 709 00:31:06,260 --> 00:31:09,300 >> ดังนั้นหากเราเลื่อนลงมาตอนนี้เป็นเพียง แล้วการตรวจสอบข้อผิดพลาดบางกรณีเพียงแค่ใน 710 00:31:09,300 --> 00:31:10,610 บางสิ่งบางอย่างที่ผิดพลาดไปด้วย [? ประกันตัว?] 711 00:31:10,610 --> 00:31:13,470 ทั้งหมดและออกจากโปรแกรม โดยการกลับเร็ว 712 00:31:13,470 --> 00:31:19,030 บรรทัดนี้ในขณะนี้อาจจะเขียนใหม่ เช่นนี้ซึ่งหมายความว่าอะไร 713 00:31:19,030 --> 00:31:23,155 เมื่อทางด้านซ้ายมือให้ฉันอีก ตัวชี้ไปที่ตัวอักษรและเรียกว่า T 714 00:31:23,155 --> 00:31:26,935 สิ่งที่ฉันจัดเก็บภายในของ T ขึ้น เกี่ยวกับเรื่องนี้หนึ่งบรรทัดของรหัส? 715 00:31:26,935 --> 00:31:30,950 716 00:31:30,950 --> 00:31:32,170 >> ผมจัดเก็บสถานที่ 717 00:31:32,170 --> 00:31:34,742 โดยเฉพาะสถานที่ ที่อยู่ใน s 718 00:31:34,742 --> 00:31:39,000 ดังนั้นหากผู้ใช้มีการพิมพ์ในสวัสดีและ แรกที่เกิดขึ้นสวัสดีจะจบลง 719 00:31:39,000 --> 00:31:42,567 ที่นี่แล้ว 123 ตัวเลขคือ จะกลับมาจากการได้รับ 720 00:31:42,567 --> 00:31:43,810 สตริงและถูกเก็บไว้ - 721 00:31:43,810 --> 00:31:44,780 ในขณะที่เรากล่าวก่อนหน้านี้ - 722 00:31:44,780 --> 00:31:45,440 ใน s 723 00:31:45,440 --> 00:31:50,560 >> เมื่อตอนนี้ผมประกาศตัวชี้ไปอีก ถ่านและเรียกว่า T จำนวนคือสิ่งที่ 724 00:31:50,560 --> 00:31:53,940 แท้จริงจะจบลงใน ทีตามเรื่อง? 725 00:31:53,940 --> 00:31:55,420 ดังนั้น 123 726 00:31:55,420 --> 00:32:00,310 >> ดังนั้นในทางเทคนิคในขณะนี้ของทั้งสองและ ทีจะชี้ไปที่แน่นอน 727 00:32:00,310 --> 00:32:02,410 ชิ้นเดียวกันของหน่วยความจำ 728 00:32:02,410 --> 00:32:06,140 ดังนั้นสังเกตเห็นสิ่งที่ฉันจะต้องทำตอนนี้เพื่อ พิสูจน์ให้เห็นว่าโปรแกรมนี้เป็นรถ 729 00:32:06,140 --> 00:32:08,820 >> ครั้งแรกที่ฉันจะไปเรียกร้องกับ ฉพิมพ์พะวง 730 00:32:08,820 --> 00:32:10,080 สำเนาของสตริง 731 00:32:10,080 --> 00:32:11,660 แล้วผมจะทำอะไรเล็ก ๆ น้อย ๆ การตรวจสอบข้อผิดพลาด 732 00:32:11,660 --> 00:32:12,160 ฉันจะให้แน่ใจว่า 733 00:32:12,160 --> 00:32:16,710 ขอให้แน่ใจว่า T สตริงที่ อย่างน้อยมากกว่าศูนย์ในระยะเวลา 734 00:32:16,710 --> 00:32:19,190 จึงมีตัวละครบางคนอยู่ที่นั่น ที่จริงการลงทุน 735 00:32:19,190 --> 00:32:22,840 >> และแล้วคุณอาจจำนี้ จากตัวอย่างก่อนหน้า 736 00:32:22,840 --> 00:32:25,630 2 บน - ที่อยู่ใน ไฟล์ ctype.h 737 00:32:25,630 --> 00:32:30,800 T วงเล็บเป็นศูนย์ให้ฉันเป็นศูนย์ ลักษณะของสตริงที 738 00:32:30,800 --> 00:32:34,360 และ 2 บนของค่าเดียวกันว่าของ แน่นอนแปลงเป็นตัวพิมพ์ใหญ่ 739 00:32:34,360 --> 00:32:38,230 >> ดังนั้นอย่างสังหรณ์ใจนี้เน้นเส้น ของรหัสคือลงทุนครั้งแรก 740 00:32:38,230 --> 00:32:40,250 ตัวอักษร T 741 00:32:40,250 --> 00:32:44,485 แต่ไม่พะวง, สังหรณ์ใจ, ตัวอักษรตัวแรกใน s 742 00:32:44,485 --> 00:32:48,130 แต่ถ้าคุณกำลังคิดไปข้างหน้าสิ่งที่ฉัน เกี่ยวกับเพื่อดูว่าเมื่อผมรันโปรแกรมนี้ 743 00:32:48,130 --> 00:32:54,220 และพิมพ์ออกมาทั้งสองเดิม s และสำเนาที่เรียกว่า T? 744 00:32:54,220 --> 00:32:55,350 >> พวกเขากำลังจริงจะไม่เหมือนเดิม 745 00:32:55,350 --> 00:32:56,600 และทำไมพวกเขาจะเป็นเหมือนกันหรือไม่ 746 00:32:56,600 --> 00:32:58,970 747 00:32:58,970 --> 00:33:01,020 พวกเขาทั้งสองชี้ไปที่ ตรงเดียวกัน 748 00:33:01,020 --> 00:33:01,610 ดังนั้นขอให้พวกนี้ทำ 749 00:33:01,610 --> 00:33:03,160 >> ให้เป็นศูนย์สำเนา 750 00:33:03,160 --> 00:33:04,070 มันจะสร้าง OK 751 00:33:04,070 --> 00:33:06,500 ผมขอใช้เป็นศูนย์คัดลอก 752 00:33:06,500 --> 00:33:10,110 ให้ฉันพิมพ์สิ่งที่ต้องการในสวัสดี ตัวพิมพ์เล็กทั้งหมดแล้วกด Enter 753 00:33:10,110 --> 00:33:16,520 และจะอ้างว่าทั้งสองของเดิม และสำเนาเป็นจริงเหมือนกัน 754 00:33:16,520 --> 00:33:17,920 >> ดังนั้นสิ่งที่เกิดขึ้นจริงที่นี่? 755 00:33:17,920 --> 00:33:20,100 ให้ฉันวาดภาพเพียงแค่นี้ เพื่อบอกเล่าเรื่องราวใน 756 00:33:20,100 --> 00:33:21,340 วิธีที่แตกต่างกันเล็กน้อย 757 00:33:21,340 --> 00:33:26,060 อะไรจริงที่เกิดขึ้นภายใต้ เครื่องดูดควันเมื่อฉันประกาศสิ่งที่ต้องการ 758 00:33:26,060 --> 00:33:30,410 ถ่านเริ่มต้น s หรือสตริง s, ฉันได้รับตัวชี้ - 759 00:33:30,410 --> 00:33:33,090 ซึ่งเกิดขึ้นเป็นไบต์ที่สี่ ใน CS50 เครื่องใช้ 760 00:33:33,090 --> 00:33:34,410 และในจำนวนมากของเครื่องคอมพิวเตอร์ 761 00:33:34,410 --> 00:33:36,008 และฉันจะเรียกนี้ 762 00:33:36,008 --> 00:33:39,810 และปัจจุบันนี้มี บางค่าที่ไม่รู้จัก 763 00:33:39,810 --> 00:33:43,900 >> เมื่อคุณประกาศตัวแปรเว้นแต่คุณ ตัวเองใส่ค่าที่นั่นที่ 764 00:33:43,900 --> 00:33:44,570 รู้ว่าสิ่งที่อยู่ที่นั่น 765 00:33:44,570 --> 00:33:48,110 มันอาจจะมีบางลำดับสุ่มของ บิตจากการปฏิบัติหน้าที่ 766 00:33:48,110 --> 00:33:52,490 ดังนั้นเมื่อผมในบรรทัดของฉันของรหัสจะได้รับ สตริงแล้วเก็บกลับมา 767 00:33:52,490 --> 00:33:54,800 ค่าในรับสายอย่างใด - 768 00:33:54,800 --> 00:33:58,520 และเราจะกลับในที่สุดเปลือกจะได้รับ งานสตริงจัดสรรอย่างใด 769 00:33:58,520 --> 00:34:00,480 อาร์เรย์ที่อาจมีลักษณะ บิตเช่นนี้ 770 00:34:00,480 --> 00:34:05,390 H-E-L-L-O, เครื่องหมายทับขวาเป็นศูนย์ 771 00:34:05,390 --> 00:34:09,510 >> ขอสมมติว่าเป็นที่อยู่ 123 เพียงแค่ครั้งแรกที่มั่นคง 772 00:34:09,510 --> 00:34:13,000 เพื่อให้ได้รับผลตอบแทนสตริงใน เน้นเส้นมีก็จะส่งกลับ 773 00:34:13,000 --> 00:34:15,000 จำนวนที่เรากล่าวว่า 123 774 00:34:15,000 --> 00:34:17,420 ดังนั้นจริงๆสิ่งที่จะไปภายในของ s ที่นี่? 775 00:34:17,420 --> 00:34:26,590 >> ดีจริงๆไปสิ่ง ด้านในของ s 123 776 00:34:26,590 --> 00:34:29,250 แต่ตรงไปตรงมาฉันได้รับเพียงเล็กน้อย สับสนโดยทั้งหมดของที่อยู่เหล่านี้, 777 00:34:29,250 --> 00:34:30,320 ทั้งหมดของตัวเลขเหล่านี้โดยพลการ 778 00:34:30,320 --> 00:34:32,290 123, 124, 127 779 00:34:32,290 --> 00:34:34,570 ดังนั้นขอจริงง่าย โลกนิด ๆ หน่อย ๆ 780 00:34:34,570 --> 00:34:38,800 >> เมื่อเราพูดคุยเกี่ยวกับตัวชี้ตรงไปตรงมาเพื่อ มนุษย์เราห่าใส่ใจที่ที่ 781 00:34:38,800 --> 00:34:39,870 สิ่งที่อยู่ในหน่วยความจำ? 782 00:34:39,870 --> 00:34:41,080 ที่โดยพลการอย่างสมบูรณ์ 783 00:34:41,080 --> 00:34:43,370 มันจะขึ้นอยู่กับวิธี แรมมากผู้ใช้ที่มี 784 00:34:43,370 --> 00:34:46,590 มันจะขึ้นอยู่กับเมื่อในวันที่ คุณเรียกใช้โปรแกรมบางทีและ 785 00:34:46,590 --> 00:34:48,250 สิ่งที่ผู้ใช้ป้อนจะช่วยให้คุณ 786 00:34:48,250 --> 00:34:50,060 เราอาศัยอยู่ในรายละเอียดที่ไม่สำคัญ 787 00:34:50,060 --> 00:34:54,230 >> ดังนั้นนามธรรมให้ออกไปและบอกว่า เมื่อคุณเรียกใช้บรรทัดของรหัสเช่นนี้ 788 00:34:54,230 --> 00:34:57,320 ถ่านดาว s ได้รับผลตอบแทน ค่าของสตริงการรับ 789 00:34:57,320 --> 00:35:02,720 ทำไมเราไม่แทนเพียงแค่วาดสิ่งที่เรา ให้เรียกตัวชี้ราวกับว่ามันเป็น 790 00:35:02,720 --> 00:35:04,140 ชี้ไปที่บางสิ่งบางอย่าง? 791 00:35:04,140 --> 00:35:07,000 ดังนั้นผมจึงเรียกร้องว่าขณะนี้ขึ้น มีตัวชี้เป็น - 792 00:35:07,000 --> 00:35:08,480 ภายใต้ฝากระโปรงมันอยู่ 793 00:35:08,480 --> 00:35:11,330 แต่มันก็เป็นเพียงแค่ชี้ไปที่ ไบต์แรกใน 794 00:35:11,330 --> 00:35:12,780 สตริงที่ถูกส่งกลับ 795 00:35:12,780 --> 00:35:16,710 >> ถ้าตอนนี้ผมกลับไปยังรหัสที่นี่ สิ่งที่เกิดขึ้นที่บรรทัดนี้ 796 00:35:16,710 --> 00:35:20,020 ทั้งในสายไฮไลท์ตอนนี้ ผมเห็นได้ชัดว่าการประกาศอื่น 797 00:35:20,020 --> 00:35:21,070 ตัวแปรที่เรียกว่า T 798 00:35:21,070 --> 00:35:25,700 แต่ก็ยังมีตัวชี้ดังนั้นฉันจะ การวาดเป็นในทางทฤษฎีที่แน่นอน 799 00:35:25,700 --> 00:35:26,710 กล่องขนาดเดียวกัน 800 00:35:26,710 --> 00:35:28,160 และฉันจะเรียกว่า T 801 00:35:28,160 --> 00:35:33,500 >> และตอนนี้ถ้าเรากลับไปยังรหัสอีกครั้ง เมื่อฉันเก็บอยู่ข้างในของที 802 00:35:33,500 --> 00:35:36,920 สิ่งที่ฉันในทางเทคนิค วางภายในของ T? 803 00:35:36,920 --> 00:35:39,350 ดีในทางเทคนิคนี้ 123 เป็นจำนวน 804 00:35:39,350 --> 00:35:42,270 ดังนั้นจริงๆที่ฉันควรจะเขียน 123 มีจำนวน 805 00:35:42,270 --> 00:35:43,900 แต่ขอเอามันระดับที่สูงขึ้น 806 00:35:43,900 --> 00:35:48,090 ทีถ้ามันเป็นเพียงตัวชี้, สัญชาตญาณเป็นเพียงที่ 807 00:35:48,090 --> 00:35:49,800 นั่นคือทั้งหมดที่ถูก ที่เก็บไว้ในนั้น 808 00:35:49,800 --> 00:35:54,970 >> ดังนั้นตอนนี้ในบรรทัดที่น่าสนใจล่าสุด ของรหัสเมื่อฉันจริงไปเกี่ยวกับ 809 00:35:54,970 --> 00:36:00,680 พะวงศูนย์อักขระ ในทีสิ่งที่เกิดขึ้น? 810 00:36:00,680 --> 00:36:06,310 ดีทีวงเล็บศูนย์อยู่ในขณะนี้ชี้ กับสิ่งที่ตัวละครสมมุติ? 811 00:36:06,310 --> 00:36:07,460 >> มันชี้ไปที่ H 812 00:36:07,460 --> 00:36:08,870 เพราะทีวงเล็บเป็นศูนย์ - 813 00:36:08,870 --> 00:36:12,490 จำนี้เป็นไวยากรณ์เก่า วงเล็บที ศูนย์เพียงแค่หมายความว่าถ้าเป็นสตริงทีที 814 00:36:12,490 --> 00:36:15,590 ศูนย์วงเล็บหมายถึงการเป็นศูนย์ ตัวละครในความแข็งแรงที่ 815 00:36:15,590 --> 00:36:18,650 ดังนั้นสิ่งที่จริงหมายถึง คือไปที่แถวนี้ - 816 00:36:18,650 --> 00:36:21,520 และใช่นี้อาจจะมี 123, นี้อาจจะมี 124 817 00:36:21,520 --> 00:36:22,790 แต่มันคือทั้งหมดที่ญาติจำ 818 00:36:22,790 --> 00:36:25,640 เมื่อใดก็ตามที่พูดคุยเกี่ยวกับอาร์เรย์เรามี ข้อได้เปรียบของการพูดคุยเกี่ยวกับ 819 00:36:25,640 --> 00:36:27,000 ดัชนีญาติ 820 00:36:27,000 --> 00:36:31,120 >> และดังนั้นตอนนี้เราก็สามารถสันนิษฐานได้ว่า ที่ศูนย์ T วงเล็บคือ H 821 00:36:31,120 --> 00:36:35,090 ดังนั้นถ้าผมเรียก 2 บนที่มันว่าเป็นสิ่งที่ ทำจริงๆคือลงทุน 822 00:36:35,090 --> 00:36:38,290 ชั่วโมงตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่เอช แต่แน่นอนสิ่งที่เป็น? 823 00:36:38,290 --> 00:36:41,010 มันชี้ไปยังสตริงสาปเดียวกัน 824 00:36:41,010 --> 00:36:44,200 >> ดังนั้นนี่คือสิ่งที่เกิดขึ้น ในรหัสนี้เพื่อให้ห่างไกล 825 00:36:44,200 --> 00:36:45,960 ดังนั้นแล้วสิ่งที่ความหมาย? 826 00:36:45,960 --> 00:36:48,300 ทำอย่างไรเราจะแก้ไขปัญหาเหล​​่านี้ปัญหาที่สอง? 827 00:36:48,300 --> 00:36:50,870 เราจะเปรียบเทียบกับสตริงที่เกิดขึ้นจริงได้อย่างไร 828 00:36:50,870 --> 00:36:53,720 >> กันอย่างสังหรณ์ใจว่าจะ คุณไปเกี่ยวกับการเปรียบเทียบสอง 829 00:36:53,720 --> 00:36:55,090 สตริงเพื่อความเท่าเทียมกันจริงหรือไม่? 830 00:36:55,090 --> 00:36:58,920 831 00:36:58,920 --> 00:37:00,750 >> หมายความว่าถ้าสองคน สตริงมีค่าเท่ากัน? 832 00:37:00,750 --> 00:37:04,330 เห็นได้ชัดไม่ได้ว่าที่อยู่ของพวกเขา เท่ากับในหน่วยความจำเพราะที่ต่ำ 833 00:37:04,330 --> 00:37:06,590 รายละเอียดการปฏิบัติในระดับ 834 00:37:06,590 --> 00:37:08,360 ทุกตัวอักษรเดียวกัน 835 00:37:08,360 --> 00:37:12,810 เพื่อให้ฉันนำเสนอและให้ฉันแนะนำ หนึ่งในรุ่นของ compare.c 836 00:37:12,810 --> 00:37:14,970 ที่นี่จึงเปรียบเทียบ 1.C- 837 00:37:14,970 --> 00:37:19,590 >> ผมขอเสนอว่าเรายังคงได้รับ ตัวชี้ที่เรียกว่า s และร้านค้าที่อยู่ในนั้น 838 00:37:19,590 --> 00:37:20,610 ค่าตอบแทนของสตริงการรับ 839 00:37:20,610 --> 00:37:21,750 ขอทำสิ่งเดียวกันกับ T 840 00:37:21,750 --> 00:37:23,230 ดังนั้นไม่มีรหัสที่แตกต่างกัน 841 00:37:23,230 --> 00:37:25,420 ฉันจะเพิ่มเพียงเล็กน้อย ข้อผิดพลาดการตรวจสอบมากขึ้นในขณะนี้ 842 00:37:25,420 --> 00:37:29,390 ดังนั้นขณะนี้ที่เราเรียงลำดับของการปอกเปลือกกลับ ชั้นนี้ใน CS50 ของสิ่งที่สตริง 843 00:37:29,390 --> 00:37:33,520 จริงก็คือเราจะต้องมีทางทวารหนั​​กมากขึ้น เกี่ยวกับการทำให้แน่ใจว่าเราไม่ได้ละเมิด 844 00:37:33,520 --> 00:37:35,330 ค่าที่ไม่ถูกต้องเช่นโมฆะ 845 00:37:35,330 --> 00:37:36,440 >> ดังนั้นฉันแค่ไปตรวจสอบ 846 00:37:36,440 --> 00:37:41,490 ถ้าของไม่เท่ากับโมฆะและ T ไม่ โมฆะเท่ากับหมายความว่าเราตกลง 847 00:37:41,490 --> 00:37:44,460 รับสายไม่ได้กรูขึ้นรับ อย่างใดอย่างหนึ่งของสตริงเหล่านั้น 848 00:37:44,460 --> 00:37:51,270 และคุณอาจจะสามารถเดาตอนนี้สิ่งที่ ไม่ CMP STR คงจะทำอะไร? 849 00:37:51,270 --> 00:37:52,000 สตริงเปรียบเทียบ 850 00:37:52,000 --> 00:37:55,470 >> ดังนั้นถ้าคุณได้ในโปรแกรมจาวาก่อน นี้เป็นเหมือนวิธีการที่เท่ากับใน 851 00:37:55,470 --> 00:37:56,490 คลาสสตริง 852 00:37:56,490 --> 00:37:57,890 แต่สำหรับบรรดาของคุณที่ยังไม่ได้ โปรแกรมก่อน 853 00:37:57,890 --> 00:37:59,320 นี้เป็นเพียงฟังก์ชั่น C 854 00:37:59,320 --> 00:38:02,180 มันเกิดขึ้นมาใน ไฟล์ที่เรียกว่าสตริง 855 00:38:02,180 --> 00:38:03,830 นั่นคือสิ่งที่มันประกาศ 856 00:38:03,830 --> 00:38:05,110 >> และเปรียบเทียบสตริง - 857 00:38:05,110 --> 00:38:07,530 ที่จริงผมลืมการใช้งาน, แต่ไม่เคยทราบว่า 858 00:38:07,530 --> 00:38:10,470 จำได้ว่าเราสามารถทำได้ ชายคนหนึ่งลงไปผัดเปรียบเทียบ 859 00:38:10,470 --> 00:38:12,590 และนี้เป็นไปเพื่อนำมาขึ้น ใช้ลินุกซ์โปรแกรมเมอร์ 860 00:38:12,590 --> 00:38:14,060 และก็ตรงไปตรงมาเพียงเล็กน้อยคลุมเครือ 861 00:38:14,060 --> 00:38:15,270 แต่ฉันสามารถดูได้ที่นี่ที่, อ๋อ 862 00:38:15,270 --> 00:38:17,570 ฉันต้องรวมสตริง 863 00:38:17,570 --> 00:38:20,590 >> และกล่าวว่าที่นี่อยู่ภายใต้คำอธิบาย " ฟังก์ชั่นการเปรียบเทียบสตริงเปรียบเทียบ 864 00:38:20,590 --> 00:38:24,560 สองสาย S1 และ S2. "และ S1 S2 และเห็นได้ชัดทั้งสอง 865 00:38:24,560 --> 00:38:26,120 ข้อโต้แย้งผ่านระบบ 866 00:38:26,120 --> 00:38:28,650 ฉันไม่จำสิ่งที่ const เป็น แต่ตอนนี้แจ้งให้ทราบล่วงหน้า - 867 00:38:28,650 --> 00:38:31,480 และคุณอาจได้เห็นนี้แล้วในขณะที่ คุณได้ใช้หน้าผู้ชายคนนั้นถ้าคุณ 868 00:38:31,480 --> 00:38:32,390 มีทุกอย่าง - 869 00:38:32,390 --> 00:38:36,220 ว่าดาวถ่านมีความหมายเพียงแค่ กับสตริง 870 00:38:36,220 --> 00:38:40,440 >> ดังนั้นจะเปรียบเทียบสองสาย S1 และ S2 และจะส่งกลับจำนวนเต็มน้อย 871 00:38:40,440 --> 00:38:44,930 มากกว่าหรือเท่ากับหรือมากกว่าศูนย์ ถ้า S1 พบตามลำดับเพื่อเป็น 872 00:38:44,930 --> 00:38:47,450 น้อยกว่าหรือตรงหรือ จะมากกว่า S2 873 00:38:47,450 --> 00:38:51,220 นั่นเป็นเพียงวิธีการที่ซับซ้อนมากที่บอก สตริงดังกล่าวจะเปรียบเทียบผลตอบแทน 874 00:38:51,220 --> 00:38:55,760 ศูนย์ถ้าสองสตริงเป็นอย่างสังหรณ์ใจ ตัวอักษรที่เหมือนกันสำหรับ 875 00:38:55,760 --> 00:38:57,120 ตัวอักษรสำหรับอักขระ 876 00:38:57,120 --> 00:38:59,970 >> มันกลับเป็นจำนวนลบถ้า s, ลำดับตามตัวอักษรที่ควร 877 00:38:59,970 --> 00:39:01,010 ก่อนที่จะมาที 878 00:39:01,010 --> 00:39:05,300 หรือผลตอบแทนเ​​ป็นจำนวนบวกถ้า s ควรจะมาหลังจากที 879 00:39:05,300 --> 00:39:06,170 ตามลำดับตัวอักษร 880 00:39:06,170 --> 00:39:08,360 ดังนั้นด้วยฟังก์ชั่นแบบนี้ได้ คุณตัวอย่างเช่นจัดเรียง 881 00:39:08,360 --> 00:39:09,770 ทั้งกลุ่มของคำ? 882 00:39:09,770 --> 00:39:13,984 >> ดังนั้นในรุ่นใหม่นี้ผมจะ ไปข้างหน้าและทำให้ compare1 883 00:39:13,984 --> 00:39:15,750 Dot เฉือนเปรียบเทียบหนึ่ง 884 00:39:15,750 --> 00:39:18,030 ผมจะพิมพ์ในสวัสดีในกรณีที่ต่ำกว่าทั้งหมด 885 00:39:18,030 --> 00:39:20,300 ฉันจะพิมพ์ในสวัสดี ในตัวพิมพ์เล็กทั้งหมดอีกครั้ง 886 00:39:20,300 --> 00:39:23,340 และโชคดีที่ตอนนี้ก็รู้ตัวดีว่า ฉันพิมพ์สิ่งเดียวกัน 887 00:39:23,340 --> 00:39:27,520 >> ในขณะเดียวกันถ้าฉันพิมพ์ในสวัสดีในที่ต่ำกว่า กรณีและสวัสดีในกรณีที่ด้านบนและ 888 00:39:27,520 --> 00:39:29,710 เปรียบเทียบพวกเขาฉันพิมพ์ สิ่งที่แตกต่าง 889 00:39:29,710 --> 00:39:32,530 เพราะไม่เพียง แต่ที่อยู่เป็น ที่แตกต่างกัน แต่เรากำลังเปรียบเทียบ 890 00:39:32,530 --> 00:39:35,350 ตัวอักษรที่แตกต่างกันอีกครั้งและอีกครั้ง 891 00:39:35,350 --> 00:39:37,320 >> ดีขอไปและแก้ไขปัญหาหนึ่ง ปัญหาอื่น ๆ ในขณะนี้ 892 00:39:37,320 --> 00:39:41,590 ผมขอเปิดรุ่นหนึ่งของ สำเนาซึ่งขณะนี้อยู่ที่ 893 00:39:41,590 --> 00:39:42,900 ปัญหานี้ดังต่อไปนี้ 894 00:39:42,900 --> 00:39:45,650 และหนึ่งนี้จะไปดู เล็ก ๆ น้อย ๆ ที่ซับซ้อนมากขึ้น 895 00:39:45,650 --> 00:39:49,320 แต่ถ้าคุณคิดเกี่ยวกับสิ่งที่เรามีปัญหา ต้องแก้หวังว่านี้จะเป็น 896 00:39:49,320 --> 00:39:51,870 ล้างในเวลาเพียงสักครู่ในขณะนี้ 897 00:39:51,870 --> 00:39:57,280 >> ดังนั้นนี้บรรทัดแรก, ถ่านเริ่มต้นทีใน แง่ของคนธรรมดาคนสามารถนำเสนอ 898 00:39:57,280 --> 00:39:59,450 สิ่งบรรทัดนี้ที่นี่หมายถึง? 899 00:39:59,450 --> 00:40:01,050 Char ดาว T คือว่าทำในสิ่งที่? 900 00:40:01,050 --> 00:40:06,660 901 00:40:06,660 --> 00:40:07,210 >> ดี 902 00:40:07,210 --> 00:40:09,500 สร้างตัวชี้ไปยังบาง จุดในหน่วยความจำ 903 00:40:09,500 --> 00:40:10,930 และแจ้งให้เราปรับแก้นิด ๆ หน่อย ๆ 904 00:40:10,930 --> 00:40:17,180 กำหนดตัวแปรที่จะเก็บ ที่อยู่ของถ่านบางส่วนในหน่วยความจำเพียง 905 00:40:17,180 --> 00:40:18,480 จะน้อยมากที่เหมาะสม 906 00:40:18,480 --> 00:40:21,210 >> ตกลงดังนั้นตอนนี้ทางด้านขวามือของฉันได้ ไม่เคยเห็นหนึ่งในฟังก์ชั่นเหล่านี้ 907 00:40:21,210 --> 00:40:22,660 ก่อนที่จะ malloc, 908 00:40:22,660 --> 00:40:26,980 แต่สิ่งที่อาจจะหมายความว่าอย่างไร 909 00:40:26,980 --> 00:40:28,050 การจัดสรรหน่วยความจำ 910 00:40:28,050 --> 00:40:29,410 จัดสรรหน่วยความจำ 911 00:40:29,410 --> 00:40:33,050 >> ดังนั้นมันจะเปิดออกจนถึงตอนนี้เรา ยังไม่ได้จริงๆมีวิธีที่มีประสิทธิภาพของ 912 00:40:33,050 --> 00:40:36,210 ขอให้ระบบปฏิบัติการ ให้ฉันหน่วยความจำบาง 913 00:40:36,210 --> 00:40:39,980 แต่ตอนนี้เรามีฟังก์ชันที่เรียกว่า malloc ที่ไม่ตรงกับที่ 914 00:40:39,980 --> 00:40:42,960 แม้ว่านี้เป็นบิตของ สิ่งที่ทำให้ไขว้เขวในขณะนี้พบว่าใน 915 00:40:42,960 --> 00:40:46,200 ระหว่างสองวงเล็บคือ ก็จะเป็นตัวเลข 916 00:40:46,200 --> 00:40:48,510 ที่ฉันได้พิมพ์ในคำถาม เครื่องหมายสามารถเป็นตัวเลข 917 00:40:48,510 --> 00:40:51,020 >> และตัวเลขที่หมายถึง ให้ฉัน 10 ไบต์ 918 00:40:51,020 --> 00:40:52,320 ให้ฉัน 20 ไบต์ 919 00:40:52,320 --> 00:40:53,820 ให้ฉัน 100 ไบต์ 920 00:40:53,820 --> 00:40:56,500 และ malloc จะทำอย่างดีที่สุดเพื่อ ถามระบบปฏิบัติการ - 921 00:40:56,500 --> 00:40:57,630 ลินุกซ์ในกรณีนี้ - 922 00:40:57,630 --> 00:40:59,630 เดี๋ยวก่อน 100 ไบต์ของพวกเขา ของ RAM ที่มีอยู่? 923 00:40:59,630 --> 00:41:04,320 ถ้าเป็นเช่นนั้นกลับไบต์เหล่านั้นให้ฉันโดย กลับมาอยู่ที่ของ 924 00:41:04,320 --> 00:41:06,610 ไบต์เหล่านั้นบางที? 925 00:41:06,610 --> 00:41:07,610 คนแรกมาก 926 00:41:07,610 --> 00:41:10,460 >> ดังนั้นที่นี่เกินไป - และนี่คือเด่น ใน C, เวลาคุณใด ๆ 927 00:41:10,460 --> 00:41:11,680 การจัดการที่มีที่อยู่? 928 00:41:11,680 --> 00:41:15,830 คุณมักจะจัดการกับ ที่อยู่ดังกล่าวเป็นครั้งแรกไม่ว่าใหญ่ 929 00:41:15,830 --> 00:41:19,490 ก้อนของหน่วยความจำคุณถูก ส่งกลับเพื่อที่จะพูด 930 00:41:19,490 --> 00:41:20,880 >> เพื่อให้นักดำน้ำที่นี่ 931 00:41:20,880 --> 00:41:23,940 ฉันพยายามที่จะจัดสรรอย่างไร ไบต์จำนวนมากว่า? 932 00:41:23,940 --> 00:41:24,080 ดี 933 00:41:24,080 --> 00:41:26,090 ความยาวสตริงของ S - ขอ ทำตัวอย่างที่เป็นรูปธรรม 934 00:41:26,090 --> 00:41:30,700 ถ้าเป็น Hello, H-E-L-L-O, คืออะไร ความยาวสตริงของ s เห็นได้ชัด? 935 00:41:30,700 --> 00:41:32,010 ดังนั้นจึงเป็นห้า 936 00:41:32,010 --> 00:41:34,590 แต่ที่ฉันทำบวก 1 เมื่อว่าทำไม? 937 00:41:34,590 --> 00:41:37,700 ฉันต้องการหกไบต์ทำไม แทนห้า? 938 00:41:37,700 --> 00:41:38,790 ตัวอักษรโมฆะ 939 00:41:38,790 --> 00:41:41,210 >> ฉันไม่ต้องการที่จะออกจากการทำงานนี้ออก null อักขระพิเศษ 940 00:41:41,210 --> 00:41:45,160 เพราะถ้าฉันทำสำเนาของสวัสดีและ เพียงแค่ทำ H-E-L-L-O แต่ผมไม่ได้ใส่ 941 00:41:45,160 --> 00:41:50,160 อักขระพิเศษที่เครื่องคอมพิวเตอร์ อาจไม่ได้โดยบังเอิญ, เครื่องหมายทับขวา 942 00:41:50,160 --> 00:41:51,730 ศูนย์มีสำหรับฉัน 943 00:41:51,730 --> 00:41:55,570 และดังนั้นถ้าฉันพยายามที่จะคิดออก ระยะเวลาของการคัดลอกที่ผมอาจจะคิดว่า 944 00:41:55,570 --> 00:41:59,360 มันยาว 20 อักขระหรือล้าน ความยาวอักขระถ้าฉันเพียงแค่ไม่เคยเกิดขึ้น 945 00:41:59,360 --> 00:42:01,050 ที่จะตีเป็นศูนย์เครื่องหมายทับขวา 946 00:42:01,050 --> 00:42:05,780 >> ดังนั้นเราจึงจำเป็นหกไบต์ในการจัดเก็บ H-E-L-L-O, เครื่องหมายทับขวาเป็นศูนย์ 947 00:42:05,780 --> 00:42:07,870 แล้วนี้เป็นเพียง จะทวารหนั​​กสุด 948 00:42:07,870 --> 00:42:10,700 สมมติว่าผมลืมสิ่งที่ ขนาดของถ่านคือ 949 00:42:10,700 --> 00:42:12,020 ที่เราต้องบอกว่ามันเป็นหนึ่งไบต์ 950 00:42:12,020 --> 00:42:12,860 และมักจะเป็น 951 00:42:12,860 --> 00:42:15,425 ในทางทฤษฎีแล้วมันอาจจะเป็นบางสิ่งบางอย่าง ที่แตกต่างกันที่แตกต่างกันบน Mac หรือ 952 00:42:15,425 --> 00:42:16,250 เครื่องคอมพิวเตอร์ที่แตกต่างกัน 953 00:42:16,250 --> 00:42:19,650 >> ดังนั้นมันจะเปิดออกมีดำเนินการนี​​้ เรียกว่า sizeof ว่าถ้าคุณผ่านมัน 954 00:42:19,650 --> 00:42:22,680 ชื่อของชนิดข้อมูลที่ชอบ - char, int หรือหรือลอย - 955 00:42:22,680 --> 00:42:26,930 มันจะบอกคุณแบบไดนามิกหลายวิธี ไบต์ถ่านจะขึ้นเกี่ยวกับเรื่องนี้ 956 00:42:26,930 --> 00:42:28,090 คอมพิวเตอร์โดยเฉพาะอย่างยิ่ง 957 00:42:28,090 --> 00:42:31,360 >> ดังนั้นนี่คือเพียงได้อย่างมีประสิทธิภาพ เช่นบอกว่า 1 ครั้งหรือ 958 00:42:31,360 --> 00:42:32,440 ไม่มีอะไรที่ทุกครั้ง 959 00:42:32,440 --> 00:42:36,340 แต่ฉันทำมันเพียงเพื่อให้ทางทวารหนั​​กสุด ที่เพียงแค่ในกรณีที่ถ่านแตกต่างกัน 960 00:42:36,340 --> 00:42:40,610 บนเครื่องคอมพิวเตอร์ของคุณเมื่อเทียบกับเหมืองด้วยวิธีนี้ คณิตศาสตร์เสมอไปที่จะตรวจสอบ 961 00:42:40,610 --> 00:42:43,720 >> สุดท้ายลงที่นี่ผมตรวจสอบเป็นโมฆะ ซึ่งมักจะปฏิบัติที่ดี - อีกครั้ง 962 00:42:43,720 --> 00:42:44,920 เวลาที่เรากำลังจัดการกับตัวชี้ใด ๆ 963 00:42:44,920 --> 00:42:47,520 ถ้า malloc ไม่สามารถที่จะให้ ฉันลาก่อนหก - ซึ่งเป็น 964 00:42:47,520 --> 00:42:49,210 ไม่ แต่เพียงในกรณีที่ - 965 00:42:49,210 --> 00:42:50,730 กลับหนึ่งทันที 966 00:42:50,730 --> 00:42:53,290 และตอนนี้ไปข้างหน้าและคัดลอก สตริงดังต่อไปนี้ 967 00:42:53,290 --> 00:42:57,240 และนี่คือรูปแบบที่คุ้นเคย แม้ว่าในบทบาทที่แตกต่างกัน 968 00:42:57,240 --> 00:43:01,210 >> ฉันจะไปข้างหน้าและรับสาย ความยาวของและเก็บไว้ใน n 969 00:43:01,210 --> 00:43:06,620 แล้วผมจะไปย้ำจาก i เท่ากับ ศูนย์และรวมถึง n, 970 00:43:06,620 --> 00:43:08,410 มากกว่าหรือเท่ากับ 971 00:43:08,410 --> 00:43:13,540 เพื่อให้แต่ละย้ำฉันใส่ ตัวอักษรที่ i ของในบอด 972 00:43:13,540 --> 00:43:15,380 ลักษณะของ T 973 00:43:15,380 --> 00:43:18,190 >> ดังนั้นสิ่งที่จริงที่เกิดขึ้นภายใต้ เครื่องดูดควันที่นี่? 974 00:43:18,190 --> 00:43:22,140 ดีถ้านี้เช่นเป็น s - 975 00:43:22,140 --> 00:43:26,400 และฉันได้พิมพ์ไว้ในคำว่า H-E-L-L-O และมีศูนย์เครื่องหมายทับขวาของ 976 00:43:26,400 --> 00:43:29,020 และอีกครั้งคือครั้งนี้ชี้ให้เห็นที่นี่ 977 00:43:29,020 --> 00:43:30,830 และที่นี่ตอนนี้คือ t 978 00:43:30,830 --> 00:43:34,860 >> และนี่คือการชี้ตอนนี้ สำเนาของหน่วยความจำใช่มั้ย? 979 00:43:34,860 --> 00:43:37,340 malloc ยังทำให้ฉันมีทั้ง หน่วยความจำอัน 980 00:43:37,340 --> 00:43:41,440 ผมไม่ทราบว่าต้นอะไร ในใด ๆ ของสถ​​านที่เหล่านี้ 981 00:43:41,440 --> 00:43:44,340 ดังนั้นฉันจะคิดว่าของเหล่านี้เป็น ทั้งกลุ่มของเครื่องหมายคำถาม 982 00:43:44,340 --> 00:43:50,190 >> แต่ทันทีที่ฉันเริ่มต้นจากศูนย์วนลูป เมื่อผ่านความยาวของ s t, 983 00:43:50,190 --> 00:43:52,790 วงเล็บเป็นศูนย์และ T วงเล็บ 1 - 984 00:43:52,790 --> 00:43:55,080 และฉันจะใส่ในตอนนี้ ค่าใช้จ่าย - 985 00:43:55,080 --> 00:44:04,190 T วงเล็บศูนย์และ s วงเล็บหมายถึงศูนย์ ที่ฉันจะได้รับการคัดลอก 986 00:44:04,190 --> 00:44:09,875 ซ้ำชั่วโมงที่นี่ E-L-L-O นอกจากนี้เพราะว่าผมทำบวก 987 00:44:09,875 --> 00:44:12,370 1 ศูนย์เครื่องหมายทับขวา 988 00:44:12,370 --> 00:44:19,060 >> ดังนั้นตอนนี้ในกรณีของการเปรียบเทียบ 1.C-, ในท้ายที่สุดถ้าผมพิมพ์ออกมา 989 00:44:19,060 --> 00:44:24,760 โครงสร้างเงินทุนของทีเราควร เห็นว่าเป็นไม่เปลี่ยนแปลง 990 00:44:24,760 --> 00:44:26,090 ให้ฉันไปข้างหน้าในขณะนี้และทำเช่นนี้ 991 00:44:26,090 --> 00:44:28,630 เพื่อให้ copy1 992 00:44:28,630 --> 00:44:30,860 copy1 Dot เฉือน 993 00:44:30,860 --> 00:44:33,670 ฉันจะพิมพ์ในสวัสดีใส่ 994 00:44:33,670 --> 00:44:37,430 และตอนนี้สังเกตเห็นเพียงสำเนา ได้รับทุน 995 00:44:37,430 --> 00:44:40,890 เพราะผมมีสองอย่างแท้จริง ชิ้นของหน่วยความจำ 996 00:44:40,890 --> 00:44:44,390 >> แต่น่าเสียดายที่คุณสามารถทำสวยบาง สิ่งเลวร้ายและอันตรายที่นี่สวย 997 00:44:44,390 --> 00:44:49,290 ผมขอดึงตัวอย่างที่นี่ตอนนี้ ที่ทำให้เรามีตัวอย่างของการไม่กี่ 998 00:44:49,290 --> 00:44:51,540 เส้นที่แตกต่างกัน 999 00:44:51,540 --> 00:44:56,040 ดังนั้นเพียงแค่สังหรณ์ใจที่นี่บรรทัดแรก ของรหัส int x ดาวเป็นประกาศ 1000 00:44:56,040 --> 00:44:57,340 ตัวแปรที่เรียกว่า x 1001 00:44:57,340 --> 00:44:58,810 และชนิดของข้อมูลเป็นสิ่งที่ ของตัวแปรที่ 1002 00:44:58,810 --> 00:45:01,820 1003 00:45:01,820 --> 00:45:04,290 ชนิดข้อมูลของตัวแปรที่อะไร? 1004 00:45:04,290 --> 00:45:06,980 ที่ไม่ได้น่าตื่นเต้น 1005 00:45:06,980 --> 00:45:08,350 >> ชนิดข้อมูลเป็นดาว int 1006 00:45:08,350 --> 00:45:12,600 ดังนั้นสิ่งที่หมายความว่า? x จะ เก็บที่อยู่ของ int 1007 00:45:12,600 --> 00:45:13,520 ง่ายเหมือนที่ 1008 00:45:13,520 --> 00:45:16,220 Y จะไปเก็บ ที่อยู่ของ int 1009 00:45:16,220 --> 00:45:18,390 บรรทัดที่สามคืออะไร ของรหัสมีการทำ? 1010 00:45:18,390 --> 00:45:21,850 มันจัดสรรหลายวิธี ไบต์มากที่สุด? 1011 00:45:21,850 --> 00:45:22,350 สี่ 1012 00:45:22,350 --> 00:45:25,460 เพราะขนาดของ int คือ สี่ทั่วไป malloc สี่ให้ 1013 00:45:25,460 --> 00:45:29,950 ฉันกลับไปที่อยู่ของก้อน หน่วยความจำแรกของไบต์ที่มีคือ 1014 00:45:29,950 --> 00:45:32,110 ตอนนี้เก็บไว้ใน x 1015 00:45:32,110 --> 00:45:34,410 >> ตอนนี้เรากำลังย้ายเล็ก ๆ น้อย ๆ ได้อย่างรวดเร็ว 1016 00:45:34,410 --> 00:45:35,760 สตาร์ x หมายถึงอะไร? 1017 00:45:35,760 --> 00:45:38,480 1018 00:45:38,480 --> 00:45:42,590 มันหมายถึงการไปที่ที่อยู่ที่ และใส่จำนวนสิ่งมี? 1019 00:45:42,590 --> 00:45:43,870 ใส่หมายเลข 42 มี 1020 00:45:43,870 --> 00:45:47,590 ระดับ y หมายถึงไปว่ามีอะไรที่ y และใส่หมายเลข 13 มี 1021 00:45:47,590 --> 00:45:48,600 >> แต่รอสักครู่ 1022 00:45:48,600 --> 00:45:51,640 อยู่ใน y อะไรในขณะนี้? 1023 00:45:51,640 --> 00:45:54,950 อะไรที่อยู่คือการจัดเก็บ y? 1024 00:45:54,950 --> 00:45:55,770 เราไม่ทราบว่าใช่มั้ย? 1025 00:45:55,770 --> 00:45:59,230 เราไม่เคยใช้งาน ดำเนินการที่เกี่ยวข้องกับ y 1026 00:45:59,230 --> 00:46:03,370 ดังนั้น y เป็นประกาศในบรรทัดที่สองของ รหัสเป็นเพียงค่าขยะบางอย่างที่ยิ่งใหญ่ 1027 00:46:03,370 --> 00:46:04,760 เครื่องหมายคำถามเพื่อที่จะพูด 1028 00:46:04,760 --> 00:46:07,230 มันอาจจะชี้สุ่ม กับสิ่งใดในหน่วยความจำซึ่ง 1029 00:46:07,230 --> 00:46:08,340 ไม่ดีโดยทั่วไป 1030 00:46:08,340 --> 00:46:13,540 >> ดังนั้นทันทีที่เราตีบรรทัดที่มี ดาว y เท่ากับ 13, สิ่งที่ไม่ดี, 1031 00:46:13,540 --> 00:46:17,220 บางสิ่งบางอย่างที่ไม่ดีมากเป็นเรื่องเกี่ยวกับ จะเกิดขึ้นกับบิงกี้ 1032 00:46:17,220 --> 00:46:25,810 ดังนั้นเรามาดูสิ่งที่เกิดขึ้นจะจบลง ที่เกิดขึ้นกับบิงกี้ที่นี่ในนาทีนี้ 1033 00:46:25,810 --> 00:46:26,200 หรือเพื่อให้มอง 1034 00:46:26,200 --> 00:46:26,490 >> [เล่นภาพวิดีโอ] 1035 00:46:26,490 --> 00:46:26,745 >> -เฮ้บิงกี้ 1036 00:46:26,745 --> 00:46:27,000 ตื่นนอน 1037 00:46:27,000 --> 00:46:29,296 ก็ถึงเวลาที่ตัวชี้เพื่อความสนุกสนาน 1038 00:46:29,296 --> 00:46:30,680 >> มีอะไรที่? 1039 00:46:30,680 --> 00:46:31,980 เรียนรู้เกี่ยวกับตัวชี้? 1040 00:46:31,980 --> 00:46:34,010 โอ้ Goodie 1041 00:46:34,010 --> 00:46:37,220 >> ดีในการเริ่มต้นผมคิดว่าเรา จะต้องมีตัวชี้คู่ 1042 00:46:37,220 --> 00:46:37,930 >> OK- 1043 00:46:37,930 --> 00:46:41,650 รหัสนี้จัดสรรสองชี้ ซึ่งสามารถชี้ไปที่จำนวนเต็ม 1044 00:46:41,650 --> 00:46:43,760 >> -ตกลงกันผมเห็นสองตัวชี้ 1045 00:46:43,760 --> 00:46:45,850 แต่พวกเขาไม่ได้ดูเหมือนจะ ชี้ไปที่ใด 1046 00:46:45,850 --> 00:46:46,490 >> -ที่เหมาะสม 1047 00:46:46,490 --> 00:46:48,630 ในขั้นต้นชี้ทำไม่ได้ ชี้ไปที่ใด 1048 00:46:48,630 --> 00:46:51,700 สิ่งที่พวกเขาชี้ไปที่จะเรียกว่า pointees และการตั้งค่าพวกเขาขึ้นเป็น 1049 00:46:51,700 --> 00:46:52,850 ขั้นตอนที่แยกต่างหาก 1050 00:46:52,850 --> 00:46:53,740 >> -Oh, ขวา, ขวา 1051 00:46:53,740 --> 00:46:54,500 ฉันรู้ว่า 1052 00:46:54,500 --> 00:46:56,270 pointees จะแยก 1053 00:46:56,270 --> 00:46:58,553 ดังนั้นคุณจึงจัดสรร pointee อย่างไร 1054 00:46:58,553 --> 00:46:59,480 >> OK- 1055 00:46:59,480 --> 00:47:03,707 ดีรหัสนี้จัดสรรจำนวนเต็มใหม่ pointee และเป็นส่วนหนึ่งชุดนี้ x 1056 00:47:03,707 --> 00:47:05,520 ให้ชี้ไปที่มัน 1057 00:47:05,520 --> 00:47:06,760 >> -เฮ้ที่มีลักษณะที่ดีขึ้น 1058 00:47:06,760 --> 00:47:08,520 เพื่อให้มันทำอะไรบางอย่าง 1059 00:47:08,520 --> 00:47:09,530 >> OK- 1060 00:47:09,530 --> 00:47:14,110 ผมจะ dereference x ตัวชี้ในการจัดเก็บ หมายเลข 42 ลง pointee ของ 1061 00:47:14,110 --> 00:47:17,660 สำหรับเคล็ดลับนี้ฉันจะต้องมายากลของฉัน ดินแดนแห่ง dereferencing 1062 00:47:17,660 --> 00:47:20,695 >> ของคุณไม้กายสิทธิ์ของ dereferencing? 1063 00:47:20,695 --> 00:47:22,632 เอ่อที่ดี 1064 00:47:22,632 --> 00:47:24,620 >> นี้คือสิ่งที่รหัสดูเหมือนว่า 1065 00:47:24,620 --> 00:47:27,526 ฉันจะตั้งค่าจำนวนและ - 1066 00:47:27,526 --> 00:47:28,250 >> -เฮ้มอง 1067 00:47:28,250 --> 00:47:29,680 มีมันไป 1068 00:47:29,680 --> 00:47:34,520 ดังนั้นการทำ dereference เมื่อ x ดังนี้ ลูกศรเพื่อเข้าถึง pointee ของ 1069 00:47:34,520 --> 00:47:36,690 ในกรณีนี้การจัดเก็บที่ 42 ในมี 1070 00:47:36,690 --> 00:47:40,890 hey ลองใช้มันเพื่อเก็บหมายเลข 13 ผ่านตัวชี้อื่น ๆ , y 1071 00:47:40,890 --> 00:47:42,125 >> OK- 1072 00:47:42,125 --> 00:47:46,810 ฉันจะไปกว่าที่นี่เพื่อ y และ ได้รับหมายเลข 13 ตั้งค่า 1073 00:47:46,810 --> 00:47:50,890 แล้วนำดินแดนแห่ง dereferencing และเพียงแค่ - 1074 00:47:50,890 --> 00:47:52,430 ว้าว! 1075 00:47:52,430 --> 00:47:53,030 >> -Oh, hey 1076 00:47:53,030 --> 00:47:54,610 ที่ไม่ทำงาน 1077 00:47:54,610 --> 00:47:58,200 กล่าวว่าบิงกี้ฉันไม่คิดว่า dereferencing y เป็นความคิดที่ดี 1078 00:47:58,200 --> 00:48:01,370 เพราะการตั้งค่า pointee เป็นขั้นตอนที่แยกต่างหากคือ 1079 00:48:01,370 --> 00:48:03,460 และผมไม่คิดว่าเราเคยทำมัน 1080 00:48:03,460 --> 00:48:03,810 >> -อืมม 1081 00:48:03,810 --> 00:48:05,160 จุดดี 1082 00:48:05,160 --> 00:48:07,410 >> -ใช่เราจัดสรร y ชี้ 1083 00:48:07,410 --> 00:48:10,045 แต่เราไม่เคยตั้งค่าให้ ชี้ไปที่ pointee 1084 00:48:10,045 --> 00:48:10,490 >> -อืมม 1085 00:48:10,490 --> 00:48:12,170 ช่างสังเกตมาก 1086 00:48:12,170 --> 00:48:13,790 >> -เดี๋ยวก่อนคุณกำลังมองหา ดีมีบิงกี้ 1087 00:48:13,790 --> 00:48:16,920 คุณสามารถแก้ไขได้เพื่อให้จุด y เพื่อ pointee เช่นเดียวกับ X? 1088 00:48:16,920 --> 00:48:17,810 >> -Sure 1089 00:48:17,810 --> 00:48:20,300 ฉันจะใช้ไม้กายสิทธิ์ของฉัน การกำหนดตัวชี้ 1090 00:48:20,300 --> 00:48:22,240 >> ที่เป็นไปได้ที่จะเป็น ปัญหาเช่นมาก่อนหรือไม่ 1091 00:48:22,240 --> 00:48:22,665 >> ไม่มี 1092 00:48:22,665 --> 00:48:24,300 นี้ไม่ได้สัมผัส pointees 1093 00:48:24,300 --> 00:48:27,880 มันก็มีการเปลี่ยนแปลงหนึ่งตัวชี้ไปชี้ เพื่อสิ่งเดียวกับที่อื่น 1094 00:48:27,880 --> 00:48:28,970 >> -Oh, I see 1095 00:48:28,970 --> 00:48:31,730 ตอนนี้จุด y ไปยังสถานที่เดียวกับ x 1096 00:48:31,730 --> 00:48:32,450 ดังนั้นรอ 1097 00:48:32,450 --> 00:48:33,490 ตอนนี้ y รับการแก้ไข 1098 00:48:33,490 --> 00:48:34,630 มันมี pointee 1099 00:48:34,630 --> 00:48:36,520 เพื่อให้คุณสามารถลองไม้เรียว จาก dereferencing อีกครั้ง 1100 00:48:36,520 --> 00:48:39,200 ที่จะส่งผ่านไป 13 1101 00:48:39,200 --> 00:48:39,840 >> OK- 1102 00:48:39,840 --> 00:48:41,570 ที่นี่จะไป 1103 00:48:41,570 --> 00:48:42,870 >> -เฮ้มองว่า 1104 00:48:42,870 --> 00:48:44,320 ตอนนี้ dereferencing ทำงานบน y 1105 00:48:44,320 --> 00:48:47,020 และเนื่องจากตัวชี้จะร่วมกัน ที่หนึ่ง pointee พวกเขา 1106 00:48:47,020 --> 00:48:48,585 ทั้งสองดู 13 1107 00:48:48,585 --> 00:48:49,040 >> อ้าง- 1108 00:48:49,040 --> 00:48:49,670 แบ่งปัน 1109 00:48:49,670 --> 00:48:50,380 อะไรก็ตาม 1110 00:48:50,380 --> 00:48:52,290 เราจึงจะเปลี่ยนสถานที่ตอนนี้หรือไม่ 1111 00:48:52,290 --> 00:48:52,970 >> -Oh มอง 1112 00:48:52,970 --> 00:48:54,150 พวกเราไม่มีเวลา 1113 00:48:54,150 --> 00:48:55,200 >> แต่ - 1114 00:48:55,200 --> 00:48:57,060 >> -เพียงจำสาม กฎตัวชี้ 1115 00:48:57,060 --> 00:49:00,100 จำนวนหนึ่งโครงสร้างพื้นฐาน คือการที่คุณมีตัวชี้ 1116 00:49:00,100 --> 00:49:02,170 และมันชี้ไปยัง pointee 1117 00:49:02,170 --> 00:49:04,160 แต่ตัวชี้และ pointee จะแยก 1118 00:49:04,160 --> 00:49:06,460 และข้อผิดพลาดที่พบบ่อยคือการ ตั้งค่าตัวชี้ แต่จะ 1119 00:49:06,460 --> 00:49:08,540 ลืมที่จะได้รับ pointee 1120 00:49:08,540 --> 00:49:12,460 >> หมายเลขสอง, dereferencing ตัวชี้เริ่มต้น ที่ชี้และตามที่ 1121 00:49:12,460 --> 00:49:14,570 ลูกศรไปยังเข้าถึง pointee ของ 1122 00:49:14,570 --> 00:49:18,640 ในฐานะที่เราทุกคนรู้ว่านี้จะทำงานเฉพาะถ้ามี เป็น pointee ที่ได้รับกลับไป 1123 00:49:18,640 --> 00:49:19,790 จำนวนกฎหนึ่ง 1124 00:49:19,790 --> 00:49:23,670 >> หมายเลขสามตัวชี้จะใช้เวลาที่ได้รับมอบหมาย หนึ่งในตัวชี้และการเปลี่ยนแปลงมันให้ชี้ไปที่ 1125 00:49:23,670 --> 00:49:25,850 pointee เดียวกันเป็นตัวชี้อื่น 1126 00:49:25,850 --> 00:49:27,840 ดังนั้นหลังจากที่ได้รับมอบหมาย, ทั้งสองตัวชี้จะ 1127 00:49:27,840 --> 00:49:29,430 ชี้ไปที่ pointee เดียวกัน 1128 00:49:29,430 --> 00:49:31,600 บางครั้งที่เรียกว่าการแบ่งปัน 1129 00:49:31,600 --> 00:49:33,430 และนั่นคือทั้งหมดที่มีให้มันจริงๆ 1130 00:49:33,430 --> 00:49:33,840 Bye Bye ในขณะนี้ 1131 00:49:33,840 --> 00:49:34,300 >> [เล่นวิดีโอจบ] 1132 00:49:34,300 --> 00:49:36,940 >> DAVID ลัน: ดังนั้นข้อมูลเพิ่มเติมเกี่ยวกับตัวชี้ ข้อมูลเพิ่มเติมเกี่ยวกับบิงกี้สัปดาห์ถัดไป 1133 00:49:36,940 --> 00:49:38,190 เราจะเห็นคุณในวันจันทร์ 1134 00:49:38,190 --> 00:49:42,187