1 00:00:00,000 --> 00:00:06,030 >> [เล่นเพลง] 2 00:00:06,030 --> 00:00:08,390 >> DOUG LLOYD: ตัวชี้, ที่นี่เรามี 3 00:00:08,390 --> 00:00:11,080 นี้อาจจะ เป็นหัวข้อที่ยากที่สุด 4 00:00:11,080 --> 00:00:12,840 ที่เราพูดถึงใน CS50 5 00:00:12,840 --> 00:00:15,060 และถ้าคุณได้อ่าน อะไรเกี่ยวกับตัวชี้ 6 00:00:15,060 --> 00:00:19,080 ก่อนที่คุณอาจจะมีนิด ๆ หน่อย ๆ ข่มขู่จะเข้าไปในวิดีโอนี้ 7 00:00:19,080 --> 00:00:21,260 มันเป็นความจริงตัวชี้ จะช่วยให้คุณความสามารถในการ 8 00:00:21,260 --> 00:00:23,740 บางทีอาจจะกรูขึ้น สวยไม่ดีเมื่อคุณอยู่ 9 00:00:23,740 --> 00:00:27,450 การทำงานร่วมกับตัวแปรและข้อมูล และก่อให้เกิดโปรแกรมของคุณที่จะผิดพลาด 10 00:00:27,450 --> 00:00:30,490 แต่พวกเขากำลังจริงที่มีประโยชน์จริงๆ และพวกเขาช่วยให้เราเป็นวิธีที่ดีจริงๆ 11 00:00:30,490 --> 00:00:33,340 เพื่อส่งผ่านข้อมูลไป มาระหว่างฟังก์ชั่น 12 00:00:33,340 --> 00:00:35,490 ที่เราไม่สามารถที่จะทำอย่างอื่น 13 00:00:35,490 --> 00:00:37,750 >> ดังนั้นสิ่งที่เราจริงๆ ต้องการที่จะทำนี่คือรถไฟ 14 00:00:37,750 --> 00:00:41,060 ให้คุณมีวินัยในตัวชี้ที่ดีดังนั้น ที่คุณสามารถใช้ตัวชี้ได้อย่างมีประสิทธิภาพ 15 00:00:41,060 --> 00:00:43,850 ที่จะทำให้โปรแกรมของคุณที่ดีมาก 16 00:00:43,850 --> 00:00:48,220 ที่ผมกล่าวว่าชี้ให้เราแตกต่างกัน วิธีการส่งผ่านข้อมูลระหว่างการทำงาน 17 00:00:48,220 --> 00:00:50,270 ตอนนี้ถ้าคุณจำได้จาก วิดีโอก่อนหน้านี้เมื่อ 18 00:00:50,270 --> 00:00:53,720 เราได้พูดคุยเกี่ยวกับ ขอบเขตตัวแปรที่ผมกล่าวถึง 19 00:00:53,720 --> 00:01:00,610 ว่าข้อมูลทั้งหมดที่เราผ่านระหว่าง ฟังก์ชั่นในซีจะผ่านค่า 20 00:01:00,610 --> 00:01:03,070 และผมอาจจะไม่ได้นำมาใช้ว่า ระยะสิ่งที่ฉันมีความหมาย 21 00:01:03,070 --> 00:01:07,170 คือการที่เราจะผ่านสำเนาของข้อมูล 22 00:01:07,170 --> 00:01:12,252 เมื่อเราผ่านตัวแปรเพื่อฟังก์ชั่น เราไม่ได้จริงผ่านตัวแปร 23 00:01:12,252 --> 00:01:13,210 ฟังก์ชั่นใช่มั้ย? 24 00:01:13,210 --> 00:01:17,670 เรากำลังผ่านสำเนาของ ข้อมูลนั้นไปยังฟังก์ชั่น 25 00:01:17,670 --> 00:01:20,760 ฟังก์ชั่นไม่ว่ามันจะ และคำนวณค่าบางอย่าง 26 00:01:20,760 --> 00:01:23,180 และบางทีเราใช้ค่าที่ เมื่อมันให้มันกลับมา 27 00:01:23,180 --> 00:01:26,700 >> มีอยู่คนหนึ่งที่จะได้รับการยกเว้น กฎนี้ผ่านโดยค่า 28 00:01:26,700 --> 00:01:31,210 และเราจะกลับมากับสิ่งที่ เป็นเล็ก ๆ น้อย ๆ ในภายหลังในวิดีโอนี้ 29 00:01:31,210 --> 00:01:34,880 ถ้าเราใช้ตัวชี้แทน ของการใช้ตัวแปร 30 00:01:34,880 --> 00:01:38,180 หรือแทนการใช้ตัวแปร ตัวเองหรือสำเนาของตัวแปร 31 00:01:38,180 --> 00:01:43,790 ตอนนี้เราสามารถผ่านตัวแปรที่อยู่รอบ ๆ ระหว่างการทำงานในลักษณะที่แตกต่าง 32 00:01:43,790 --> 00:01:46,550 ซึ่งหมายความว่าหากเราทำ การเปลี่ยนแปลงในฟังก์ชั่น 33 00:01:46,550 --> 00:01:49,827 การเปลี่ยนแปลงที่จริงจะใช้เวลา ผลในการที่แตกต่างกันฟังก์ชั่น 34 00:01:49,827 --> 00:01:52,160 อีกครั้งนี้เป็นสิ่งที่ เราไม่สามารถทำอะไรก่อนหน้านี้ 35 00:01:52,160 --> 00:01:56,979 และถ้าคุณได้เคยพยายามที่จะสลับ ค่าของตัวแปรสองตัวในฟังก์ชั่น 36 00:01:56,979 --> 00:01:59,270 คุณสังเกตเห็นปัญหานี้ การเรียงลำดับของคืบคลานขึ้นใช่มั้ย? 37 00:01:59,270 --> 00:02:04,340 >> ถ้าเราต้องการที่จะแลกเปลี่ยนและ y และเรา ผ่านไปยังฟังก์ชั่นที่เรียกว่าแลกเปลี่ยน, 38 00:02:04,340 --> 00:02:08,680 สลับด้านในของฟังก์ชั่น ตัวแปรที่ทำค่าแลกเปลี่ยน 39 00:02:08,680 --> 00:02:12,600 กลายเป็นหนึ่งในสองสองจะกลายเป็น หนึ่ง แต่เราทำไม่ได้จริง 40 00:02:12,600 --> 00:02:16,890 เปลี่ยนแปลงอะไรในที่เดิม ฟังก์ชั่นในการโทร 41 00:02:16,890 --> 00:02:19,550 เพราะเราไม่สามารถเราเท่านั้น การทำงานร่วมกับสำเนาของพวกเขา 42 00:02:19,550 --> 00:02:24,760 กับคำแนะนำ แต่ที่เราสามารถทำได้ จริงผ่าน X และ Y เพื่อฟังก์ชั่น 43 00:02:24,760 --> 00:02:26,960 ฟังก์ชั่นที่สามารถทำ บางสิ่งบางอย่างกับพวกเขา 44 00:02:26,960 --> 00:02:29,250 และผู้ที่ค่าตัวแปร จริงสามารถเปลี่ยน 45 00:02:29,250 --> 00:02:33,710 ดังนั้นที่ค่อนข้างการเปลี่ยนแปลงใน ความสามารถของเราในการทำงานกับข้อมูล 46 00:02:33,710 --> 00:02:36,100 >> ก่อนที่เราจะดำน้ำใน ตัวชี้ผมคิดว่ามันคุ้มค่า 47 00:02:36,100 --> 00:02:38,580 การไม่กี่นาที กลับไปพื้นฐานที่นี่ 48 00:02:38,580 --> 00:02:41,000 และมีลักษณะที่ว่า หน่วยความจำคอมพิวเตอร์งาน 49 00:02:41,000 --> 00:02:45,340 เพราะทั้งสองเรื่องจะไป ที่จริงเป็นความสัมพันธ์สวย 50 00:02:45,340 --> 00:02:48,480 ที่คุณอาจจะรู้ว่า ในระบบคอมพิวเตอร์ของคุณ 51 00:02:48,480 --> 00:02:51,310 คุณมีฮาร์ดไดรฟ์หรือ บางทีอาจจะเป็นไดรฟ์ของรัฐที่มั่นคง, 52 00:02:51,310 --> 00:02:54,430 การเรียงลำดับของสถ​​านที่จัดเก็บไฟล์บาง 53 00:02:54,430 --> 00:02:57,950 ก็มักจะอยู่ที่ไหนสักแห่งใน ย่าน 250 กิกะไบต์ 54 00:02:57,950 --> 00:02:59,810 อาจจะคู่ของเทราไบต์ในขณะนี้ 55 00:02:59,810 --> 00:03:02,270 และมันคือสิ่งที่ทุกคนของคุณ ไฟล์ในท้ายที่สุดมีชีวิตอยู่ 56 00:03:02,270 --> 00:03:04,870 แม้ในขณะที่เครื่องคอมพิวเตอร์ของคุณถูกปิด ปิดคุณสามารถหันกลับไป 57 00:03:04,870 --> 00:03:09,190 และคุณจะพบไฟล์ของคุณจะมี อีกครั้งเมื่อคุณรีบูตระบบของคุณ 58 00:03:09,190 --> 00:03:14,820 แต่ดิสก์ไดรฟ์เช่นฮาร์ดดิสก์ไดรฟ์ ฮาร์ดดิสก์หรือไดรฟ์ของรัฐที่มั่นคงเป็น SSD, 59 00:03:14,820 --> 00:03:16,050 เป็นเพียงพื้นที่จัดเก็บ 60 00:03:16,050 --> 00:03:20,400 >> เราจะไม่ได้ทำอะไรกับ ข้อมูลที่อยู่ในฮาร์ดดิสก์ 61 00:03:20,400 --> 00:03:22,080 หรือในไดรฟ์ของรัฐที่มั่นคง 62 00:03:22,080 --> 00:03:24,950 เพื่อที่จะเปลี่ยนจริง ข้อมูลหรือย้ายไปรอบ ๆ 63 00:03:24,950 --> 00:03:28,800 เราต้องย้ายไป RAM, หน่วยความจำเข้าถึงโดยสุ่ม 64 00:03:28,800 --> 00:03:31,170 ตอนนี้ RAM, คุณมีจำนวนมาก น้อยกว่าในเครื่องคอมพิวเตอร์ของคุณ 65 00:03:31,170 --> 00:03:34,185 คุณอาจจะมีบางแห่งใน ย่าน 512 เมกะไบต์ 66 00:03:34,185 --> 00:03:38,850 ถ้าคุณมีคอมพิวเตอร์เก่า เพื่ออาจจะสองสี่แปด, 16, 67 00:03:38,850 --> 00:03:41,820 อาจเป็นไปได้น้อย เพิ่มเติมกิกะไบต์แรม 68 00:03:41,820 --> 00:03:46,390 ดังนั้นที่มีขนาดเล็กมาก แต่ที่ ซึ่งข้อมูลทั้งหมดที่มีอยู่มีความผันผวน 69 00:03:46,390 --> 00:03:48,270 นั่นคือสิ่งที่เราสามารถเปลี่ยนแปลงสิ่งต่างๆ 70 00:03:48,270 --> 00:03:53,350 แต่เมื่อเราเปิดเครื่องคอมพิวเตอร์ของเราออก ข้อมูลทั้งหมดในแรมจะถูกทำลาย 71 00:03:53,350 --> 00:03:57,150 >> เพื่อที่ว่าทำไมเราต้องมีฮาร์ดดิสก์ สำหรับสถานที่ถาวรมากขึ้นของมัน 72 00:03:57,150 --> 00:03:59,720 เพื่อที่จะ exists- มันจะ จะไม่ดีจริงๆถ้าทุกครั้งที่เรา 73 00:03:59,720 --> 00:04:03,310 หันคอมพิวเตอร์ของเราออกทุก ไฟล์ในระบบของเราถูกทำลาย 74 00:04:03,310 --> 00:04:05,600 ดังนั้นเราจึงทำงานภายในของแรม 75 00:04:05,600 --> 00:04:09,210 และทุกครั้งที่เรากำลังพูดถึง หน่วยความจำที่สวยมากใน CS50, 76 00:04:09,210 --> 00:04:15,080 เรากำลังพูดถึงเกี่ยวกับแรมไม่ฮาร์ดดิสก์ 77 00:04:15,080 --> 00:04:18,657 >> ดังนั้นเมื่อเราย้ายสิ่งในหน่วยความจำ มันจะขึ้นเป็นจำนวนหนึ่งของพื้นที่ 78 00:04:18,657 --> 00:04:20,740 ทั้งหมดของชนิดข้อมูลที่ เราได้รับการทำงานร่วมกับ 79 00:04:20,740 --> 00:04:23,480 ใช้เวลาที่แตกต่างกัน ปริมาณของพื้นที่ในแรม 80 00:04:23,480 --> 00:04:27,600 ดังนั้นเวลาที่คุณสร้างทุกจำนวนเต็ม ตัวแปรสี่ไบต์ของหน่วยความจำ 81 00:04:27,600 --> 00:04:30,750 มีไว้ในแรมเพื่อให้คุณ สามารถทำงานร่วมกับจำนวนเต็มที่ 82 00:04:30,750 --> 00:04:34,260 คุณสามารถประกาศจำนวนเต็ม, เปลี่ยนกำหนด 83 00:04:34,260 --> 00:04:36,700 10 ค่าเพิ่มขึ้น โดยหนึ่งอื่น ๆ และอื่น ๆ 84 00:04:36,700 --> 00:04:39,440 ทุกความต้องการที่เกิดขึ้นใน RAM, และคุณได้รับสี่ไบต์ 85 00:04:39,440 --> 00:04:42,550 จะทำงานร่วมกับทุก จำนวนเต็มที่คุณสร้างขึ้น 86 00:04:42,550 --> 00:04:45,410 >> ตัวละครทุกตัวคุณ สร้างได้รับหนึ่งไบต์ 87 00:04:45,410 --> 00:04:48,160 นั่นเป็นเพียงพื้นที่เท่าไหร่ ที่จำเป็นในการจัดเก็บตัวอักษร 88 00:04:48,160 --> 00:04:51,310 ลอยทุกจริง จำนวนที่ได้รับสี่ไบต์ 89 00:04:51,310 --> 00:04:53,390 เว้นแต่จะเป็นคู่ ความแม่นยำจุดลอย 90 00:04:53,390 --> 00:04:56,510 จำนวนซึ่งจะช่วยให้คุณ มีตัวเลขที่แม่นยำมากขึ้นหรือมากกว่า 91 00:04:56,510 --> 00:04:59,300 หลังจุดทศนิยม โดยไม่สูญเสียความแม่นยำ 92 00:04:59,300 --> 00:05:01,820 ซึ่งใช้เวลาถึงแปดไบต์หน่วยความจำ 93 00:05:01,820 --> 00:05:06,730 longs ยาวจำนวนเต็มใหญ่จริงๆ นอกจากนี้ยังใช้เวลาถึงแปดไบต์หน่วยความจำ 94 00:05:06,730 --> 00:05:09,000 วิธีการหลายไบต์หน่วยความจำ ไม่สายใช้เวลาถึง? 95 00:05:09,000 --> 00:05:12,990 ดีขอใส่ขาในคำถามที่ว่า สำหรับตอนนี้ แต่เราจะกลับมาได้ 96 00:05:12,990 --> 00:05:17,350 >> ดังนั้นกลับไปที่ความคิดนี้เป็นของหน่วยความจำ อาร์เรย์ใหญ่ของเซลล์ไบต์ขนาด 97 00:05:17,350 --> 00:05:20,871 ที่จริงทั้งหมดก็คือมัน เพียงอาร์เรย์ใหญ่ของเซลล์ 98 00:05:20,871 --> 00:05:23,370 เช่นเดียวกับอาร์เรย์อื่น ๆ ที่ คุณคุ้นเคยกับและเห็น 99 00:05:23,370 --> 00:05:26,430 ยกเว้นทุกองค์ประกอบเป็นหนึ่งไบต์กว้าง 100 00:05:26,430 --> 00:05:30,030 และเช่นเดียวกับอาร์เรย์ ทุกองค์ประกอบที่มีอยู่ 101 00:05:30,030 --> 00:05:32,120 องค์ประกอบของอาร์เรย์ทุก มีดัชนีและเรา 102 00:05:32,120 --> 00:05:36,302 สามารถใช้ดัชนีที่จะทำสิ่งที่เรียกว่า เข้าถึงโดยสุ่มในอาร์เรย์ 103 00:05:36,302 --> 00:05:38,510 เราจะได้ไม่ต้องเริ่มต้นที่ จุดเริ่มต้นของอาร์เรย์ 104 00:05:38,510 --> 00:05:40,569 ย้ำผ่านทุก องค์ประกอบหนึ่งของมัน 105 00:05:40,569 --> 00:05:41,860 เพื่อค้นหาสิ่งที่เรากำลังมองหา 106 00:05:41,860 --> 00:05:45,790 เราก็สามารถพูดได้ว่าผมต้องการที่จะได้รับการ องค์ประกอบที่ 15 หรือองค์ประกอบที่ 100 107 00:05:45,790 --> 00:05:49,930 และคุณก็สามารถผ่านในตัวเลขที่ และได้รับค่าที่คุณกำลังมองหา 108 00:05:49,930 --> 00:05:54,460 >> ในทำนองเดียวกันทุกสถานที่ ในความทรงจำที่มีอยู่ 109 00:05:54,460 --> 00:05:57,320 ดังนั้นหน่วยความจำของคุณอาจ มีลักษณะบางอย่างเช่นนี้ 110 00:05:57,320 --> 00:06:01,420 นี่เป็นก้อนเล็ก ๆ ของ หน่วยความจำนี้เป็น 20 ไบต์ของหน่วยความจำ 111 00:06:01,420 --> 00:06:04,060 ครั้งแรก 20 ไบต์เพราะฉัน มีที่อยู่ที่ด้านล่าง 112 00:06:04,060 --> 00:06:08,890 เป็น 0, 1, 2, 3, และอื่น ๆ ในทุกทางถึง 19 113 00:06:08,890 --> 00:06:13,190 และเมื่อผมประกาศตัวแปรและ เมื่อฉันเริ่มที่จะทำงานกับพวกเขา 114 00:06:13,190 --> 00:06:15,470 ระบบจะไปตั้ง กันพื้นที่บางส่วนสำหรับฉัน 115 00:06:15,470 --> 00:06:17,595 ในความทรงจำนี้ในการทำงาน กับตัวแปรของฉัน 116 00:06:17,595 --> 00:06:21,610 ดังนั้นผมอาจจะบอกว่าคถ่านเท่ากับทุน เอชและสิ่งที่จะเกิดขึ้น? 117 00:06:21,610 --> 00:06:23,880 ดีระบบเป็นไป การตั้งสำรองสำหรับฉันหนึ่งไบต์ 118 00:06:23,880 --> 00:06:27,870 ในกรณีนี้มันเลือกจำนวนไบต์ สี่ไบต์อยู่ที่สี่ 119 00:06:27,870 --> 00:06:31,310 และก็จะเก็บ H ทุนในจดหมายมีสำหรับฉัน 120 00:06:31,310 --> 00:06:34,350 ถ้าฉันแล้วบอกว่าความเร็ว int วงเงินเท่ากับ 65 ก็ 121 00:06:34,350 --> 00:06:36,806 จะตั้งสำรองสี่ ไบต์หน่วยความจำสำหรับฉัน 122 00:06:36,806 --> 00:06:39,180 และมันจะรักษาผู้ สี่ไบต์เป็นหน่วยเดียว 123 00:06:39,180 --> 00:06:41,305 เพราะสิ่งที่เรากำลังทำงาน กับเป็นจำนวนเต็มที่นี่ 124 00:06:41,305 --> 00:06:44,350 และก็จะเก็บ 65 ในการมี 125 00:06:44,350 --> 00:06:47,000 >> ตอนนี้แล้วผมชนิด บอกคุณบิตของการโกหก 126 00:06:47,000 --> 00:06:50,150 ที่ถูกต้องเพราะเรารู้ว่า คอมพิวเตอร์ทำงานในไบนารี 127 00:06:50,150 --> 00:06:53,100 พวกเขาไม่เข้าใจ สิ่งที่จำเป็นต้อง H ทุน 128 00:06:53,100 --> 00:06:57,110 หรือสิ่งที่ 65 พวกเขาเท่านั้น เข้าใจไบนารีศูนย์และคน 129 00:06:57,110 --> 00:06:59,000 และเพื่อให้สิ่งที่จริง เรากำลังมีการจัดเก็บใน 130 00:06:59,000 --> 00:07:03,450 ไม่ได้เป็นตัวอักษร H และจำนวน 65, แต่การเป็นตัวแทนไบนารี 131 00:07:03,450 --> 00:07:06,980 ดังกล่าวซึ่งมีลักษณะ บางสิ่งบางอย่างเล็ก ๆ น้อย ๆ เช่นนี้ 132 00:07:06,980 --> 00:07:10,360 และโดยเฉพาะอย่างยิ่งใน บริบทของตัวแปรจำนวนเต็ม, 133 00:07:10,360 --> 00:07:13,559 มันจะไม่เพียงแค่คายลง ก็ไม่ได้ไปที่จะรักษามันเป็นหนึ่งในสี่ 134 00:07:13,559 --> 00:07:15,350 ก้อนไบต์จำเป็นต้อง มันจะจริง 135 00:07:15,350 --> 00:07:19,570 ที่จะรักษามันเป็นสี่ชิ้นหนึ่งไบต์ ซึ่งอาจมีลักษณะบางอย่างเช่นนี้ 136 00:07:19,570 --> 00:07:22,424 และแม้ตอนนี้ไม่ได้ ความจริงอย่างสิ้นเชิงอย่างใดอย่างหนึ่ง 137 00:07:22,424 --> 00:07:24,840 เพราะสิ่งที่เรียกว่า endianness ซึ่งเราไม่ได้ 138 00:07:24,840 --> 00:07:26,965 จะได้รับในขณะนี้ แต่ ถ้าคุณอยากรู้เกี่ยวกับ 139 00:07:26,965 --> 00:07:29,030 คุณสามารถอ่านข้อมูลเกี่ยวกับเล็ก ๆ น้อย ๆ และ endianness ใหญ่ 140 00:07:29,030 --> 00:07:31,640 แต่เพื่อประโยชน์ของการโต้แย้งนี้ เพื่อประโยชน์ของว​​ิดีโอนี้ 141 00:07:31,640 --> 00:07:34,860 ขอเพียงแค่คิดว่าเป็นใน ความเป็นจริงว่าหมายเลข 65 จะ 142 00:07:34,860 --> 00:07:36,970 จะเป็นตัวแทนใน หน่วยความจำในระบบทุก 143 00:07:36,970 --> 00:07:38,850 แม้ว่ามันจะไม่เป็นความจริงอย่างสิ้นเชิง 144 00:07:38,850 --> 00:07:41,700 >> แต่ขอเพียงแค่ได้รับจริง การกำจัดของไบนารีทุกอย่างสิ้นเชิง 145 00:07:41,700 --> 00:07:44,460 และเพียงแค่คิดเกี่ยวกับการเป็น H 65 ก็มากขึ้น 146 00:07:44,460 --> 00:07:47,900 คิดเกี่ยวกับมันเช่น ที่เป็นมนุษย์ 147 00:07:47,900 --> 00:07:51,420 สิทธิทั้งหมดจึงยังดูเหมือนว่าอาจจะเป็น เล็ก ๆ น้อย ๆ แบบสุ่มที่ I've- ระบบของฉัน 148 00:07:51,420 --> 00:07:55,130 ไม่ให้ฉันไบต์ 5, 6, 7, และ 8 ในการจัดเก็บจำนวนเต็ม 149 00:07:55,130 --> 00:07:58,580 มีเหตุผลที่เป็นเช่นกันซึ่ง เราจะไม่ได้รับในขณะนี้ แต่พอเพียง 150 00:07:58,580 --> 00:08:00,496 มันจะบอกว่าสิ่งที่เป็น คอมพิวเตอร์ทำอะไรที่นี่ 151 00:08:00,496 --> 00:08:02,810 อาจจะเป็นความเคลื่อนไหวที่ดีในส่วนของตน 152 00:08:02,810 --> 00:08:06,020 เพื่อไม่ให้ฉันหน่วยความจำที่เป็น จำเป็นต้องกลับไปกลับ 153 00:08:06,020 --> 00:08:10,490 ถึงแม้ว่ามันจะทำตอนนี้ ถ้าผมต้องการที่จะได้รับสตริงอื่น 154 00:08:10,490 --> 00:08:13,080 เรียกว่านามสกุลและฉันต้องการ ที่จะใส่ในการมีลอยด์ 155 00:08:13,080 --> 00:08:18,360 ฉันจะต้องพอดีกับอย่างใดอย่างหนึ่ง ตัวละครแต่ละตัวอักษรที่เป็น 156 00:08:18,360 --> 00:08:21,330 จะต้องมีอย่างใดอย่างหนึ่ง ตัวละครหนึ่งไบต์ของหน่วยความจำ 157 00:08:21,330 --> 00:08:26,230 ดังนั้นถ้าฉันสามารถใส่ลอยด์เป็น array ของฉัน เช่นนี้ฉันรักดีไปใช่มั้ย? 158 00:08:26,230 --> 00:08:28,870 สิ่งที่ขาดหายไป? 159 00:08:28,870 --> 00:08:31,840 >> โปรดจำไว้ว่าสตริงทุกครั้งที่เราทำงาน กับใน C ลงท้ายด้วยเครื่องหมายศูนย์ 160 00:08:31,840 --> 00:08:33,339 และเราไม่สามารถละเว้นที่นี่อย่างใดอย่างหนึ่ง 161 00:08:33,339 --> 00:08:36,090 เราจำเป็นต้องตั้งสำรองหนึ่งไบต์ ของหน่วยความจำที่จะถือได้ว่าเพื่อให้เรา 162 00:08:36,090 --> 00:08:39,130 ทราบว่าเมื่อสตริงของเราได้สิ้นสุดลง 163 00:08:39,130 --> 00:08:41,049 ดังนั้นอีกครั้งข้อตกลงนี้ ของสิ่งที่ทาง 164 00:08:41,049 --> 00:08:42,799 ปรากฏอยู่ในหน่วยความจำอาจ จะเป็นเพียงเล็กน้อยแบบสุ่ม 165 00:08:42,799 --> 00:08:44,870 แต่จริง ๆ แล้วมันเป็นวิธีการที่ ระบบส่วนใหญ่ได้รับการออกแบบ 166 00:08:44,870 --> 00:08:48,330 บรรทัดพวกเขาในหลาย สี่เหตุผลอีกครั้ง 167 00:08:48,330 --> 00:08:50,080 ว่าเราไม่จำเป็นต้อง ได้รับในขณะนี้ 168 00:08:50,080 --> 00:08:53,060 แต่นี้จึงพอจะพูดได้ว่า หลังจากที่ทั้งสามสายรหัส 169 00:08:53,060 --> 00:08:54,810 นี่คือสิ่งที่หน่วยความจำอาจมีลักษณะเช่น 170 00:08:54,810 --> 00:08:58,930 ถ้าต้องการสถานที่หน่วยความจำ 4, 8 และ 12 เพื่อเก็บข้อมูลของฉัน 171 00:08:58,930 --> 00:09:01,100 นี่คือสิ่งที่ทรงจำของฉันอาจจะมีลักษณะ 172 00:09:01,100 --> 00:09:04,062 >> และเพียงแค่โดยเฉพาะอย่างยิ่ง อวดความรู้ที่นี่เมื่อ 173 00:09:04,062 --> 00:09:06,020 เรากำลังพูดถึงหน่วยความจำ ที่อยู่ที่เรามักจะ 174 00:09:06,020 --> 00:09:08,390 ทำได้โดยใช้สัญลักษณ์เลขฐานสิบหก 175 00:09:08,390 --> 00:09:12,030 ดังนั้นทำไมเราไม่แปลงทั้งหมดของเหล่านี้ จากทศนิยมให้เป็นเลขฐานสิบหก 176 00:09:12,030 --> 00:09:15,010 เพียงเพราะเห็นว่าโดยทั่วไป วิธีการที่เราหมายถึงหน่วยความจำ 177 00:09:15,010 --> 00:09:17,880 ดังนั้นแทนที่จะเป็น 0 ถึง 19 สิ่งที่เรามีเป็นศูนย์ 178 00:09:17,880 --> 00:09:20,340 x ศูนย์ผ่านศูนย์ x1 สาม 179 00:09:20,340 --> 00:09:23,790 เหล่านี้คือ 20 ไบต์ของหน่วยความจำที่เรา มีหรือที่เรากำลังมองหาที่ในภาพนี้ 180 00:09:23,790 --> 00:09:25,540 ที่นี่. 181 00:09:25,540 --> 00:09:29,310 >> ดังนั้นทุกคนที่ถูกกล่าวว่าขอ ก้าวออกไปจากความทรงจำครั้งที่สอง 182 00:09:29,310 --> 00:09:30,490 และกลับมาที่จะชี้ 183 00:09:30,490 --> 00:09:32,420 นี่คือสิ่งที่สำคัญที่สุด สิ่งที่ต้องจำ 184 00:09:32,420 --> 00:09:34,070 ในขณะที่เราเริ่มต้นการทำงานกับคำแนะนำ 185 00:09:34,070 --> 00:09:36,314 ตัวชี้อะไร มากกว่าที่อยู่ 186 00:09:36,314 --> 00:09:38,230 ผมจะบอกอีกครั้งเพราะ มันเป็นเรื่องที่สำคัญ 187 00:09:38,230 --> 00:09:42,730 ตัวชี้อะไร มากกว่าที่อยู่ 188 00:09:42,730 --> 00:09:47,760 ชี้มีอยู่ไปยังสถานที่ ในความทรงจำที่ตัวแปรมีชีวิตอยู่ 189 00:09:47,760 --> 00:09:52,590 รู้ว่ามันจะกลายเป็นหวังว่า นิด ๆ หน่อย ๆ ง่ายต่อการทำงานกับพวกเขา 190 00:09:52,590 --> 00:09:54,550 อีกสิ่งหนึ่งที่ผมชอบ จะทำคือการมีการจัดเรียง 191 00:09:54,550 --> 00:09:58,510 แผนภาพสายตาที่เป็นตัวแทนของสิ่งที่ ที่เกิดขึ้นกับสายต่างๆของโค้ด 192 00:09:58,510 --> 00:10:00,660 และเราจะทำเช่นนี้คู่ ครั้งในชี้ 193 00:10:00,660 --> 00:10:03,354 และเมื่อเราพูดคุยเกี่ยวกับแบบไดนามิก จัดสรรหน่วยความจำได้เป็นอย่างดี 194 00:10:03,354 --> 00:10:06,020 เพราะผมคิดว่าแผนภาพเหล่านี้ จะมีประโยชน์โดยเฉพาะอย่างยิ่ง 195 00:10:06,020 --> 00:10:09,540 >> ดังนั้นถ้าผมพูดเช่น int k ในรหัสของฉันสิ่งที่เกิดขึ้น? 196 00:10:09,540 --> 00:10:12,524 ดีสิ่งที่เกิดขึ้นโดยทั่วไปคือ ฉันได้รับหน่วยความจำการตั้งสำรองสำหรับฉัน 197 00:10:12,524 --> 00:10:14,690 แต่ฉันไม่ได้ต้องการที่จะ คิดเกี่ยวกับมันเช่นนั้นผม 198 00:10:14,690 --> 00:10:16,300 ชอบที่จะคิดเกี่ยวกับมันเช่นกล่อง 199 00:10:16,300 --> 00:10:20,090 ฉันมีกล่องและก็ สีเขียวสีเพราะผม 200 00:10:20,090 --> 00:10:21,750 สามารถใส่จำนวนเต็มในกล่องสีเขียว 201 00:10:21,750 --> 00:10:23,666 ถ้ามันเป็นตัวละครของฉัน อาจจะมีกล่องสีฟ้า 202 00:10:23,666 --> 00:10:27,290 แต่ฉันมักจะบอกว่าถ้าฉันสร้าง กล่องที่สามารถถือจำนวนเต็ม 203 00:10:27,290 --> 00:10:28,950 กล่องที่เป็นสีเขียว 204 00:10:28,950 --> 00:10:33,020 และฉันจะใช้เครื่องหมายถาวร และที่ผมเขียน k ที่ด้านข้างของมัน 205 00:10:33,020 --> 00:10:37,590 ดังนั้นผมจึงมีกล่องที่เรียกว่า k, เป็นที่ฉันสามารถวางจำนวนเต็ม 206 00:10:37,590 --> 00:10:41,070 ดังนั้นเมื่อผมพูด int k ที่ สิ่งที่เกิดขึ้นในหัวของฉัน 207 00:10:41,070 --> 00:10:43,140 ถ้าผมบอกว่า k เท่ากับห้าสิ่งที่ฉันทำ? 208 00:10:43,140 --> 00:10:45,110 ดีฉันวางห้า ในกล่องขวา 209 00:10:45,110 --> 00:10:48,670 นี่คือตรงไปตรงสวยถ้า ผมพูด int k, สร้างกล่องที่เรียกว่า k 210 00:10:48,670 --> 00:10:52,040 ถ้าผมบอกว่า k เท่ากับ 5 ห้าใส่ลงในกล่อง 211 00:10:52,040 --> 00:10:53,865 หวังว่าที่ไม่มากเกินไปของอธิกสุรทิน 212 00:10:53,865 --> 00:10:55,990 นี่คือสิ่งที่ไป เล็ก ๆ น้อย ๆ ที่น่าสนใจว่า 213 00:10:55,990 --> 00:11:02,590 ถ้าผมบอกว่า int * PK ดีแม้ว่าฉันทำไม่ได้ รู้ว่าสิ่งนี้จำเป็นต้องหมายความว่า 214 00:11:02,590 --> 00:11:06,150 มันมีบางสิ่งบางอย่างได้อย่างชัดเจน จะทำอย่างไรกับจำนวนเต็ม 215 00:11:06,150 --> 00:11:08,211 ดังนั้นฉันจะสี กล่องสีเขียว-ish, 216 00:11:08,211 --> 00:11:10,210 ฉันรู้ว่ามันมีสิ่งที่ จะทำอย่างไรกับจำนวนเต็ม 217 00:11:10,210 --> 00:11:13,400 แต่ก็ไม่ได้เป็นจำนวนเต็มตัวเอง เพราะมันเป็นดาว int 218 00:11:13,400 --> 00:11:15,390 มีบางอย่างเล็กน้อย ที่แตกต่างกันเกี่ยวกับเรื่องนี้ 219 00:11:15,390 --> 00:11:17,620 ดังนั้นของจำนวนเต็มเกี่ยวข้อง แต่อย่างอื่นก็ 220 00:11:17,620 --> 00:11:19,830 ไม่มากเกินไปที่แตกต่างจาก สิ่งที่เรากำลังพูดถึง 221 00:11:19,830 --> 00:11:24,240 มันเป็นกล่องมีป้ายชื่อของมัน มันสวม PK ฉลาก 222 00:11:24,240 --> 00:11:27,280 และมันมีความสามารถในการถือ ดาว int สิ่งเหล่านั้น 223 00:11:27,280 --> 00:11:29,894 พวกเขามีสิ่งที่ต้องทำ กับจำนวนเต็มอย่างเห็นได้ชัด 224 00:11:29,894 --> 00:11:31,060 นี่คือบรรทัดสุดท้ายว่าเ​​ป็น 225 00:11:31,060 --> 00:11:37,650 ถ้าผมพูด PK = & K, โอ้โฮ สิ่งที่เพิ่งเกิดขึ้นใช่มั้ย? 226 00:11:37,650 --> 00:11:41,820 ดังนั้นจำนวนสุ่มสุ่ม จำนวนรับโยนลงไปในกล่องมี 227 00:11:41,820 --> 00:11:44,930 สิ่งที่อยู่เป็น PK ได้รับอยู่ของเค 228 00:11:44,930 --> 00:11:52,867 ดังนั้นฉันติดที่ k อาศัยอยู่ในหน่วยความจำ ที่อยู่ที่อยู่ของไบต์ของตน 229 00:11:52,867 --> 00:11:55,200 ทั้งหมดที่ฉันทำคือการที่ฉันพูด ค่าที่เป็นสิ่งที่ฉันจะ 230 00:11:55,200 --> 00:11:59,430 ที่จะใส่ในกล่องของฉันเรียกว่า PK 231 00:11:59,430 --> 00:12:02,080 และเพราะสิ่งเหล่านี้เป็น คำแนะนำและเพราะมอง 232 00:12:02,080 --> 00:12:04,955 ที่สายเช่นศูนย์เอ็กซ์ แปดศูนย์เจ็ดคสี่แปด 233 00:12:04,955 --> 00:12:07,790 สองน่าจะเป็นศูนย์ ไม่ได้มีความหมายมาก 234 00:12:07,790 --> 00:12:12,390 เมื่อเรามักเห็นภาพตัวชี้ เราจริงทำตามคำแนะนำ 235 00:12:12,390 --> 00:12:17,000 Pk ทำให้เรามีข้อมูล เราต้องการที่จะหา k ในหน่วยความจำ 236 00:12:17,000 --> 00:12:19,120 ดังนั้นโดยทั่วไปมีลูกศร PK ในนั้น 237 00:12:19,120 --> 00:12:21,670 และถ้าเราเดินยาว ของลูกศรที่คิด 238 00:12:21,670 --> 00:12:25,280 เป็นสิ่งที่คุณสามารถเดินบนถ้าเรา เดินไปตามความยาวของลูกศร 239 00:12:25,280 --> 00:12:29,490 ที่ปลายสุดของลูกศรที่เรา จะหาสถานที่ในหน่วยความจำ 240 00:12:29,490 --> 00:12:31,390 ชีวิตที่ k 241 00:12:31,390 --> 00:12:34,360 และนั่นคือสิ่งที่สำคัญจริงๆ เพราะเมื่อเรารู้ว่ายังมีชีวิตอยู่ k, 242 00:12:34,360 --> 00:12:37,870 เราสามารถเริ่มต้นการทำงานกับข้อมูล ภายในของสถ​​านที่ตั้งหน่วยความจำที่ 243 00:12:37,870 --> 00:12:40,780 ถึงแม้ว่าเราจะได้รับเล็ก บิตล่วงหน้าของตัวเองตอนนี้ 244 00:12:40,780 --> 00:12:42,240 >> ดังนั้นสิ่งที่เป็นตัวชี้? 245 00:12:42,240 --> 00:12:45,590 ตัวชี้เป็นรายการข้อมูลที่มี ค่าที่อยู่หน่วยความจำ 246 00:12:45,590 --> 00:12:49,740 นั่นคือการที่ศูนย์แปดศูนย์ x สิ่ง ที่เกิดขึ้นที่เป็นอยู่หน่วยความจำ 247 00:12:49,740 --> 00:12:52,060 นั่นคือสถานที่ในหน่วยความจำ 248 00:12:52,060 --> 00:12:55,080 และชนิดของตัวชี้ อธิบายชนิด 249 00:12:55,080 --> 00:12:56,930 ของข้อมูลที่คุณจะพบที่ ที่อยู่หน่วยความจำ 250 00:12:56,930 --> 00:12:58,810 เพื่อให้มีส่วนดาว int ที่เหมาะสม 251 00:12:58,810 --> 00:13:03,690 ถ้าผมทำตามลูกศรที่มัน จะนำฉันไปยังสถานที่ 252 00:13:03,690 --> 00:13:06,980 สถานที่ตั้งว่าสิ่งที่ฉัน จะพบว่ามีในตัวอย่างของฉัน 253 00:13:06,980 --> 00:13:08,240 เป็นกล่องสีเขียว 254 00:13:08,240 --> 00:13:12,650 มันเป็นจำนวนเต็มนั่นคือสิ่งที่ฉัน จะพบว่าถ้าผมไปอยู่ที่ 255 00:13:12,650 --> 00:13:14,830 ประเภทของข้อมูล ตัวชี้อธิบายถึงสิ่งที่ 256 00:13:14,830 --> 00:13:17,936 คุณจะได้พบกับที่อยู่หน่วยความจำที่ 257 00:13:17,936 --> 00:13:19,560 ดังนั้นนี่คือสิ่งที่เจ๋งจริงๆแม้ว่า 258 00:13:19,560 --> 00:13:25,090 ชี้ช่วยให้เราสามารถที่จะผ่าน ตัวแปรระหว่างการทำงาน 259 00:13:25,090 --> 00:13:28,520 และที่จริงผ่านตัวแปร และไม่ผ่านสำเนาของพวกเขา 260 00:13:28,520 --> 00:13:32,879 เพราะถ้าหากเรารู้ว่าที่ ในความทรงจำที่จะหาตัวแปร 261 00:13:32,879 --> 00:13:35,670 เราไม่จำเป็นต้องทำสำเนาของ นั้นเราก็สามารถไปยังสถานที่ที่ 262 00:13:35,670 --> 00:13:37,844 และทำงานร่วมกับตัวแปรที่ 263 00:13:37,844 --> 00:13:40,260 ดังนั้นในการจัดเรียงตัวชี้สาระสำคัญ ทำให้สภาพแวดล้อมของเครื่องคอมพิวเตอร์ 264 00:13:40,260 --> 00:13:42,360 มากขึ้นเช่นเดียวกับโลกแห่งความจริงที่ถูกต้อง 265 00:13:42,360 --> 00:13:44,640 >> ดังนั้นนี่คือความคล้ายคลึง 266 00:13:44,640 --> 00:13:48,080 สมมติว่าผมมีโน๊ตบุ๊ค ถูกต้องและมันเต็มไปด้วยบันทึก 267 00:13:48,080 --> 00:13:50,230 และฉันต้องการให้คุณสามารถปรับปรุงมัน 268 00:13:50,230 --> 00:13:53,960 คุณอยู่ที่ฟังก์ชั่นที่ บันทึกการปรับปรุงขวา 269 00:13:53,960 --> 00:13:56,390 ในวิธีที่เราได้รับ การทำงานเพื่อให้ห่างไกลสิ่งที่ 270 00:13:56,390 --> 00:14:02,370 ที่เกิดขึ้นคือคุณจะใช้โน๊ตบุ๊คของฉัน คุณจะไปที่ร้านคัดลอก 271 00:14:02,370 --> 00:14:06,410 คุณจะทำสำเนาของซีร็อกซ์ ทุกหน้าของโน้ตบุ๊ค 272 00:14:06,410 --> 00:14:09,790 คุณจะได้ออกจากสมุดบันทึกของฉันกลับ บนโต๊ะทำงานของฉันเมื่อคุณทำเสร็จแล้ว 273 00:14:09,790 --> 00:14:14,600 คุณจะไปและข้ามจากสิ่งที่อยู่ในของฉัน โน๊ตบุ๊คที่จะออกจากวันที่หรือผิด 274 00:14:14,600 --> 00:14:19,280 แล้วคุณจะผ่านกลับไป ฉันกองหน้าซีร็อกซ์ 275 00:14:19,280 --> 00:14:22,850 ที่เป็นแบบจำลองของโน้ตบุ๊คของฉันกับ การเปลี่ยนแปลงที่คุณได้ทำไป 276 00:14:22,850 --> 00:14:27,040 และที่จุดนั้นมันขึ้นอยู่กับผมเป็น ฟังก์ชั่นการโทรในขณะที่โทร 277 00:14:27,040 --> 00:14:30,582 การตัดสินใจที่จะใช้บันทึกย่อของคุณและ รวมพวกเขากลับเข้ามาในสมุดบันทึกของฉัน 278 00:14:30,582 --> 00:14:32,540 ดังนั้นมีจำนวนมากของขั้นตอน เกี่ยวข้องกับที่นี่ขวา 279 00:14:32,540 --> 00:14:34,850 เหมือนมันจะไม่ดีขึ้น ถ้าฉันเพียงแค่บอกว่าเดี๋ยวก่อนคุณสามารถ 280 00:14:34,850 --> 00:14:38,370 อัปเดตโน๊ตบุ๊คของฉัน ผมมือคุณโน๊ตบุ๊คของฉัน 281 00:14:38,370 --> 00:14:40,440 และใช้สิ่งที่คุณและ แท้จริงข้ามพวกเขาออก 282 00:14:40,440 --> 00:14:42,810 และปรับปรุงบันทึกของฉันในสมุดบันทึกของฉัน 283 00:14:42,810 --> 00:14:45,140 และจากนั้นให้ฉันโน๊ตบุ๊คของฉันกลับ 284 00:14:45,140 --> 00:14:47,320 ที่ชนิดของสิ่งที่ ชี้ช่วยให้เราสามารถที่จะทำ 285 00:14:47,320 --> 00:14:51,320 พวกเขาทำให้สภาพแวดล้อมนี้เป็นจำนวนมาก มากขึ้นเช่นวิธีการที่เราทำงานในความเป็นจริง 286 00:14:51,320 --> 00:14:54,640 >> ทั้งหมดที่เหมาะสมเพื่อให้เป็นสิ่ง ตัวชี้จะให้มาพูดคุย 287 00:14:54,640 --> 00:14:58,040 เกี่ยวกับวิธีการทำงานชี้ใน C และ วิธีการที่เราสามารถเริ่มต้นการทำงานกับพวกเขา 288 00:14:58,040 --> 00:15:02,550 เพื่อให้มีตัวชี้ง่ายมาก ใน C เรียกว่าตัวชี้โมฆะ 289 00:15:02,550 --> 00:15:04,830 จุดชี้โมฆะเพื่ออะไร 290 00:15:04,830 --> 00:15:08,310 นี่อาจจะดูเหมือนว่ามันเป็น จริงไม่ได้เป็นสิ่งที่มีประโยชน์มาก 291 00:15:08,310 --> 00:15:10,500 แต่ที่เราจะเห็น เล็ก ๆ น้อย ๆ ในภายหลังความจริงที่ 292 00:15:10,500 --> 00:15:15,410 ที่ชี้โมฆะนี้มีอยู่ จริงจริงๆสามารถเข้ามามีประโยชน์ 293 00:15:15,410 --> 00:15:19,090 และเมื่อใดก็ตามที่คุณสร้างตัวชี้และ คุณไม่ได้ตั้ง immediately- ค่าของมัน 294 00:15:19,090 --> 00:15:21,060 ตัวอย่างของการตั้งค่า ค่าของมันทันที 295 00:15:21,060 --> 00:15:25,401 จะเป็นภาพนิ่งคู่กลับ ที่ผมบอกว่า PK เท่ากับ & K, 296 00:15:25,401 --> 00:15:28,740 PK k ได้รับอยู่ในขณะที่ เราจะเห็นสิ่งที่หมายความว่า 297 00:15:28,740 --> 00:15:32,990 เราจะเห็นวิธีการรหัสที่ shortly- ถ้าเราไม่ได้ตั้งค่าของบางสิ่งบางอย่าง 298 00:15:32,990 --> 00:15:35,380 ที่มีความหมายทันที คุณควรเสมอ 299 00:15:35,380 --> 00:15:37,480 กำหนดตัวชี้ของคุณที่จะชี้ให้เป็นโมฆะ 300 00:15:37,480 --> 00:15:40,260 คุณควรจะตั้งค่าให้ชี้ไปที่อะไร 301 00:15:40,260 --> 00:15:43,614 >> นั่นคือแตกต่างกันมากกว่า เพียงแค่ออกจากค่าที่มันเป็น 302 00:15:43,614 --> 00:15:45,530 แล้วประกาศ ตัวชี้และเพียงแค่สมมติ 303 00:15:45,530 --> 00:15:48,042 มันเป็นโมฆะเพราะที่จริงไม่ค่อย 304 00:15:48,042 --> 00:15:50,000 ดังนั้นคุณควรตั้งค่าเสมอ ค่าของตัวชี้ 305 00:15:50,000 --> 00:15:55,690 ให้เป็นโมฆะถ้าคุณไม่ได้ตั้งค่าของมัน บางสิ่งบางอย่างที่มีความหมายทันที 306 00:15:55,690 --> 00:15:59,090 คุณสามารถตรวจสอบว่าค่าตัวชี้ของ เป็นโมฆะใช้ประกอบความเสมอภาค 307 00:15:59,090 --> 00:16:05,450 (==) เช่นเดียวกับคุณเปรียบเทียบจำนวนเต็มใด ๆ ค่าหรือค่าใช้ตัวอักษร (==) 308 00:16:05,450 --> 00:16:06,320 ได้เป็นอย่างดี 309 00:16:06,320 --> 00:16:10,994 มันเป็นความพิเศษของการจัดเรียงอย่างต่อเนื่อง ค่าที่คุณสามารถใช้ในการทดสอบ 310 00:16:10,994 --> 00:16:13,160 เพื่อให้เป็นที่ง่ายมาก ตัวชี้ตัวชี้ null 311 00:16:13,160 --> 00:16:15,320 อีกวิธีหนึ่งที่จะสร้าง ตัวชี้คือการดึง 312 00:16:15,320 --> 00:16:18,240 ที่อยู่ของตัวแปร คุณได้สร้างไว้แล้ว 313 00:16:18,240 --> 00:16:22,330 และคุณทำเช่นนี้โดยใช้ & ผู้ประกอบการสกัดที่อยู่ 314 00:16:22,330 --> 00:16:26,720 ซึ่งวันนี้เราได้เห็นแล้วก่อนหน้านี้ ในตัวอย่างแผนภาพแรกที่ผมแสดงให้เห็นว่า 315 00:16:26,720 --> 00:16:31,450 ดังนั้นถ้า x เป็นตัวแปรที่เราได้ ที่สร้างไว้แล้วของจำนวนเต็มชนิด 316 00:16:31,450 --> 00:16:35,110 แล้วและ x เป็นตัวชี้ไปจำนวนเต็ม 317 00:16:35,110 --> 00:16:39,810 และ x ล์จำและเป็นไปเพื่อดึง ที่อยู่ของสิ่งที่อยู่ด้านขวา 318 00:16:39,810 --> 00:16:45,350 และเนื่องจากเป็นตัวชี้เป็นเพียงที่อยู่ กว่าและ x เป็นตัวชี้ไปจำนวนเต็ม 319 00:16:45,350 --> 00:16:48,560 ที่มีค่าในหน่วยความจำที่ชีวิต x 320 00:16:48,560 --> 00:16:50,460 มันเป็นที่อยู่ของ x 321 00:16:50,460 --> 00:16:53,296 ดังนั้นและ x คือที่อยู่ของ x 322 00:16:53,296 --> 00:16:55,670 ขอใช้เวลานี้ในขั้นตอนเดียว ต่อไปและเชื่อมต่อกับบางสิ่งบางอย่าง 323 00:16:55,670 --> 00:16:58,380 ฉันพูดพาดพิงถึงในวิดีโอก่อน 324 00:16:58,380 --> 00:17:06,730 หาก ARR เป็นอาร์เรย์ของคู่แล้ว และวงเล็บ ARR ตารางฉันเป็นตัวชี้ 325 00:17:06,730 --> 00:17:08,109 เพื่อคู่ 326 00:17:08,109 --> 00:17:08,970 ตกลง. 327 00:17:08,970 --> 00:17:12,160 วงเล็บ arr ตารางฉันถ้า ARR เป็นอาร์เรย์ของคู่ที่ 328 00:17:12,160 --> 00:17:19,069 แล้วยึด arr ตารางฉันเป็น องค์ประกอบที่ i ของอาร์เรย์ที่ 329 00:17:19,069 --> 00:17:29,270 และ arr และวงเล็บเหลี่ยมเป็นที่ที่ฉันอยู่ใน หน่วยความจำองค์ประกอบที่ i ของ ARR อยู่ 330 00:17:29,270 --> 00:17:31,790 >> ดังนั้นสิ่งที่เป็นความหมายที่นี่? 331 00:17:31,790 --> 00:17:34,570 ชื่ออาร์เรย์หมาย ของเรื่องทั้งหมดนี้ 332 00:17:34,570 --> 00:17:39,290 นั่นคือชื่อของอาเรย์คือ จริงตัวเองเป็นตัวชี้ 333 00:17:39,290 --> 00:17:41,170 คุณได้รับการทำงาน กับคำแนะนำตลอด 334 00:17:41,170 --> 00:17:45,290 เวลาที่คุณใช้ทุกอาร์เรย์ 335 00:17:45,290 --> 00:17:49,090 โปรดจำไว้ว่าจากตัวอย่าง เกี่ยวกับขอบเขตตัวแปร 336 00:17:49,090 --> 00:17:53,420 ใกล้ถึงจุดสิ้นสุดของวิดีโอที่ผมนำเสนอ ตัวอย่างที่เรามีฟังก์ชั่น 337 00:17:53,420 --> 00:17:56,890 เรียกว่าชุด int และ ฟังก์ชั่นที่เรียกว่าอาร์เรย์ชุด 338 00:17:56,890 --> 00:18:00,490 และความท้าทายของคุณเพื่อตรวจสอบ หรือไม่หรือว่า 339 00:18:00,490 --> 00:18:03,220 ค่าที่เราพิมพ์ออกมา ในตอนท้ายของฟังก์ชั่นที่ 340 00:18:03,220 --> 00:18:05,960 ในตอนท้ายของโปรแกรมหลัก 341 00:18:05,960 --> 00:18:08,740 >> ถ้าคุณจำจากตัวอย่างที่ หรือถ้าคุณได้ดูวิดีโอ 342 00:18:08,740 --> 00:18:13,080 คุณรู้ไหมว่าเมื่อ you- เรียกร้องให้ int ชุดได้อย่างมีประสิทธิภาพไม่ทำอะไรเลย 343 00:18:13,080 --> 00:18:16,390 แต่การเรียกร้องให้ตั้งอาร์เรย์ไม่ 344 00:18:16,390 --> 00:18:19,280 และจัดเรียงของฉันกลบเกลื่อนว่าทำไม ว่ากรณีที่เกิดขึ้นในเวลานั้น 345 00:18:19,280 --> 00:18:22,363 ผมแค่บอกว่าดีก็อาร์เรย์ก็ พิเศษที่คุณรู้ว่ามีเหตุผล 346 00:18:22,363 --> 00:18:25,020 เหตุผลก็คือว่าอาร์เรย์ของ ชื่อเป็นจริงเพียงตัวชี้ 347 00:18:25,020 --> 00:18:28,740 และมีความพิเศษนี้ ไวยากรณ์วงเล็บเหลี่ยมที่ 348 00:18:28,740 --> 00:18:30,510 ทำในสิ่งที่ดีกว่ามากที่จะทำงานกับ 349 00:18:30,510 --> 00:18:34,410 และพวกเขาทำให้ความคิดของการที่ ตัวชี้มากข่มขู่น้อย 350 00:18:34,410 --> 00:18:36,800 และที่ว่าทำไมพวกเขากำลังจัดเรียง นำเสนอในทางที่ 351 00:18:36,800 --> 00:18:38,600 แต่จริงๆอาร์เรย์เป็นเพียงคำแนะนำ 352 00:18:38,600 --> 00:18:41,580 และที่ว่าทำไมเมื่อเรา ทำการเปลี่ยนแปลงไปยังอาร์เรย์ที่ 353 00:18:41,580 --> 00:18:44,880 เมื่อเราผ่านอาร์เรย์เป็นพารามิเตอร์ ฟังก์ชั่นหรือเป็นอาร์กิวเมนต์ 354 00:18:44,880 --> 00:18:50,110 ฟังก์ชั่นที่มีเนื้อหาของอาร์เรย์ การเปลี่ยนแปลงจริงทั้งใน callee 355 00:18:50,110 --> 00:18:51,160 และในการโทร 356 00:18:51,160 --> 00:18:55,846 ซึ่งสำหรับทุกชนิดอื่น ๆ ของ ตัวแปรที่เราเห็นไม่ได้กรณี 357 00:18:55,846 --> 00:18:58,970 เพื่อให้เป็นเพียงแค่สิ่งที่จะเก็บไว้ใน ใจเมื่อคุณกำลังทำงานกับตัวชี้ 358 00:18:58,970 --> 00:19:01,610 คือชื่อของที่ อาร์เรย์จริงตัวชี้ 359 00:19:01,610 --> 00:19:04,750 ไปยังองค์ประกอบแรกของอาร์เรย์ที่ 360 00:19:04,750 --> 00:19:08,930 >> ตกลงดังนั้นตอนนี้เรามีทั้งหมดเหล่านี้ ข้อเท็จจริงขอให้ไปขวา 361 00:19:08,930 --> 00:19:11,370 ทำไมเราดูแลเกี่ยวกับ บางสิ่งบางอย่างที่มีชีวิตอยู่ 362 00:19:11,370 --> 00:19:14,120 ดีชอบพูดว่ามันสวย ประโยชน์ที่จะทราบว่าสิ่งที่มีชีวิตอยู่ 363 00:19:14,120 --> 00:19:17,240 เพื่อให้คุณสามารถไปที่นั่นและเปลี่ยนมัน 364 00:19:17,240 --> 00:19:19,390 ทำงานกับมันและจริง มีสิ่งที่คุณ 365 00:19:19,390 --> 00:19:23,710 ต้องการที่จะทำอย่างไรเพื่อที่จะมีผลตัวแปร และไม่ได้มีผลในสำเนาของมันบาง 366 00:19:23,710 --> 00:19:26,150 นี้เรียกว่า dereferencing 367 00:19:26,150 --> 00:19:28,690 เราไปอ้างอิงและ เราเปลี่ยนค่ามี 368 00:19:28,690 --> 00:19:32,660 ดังนั้นหากเรามีตัวชี้และก็เรียกว่า เครื่องคอมพิวเตอร์และมันชี้ไปที่ตัวอักษร 369 00:19:32,660 --> 00:19:40,610 แล้วเราสามารถพูด * * * * * * * * เครื่องคอมพิวเตอร์และเครื่องคอมพิวเตอร์เป็น ชื่อของสิ่งที่เราจะพบว่าถ้าเราไป 370 00:19:40,610 --> 00:19:42,910 ไปยังเครื่องคอมพิวเตอร์ที่อยู่ 371 00:19:42,910 --> 00:19:47,860 สิ่งที่เราจะพบว่ามีตัวอักษรและ * pc เป็นวิธีการที่เราหมายถึงข้อมูลที่ว่า 372 00:19:47,860 --> 00:19:48,880 สถานที่ 373 00:19:48,880 --> 00:19:54,150 ดังนั้นเราอาจจะบอกว่าสิ่งที่ต้องการ * เครื่องคอมพิวเตอร์ = D หรือสิ่งที่ต้องการที่ 374 00:19:54,150 --> 00:19:59,280 และนั่นหมายความว่าสิ่งที่ อยู่ที่เครื่องคอมพิวเตอร์ที่อยู่ในหน่วยความจำ 375 00:19:59,280 --> 00:20:07,040 สิ่งที่ตัวละครก่อนหน้านี้ มีอยู่ในขณะนี้ D ถ้าเราบอกว่าเครื่องคอมพิวเตอร์ * = D 376 00:20:07,040 --> 00:20:10,090 >> ดังนั้นที่นี่เราไปอีกครั้งกับ สิ่งที่ C บางลางขวา 377 00:20:10,090 --> 00:20:14,560 ดังนั้นเราจึงได้เห็น * ก่อนหน้านี้ในฐานะที่เป็น อย่างใดส่วนหนึ่งของชนิดข้อมูล 378 00:20:14,560 --> 00:20:17,160 และตอนนี้ก็ถูกนำมาใช้ใน บริบทที่แตกต่างกันเล็กน้อย 379 00:20:17,160 --> 00:20:19,605 ในการเข้าถึงข้อมูลที่สถานที่ 380 00:20:19,605 --> 00:20:22,480 ผมรู้ว่ามันเป็นความสับสนเล็กน้อยและ ที่จริงส่วนหนึ่งของทั้งหมดนี้ 381 00:20:22,480 --> 00:20:25,740 เช่นทำไมมีตัวชี้ตำนานนี้ รอบตัวพวกเขาในฐานะที่เป็นที่ซับซ้อนเช่นนั้น 382 00:20:25,740 --> 00:20:28,250 เป็นชนิดของปัญหาทางไวยากรณ์ตรงไปตรงมา 383 00:20:28,250 --> 00:20:31,810 * แต่ถูกนำมาใช้ในบริบทที่ทั้งสอง ทั้งสองเป็นส่วนหนึ่งของชื่อชนิด 384 00:20:31,810 --> 00:20:34,100 และเราจะเห็นเพียงเล็กน้อย บางสิ่งบางอย่างในภายหลังอื่นมากเกินไป 385 00:20:34,100 --> 00:20:36,490 และตอนนี้เป็น ผู้ประกอบการ dereference 386 00:20:36,490 --> 00:20:38,760 ดังนั้นมันจะไปอ้างอิง มันเข้าถึงข้อมูล 387 00:20:38,760 --> 00:20:43,000 ในสถานที่ของตัวชี้และ ช่วยให้คุณสามารถจัดการกับมันที่จะ 388 00:20:43,000 --> 00:20:45,900 >> ตอนนี้จะคล้ายกับ เยี่ยมชมเพื่อนบ้านของคุณใช่ไหม 389 00:20:45,900 --> 00:20:48,710 ถ้าคุณรู้ว่าคุณ อาศัยอยู่กับเพื่อนบ้านของคุณ 390 00:20:48,710 --> 00:20:50,730 ไม่ได้ห้อยออกกับเพื่อนบ้านของคุณ 391 00:20:50,730 --> 00:20:53,510 คุณจะรู้ว่าคุณจะเกิดขึ้น รู้ว่าพวกเขามีชีวิตอยู่ 392 00:20:53,510 --> 00:20:56,870 แต่นั่นไม่ได้หมายความว่าโดย อาศัยอำนาจตามความรู้ที่มี 393 00:20:56,870 --> 00:20:59,170 คุณจะมีปฏิสัมพันธ์กับพวกเขา 394 00:20:59,170 --> 00:21:01,920 ถ้าคุณต้องการที่จะติดต่อกับพวกเขา คุณต้องไปที่บ้านของพวกเขา 395 00:21:01,920 --> 00:21:03,760 คุณต้องไปที่ที่พวกเขาอยู่ 396 00:21:03,760 --> 00:21:07,440 และเมื่อคุณทำอย่างนั้น จากนั้นคุณสามารถโต้ตอบ 397 00:21:07,440 --> 00:21:09,420 กับพวกเขาเช่นเดียวกับที่คุณต้องการ 398 00:21:09,420 --> 00:21:12,730 และในทำนองเดียวกันกับตัวแปร คุณจำเป็นต้องไปยังที่อยู่ของพวกเขา 399 00:21:12,730 --> 00:21:15,320 ถ้าคุณต้องการที่จะมีปฏิสัมพันธ์กับพวกเขา คุณก็ไม่สามารถทราบที่อยู่ 400 00:21:15,320 --> 00:21:21,495 และวิธีที่คุณจะไปที่ที่อยู่ ที่จะใช้ * ผู้ประกอบการ dereference 401 00:21:21,495 --> 00:21:23,620 คุณคิดว่าอะไรเกิดขึ้น ถ้าเราพยายาม dereference 402 00:21:23,620 --> 00:21:25,260 ชี้ที่มีค่าเป็นโมฆะ? 403 00:21:25,260 --> 00:21:28,470 จำได้ว่าเป็นโมฆะ จุดที่ชี้ไปยังไม่มีอะไร 404 00:21:28,470 --> 00:21:34,110 ดังนั้นหากคุณพยายามและ dereference อะไรหรือไปอะไรที่อยู่ 405 00:21:34,110 --> 00:21:36,800 สิ่งที่คุณคิดว่าจะเกิดอะไรขึ้น? 406 00:21:36,800 --> 00:21:39,630 ดีถ้าคุณเดาได้แบ่งส่วน ความผิดที่คุณจะได้รับสิทธิ 407 00:21:39,630 --> 00:21:41,390 ถ้าคุณพยายามและ dereference ตัวชี้โมฆะ 408 00:21:41,390 --> 00:21:43,140 คุณประสบการแบ่งส่วน ความผิด แต่รอ 409 00:21:43,140 --> 00:21:45,820 ไม่ได้ผมบอกคุณว่า ถ้าคุณไม่ได้ไป 410 00:21:45,820 --> 00:21:49,220 การตั้งค่าของของคุณ ตัวชี้ไปยังสิ่งที่มีความหมาย 411 00:21:49,220 --> 00:21:51,000 คุณควรตั้งค่าให้เป็นโมฆะ? 412 00:21:51,000 --> 00:21:55,290 ฉันไม่จริงและการแบ่งส่วน ความผิดพลาดเป็นชนิดของพฤติกรรมที่ดี 413 00:21:55,290 --> 00:21:58,680 >> คุณเคยประกาศเป็นตัวแปรและ ไม่ได้กำหนดค่าของมันได้ทันทีหรือไม่ 414 00:21:58,680 --> 00:22:02,680 ดังนั้นคุณเพียงแค่พูดว่า int x; คุณทำไม่ได้ จริงกำหนดให้อะไร 415 00:22:02,680 --> 00:22:05,340 และจากนั้นในภายหลังในรหัสของคุณ คุณพิมพ์ออกค่าของ x, 416 00:22:05,340 --> 00:22:07,650 มียังไม่ ได้รับมอบหมายเพื่ออะไร 417 00:22:07,650 --> 00:22:10,370 ที่พบบ่อยคุณจะได้รับ ศูนย์ แต่บางครั้งคุณ 418 00:22:10,370 --> 00:22:15,000 อาจได้รับบางส่วนจำนวนสุ่มและ คุณมีความคิดมันมาจากไหนไม่มี 419 00:22:15,000 --> 00:22:16,750 ในทำนองเดียวกันสิ่งที่สามารถ เกิดขึ้นกับตัวชี้ 420 00:22:16,750 --> 00:22:20,110 เมื่อคุณประกาศตัวชี้ int * PK ตัวอย่างเช่น 421 00:22:20,110 --> 00:22:23,490 และคุณไม่ได้กำหนดให้ค่า คุณจะได้รับสี่ไบต์สำหรับหน่วยความจำ 422 00:22:23,490 --> 00:22:25,950 สิ่งที่สี่ไบต์ หน่วยความจำระบบสามารถ 423 00:22:25,950 --> 00:22:28,970 พบว่ามีบางส่วนที่มีความหมายค่า 424 00:22:28,970 --> 00:22:31,760 และอาจจะมี บางสิ่งบางอย่างที่มีอยู่แล้ว 425 00:22:31,760 --> 00:22:34,190 ไม่มีความจำเป็นอีก ฟังก์ชั่นเพื่อให้คุณเพียงแค่ต้อง 426 00:22:34,190 --> 00:22:35,900 ข้อมูลใดที่นั่น 427 00:22:35,900 --> 00:22:40,570 >> ถ้าคุณพยายามที่จะทำ dereference ที่อยู่บางอย่างที่คุณ don't- มี 428 00:22:40,570 --> 00:22:43,410 แล้วไบต์และข้อมูลใน มีที่ตอนนี้อยู่ในตัวชี้ของคุณ 429 00:22:43,410 --> 00:22:47,470 ถ้าคุณพยายามและ dereference ชี้ว่า คุณอาจจะล้อเล่นกับหน่วยความจำบาง 430 00:22:47,470 --> 00:22:49,390 ที่คุณไม่ได้ตั้งใจ ไปยุ่งกับมันทั้งหมด 431 00:22:49,390 --> 00:22:51,639 และในความเป็นจริงคุณสามารถทำ จริงๆสิ่งที่ทำลายล้าง 432 00:22:51,639 --> 00:22:54,880 เช่นทำลายโปรแกรมอื่น หรือทำลายฟังก์ชั่นอื่น 433 00:22:54,880 --> 00:22:58,289 หรือทำอะไรบางอย่างที่เป็นอันตรายที่ คุณไม่ได้ตั้งใจที่จะทำเลย 434 00:22:58,289 --> 00:23:00,080 และนั่นเป็นเหตุผลที่มันเป็น จริงความคิดที่ดี 435 00:23:00,080 --> 00:23:04,030 การตั้งตัวชี้ของคุณให้เป็นโมฆะถ้าคุณ ไม่ได้ตั้งค่าให้พวกเขาที่มีความหมาย 436 00:23:04,030 --> 00:23:06,760 มันอาจจะดีกว่าที่ ในตอนท้ายของวันสำหรับโปรแกรมของคุณ 437 00:23:06,760 --> 00:23:09,840 ที่จะผิดพลาดแล้วมันจะทำ สิ่งที่สกรูขึ้น 438 00:23:09,840 --> 00:23:12,400 อีกหนึ่งโปรแกรมหรือฟังก์ชั่นอื่น 439 00:23:12,400 --> 00:23:15,207 พฤติกรรมที่อาจจะเป็นแม้กระทั่ง เหมาะน้อยกว่าเพียงแค่การทำงานล้มเหลว 440 00:23:15,207 --> 00:23:17,040 และนั่นเป็นเหตุผลที่มันเป็น จริงเป็นนิสัยที่ดี 441 00:23:17,040 --> 00:23:20,920 จะได้รับในการตั้งตัวชี้ของคุณ ให้เป็นโมฆะถ้าคุณไม่ได้ตั้งพวกเขา 442 00:23:20,920 --> 00:23:24,540 เป็นค่าที่มีความหมาย ทันทีค่าที่คุณรู้ 443 00:23:24,540 --> 00:23:27,260 และที่คุณสามารถได้อย่างปลอดภัย dereference 444 00:23:27,260 --> 00:23:32,240 >> ดังนั้นขอกลับมาในขณะนี้และจะดู ที่ไวยากรณ์โดยรวมของสถ​​านการณ์ 445 00:23:32,240 --> 00:23:37,400 ถ้าผมบอกว่า int * พี ;, สิ่งที่ฉันเพิ่งทำ? 446 00:23:37,400 --> 00:23:38,530 สิ่งที่ผมทำคือ 447 00:23:38,530 --> 00:23:43,290 ฉันรู้ว่าค่าของ p เป็นอยู่ เพราะทุกตัวชี้เป็นเพียง 448 00:23:43,290 --> 00:23:44,660 ที่อยู่ 449 00:23:44,660 --> 00:23:47,750 ฉันสามารถ dereference พี ใช้ประกอบการที่ * 450 00:23:47,750 --> 00:23:51,250 ในบริบทนี้ที่นี่ที่มาก ด้านบน * จำได้เป็นส่วนหนึ่งของชนิด 451 00:23:51,250 --> 00:23:53,510 Int * เป็นชนิดข้อมูล 452 00:23:53,510 --> 00:23:56,150 แต่ผมสามารถ dereference พีใช้ประกอบการ * ที่ 453 00:23:56,150 --> 00:24:01,897 และถ้าผมทำเช่นนั้นถ้าผมไปอยู่ที่ สิ่งที่ฉันจะได้พบกับที่อยู่ที่? 454 00:24:01,897 --> 00:24:02,855 ฉันจะได้พบกับจำนวนเต็ม 455 00:24:02,855 --> 00:24:05,910 ดังนั้น int * พีเป็นพื้น บอกว่าพีเป็นที่อยู่ 456 00:24:05,910 --> 00:24:09,500 ฉันสามารถ dereference พีและถ้า ฉันฉันจะได้พบกับจำนวนเต็ม 457 00:24:09,500 --> 00:24:11,920 ที่ตั้งหน่วยความจำที่ 458 00:24:11,920 --> 00:24:14,260 >> ตกลงดังนั้นผมจึงบอกว่ามีอีก สิ่งที่น่ารำคาญที่มีดาว 459 00:24:14,260 --> 00:24:17,060 และนี่คือที่ว่า สิ่งที่น่ารำคาญที่มีดาวเป็น 460 00:24:17,060 --> 00:24:21,640 คุณเคยพยายามที่จะประกาศ ตัวแปรหลายประเภทเดียวกัน 461 00:24:21,640 --> 00:24:24,409 ในบรรทัดเดียวกันของรหัส? 462 00:24:24,409 --> 00:24:27,700 ดังนั้นสำหรับสองแกล้งทำเป็นว่าเส้น รหัสที่จริงผมมีมีสีเขียว 463 00:24:27,700 --> 00:24:29,366 ไม่ได้มีและมันก็บอกว่า int x, y, z ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 สิ่งที่จะทำคือการสร้างจริง สามตัวแปรจำนวนเต็มสำหรับคุณ 466 00:24:34,550 --> 00:24:36,930 อย่างใดอย่างหนึ่งที่เรียกว่า x หนึ่งที่เรียกว่า y, หนึ่งที่เรียกว่าซี 467 00:24:36,930 --> 00:24:41,510 มันเป็นวิธีที่จะทำมันได้โดยไม่ต้อง ต้องแยกออกไปยังสามบรรทัด 468 00:24:41,510 --> 00:24:43,890 >> นี่คือสิ่งที่ดาวได้รับ ที่น่ารำคาญอีกครั้งว่า 469 00:24:43,890 --> 00:24:49,200 * เนื่องจากเป็นจริงส่วนหนึ่ง ชื่อของทั้งสองชนิดและเป็นส่วนหนึ่ง 470 00:24:49,200 --> 00:24:50,320 ชื่อตัวแปร 471 00:24:50,320 --> 00:24:56,430 ดังนั้นถ้าฉันพูด int * พิกเซล, PY, PZ สิ่งที่ฉัน ได้รับจริงเป็นตัวชี้ไปจำนวนเต็ม 472 00:24:56,430 --> 00:25:01,650 เรียกว่าพิกเซลและสองจำนวนเต็ม PY และ PZ 473 00:25:01,650 --> 00:25:04,950 และนั่นคือสิ่งที่อาจจะไม่ได้ เราต้องการที่ไม่ดี 474 00:25:04,950 --> 00:25:09,290 >> ดังนั้นถ้าผมต้องการที่จะสร้างตัวชี้หลาย ในบรรทัดเดียวกันของประเภทเดียวกัน 475 00:25:09,290 --> 00:25:12,140 และดาวสิ่งที่ฉันต้องการจริง ทำคือการพูด int * ต่อปี * PB * เครื่องคอมพิวเตอร์ 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 ตอนนี้ต้องบอกเพียงแค่ว่า และตอนนี้บอกคุณนี้ 478 00:25:20,300 --> 00:25:22,170 คุณอาจจะไม่เคยทำเช่นนี้ 479 00:25:22,170 --> 00:25:25,170 และก็อาจจะเป็นสิ่งที่ดีตรงไปตรงมา เพราะคุณอาจจะไม่ได้ตั้งใจ 480 00:25:25,170 --> 00:25:26,544 ละเว้นดาวสิ่งที่ต้องการที่ 481 00:25:26,544 --> 00:25:29,290 มันอาจจะดีที่สุดที่จะอาจจะประกาศ คำแนะนำเกี่ยวกับสายของแต่ละบุคคล 482 00:25:29,290 --> 00:25:31,373 แต่มันก็เป็นเพียงอีกคนหนึ่ง ไวยากรณ์ของผู้ที่น่ารำคาญ 483 00:25:31,373 --> 00:25:35,310 สิ่งที่มีดาวที่ทำให้ ตัวชี้จึงยากที่จะทำงานร่วมกับ 484 00:25:35,310 --> 00:25:39,480 เพราะมันเป็นเพียงแค่ประโยคนี้ คุณมีระเบียบในการทำงานผ่าน 485 00:25:39,480 --> 00:25:41,600 กับการปฏิบัติมันไม่ จริงๆเป็นธรรมชาติที่สอง 486 00:25:41,600 --> 00:25:45,410 ฉันยังคงทำผิดพลาดกับมันยัง หลังจากที่การเขียนโปรแกรมเป็นเวลา 10 ปีที่ผ่านมา 487 00:25:45,410 --> 00:25:49,630 จึงไม่ต้องอารมณ์เสียถ้าสิ่งที่เกิดขึ้น กับคุณก็รักกันตรงไปตรงมา 488 00:25:49,630 --> 00:25:52,850 มันจริงๆชนิดของ ข้อบกพร่องของไวยากรณ์ 489 00:25:52,850 --> 00:25:54,900 >> ตกลงดังนั้นฉันชนิดของสัญญา ว่าเราจะทบทวน 490 00:25:54,900 --> 00:25:59,370 แนวคิดของวิธีการที่มีขนาดใหญ่เป็นสตริง 491 00:25:59,370 --> 00:26:02,750 ดีถ้าฉันบอกคุณว่า สตริงเราได้จริงๆชนิดของ 492 00:26:02,750 --> 00:26:04,140 นอนอยู่กับคุณตลอดเวลา 493 00:26:04,140 --> 00:26:06,181 มีชนิดข้อมูลไม่เรียกว่าเป็น สตริงและในความเป็นจริงฉัน 494 00:26:06,181 --> 00:26:09,730 กล่าวถึงนี้เป็นหนึ่งในของเรา วิดีโอที่เก่าแก่ที่สุดในชนิดข้อมูล 495 00:26:09,730 --> 00:26:13,820 สตริงที่เป็นชนิดข้อมูลที่ ถูกสร้างขึ้นสำหรับคุณในการ CS50.h. 496 00:26:13,820 --> 00:26:17,050 คุณต้อง # รวม CS50.h เพื่อที่จะใช้มัน 497 00:26:17,050 --> 00:26:19,250 >> ดีสตริงเป็นจริงเพียง นามแฝงสำหรับบางสิ่งบางอย่าง 498 00:26:19,250 --> 00:26:23,600 * เรียกว่าถ่านที่เป็น ตัวชี้ไปยังตัวอักษร 499 00:26:23,600 --> 00:26:26,010 ดีชี้การเรียกคืน เป็นเพียงที่อยู่ 500 00:26:26,010 --> 00:26:28,780 ดังนั้นสิ่งที่มีขนาด ไบต์ของสตริงหรือไม่? 501 00:26:28,780 --> 00:26:29,796 ดีมันสี่หรือแปด 502 00:26:29,796 --> 00:26:32,170 และเหตุผลที่ผมบอกว่าสี่หรือ แปดเป็นเพราะมันเป็นจริง 503 00:26:32,170 --> 00:26:36,730 ขึ้นอยู่กับระบบหากคุณกำลังใช้ IDE CS50 * ถ่านคือขนาดของถ่านที่ 504 00:26:36,730 --> 00:26:39,340 * แปดมันเป็นระบบ 64 บิต 505 00:26:39,340 --> 00:26:43,850 ที่อยู่ในความทรงจำทุกคนเป็น 64 บิตนาน 506 00:26:43,850 --> 00:26:48,270 หากคุณกำลังใช้เครื่อง CS50 หรือโดยใช้เครื่อง 32 บิต 507 00:26:48,270 --> 00:26:51,640 และคุณเคยได้ยินว่าในระยะ 32 บิต เครื่องสิ่งที่เป็นเครื่อง 32 บิต? 508 00:26:51,640 --> 00:26:56,090 ดีมันก็หมายความว่าทุก ที่อยู่ในความทรงจำเป็น 32 บิตนาน 509 00:26:56,090 --> 00:26:59,140 และอื่น ๆ 32 บิตสี่ไบต์ 510 00:26:59,140 --> 00:27:02,710 ดังนั้น * ถ่านสี่หรือแปด ไบต์ขึ้นอยู่กับระบบของคุณ 511 00:27:02,710 --> 00:27:06,100 และแน่นอนชนิดข้อมูลใด ๆ และชี้ไปยังข้อมูลใด ๆ 512 00:27:06,100 --> 00:27:12,030 พิมพ์ตั้งแต่ชี้ทั้งหมดเป็นเพียง ที่อยู่สี่หรือแปดไบต์ 513 00:27:12,030 --> 00:27:14,030 ดังนั้นขอทบทวนนี้ แผนภาพและขอสรุป 514 00:27:14,030 --> 00:27:18,130 วิดีโอนี้กับการออกกำลังกายเล็ก ๆ น้อย ๆ ที่นี่ 515 00:27:18,130 --> 00:27:21,600 ดังนั้นนี่คือแผนภาพที่เราทิ้งไปด้วย ที่จุดเริ่มต้นของวิดีโอ 516 00:27:21,600 --> 00:27:23,110 จึงเกิดขึ้นในขณะนี้สิ่งที่ถ้าผมพูด * PK = 35? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 ดังนั้นจึงหมายความว่าเมื่อฉันพูด * PK = 35? 519 00:27:30,530 --> 00:27:32,420 ใช้เป็นครั้งที่สอง 520 00:27:32,420 --> 00:27:34,990 * PK 521 00:27:34,990 --> 00:27:39,890 ในบริบทที่นี่ * คือ ผู้ประกอบการ dereference 522 00:27:39,890 --> 00:27:42,110 ดังนั้นเมื่อ dereference ผู้ประกอบการมีการใช้ 523 00:27:42,110 --> 00:27:48,520 ที่เราจะไปยังที่อยู่ที่ชี้ไป โดย PK และเราเปลี่ยนสิ่งที่เราพบ 524 00:27:48,520 --> 00:27:55,270 ดังนั้น * PK = 35 ได้อย่างมีประสิทธิภาพ ทำอย่างนี้ไปภาพ 525 00:27:55,270 --> 00:27:58,110 ดังนั้นจึงเป็นพื้น syntactically เหมือนกับที่ได้กล่าว k = 35 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> อีกหนึ่ง. 528 00:28:01,930 --> 00:28:05,510 ถ้าผมบอกว่า int เมตรสร้าง ตัวแปรใหม่ที่เรียกว่าม. 529 00:28:05,510 --> 00:28:08,260 กล่องใหม่จะเป็นกล่องสีเขียวเพราะ ก็จะถือจำนวนเต็ม 530 00:28:08,260 --> 00:28:09,840 และจะติดป้ายเมตร 531 00:28:09,840 --> 00:28:14,960 ถ้าผมบอกว่าม. = 4 ผมใส่ จำนวนเต็มลงในช่องที่ 532 00:28:14,960 --> 00:28:20,290 ถ้าพูด PK = & M, วิธีการที่ไม่ การเปลี่ยนแปลงแผนภาพนี้? 533 00:28:20,290 --> 00:28:28,760 Pk = & M, คุณจำได้ว่า และผู้ประกอบการจะเกิดขึ้นหรือที่เรียกว่า? 534 00:28:28,760 --> 00:28:34,430 และจำไว้ว่าบางชื่อตัวแปร เป็นที่อยู่ของชื่อตัวแปร 535 00:28:34,430 --> 00:28:38,740 ดังนั้นสิ่งที่เรากำลังจะบอกว่าเป็น PK ได้รับที่อยู่ของ m 536 00:28:38,740 --> 00:28:42,010 และเพื่อให้มีประสิทธิภาพในสิ่งที่เกิดขึ้น แผนภาพคือจุด pk ไม่ 537 00:28:42,010 --> 00:28:46,420 กับ k แต่จุดที่จะม 538 00:28:46,420 --> 00:28:48,470 >> ตัวชี้อีกครั้งเป็นอย่างมาก ยุ่งยากในการทำงานร่วมกับ 539 00:28:48,470 --> 00:28:50,620 และพวกเขาใช้เวลามากของ ปฏิบัติ แต่เป็นเพราะ 540 00:28:50,620 --> 00:28:54,150 ความสามารถในการช่วยให้คุณ เพื่อส่งผ่านข้อมูลระหว่างการทำงาน 541 00:28:54,150 --> 00:28:56,945 และจะมีผู้ที่ การเปลี่ยนแปลงจะมีผล 542 00:28:56,945 --> 00:28:58,820 ได้รับหัวของรอบ เป็นสิ่งสำคัญมาก 543 00:28:58,820 --> 00:29:02,590 มันน่าจะเป็นที่ซับซ้อนมากที่สุด หัวข้อที่เราจะหารือใน CS50, 544 00:29:02,590 --> 00:29:05,910 แต่ค่าที่คุณ ได้รับจากการใช้ตัวชี้ 545 00:29:05,910 --> 00:29:09,200 มากเมื่อเทียบกับภาวะแทรกซ้อน ที่มาจากการเรียนรู้ของพวกเขา 546 00:29:09,200 --> 00:29:12,690 ดังนั้นผมจึงหวังว่าคุณที่ดีที่สุดของ เรียนรู้เกี่ยวกับโชคชี้ 547 00:29:12,690 --> 00:29:15,760 ฉันลอยด์ดั๊กนี้เป็น CS50 548 00:29:15,760 --> 00:29:17,447