1 00:00:00,000 --> 00:00:03,388 >> [เล่นเพลง] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: สิทธิทั้งหมด 4 00:00:06,020 --> 00:00:07,680 การทำงานกับซิงเกิ้ล ตัวแปรคือความสนุกสวย 5 00:00:07,680 --> 00:00:09,500 แต่ถ้าเราต้องการที่จะทำงาน ที่มีจำนวนมากของตัวแปรที่ 6 00:00:09,500 --> 00:00:12,760 แต่เราไม่ต้องการที่จะมีพวงของ ชื่อแตกต่างกันบินไปรอบ ๆ รหัสของเราหรือไม่ 7 00:00:12,760 --> 00:00:15,980 ในกรณีนี้มีอาร์เรย์ จะเข้ามามีประโยชน์จริงๆ 8 00:00:15,980 --> 00:00:19,510 อาร์เรย์เป็นข้อมูลพื้นฐานจริงๆ โครงสร้างการเขียนโปรแกรมภาษาใด ๆ 9 00:00:19,510 --> 00:00:20,260 ที่คุณจะใช้ 10 00:00:20,260 --> 00:00:24,450 และพวกเขากำลังจริงๆประโยชน์จริงๆ โดยเฉพาะอย่างยิ่งในขณะที่เราจะเห็นในซี 50 11 00:00:24,450 --> 00:00:27,870 >> เราใช้อาร์เรย์ที่จะถือ ค่าของชนิดข้อมูลเดียวกัน 12 00:00:27,870 --> 00:00:29,830 ในสถานที่ที่หน่วยความจำที่อยู่ติดกัน 13 00:00:29,830 --> 00:00:32,430 นั่นคือจะบอกว่ามันเป็น วิธีการที่เราสามารถจัดกลุ่ม 14 00:00:32,430 --> 00:00:35,430 พวงของจำนวนเต็มร่วมกันใน หน่วยความจำหรือพวงของตัวอักษร 15 00:00:35,430 --> 00:00:38,270 หรือลอยอยู่ในความทรงจำจริงๆ ใกล้กันและการทำงาน 16 00:00:38,270 --> 00:00:41,930 กับพวกเขาโดยไม่ต้องให้แต่ละ หนึ่งในชื่อที่เป็นเอกลักษณ์ของตัวเองซึ่งสามารถ 17 00:00:41,930 --> 00:00:44,500 ได้รับยุ่งยากหลังจากที่ในขณะที่น้อย 18 00:00:44,500 --> 00:00:48,130 >> ตอนนี้วิธีหนึ่งที่จะ analogize อาร์เรย์ คือการคิดเกี่ยวกับการโพสต์ในประเทศของคุณ 19 00:00:48,130 --> 00:00:49,000 สำนักงานเป็นครั้งที่สอง 20 00:00:49,000 --> 00:00:51,820 ดังนั้นก้าวออกไปจากการเขียนโปรแกรม และเพียงแค่ปิดตาของคุณ 21 00:00:51,820 --> 00:00:54,120 และเห็นภาพในใจของคุณ ที่ทำการไปรษณีย์ในพื้นที่ของคุณ 22 00:00:54,120 --> 00:00:57,160 โดยปกติแล้วในโพสต์มากที่สุด สำนักงานมีธนาคารขนาดใหญ่ 23 00:00:57,160 --> 00:01:00,490 กล่องที่ทำการไปรษณีย์บนผนัง 24 00:01:00,490 --> 00:01:03,510 >> อาร์เรย์เป็นบล็อกขนาดยักษ์ ของหน่วยความจำที่ต่อเนื่องกัน 25 00:01:03,510 --> 00:01:06,120 เช่นเดียวกับที่อีเมล ธนาคารในสำนักงานของคุณโพสต์ 26 00:01:06,120 --> 00:01:11,230 เป็นพื้นที่ขนาดใหญ่บน ผนังของที่ทำการไปรษณีย์ 27 00:01:11,230 --> 00:01:15,750 อะเรย์ได้รับการแบ่งออกเป็นขนาดเล็ก เหมือนบล็อกขนาดของพื้นที่ 28 00:01:15,750 --> 00:01:19,930 แต่ละที่จะเรียกว่าองค์ประกอบใน เช่นเดียวกับที่ผนังของการโพสต์ 29 00:01:19,930 --> 00:01:23,840 สำนักงานได้รับการแบ่งออกเป็นขนาดเล็ก เหมือนบล็อกขนาดของพื้นที่ 30 00:01:23,840 --> 00:01:27,560 ซึ่งเราเรียกกล่องใบสั่ง 31 00:01:27,560 --> 00:01:31,650 แต่ละองค์ประกอบของอาร์เรย์สามารถ เก็บจำนวนหนึ่งของข้อมูล 32 00:01:31,650 --> 00:01:37,540 เช่นเดียวกับตู้ไปรษณีย์แต่ละสามารถ จะถือจำนวนหนึ่งของจดหมาย 33 00:01:37,540 --> 00:01:41,540 >> สิ่งที่สามารถเก็บไว้ในองค์ประกอบของแต่ละ อาร์เรย์เป็นตัวแปรของข้อมูลเดียวกัน 34 00:01:41,540 --> 00:01:45,300 ประเภทเช่น int หรือถ่านเพียง เหมือนในที่ทำการไปรษณีย์ของคุณกล่อง 35 00:01:45,300 --> 00:01:47,300 คุณสามารถพอดีกับสิ่งที่ ประเภทที่คล้ายกัน 36 00:01:47,300 --> 00:01:50,430 เช่นตัวอักษรหรือแพคเกจขนาดเล็ก 37 00:01:50,430 --> 00:01:55,050 สุดท้ายเราสามารถเข้าถึงองค์ประกอบของแต่ละ อาร์เรย์โดยตรงจากจำนวนดัชนี 38 00:01:55,050 --> 00:01:59,770 เช่นเดียวกับที่เราสามารถเข้าถึงที่ทำการไปรษณีย์ของเรา กล่องโดยรู้จำนวนกล่องจดหมายของตน 39 00:01:59,770 --> 00:02:02,750 หวังว่าการเปรียบเทียบว่า จะช่วยให้คุณได้รับหัวของคุณ 40 00:02:02,750 --> 00:02:05,540 ความคิดของอาร์เรย์โดย analogizing อย่างอื่น 41 00:02:05,540 --> 00:02:08,400 ที่คุณอาจจะ คุ้นเคยกับ 42 00:02:08,400 --> 00:02:13,182 >> ใน C องค์ประกอบของอาร์เรย์ที่มี จัดทำดัชนีเริ่มจาก 0 ไม่ได้มาจาก 1 43 00:02:13,182 --> 00:02:14,390 และนี่คือสิ่งที่สำคัญจริงๆ 44 00:02:14,390 --> 00:02:18,530 และในความเป็นจริงนี้คือเหตุผลที่เราในซี 50, และเหตุผลที่นักวิทยาศาสตร์คอมพิวเตอร์บ่อย 45 00:02:18,530 --> 00:02:22,150 จะนับจาก 0 เป็น เพราะของอาร์เรย์ของ C 46 00:02:22,150 --> 00:02:24,660 การจัดทำดัชนีซึ่งมักจะเริ่มต้นที่ 0 47 00:02:24,660 --> 00:02:28,730 ดังนั้นถ้าอาร์เรย์ประกอบด้วยองค์ประกอบ n, องค์ประกอบแรกของอาร์เรย์ที่ 48 00:02:28,730 --> 00:02:32,960 ตั้งอยู่ที่ดัชนี 0 องค์ประกอบสุดท้ายของอาร์เรย์ 49 00:02:32,960 --> 00:02:36,610 ตั้งอยู่ที่ n ดัชนีลบ 1 50 00:02:36,610 --> 00:02:43,160 อีกครั้งถ้ามีองค์ประกอบ n ของเรา อาร์เรย์ดัชนีสุดท้ายคือ n ลบ 1 51 00:02:43,160 --> 00:02:46,820 >> ดังนั้นถ้าอาร์เรย์ของเรามี 50 องค์ประกอบที่ องค์ประกอบแรกตั้งอยู่ที่ดัชนี 0, 52 00:02:46,820 --> 00:02:51,060 และองค์ประกอบสุดท้าย ตั้งอยู่ที่ 49 ดัชนี 53 00:02:51,060 --> 00:02:53,940 แต่น่าเสียดายที่หรือโชคดี ขึ้นอยู่กับมุมมองของคุณ 54 00:02:53,940 --> 00:02:56,170 ซีผ่อนปรนมากที่นี่ 55 00:02:56,170 --> 00:02:59,480 มันจะไม่ทำให้คุณไม่สามารถ จะออกจากขอบเขตของอาร์เรย์ของคุณ 56 00:02:59,480 --> 00:03:03,080 คุณสามารถเข้าถึงลบ 3 องค์ประกอบของอาร์เรย์ของคุณ 57 00:03:03,080 --> 00:03:07,400 หรือองค์ประกอบที่ 59 ของอาเรย์ของคุณ ถ้าอาร์เรย์ของคุณมีเพียง 50 องค์ประกอบ 58 00:03:07,400 --> 00:03:11,060 มันจะไม่หยุดคุณจากโปรแกรม รวบรวม แต่ในเวลาทำงาน 59 00:03:11,060 --> 00:03:14,350 คุณอาจพบ หวั่นผิดส่วน 60 00:03:14,350 --> 00:03:17,460 ถ้าคุณเริ่มต้นในการเข้าถึงหน่วยความจำ ที่อยู่นอกขอบเขตของสิ่งที่ 61 00:03:17,460 --> 00:03:19,260 ที่คุณถามโปรแกรมของคุณเพื่อให้คุณ 62 00:03:19,260 --> 00:03:21,250 ดังนั้นต้องระวัง 63 00:03:21,250 --> 00:03:23,120 >> อะไรอาร์เรย์ ประกาศมีลักษณะอย่างไร 64 00:03:23,120 --> 00:03:26,940 ทำอย่างไรเรารหัสอาร์เรย์คงอยู่ เหมือนอย่างที่เรารหัสตัวแปรอื่น ๆ ? 65 00:03:26,940 --> 00:03:31,250 มีสามส่วนไปยังอาร์เรย์มี declaration-- ชนิดชื่อ 66 00:03:31,250 --> 00:03:31,880 และขนาด 67 00:03:31,880 --> 00:03:34,088 นี้เป็นอย่างมากคล้ายกับ ประกาศตัวแปรซึ่ง 68 00:03:34,088 --> 00:03:36,970 เป็นเพียงชนิดและชื่อ องค์ประกอบขนาดเป็น 69 00:03:36,970 --> 00:03:39,860 กรณีพิเศษสำหรับอาร์เรย์ เพราะเราจะได้รับพวงของพวกเขา 70 00:03:39,860 --> 00:03:41,830 ในเวลาเดียวกัน. 71 00:03:41,830 --> 00:03:45,560 >> ดังนั้นชนิดคือชนิดของตัวแปรคุณ ต้องการองค์ประกอบของอาร์เรย์แต่ละที่จะเป็น 72 00:03:45,560 --> 00:03:47,150 ไม่ต้องการให้อาร์เรย์ของจำนวนเต็มแล้ว? 73 00:03:47,150 --> 00:03:49,010 จากนั้นชนิดของข้อมูลของคุณควรจะ int 74 00:03:49,010 --> 00:03:51,760 คุณต้องการให้เป็น อาร์เรย์ของคู่ลอยหรือ? 75 00:03:51,760 --> 00:03:54,545 ชนิดข้อมูลที่ควรจะเป็นคู่หรือลอย 76 00:03:54,545 --> 00:03:56,420 ชื่อคือสิ่งที่คุณ ต้องการที่จะเรียกอาเรย์ของคุณ 77 00:03:56,420 --> 00:04:00,970 สิ่งที่คุณต้องการที่จะตั้งชื่อยักษ์นี้ ธนาคารของจำนวนเต็มหรือลอยหรือตัวอักษร 78 00:04:00,970 --> 00:04:03,250 หรือคู่หรือสิ่งที่มีคุณ? 79 00:04:03,250 --> 00:04:04,700 สิ่งที่คุณต้องการที่จะเรียกมันได้หรือไม่ 80 00:04:04,700 --> 00:04:06,110 สวยอธิบายตนเอง 81 00:04:06,110 --> 00:04:08,610 >> สุดท้ายขนาดที่จะไป ภายในของตารางวงเล็บ 82 00:04:08,610 --> 00:04:12,180 เป็นวิธีการที่หลาย ๆ องค์ประกอบที่คุณต้องการ เช่นอาร์เรย์ของคุณมี 83 00:04:12,180 --> 00:04:13,530 วิธีจำนวนเต็มจำนวนมากที่คุณต้องการ? 84 00:04:13,530 --> 00:04:15,570 วิธีลอยจำนวนมากที่คุณต้องการ? 85 00:04:15,570 --> 00:04:19,070 >> ดังนั้นตัวอย่างเช่น int นักเรียนเกรด 40 86 00:04:19,070 --> 00:04:26,020 นี้ประกาศอาร์เรย์เรียกว่านักศึกษา เกรดซึ่งประกอบด้วย 40 จำนวนเต็ม 87 00:04:26,020 --> 00:04:28,180 อธิบายตนเองสวยผมหวังว่า 88 00:04:28,180 --> 00:04:29,330 นี่คือตัวอย่างของผู้อื่น 89 00:04:29,330 --> 00:04:31,560 ราคาเมนูคู่ 8 90 00:04:31,560 --> 00:04:34,610 นี้จะสร้างอาร์เรย์เรียกว่า ราคาเมนูซึ่งประกอบด้วย 91 00:04:34,610 --> 00:04:38,300 ของห้องพักในหน่วยความจำสำหรับคู่แปด 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> ถ้าคุณคิดว่าทุกองค์ประกอบ ของอาร์เรย์ของชนิดข้อมูลชนิดหนึ่ง 94 00:04:45,750 --> 00:04:49,860 ดังนั้นสำหรับตัวอย่างเช่นองค์ประกอบหนึ่งของ อาร์เรย์ชนิด int เป็นเช่นเดียวกับคุณ 95 00:04:49,860 --> 00:04:52,770 จะคิดว่าคนอื่น ๆ ตัวแปรชนิด int 96 00:04:52,770 --> 00:04:56,440 การดำเนินงานทั้งหมดที่เราคุ้นเคย กล่าวถึงก่อนหน้านี้ในการดำเนินงาน 97 00:04:56,440 --> 00:04:58,270 วิดีโอจะทำให้ความรู้สึก 98 00:04:58,270 --> 00:05:01,620 ดังนั้นที่นี่เราสามารถประกาศอาร์เรย์ ของ Booleans เรียก Truthtable, 99 00:05:01,620 --> 00:05:05,590 ซึ่งประกอบด้วยห้องพัก 10 Booleans 100 00:05:05,590 --> 00:05:09,650 >> และจากนั้นก็เช่นเดียวกับเราก็สามารถกำหนด ค่าให้กับตัวแปรอื่น ๆ ของประเภท 101 00:05:09,650 --> 00:05:13,470 บูลีนที่เราจะพูดอะไรบางอย่าง เช่น Truthtable วงเล็บเหลี่ยม 102 00:05:13,470 --> 00:05:18,040 2 ซึ่งเป็นวิธีการที่เราระบุ ซึ่งองค์ประกอบของตารางความจริง? 103 00:05:18,040 --> 00:05:20,350 องค์ประกอบที่สามของ ตารางความจริงเพราะจำ 104 00:05:20,350 --> 00:05:21,800 เรากำลังนับจาก 0 105 00:05:21,800 --> 00:05:25,690 นั่นคือวิธีการที่เราแสดง องค์ประกอบที่สามของตารางความจริง 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 เท่ากับเท็จ เช่นเดียวกับที่เราจะได้ declare-- 107 00:05:28,680 --> 00:05:33,560 หรือเราสามารถกำหนดค่อนข้างใด ๆ ตัวแปรชนิดบูลีนเป็นเท็จ 108 00:05:33,560 --> 00:05:35,050 >> นอกจากนี้เรายังสามารถใช้งานได้ในสภาพ 109 00:05:35,050 --> 00:05:39,000 ถ้า (truthtable 7 == จริง) ซึ่งก็คือการพูดว่า 110 00:05:39,000 --> 00:05:42,370 ถ้าองค์ประกอบที่แปด ของ Truthtable เป็นความจริง 111 00:05:42,370 --> 00:05:46,760 บางทีเราต้องการพิมพ์ข้อความ ให้กับผู้ใช้ printf ("TRUE n!") ;. 112 00:05:46,760 --> 00:05:50,290 ที่ทำให้เราที่จะพูด Truthtable 10 เท่ากับความจริงใช่มั้ย? 113 00:05:50,290 --> 00:05:53,590 ดีฉันสามารถ แต่ก็สวย อันตรายเพราะจำ 114 00:05:53,590 --> 00:05:56,260 เรามีอาร์เรย์ของ 10 Booleans 115 00:05:56,260 --> 00:06:02,340 ดังนั้นดัชนีสูงสุดว่า คอมไพเลอร์ได้ให้เราคือ 9 116 00:06:02,340 --> 00:06:06,010 >> โปรแกรมนี้จะรวบรวม แต่ ถ้าอย่างอื่นในหน่วยความจำ 117 00:06:06,010 --> 00:06:09,110 อยู่ที่เราจะ คาดว่า Truthtable 10 ที่จะไป 118 00:06:09,110 --> 00:06:13,980 เราสามารถประสบความผิดของการแบ่งส่วน เรา อาจได้รับไปกับมัน แต่โดยทั่วไป 119 00:06:13,980 --> 00:06:14,710 อันตรายสวย 120 00:06:14,710 --> 00:06:19,759 ดังนั้นสิ่งที่ฉันทำนี่คือ C กฎหมาย แต่ไม่จำเป็นต้องย้ายที่ดีที่สุด 121 00:06:19,759 --> 00:06:22,300 ตอนนี้เมื่อคุณประกาศและ เริ่มต้นอาร์เรย์พร้อมกันที่ 122 00:06:22,300 --> 00:06:23,960 มีจริงสวย ไวยากรณ์พิเศษที่คุณ 123 00:06:23,960 --> 00:06:26,250 สามารถใช้ในการเติมอาร์เรย์ ที่มีค่าเริ่มต้นของ 124 00:06:26,250 --> 00:06:30,130 ก็จะได้รับยุ่งยากในการ ประกาศอาร์เรย์ขนาด 100, 125 00:06:30,130 --> 00:06:33,430 แล้วต้องบอกว่าองค์ประกอบ 0 เท่ากับนี้ องค์ประกอบที่ 1 เท่ากับนี้ 126 00:06:33,430 --> 00:06:34,850 องค์ประกอบที่ 2 เท่ากับว่า 127 00:06:34,850 --> 00:06:36,370 จุดคืออะไรใช่มั้ย? 128 00:06:36,370 --> 00:06:39,470 >> หากเป็นอาร์เรย์ขนาดเล็กคุณ สามารถทำอะไรเช่นนี้ 129 00:06:39,470 --> 00:06:44,360 บูล truthtable 3 เท่ากับเปิด วงเล็บปีกกาแล้วจุลภาค 130 00:06:44,360 --> 00:06:48,060 แยกรายชื่อขององค์ประกอบ ที่คุณต้องการที่จะใส่ในอาร์เรย์ 131 00:06:48,060 --> 00:06:50,520 อัฒภาควงเล็บปีกกาปิดแล้ว 132 00:06:50,520 --> 00:06:53,910 นี้จะสร้างอาร์เรย์ของ ขนาดที่เรียกว่าสาม Truthtable, 133 00:06:53,910 --> 00:06:56,090 ที่มีองค์ประกอบเท็จจริงและเป็นความจริง 134 00:06:56,090 --> 00:06:59,270 และในความเป็นจริง instantiation ไวยากรณ์ฉันมีที่นี่เป็น 135 00:06:59,270 --> 00:07:03,350 เหมือนกับการทำ ไวยากรณ์แต่ละองค์ประกอบดังต่อไปนี้ 136 00:07:03,350 --> 00:07:09,380 ทั้งสองวิธีการเข้ารหัสจะ ผลิตอาร์เรย์เดียวกันแน่นอน 137 00:07:09,380 --> 00:07:11,740 >> ในทำนองเดียวกันเราสามารถย้ำ มากกว่าทุกองค์ประกอบ 138 00:07:11,740 --> 00:07:15,400 ของอาร์เรย์โดยใช้ห่วงซึ่งใน ความเป็นจริงเป็นอย่างมากมากแนะนำ 139 00:07:15,400 --> 00:07:16,790 ที่บ้านออกกำลังกาย 140 00:07:16,790 --> 00:07:20,720 คุณจะทำอย่างไรในการสร้างอาร์เรย์ 100 เลขที่ 141 00:07:20,720 --> 00:07:23,477 องค์ประกอบของอาร์เรย์ทุกดัชนีของตนหรือไม่ 142 00:07:23,477 --> 00:07:26,560 ดังนั้นสำหรับตัวอย่างเช่นเรามีอาร์เรย์ของ 100 จำนวนเต็มและในองค์ประกอบแรก 143 00:07:26,560 --> 00:07:27,790 เราต้องการที่จะนำ 0 144 00:07:27,790 --> 00:07:29,810 ในองค์ประกอบที่สองที่เราต้องการที่จะนำ 1 145 00:07:29,810 --> 00:07:33,319 ในองค์ประกอบที่สามที่เราต้องการ ที่จะนำ 2; และอื่น ๆ และอื่น ๆ 146 00:07:33,319 --> 00:07:35,360 นั่นเป็นสิ่งที่ดีจริงๆ การออกกำลังกายที่บ้านจะทำอย่างนั้น 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> ที่นี่มันไม่ได้ดู ชอบมากเกินไปมีการเปลี่ยนแปลง 149 00:07:40,220 --> 00:07:44,170 แต่สังเกตเห็นว่าในระหว่าง วงเล็บเวลานี้ 150 00:07:44,170 --> 00:07:45,830 ผมเคยมองข้ามจริงจำนวน 151 00:07:45,830 --> 00:07:48,000 หากคุณกำลังใช้นี้มาก instantiation พิเศษ 152 00:07:48,000 --> 00:07:50,380 ไวยากรณ์ที่จะสร้าง อาร์เรย์คุณจริงทำไม่ได้ 153 00:07:50,380 --> 00:07:53,491 ต้องระบุขนาด ของอาร์เรย์ก่อน 154 00:07:53,491 --> 00:07:55,740 คอมไพเลอร์จะฉลาดพอ ที่จะรู้ว่าคุณจริง 155 00:07:55,740 --> 00:07:58,980 ต้องการอาร์เรย์ขนาด 3, เพราะคุณใส่สามองค์ประกอบ 156 00:07:58,980 --> 00:08:00,640 ไปทางขวาของเครื่องหมายเท่ากับ 157 00:08:00,640 --> 00:08:04,140 ถ้าคุณได้ใส่สี่มันจะมี คุณได้รับตารางความจริงขนาดสี่; 158 00:08:04,140 --> 00:08:06,270 และอื่น ๆ และอื่น ๆ 159 00:08:06,270 --> 00:08:09,380 >> อะเรย์ไม่ได้ จำกัด เพียงครั้งเดียว มิติซึ่งเป็นเย็นสวย 160 00:08:09,380 --> 00:08:12,000 จริงๆคุณสามารถมีเป็นจำนวนมาก specifiers ด้านข้างตามที่คุณต้องการ 161 00:08:12,000 --> 00:08:16,470 ดังนั้นสำหรับตัวอย่างเช่นถ้าคุณต้องการที่จะสร้าง คณะกรรมการเกมเรือรบซึ่ง 162 00:08:16,470 --> 00:08:20,910 ถ้าคุณเคยเล่นเป็นเกมที่เป็น เล่นกับหมุดที่ 10 10 ตาราง 163 00:08:20,910 --> 00:08:22,450 คุณสามารถสร้างอาร์เรย์เช่นนี้ 164 00:08:22,450 --> 00:08:26,030 คุณอาจจะบอก Bool วงเล็บเหลี่ยมเรือรบ 10 165 00:08:26,030 --> 00:08:29,590 ปิดตารางตารางวงเล็บ วงเล็บ 10 ปิดวงเล็บเหลี่ยม 166 00:08:29,590 --> 00:08:32,710 >> แล้วคุณสามารถเลือกที่จะ แปลความหมายในใจของคุณเป็น 10 167 00:08:32,710 --> 00:08:35,576 10 ตารางของเซลล์ 168 00:08:35,576 --> 00:08:37,409 ตอนนี้ในความเป็นจริงในหน่วยความจำ จริงๆมันไม่เพียง 169 00:08:37,409 --> 00:08:42,440 ยังคงเป็น 100 องค์ประกอบ อาร์เรย์มิติเดียว 170 00:08:42,440 --> 00:08:46,070 นี้และในความเป็นจริงจะไปสำหรับถ้าคุณ มีสามมิติหรือสี่หรือห้า 171 00:08:46,070 --> 00:08:49,420 จริงๆมันก็ไม่คูณ ทั้งหมดของ indices-- 172 00:08:49,420 --> 00:08:51,130 หรือทั้งหมดของขนาด specifiers-- กัน 173 00:08:51,130 --> 00:08:53,480 และคุณก็จะได้รับหนึ่งมิติ อาร์เรย์ของขนาดที่ 174 00:08:53,480 --> 00:08:57,090 >> แต่ในแง่ขององค์กรและการ การมองเห็นและการรับรู้ของมนุษย์ 175 00:08:57,090 --> 00:08:59,240 มันสามารถเป็นจำนวนมากได้ง่ายขึ้น ในการทำงานกับตาราง 176 00:08:59,240 --> 00:09:02,980 ถ้าคุณกำลังทำงานในเกม เช่น Tic-TAC นิ้วเท้าหรือเรือรบ 177 00:09:02,980 --> 00:09:05,179 หรือสิ่งที่ต้องการ 178 00:09:05,179 --> 00:09:06,970 มันเป็นสิ่งที่เป็นนามธรรมที่ดี แทนที่จะต้อง 179 00:09:06,970 --> 00:09:09,340 คิดเกี่ยวกับ Tic-TAC นิ้วเท้า คณะกรรมการที่เป็นสายของเก้า 180 00:09:09,340 --> 00:09:13,810 สี่เหลี่ยมหรือคณะกรรมการเรือรบ สาย 100 สี่เหลี่ยม 181 00:09:13,810 --> 00:09:16,010 10 10 ตารางหรือสาม โดยสามตารางน่าจะเป็น 182 00:09:16,010 --> 00:09:17,225 มากขึ้นและง่ายต่อการรับรู้ 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> ตอนนี้สิ่งที่จริงๆ ที่สำคัญเกี่ยวกับอาร์เรย์ 185 00:09:22,280 --> 00:09:25,950 เราสามารถรักษาแต่ละคน องค์ประกอบของอาร์เรย์เป็นตัวแปร 186 00:09:25,950 --> 00:09:27,700 เราเห็นว่าก่อนหน้านี้ เมื่อเราได้กำหนด 187 00:09:27,700 --> 00:09:32,240 ค่าทรูบาง Booleans หรือการทดสอบพวกเขาในเงื่อนไข 188 00:09:32,240 --> 00:09:35,960 แต่เราไม่สามารถรักษาทั้งหมด อาร์เรย์ตัวเองเป็นตัวแปร 189 00:09:35,960 --> 00:09:41,760 เราไม่สามารถยกตัวอย่างเช่นกำหนดหนึ่งอาร์เรย์ ไปยังอาร์เรย์ใช้อื่นที่ได้รับมอบหมาย 190 00:09:41,760 --> 00:09:42,930 ผู้ประกอบการ 191 00:09:42,930 --> 00:09:44,640 มันไม่ได้ตามกฎหมายซี 192 00:09:44,640 --> 00:09:47,920 >> ถ้าเราต้องการสำหรับ example-- สิ่งที่ เราจะทำในตัวอย่างที่ 193 00:09:47,920 --> 00:09:50,200 จะมีการคัดลอกอาร์เรย์หนึ่งไปยังอีก 194 00:09:50,200 --> 00:09:53,810 ถ้าเราต้องการที่จะทำอย่างนั้นเราจริง จำเป็นต้องใช้ในการคัดลอกห่วงมากกว่า 195 00:09:53,810 --> 00:09:56,550 แต่ละองค์ประกอบของแต่ละบุคคลในช่วงเวลาหนึ่ง 196 00:09:56,550 --> 00:09:58,700 ฉันรู้ว่ามันเสียเวลาน้อย 197 00:09:58,700 --> 00:10:04,022 >> ดังนั้นสำหรับตัวอย่างเช่นถ้าเรามีคู่เหล่านี้ บรรทัดของรหัสที่จะทำงานนี้ 198 00:10:04,022 --> 00:10:05,230 ดีไม่มีก็จะไม่ได้ใช่มั้ย? 199 00:10:05,230 --> 00:10:07,860 เพราะเรากำลังพยายาม การกำหนดอาหารที่บาร์ 200 00:10:07,860 --> 00:10:09,860 ที่ไม่ได้ไปทำงาน เพราะมันเป็นอาร์เรย์ 201 00:10:09,860 --> 00:10:13,130 และเราก็อธิบาย ที่ที่ไม่ถูกต้องตามกฎหมายซี 202 00:10:13,130 --> 00:10:15,580 >> แต่ถ้าเราต้องการ คัดลอกเนื้อหาของอาหาร 203 00:10:15,580 --> 00:10:18,070 ในแถบซึ่งเป็นสิ่งที่ เรากำลังพยายามที่จะทำที่นี่ 204 00:10:18,070 --> 00:10:19,970 เราจะต้องไวยากรณ์เช่นนี้ 205 00:10:19,970 --> 00:10:24,170 เรามีสำหรับวงที่จะไป จากเจมีค่าเท่ากับ 0 ถึง 5, 206 00:10:24,170 --> 00:10:28,390 และเราเพิ่มในเจย้ำของทุก ห่วงและกำหนดองค์ประกอบเช่นว่า 207 00:10:28,390 --> 00:10:33,360 ซึ่งจะส่งผลในแถบยัง เป็นหนึ่งสองสามสี่ห้า 208 00:10:33,360 --> 00:10:36,730 แต่เราต้องทำอย่างนี้ ช้าองค์ประกอบโดยองค์ประกอบทาง 209 00:10:36,730 --> 00:10:40,009 แทนโดยเพียงแค่ คัดลอกอาร์เรย์ทั้งหมด 210 00:10:40,009 --> 00:10:42,050 ในการเขียนโปรแกรมอื่น ๆ ภาษาคนที่ทันสมัย​​มากขึ้น 211 00:10:42,050 --> 00:10:45,610 คุณสามารถในความเป็นจริงทำเพียงแค่ ที่เรียบง่ายที่มีค่าเท่ากับไวยากรณ์ 212 00:10:45,610 --> 00:10:49,620 แต่ C โชคไม่ดีที่เรา ไม่ได้รับอนุญาตให้ทำเช่นนั้น 213 00:10:49,620 --> 00:10:52,026 >> ขณะนี้มีคนอื่น ๆ สิ่งที่ผมอยากจะพูดถึง 214 00:10:52,026 --> 00:10:54,650 เกี่ยวกับอาร์เรย์ที่สามารถเล็ก ๆ น้อย ๆ บิตหากินครั้งแรกที่คุณ 215 00:10:54,650 --> 00:10:55,990 ทำงานกับพวกเขา 216 00:10:55,990 --> 00:10:59,860 เรากล่าวถึงในวิดีโอ เกี่ยวกับขอบเขตตัวแปร 217 00:10:59,860 --> 00:11:04,940 ตัวแปรที่มากที่สุดในซีเมื่อคุณเรียก พวกเขาในฟังก์ชั่นจะถูกส่งผ่านโดยค่า 218 00:11:04,940 --> 00:11:08,620 คุณจำสิ่งที่มันหมาย บางสิ่งบางอย่างที่จะผ่านโดยค่า? 219 00:11:08,620 --> 00:11:12,570 มันหมายความว่าเรากำลังทำสำเนาได้ ตัวแปรที่ถูกส่งผ่านไปใน 220 00:11:12,570 --> 00:11:16,290 ฟังก์ชั่น callee ฟังก์ชั่น ที่ได้รับตัวแปร 221 00:11:16,290 --> 00:11:17,730 ไม่ได้รับตัวแปรตัวเอง 222 00:11:17,730 --> 00:11:20,850 จะได้รับของตัวเองในท้องถิ่น สำเนาของมันในการทำงานกับ 223 00:11:20,850 --> 00:11:24,070 >> อะเรย์ของหลักสูตรทำ ไม่ปฏิบัติตามกฎนี้ 224 00:11:24,070 --> 00:11:27,600 แต่สิ่งที่เราเรียกสิ่งนี้ จะผ่านโดยการอ้างอิง 225 00:11:27,600 --> 00:11:31,360 callee จริง ไม่ได้รับอาร์เรย์ 226 00:11:31,360 --> 00:11:34,207 มันไม่ได้รับของ สำเนาตัวเองของมัน 227 00:11:34,207 --> 00:11:36,040 และถ้าคุณคิดเกี่ยวกับ มันทำให้ความรู้สึกนี้ 228 00:11:36,040 --> 00:11:39,750 ถ้าอาร์เรย์มีขนาดใหญ่จริงๆก็ ต้องใช้เวลามากและความพยายาม 229 00:11:39,750 --> 00:11:44,470 ทำสำเนาของอาร์เรย์ของ 100 หรือ 1,000 หรือ 10,000 องค์ประกอบ 230 00:11:44,470 --> 00:11:48,290 ว่ามันไม่คุ้มค่าสำหรับ ทำงานที่จะได้รับสำเนาของมัน 231 00:11:48,290 --> 00:11:51,037 ทำผลงานบางอย่างกับมันแล้ว เพียงทำได้ด้วยการคัดลอก; 232 00:11:51,037 --> 00:11:53,120 มันไม่จำเป็นต้องมี มันแขวนอยู่รอบ ๆ อีกต่อไป 233 00:11:53,120 --> 00:11:54,710 >> เพราะมีบางอาร์เรย์ ขนาดใหญ่และยุ่งยาก 234 00:11:54,710 --> 00:11:56,001 เราเพียงแค่ส่งพวกเขาโดยการอ้างอิง 235 00:11:56,001 --> 00:12:01,210 เราก็ไว้วางใจฟังก์ชั่นที่ จะไม่ผิดอะไร 236 00:12:01,210 --> 00:12:03,010 ดังนั้นจึงไม่ได้รับจริงอาร์เรย์ 237 00:12:03,010 --> 00:12:05,290 จะไม่ได้รับสำเนาของตัวเองของมัน 238 00:12:05,290 --> 00:12:07,170 >> ดังนั้นสิ่งนี้หมายความว่าอย่างไร, แล้วเมื่อ callee 239 00:12:07,170 --> 00:12:08,970 ปรุงแต่งองค์ประกอบของอาร์เรย์? 240 00:12:08,970 --> 00:12:10,780 เกิดอะไรขึ้น? 241 00:12:10,780 --> 00:12:13,210 สำหรับตอนนี้เราจะเงา มากกว่าว่าทำไมตรงนี้ 242 00:12:13,210 --> 00:12:15,320 ที่เกิดขึ้นว่าทำไมอาร์เรย์ จะถูกส่งผ่านโดยการอ้างอิง 243 00:12:15,320 --> 00:12:17,810 และทุกอย่างอื่นจะผ่านค่า 244 00:12:17,810 --> 00:12:20,470 แต่ผมสัญญาว่าคุณเราจะ กลับมาและให้คำตอบ 245 00:12:20,470 --> 00:12:23,750 นี้ในวิดีโอต่อมา 246 00:12:23,750 --> 00:12:28,110 >> นี่คือหนึ่งในการออกกำลังกายมากขึ้นสำหรับคุณ ก่อนที่เราจะตัดขึ้นสิ่งที่อยู่ในอาร์เรย์ 247 00:12:28,110 --> 00:12:31,400 พวงของรหัสที่นี่ที่ ไม่ได้โดยเฉพาะรูปแบบที่ดี 248 00:12:31,400 --> 00:12:33,400 เพียงแค่ฉันจะทำให้คำเตือนว่า 249 00:12:33,400 --> 00:12:36,660 มีในความคิดเห็นไม่ได้ที่นี่ ซึ่งเป็นรูปแบบที่ดีงาม 250 00:12:36,660 --> 00:12:39,750 แต่มันเป็นเพียงเพราะฉันอยากจะเป็น สามารถให้พอดีกับทุกอย่างบนหน้าจอ 251 00:12:39,750 --> 00:12:44,360 >> ที่ด้านบนคุณจะเห็นว่าฉันมี สองฟังก์ชั่นสำหรับการประกาศอาร์เรย์ชุด 252 00:12:44,360 --> 00:12:45,820 และชุด int 253 00:12:45,820 --> 00:12:49,680 อาร์เรย์ชุดเห็นได้ชัดว่าจะใช้เวลาอาร์เรย์ สี่จำนวนเต็มเป็นปัจจัยการผลิต 254 00:12:49,680 --> 00:12:52,767 และชุด int เห็นได้ชัดใช้เวลา จำนวนเต็มเดียวเป็นปัจจัยการผลิต 255 00:12:52,767 --> 00:12:54,350 แต่ทั้งสองคนไม่ได้มีเอาท์พุท 256 00:12:54,350 --> 00:12:57,689 ผลผลิตผลตอบแทน พิมพ์ของแต่ละคนจะถือเป็นโมฆะ 257 00:12:57,689 --> 00:12:59,480 ในหลักเรามี คู่ของสายรหัส 258 00:12:59,480 --> 00:13:02,730 เราประกาศตัวแปรจำนวนเต็ม เรียกว่าและกำหนดค่า 10 259 00:13:02,730 --> 00:13:07,080 เราขอประกาศอาร์เรย์ของสี่จำนวนเต็ม เรียกว่า B และกำหนดองค์ประกอบ 0, 1, 260 00:13:07,080 --> 00:13:08,730 2 และ 3 ตามลำดับ 261 00:13:08,730 --> 00:13:12,190 จากนั้นเราจะมีการเรียกร้องให้ตั้ง int และการเรียกร้องให้ตั้งแถว 262 00:13:12,190 --> 00:13:15,910 คำนิยามของอาร์เรย์ชุดและชุด int จะลงด้านล่างที่ด้านล่าง 263 00:13:15,910 --> 00:13:17,640 >> ดังนั้นอีกครั้งฉันขอให้คุณคำถาม 264 00:13:17,640 --> 00:13:20,770 สิ่งที่ได้รับพิมพ์ออกมา ที่นี่ในตอนท้ายของหลักหรือไม่ 265 00:13:20,770 --> 00:13:23,020 มีการพิมพ์เป็นเทือกเขา ฉัน พิมพ์ออกจำนวนเต็ม 266 00:13:23,020 --> 00:13:28,010 ผมพิมพ์ออกเนื้อหาของ A และ เนื้อหาของวงเล็บเหลี่ยม B 0 267 00:13:28,010 --> 00:13:29,880 หยุดวิดีโอที่นี่และใช้เวลาไม่กี่นาที 268 00:13:29,880 --> 00:13:35,482 คุณสามารถคิดออกว่านี้ ฟังก์ชั่นจะพิมพ์ที่สิ้นสุดหรือไม่ 269 00:13:35,482 --> 00:13:38,190 หวังว่าถ้าคุณจำ ความแตกต่างระหว่างการส่งผ่านโดยค่า 270 00:13:38,190 --> 00:13:41,680 และผ่านโดยการอ้างอิงนี้ ปัญหาไม่ได้อยู่ที่ยุ่งยากเกินไปสำหรับคุณ 271 00:13:41,680 --> 00:13:44,130 และคำตอบที่คุณจะ ได้พบคือ 272 00:13:44,130 --> 00:13:47,660 หากคุณไม่แน่ใจว่าจริงๆเป็นไปได้ ทำไมเป็นกรณีที่ใช้เวลาสอง 273 00:13:47,660 --> 00:13:50,620 กลับไปทบทวนสิ่งที่ฉันเป็นเพียง พูดคุยเกี่ยวกับการผ่านอาร์เรย์ 274 00:13:50,620 --> 00:13:53,450 โดยการอ้างอิงเมื่อเทียบกับการส่งผ่าน ตัวแปรอื่น ๆ โดยค่า 275 00:13:53,450 --> 00:13:56,680 และหวังว่ามันจะทำให้ ความรู้สึกนิด ๆ หน่อย ๆ 276 00:13:56,680 --> 00:13:59,760 >> ฉันลอยด์ดั๊กและนี่คือ CS50 277 00:13:59,760 --> 00:14:01,467