1 00:00:00,000 --> 00:00:03,388 >> [Bermain muzik] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 DOUG LLOYD: Baiklah. 4 00:00:06,020 --> 00:00:07,680 Bekerja dengan single pembolehubah adalah sangat menyenangkan. 5 00:00:07,680 --> 00:00:09,500 Tetapi bagaimana jika kita mahu bekerja dengan banyak pembolehubah, 6 00:00:09,500 --> 00:00:12,760 tetapi kita tidak mahu mempunyai sekumpulan nama yang berbeza terbang di sekitar kod kami? 7 00:00:12,760 --> 00:00:15,980 Dalam kes ini, tatasusunan adalah akan datang benar-benar berguna. 8 00:00:15,980 --> 00:00:19,510 Tatasusunan adalah data benar-benar asas struktur bagi mana-mana bahasa pengaturcaraan 9 00:00:19,510 --> 00:00:20,260 yang akan anda gunakan. 10 00:00:20,260 --> 00:00:24,450 Dan mereka benar-benar, benar-benar berguna, terutamanya, seperti yang kita akan lihat, dalam CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Kami menggunakan tatasusunan untuk memegang nilai-nilai jenis data yang sama 12 00:00:27,870 --> 00:00:29,830 di lokasi ingatan yang berhampiran. 13 00:00:29,830 --> 00:00:32,430 Iaitu, ia adalah satu cara yang kita boleh kumpulan 14 00:00:32,430 --> 00:00:35,430 sekumpulan bilangan bulat bersama-sama dalam ingatan atau sekumpulan watak-watak 15 00:00:35,430 --> 00:00:38,270 atau terapung dalam memori benar-benar rapat dan kerja 16 00:00:38,270 --> 00:00:41,930 dengan mereka tanpa perlu memberikan setiap satu nama yang tersendiri, yang boleh 17 00:00:41,930 --> 00:00:44,500 mendapatkan rumit selepas sebentar. 18 00:00:44,500 --> 00:00:48,130 >> Kini, salah satu cara untuk analogize tatasusunan adalah untuk berfikir tentang pos tempatan anda 19 00:00:48,130 --> 00:00:49,000 pejabat untuk kali kedua. 20 00:00:49,000 --> 00:00:51,820 Jadi melangkah jauh dari program dan hanya menutup mata anda 21 00:00:51,820 --> 00:00:54,120 dan menggambarkan dalam fikiran anda pejabat pos tempatan anda. 22 00:00:54,120 --> 00:00:57,160 Biasanya, dalam kebanyakan jawatan pejabat, ada bank yang besar 23 00:00:57,160 --> 00:01:00,490 sebuah peti pejabat pos di dinding. 24 00:01:00,490 --> 00:01:03,510 >> Pelbagai adalah satu blok gergasi memori berdampingan, 25 00:01:03,510 --> 00:01:06,120 cara yang sama bahawa mel bank di pejabat pos anda 26 00:01:06,120 --> 00:01:11,230 ruang yang besar di dinding pejabat pos. 27 00:01:11,230 --> 00:01:15,750 Tatasusunan telah dibahagikan kepada kecil, sepercaman blok bersaiz ruang, 28 00:01:15,750 --> 00:01:19,930 setiap yang dipanggil elemen, dalam dengan cara yang sama bahawa dinding jawatan 29 00:01:19,930 --> 00:01:23,840 pejabat telah dibahagikan kepada kecil, sepercaman blok bersaiz ruang, 30 00:01:23,840 --> 00:01:27,560 yang kita panggil kotak PO. 31 00:01:27,560 --> 00:01:31,650 Setiap elemen array boleh menyimpan sejumlah data, 32 00:01:31,650 --> 00:01:37,540 seperti setiap kotak pejabat pos mampu untuk memegang sejumlah mel. 33 00:01:37,540 --> 00:01:41,540 >> Apa yang boleh disimpan di dalam setiap elemen array adalah pembolehubah data yang sama 34 00:01:41,540 --> 00:01:45,300 jenis, seperti int atau char, hanya seperti dalam peti surat anda, 35 00:01:45,300 --> 00:01:47,300 anda hanya boleh memuatkan perkara dari jenis yang sama, 36 00:01:47,300 --> 00:01:50,430 seperti surat atau pakej kecil. 37 00:01:50,430 --> 00:01:55,050 Akhir sekali, kita boleh mengakses setiap elemen array secara langsung dengan jumlah indeks, 38 00:01:55,050 --> 00:01:59,770 sama seperti kita boleh mengakses pejabat pos kami kotak dengan mengetahui nombor peti mel itu. 39 00:01:59,770 --> 00:02:02,750 Mudah-mudahan, analogi yang membantu anda mendapatkan kepala anda 40 00:02:02,750 --> 00:02:05,540 sekitar idea tatasusunan oleh analogizing kepada sesuatu yang lain 41 00:02:05,540 --> 00:02:08,400 bahawa anda mungkin sudah biasa dengan. 42 00:02:08,400 --> 00:02:13,182 >> Dalam C, unsur-unsur tatasusunan adalah diindeks bermula dari 0, bukan dari 1. 43 00:02:13,182 --> 00:02:14,390 Dan ini adalah benar-benar penting. 44 00:02:14,390 --> 00:02:18,530 Dan sebenarnya, ini adalah mengapa kita, dalam CS 50, dan mengapa saintis komputer kerap 45 00:02:18,530 --> 00:02:22,150 akan dikira dari 0, adalah kerana array C 46 00:02:22,150 --> 00:02:24,660 pengindeksan, yang sentiasa bermula pada 0. 47 00:02:24,660 --> 00:02:28,730 Jadi, jika array mengandungi n elemen, elemen pertama array itu 48 00:02:28,730 --> 00:02:32,960 terletak pada indeks 0, dan elemen terakhir array 49 00:02:32,960 --> 00:02:36,610 terletak pada indeks tolak n 1. 50 00:02:36,610 --> 00:02:43,160 Sekali lagi, jika ada n unsur dalam kita pelbagai, indeks yang terakhir adalah n tolak 1. 51 00:02:43,160 --> 00:02:46,820 >> Jadi, jika pelbagai kami mempunyai 50 unsur-unsur, Elemen pertama terletak pada indeks 0, 52 00:02:46,820 --> 00:02:51,060 dan elemen terakhir terletak pada indeks 49. 53 00:02:51,060 --> 00:02:53,940 Malangnya, atau nasib baik, bergantung kepada perspektif anda, 54 00:02:53,940 --> 00:02:56,170 C adalah sangat ringan di sini. 55 00:02:56,170 --> 00:02:59,480 Ia tidak akan menghalang anda daripada akan keluar dari batas-batas lokasi anda. 56 00:02:59,480 --> 00:03:03,080 Anda boleh mengakses tolak 3 elemen pelbagai anda 57 00:03:03,080 --> 00:03:07,400 atau unsur ke-59 lokasi anda, jika lokasi anda hanya mempunyai 50 elemen. 58 00:03:07,400 --> 00:03:11,060 Ia tidak akan menghentikan program anda dari menyusun, tetapi pada masa jangka, 59 00:03:11,060 --> 00:03:14,350 anda mungkin menghadapi ditakuti segmentasi kesalahan 60 00:03:14,350 --> 00:03:17,460 jika anda mula mengakses memori yang berada di luar batas-batas apa 61 00:03:17,460 --> 00:03:19,260 anda bertanya kepada program anda untuk memberikan anda. 62 00:03:19,260 --> 00:03:21,250 Jadi berhati-hati. 63 00:03:21,250 --> 00:03:23,120 >> Apakah array pengisytiharan kelihatan seperti? 64 00:03:23,120 --> 00:03:26,940 Bagaimana kita memberi kod pelbagai wujud seperti kita memberi kod apa-apa ubah yang lain? 65 00:03:26,940 --> 00:03:31,250 Terdapat tiga bahagian untuk array declaration-- jenis, nama, 66 00:03:31,250 --> 00:03:31,880 dan saiz. 67 00:03:31,880 --> 00:03:34,088 Ini adalah hampir sama dengan pengisytiharan pembolehubah, yang 68 00:03:34,088 --> 00:03:36,970 hanya jenis dan nama, elemen saiz yang 69 00:03:36,970 --> 00:03:39,860 kes khas untuk pelbagai, kerana kita mendapat sekumpulan daripada mereka 70 00:03:39,860 --> 00:03:41,830 pada masa yang sama. 71 00:03:41,830 --> 00:03:45,560 >> Jadi jenis adalah apa jenis pembolehubah anda mahu setiap elemen array untuk menjadi. 72 00:03:45,560 --> 00:03:47,150 Jangan mahu ia pelbagai integer? 73 00:03:47,150 --> 00:03:49,010 Kemudian, jenis data yang patut menjadi int. 74 00:03:49,010 --> 00:03:51,760 Adakah anda mahu ia menjadi satu pelbagai beregu atau terapung? 75 00:03:51,760 --> 00:03:54,545 Jenis data perlu dua atau terapung. 76 00:03:54,545 --> 00:03:56,420 Nama ini adalah apa yang anda mahu panggil lokasi anda. 77 00:03:56,420 --> 00:04:00,970 Apa yang anda mahu menamakan gergasi ini bank integer atau pelampung atau aksara 78 00:04:00,970 --> 00:04:03,250 atau beregu, atau apa sahaja yang anda? 79 00:04:03,250 --> 00:04:04,700 Apa yang anda mahu panggil ia? 80 00:04:04,700 --> 00:04:06,110 Cukup sendiri penjelasan. 81 00:04:06,110 --> 00:04:08,610 >> Akhir sekali, saiz, yang pergi di dalam tanda kurung siku, 82 00:04:08,610 --> 00:04:12,180 adalah bagaimana banyak unsur yang anda lakukan seperti pelbagai anda untuk mengawal. 83 00:04:12,180 --> 00:04:13,530 Berapa banyak bilangan bulat yang anda mahu? 84 00:04:13,530 --> 00:04:15,570 Berapa banyak kereta berhias yang anda mahu? 85 00:04:15,570 --> 00:04:19,070 >> Jadi, sebagai contoh, int gred pelajar 40. 86 00:04:19,070 --> 00:04:26,020 Ini menceritakan pelbagai dipanggil Pelajar gred, yang terdiri daripada 40 integer. 87 00:04:26,020 --> 00:04:28,180 Cukup sendiri penjelasan, saya berharap. 88 00:04:28,180 --> 00:04:29,330 Berikut adalah contoh yang lain. 89 00:04:29,330 --> 00:04:31,560 Harga menu Double 8. 90 00:04:31,560 --> 00:04:34,610 Ini mewujudkan pelbagai dipanggil Harga menu, yang terdiri 91 00:04:34,610 --> 00:04:38,300 ruang dalam ingatan selama lapan beregu. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Jika anda berfikir bagi setiap elemen daripada pelbagai jenis data-jenis, 94 00:04:45,750 --> 00:04:49,860 jadi sebagai contoh, elemen tunggal pelbagai jenis int, cara yang sama anda 95 00:04:49,860 --> 00:04:52,770 akan berfikir apa-apa lain berubah-ubah dari jenis int, 96 00:04:52,770 --> 00:04:56,440 semua operasi biasa yang kita dibincangkan sebelum ini dalam Operasi 97 00:04:56,440 --> 00:04:58,270 video akan masuk akal. 98 00:04:58,270 --> 00:05:01,620 Jadi di sini, kita boleh mengisytiharkan array daripada Booleans dipanggil Truthtable, 99 00:05:01,620 --> 00:05:05,590 yang terdiri daripada ruang untuk 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> Dan kemudian, sama seperti kita hanya boleh memberikan nilai kepada apa-apa ubah lain jenis 101 00:05:09,650 --> 00:05:13,470 Boolean, kita boleh mengatakan sesuatu seperti Truthtable kurungan persegi 102 00:05:13,470 --> 00:05:18,040 2, iaitu bagaimana kita menunjukkan, yang unsur jadual kebenaran? 103 00:05:18,040 --> 00:05:20,350 Elemen ketiga jadual kebenaran, kerana ingat, 104 00:05:20,350 --> 00:05:21,800 kita mengira dari 0. 105 00:05:21,800 --> 00:05:25,690 Jadi itulah bagaimana kita menunjukkan Elemen ketiga jadual kebenaran. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 sama palsu, seperti yang kita boleh declare-- 107 00:05:28,680 --> 00:05:33,560 atau kita boleh menyerahhakkan, sebaliknya, apa-apa Boolean jenis pembolehubah adalah palsu. 108 00:05:33,560 --> 00:05:35,050 >> Kita juga boleh menggunakan ia dalam keadaan. 109 00:05:35,050 --> 00:05:39,000 jika (truthtable 7 == benar), yang mengatakan, 110 00:05:39,000 --> 00:05:42,370 jika unsur kelapan daripada Truthtable adalah benar, 111 00:05:42,370 --> 00:05:46,760 mungkin kita ingin mencetak mesej kepada pengguna, printf ("TRUE! n") ;. 112 00:05:46,760 --> 00:05:50,290 Yang menyebabkan kita untuk mengatakan Truthtable 10 sama dengan benar, bukan? 113 00:05:50,290 --> 00:05:53,590 Well, saya boleh, tetapi ia cukup berbahaya, kerana ingat, 114 00:05:53,590 --> 00:05:56,260 kita mempunyai pelbagai 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Jadi indeks tertinggi bahawa pengkompil telah memberikan kita adalah 9. 116 00:06:02,340 --> 00:06:06,010 >> Program ini akan menyusun, tetapi jika sesuatu yang lain dalam ingatan 117 00:06:06,010 --> 00:06:09,110 wujud di mana kita akan mengharapkan Truthtable 10 untuk pergi, 118 00:06:09,110 --> 00:06:13,980 kita boleh mengalami kesalahan segmentasi. Kami mungkin pergi dengannya, tetapi secara umum, 119 00:06:13,980 --> 00:06:14,710 cukup berbahaya. 120 00:06:14,710 --> 00:06:19,759 Jadi apa yang saya lakukan di sini adalah C undang-undang, tetapi tidak semestinya langkah terbaik. 121 00:06:19,759 --> 00:06:22,300 Kini, apabila anda mengaku dan memulakan array pada masa yang sama, 122 00:06:22,300 --> 00:06:23,960 ada sebenarnya yang cukup sintaks khas yang anda 123 00:06:23,960 --> 00:06:26,250 boleh gunakan untuk mengisi array dengan nilai-nilai permulaan. 124 00:06:26,250 --> 00:06:30,130 Ia boleh mendapatkan rumit untuk mengisytiharkan pelbagai saiz 100, 125 00:06:30,130 --> 00:06:33,430 dan kemudian perlu untuk mengatakan, elemen 0 sama ini; elemen 1 sama dengan ini; 126 00:06:33,430 --> 00:06:34,850 elemen 2 sama dengan itu. 127 00:06:34,850 --> 00:06:36,370 Apa gunanya, bukan? 128 00:06:36,370 --> 00:06:39,470 >> Jika ia merupakan satu lokasi yang kecil, anda boleh melakukan sesuatu seperti ini. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 sama terbuka kerinting dan kemudian koma 130 00:06:44,360 --> 00:06:48,060 mengasingkan senarai unsur-unsur yang anda mahu dimasukkan ke dalam array. 131 00:06:48,060 --> 00:06:50,520 Kemudian tutup kerinting pendakap koma bertitik. 132 00:06:50,520 --> 00:06:53,910 Ini mewujudkan pelbagai saiz tiga dipanggil Truthtable, 133 00:06:53,910 --> 00:06:56,090 dengan unsur-unsur palsu, benar, dan benar. 134 00:06:56,090 --> 00:06:59,270 Dan sebenarnya, merta yang sintaks Saya ada di sini adalah 135 00:06:59,270 --> 00:07:03,350 sama seperti melakukan sintaks elemen individu di bawah. 136 00:07:03,350 --> 00:07:09,380 Kedua-dua cara pengekodan akan menghasilkan pelbagai yang sama. 137 00:07:09,380 --> 00:07:11,740 >> Begitu juga, kita boleh melelar atas semua unsur-unsur 138 00:07:11,740 --> 00:07:15,400 daripada pelbagai menggunakan gelung, yang, Malah, adalah sangat disyorkan 139 00:07:15,400 --> 00:07:16,790 di rumah senaman. 140 00:07:16,790 --> 00:07:20,720 Bagaimana anda membuat array daripada 100 bilangan bulat, di mana 141 00:07:20,720 --> 00:07:23,477 setiap elemen array adalah indeks? 142 00:07:23,477 --> 00:07:26,560 Jadi, sebagai contoh, kita mempunyai pelbagai 100 bilangan bulat, dan dalam elemen pertama, 143 00:07:26,560 --> 00:07:27,790 kita mahu meletakkan 0. 144 00:07:27,790 --> 00:07:29,810 Dalam elemen kedua, kita mahu meletakkan 1. 145 00:07:29,810 --> 00:07:33,319 Dalam elemen ketiga, kami mahu untuk meletakkan 2; dan sebagainya dan sebagainya. 146 00:07:33,319 --> 00:07:35,360 Itu benar-benar baik di rumah senaman untuk berbuat demikian. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Di sini, ia tidak kelihatan seperti terlalu banyak telah berubah. 149 00:07:40,220 --> 00:07:44,170 Tetapi perhatikan bahawa di antara tanda kurung siku, kali ini, 150 00:07:44,170 --> 00:07:45,830 Saya sebenarnya telah ditinggalkan nombor. 151 00:07:45,830 --> 00:07:48,000 Jika anda menggunakan ini sangat merta khas 152 00:07:48,000 --> 00:07:50,380 sintaks untuk mewujudkan pelbagai, anda sebenarnya tidak 153 00:07:50,380 --> 00:07:53,491 perlu menunjukkan saiz array terlebih dahulu. 154 00:07:53,491 --> 00:07:55,740 Pengkompil cukup pintar untuk mengetahui bahawa anda benar-benar 155 00:07:55,740 --> 00:07:58,980 mahu pelbagai saiz 3, kerana anda meletakkan tiga elemen 156 00:07:58,980 --> 00:08:00,640 di sebelah kanan tanda yang sama. 157 00:08:00,640 --> 00:08:04,140 Jika anda telah meletakkan empat, ia akan mempunyai berikan kepada kamu jadual kebenaran saiz empat; 158 00:08:04,140 --> 00:08:06,270 dan sebagainya dan sebagainya. 159 00:08:06,270 --> 00:08:09,380 >> Tatasusunan tidak terhad kepada satu dimensi, yang cukup sejuk. 160 00:08:09,380 --> 00:08:12,000 Anda sebenarnya boleh mempunyai banyak specifiers sampingan seperti yang anda mahu. 161 00:08:12,000 --> 00:08:16,470 Jadi, sebagai contoh, jika anda ingin membuat papan untuk permainan Battleship, yang, 162 00:08:16,470 --> 00:08:20,910 jika anda pernah bermain, adalah permainan yang bermain dengan pasak pada 10 sebanyak 10 grid, 163 00:08:20,910 --> 00:08:22,450 anda boleh membuat pelbagai seperti ini. 164 00:08:22,450 --> 00:08:26,030 Anda boleh mengatakan Bool perang kurungan persegi 10 165 00:08:26,030 --> 00:08:29,590 tertutup persegi kurungan persegi pendakap 10 ditutup kurungan persegi. 166 00:08:29,590 --> 00:08:32,710 >> Dan kemudian, anda boleh memilih untuk mentafsir ini dalam fikiran anda sebagai 10 167 00:08:32,710 --> 00:08:35,576 sebanyak 10 grid sel. 168 00:08:35,576 --> 00:08:37,409 Sekarang, sebenarnya, dalam ingatan, ia benar-benar tidak hanya 169 00:08:37,409 --> 00:08:42,440 kekal sebagai elemen 100, pelbagai dimensi tunggal. 170 00:08:42,440 --> 00:08:46,070 Dan ini, sebenarnya, juga dengan jika anda mempunyai tiga dimensi atau empat atau lima. 171 00:08:46,070 --> 00:08:49,420 Ia benar-benar hanya tidak membiak semua indices-- yang 172 00:08:49,420 --> 00:08:51,130 atau semua saiz specifiers-- bersama-sama, 173 00:08:51,130 --> 00:08:53,480 dan anda hanya mendapat satu dimensi pelbagai saiz itu. 174 00:08:53,480 --> 00:08:57,090 >> Tetapi dari segi organisasi dan visualisasi dan persepsi manusia, 175 00:08:57,090 --> 00:08:59,240 ia boleh menjadi lebih mudah untuk bekerja dengan grid 176 00:08:59,240 --> 00:09:02,980 jika anda bekerja pada permainan seperti Tic-tac-toe atau Battleship, 177 00:09:02,980 --> 00:09:05,179 atau sesuatu seperti itu. 178 00:09:05,179 --> 00:09:06,970 Ia adalah satu abstraksi yang besar, daripada harus 179 00:09:06,970 --> 00:09:09,340 berfikir tentang Tic-tac-toe lembaga dalam garisan sembilan 180 00:09:09,340 --> 00:09:13,810 kuasa dua atau papan Battleship dalam garisan daripada 100 kuasa dua. 181 00:09:13,810 --> 00:09:16,010 A 10 10 grid atau tiga oleh tiga grid mungkin 182 00:09:16,010 --> 00:09:17,225 banyak lagi mudah untuk menyedarinya. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Sekarang, sesuatu yang benar-benar penting tentang tatasusunan. 185 00:09:22,280 --> 00:09:25,950 Kita boleh merawat setiap individu elemen array sebagai pembolehubah. 186 00:09:25,950 --> 00:09:27,700 Kami melihat bahawa sebelum ini apabila kita telah memberikan 187 00:09:27,700 --> 00:09:32,240 nilai Benar untuk Booleans tertentu atau menguji mereka dalam conditional. 188 00:09:32,240 --> 00:09:35,960 Tetapi kita tidak boleh merawat keseluruhan tatasusunan diri mereka sebagai pembolehubah. 189 00:09:35,960 --> 00:09:41,760 Kita tidak boleh, sebagai contoh, menetapkan satu lokasi kepada pelbagai lain menggunakan tugasan 190 00:09:41,760 --> 00:09:42,930 operator. 191 00:09:42,930 --> 00:09:44,640 Ia bukan undang-undang C. 192 00:09:44,640 --> 00:09:47,920 >> Jika kita mahu, sebagai example-- apa kita akan lakukan dalam contoh yang 193 00:09:47,920 --> 00:09:50,200 adalah untuk menyalin satu lokasi kepada yang lain. 194 00:09:50,200 --> 00:09:53,810 Jika kita mahu berbuat demikian, kita sebenarnya perlu menggunakan gelung untuk menyalin 195 00:09:53,810 --> 00:09:56,550 setiap elemen individu satu pada satu masa. 196 00:09:56,550 --> 00:09:58,700 Saya tahu ia memakan sedikit masa. 197 00:09:58,700 --> 00:10:04,022 >> Jadi, sebagai contoh, jika kita mempunyai pasangan ini baris kod, akan berfungsi? 198 00:10:04,022 --> 00:10:05,230 Well, tidak, ia tidak akan, bukan? 199 00:10:05,230 --> 00:10:07,860 Kerana kita cuba untuk memberikan makanan kepada bar. 200 00:10:07,860 --> 00:10:09,860 Itu tidak akan berjaya, kerana ia adalah pelbagai, 201 00:10:09,860 --> 00:10:13,130 dan kami baru diterangkan yang itu bukan undang-undang C. 202 00:10:13,130 --> 00:10:15,580 >> Sebaliknya, jika kita mahu menyalin kandungan makanan 203 00:10:15,580 --> 00:10:18,070 ke dalam bar, yang adalah apa kita cuba lakukan di sini, 204 00:10:18,070 --> 00:10:19,970 kita perlu sintaks seperti ini. 205 00:10:19,970 --> 00:10:24,170 Kami ada untuk gelung yang masuk daripada J adalah sama dengan 0 sehingga 5, 206 00:10:24,170 --> 00:10:28,390 dan kita kenaikan J pada setiap lelaran gelung dan unsur-unsur menyerahhakkan seperti itu. 207 00:10:28,390 --> 00:10:33,360 Ini akan menyebabkan bar juga menjadi satu, dua, tiga, empat, lima, 208 00:10:33,360 --> 00:10:36,730 tetapi kita perlu melakukannya ini sangat unsur-by-unsur cara perlahan, 209 00:10:36,730 --> 00:10:40,009 bukannya dengan hanya menyalin keseluruhan array. 210 00:10:40,009 --> 00:10:42,050 Dalam pengaturcaraan lain bahasa, yang lebih moden, 211 00:10:42,050 --> 00:10:45,610 anda boleh, sebenarnya, berbuat semudah itu sama sintaksis. 212 00:10:45,610 --> 00:10:49,620 Tetapi C, malangnya, kami tidak dibenarkan untuk berbuat demikian. 213 00:10:49,620 --> 00:10:52,026 >> Sekarang, ada satu lain Perkara yang saya ingin menyebut 214 00:10:52,026 --> 00:10:54,650 tentang tatasusunan yang boleh menjadi sedikit sedikit rumit pada kali pertama anda 215 00:10:54,650 --> 00:10:55,990 bekerja dengan mereka. 216 00:10:55,990 --> 00:10:59,860 Kami membincangkan dalam video mengenai skop berubah-ubah, 217 00:10:59,860 --> 00:11:04,940 bahawa kebanyakan pembolehubah dalam C, yang kamu berdoa mereka dalam fungsi, diluluskan oleh nilai. 218 00:11:04,940 --> 00:11:08,620 Adakah anda masih ingat apa yang dimaksudkan untuk lulus sesuatu dengan nilai? 219 00:11:08,620 --> 00:11:12,570 Ini bermakna kita membuat satu salinan berubah-ubah yang yang diluluskan pada. 220 00:11:12,570 --> 00:11:16,290 Fungsi CALLEE, fungsi yang yang menerima berubah-ubah, 221 00:11:16,290 --> 00:11:17,730 tidak mendapat pembolehubah itu sendiri. 222 00:11:17,730 --> 00:11:20,850 Ia mendapat tempatan sendiri salinannya untuk bekerja dengan. 223 00:11:20,850 --> 00:11:24,070 >> Tatasusunan, sudah tentu, tidak tidak mengikut peraturan ini. 224 00:11:24,070 --> 00:11:27,600 Sebaliknya, apa yang kita panggil ini berlalu dengan rujukan. 225 00:11:27,600 --> 00:11:31,360 CALLEE sebenarnya tidak menerima array. 226 00:11:31,360 --> 00:11:34,207 Ia tidak menerima mereka salinan tempatan sendiri daripadanya. 227 00:11:34,207 --> 00:11:36,040 Dan jika anda berfikir tentang ia, ini boleh diterima. 228 00:11:36,040 --> 00:11:39,750 Jika tatasusunan adalah benar-benar besar, ia mengambil begitu banyak masa dan usaha 229 00:11:39,750 --> 00:11:44,470 untuk membuat salinan pelbagai 100 atau 1,000 atau 10,000 elemen, 230 00:11:44,470 --> 00:11:48,290 bahawa ia tidak berbaloi untuk berfungsi untuk menerima satu salinan daripadanya, 231 00:11:48,290 --> 00:11:51,037 membuat kerja-kerja dengan itu, dan kemudian hanya dilakukan dengan salinan itu; 232 00:11:51,037 --> 00:11:53,120 ia tidak perlu untuk mempunyai ia melepak lagi. 233 00:11:53,120 --> 00:11:54,710 >> Kerana tatasusunan adalah beberapa besar dan rumit, 234 00:11:54,710 --> 00:11:56,001 kita hanya lulus mereka melalui rujukan. 235 00:11:56,001 --> 00:12:01,210 Kami hanya percaya kepada fungsi yang kepada, tidak melanggar apa-apa. 236 00:12:01,210 --> 00:12:03,010 Supaya ia benar-benar mendapatkan array. 237 00:12:03,010 --> 00:12:05,290 Ia tidak mendapat salinan tempatan sendiri daripadanya. 238 00:12:05,290 --> 00:12:07,170 >> Jadi apakah maksud ini, kemudian, apabila CALLEE yang 239 00:12:07,170 --> 00:12:08,970 memanipulasi elemen array? 240 00:12:08,970 --> 00:12:10,780 Apa yang berlaku? 241 00:12:10,780 --> 00:12:13,210 Buat masa ini, kami akan gloss atas sebab betul-betul ini 242 00:12:13,210 --> 00:12:15,320 berlaku, mengapa tatasusunan diluluskan oleh rujukan 243 00:12:15,320 --> 00:12:17,810 dan segala-galanya diluluskan oleh nilai. 244 00:12:17,810 --> 00:12:20,470 Tetapi saya berjanji kepada anda, kami akan kembali dan memberikan jawapan 245 00:12:20,470 --> 00:12:23,750 ini dalam video kemudian. 246 00:12:23,750 --> 00:12:28,110 >> Berikut adalah satu senaman yang lebih untuk anda sebelum kita mengakhiri perkara pada tatasusunan. 247 00:12:28,110 --> 00:12:31,400 Tandan kod di sini, itu tidak terutamanya gaya yang baik, 248 00:12:31,400 --> 00:12:33,400 hanya saya akan membuat kaveat itu. 249 00:12:33,400 --> 00:12:36,660 Ada sebarang komen di sini, yang merupakan bentuk agak buruk. 250 00:12:36,660 --> 00:12:39,750 Tetapi ia hanya kerana saya mahu menjadi dapat dimuatkan segala-galanya pada skrin. 251 00:12:39,750 --> 00:12:44,360 >> Di bahagian atas, anda boleh melihat bahawa saya mempunyai dua akuan fungsi untuk set pelbagai 252 00:12:44,360 --> 00:12:45,820 dan menetapkan int. 253 00:12:45,820 --> 00:12:49,680 Set lokasi nampaknya mengambil array empat integer sebagai input. 254 00:12:49,680 --> 00:12:52,767 Dan int set nampaknya mengambil integer tunggal sebagai input. 255 00:12:52,767 --> 00:12:54,350 Tetapi kedua-dua mereka tidak mempunyai output. 256 00:12:54,350 --> 00:12:57,689 Output, pulangan menaip, masing-masing adalah tidak sah. 257 00:12:57,689 --> 00:12:59,480 Di Main, kita mempunyai beberapa baris kod. 258 00:12:59,480 --> 00:13:02,730 Kami mengisytiharkan pembolehubah integer dikenali sebagai A dan sediakan nilai 10. 259 00:13:02,730 --> 00:13:07,080 Kami mengaku pelbagai empat integer dikenali sebagai B dan menetapkan unsur-unsur 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, dan 3, masing-masing. 261 00:13:08,730 --> 00:13:12,190 Kemudian, kita mempunyai panggilan untuk menetapkan int dan panggilan untuk menetapkan pelbagai. 262 00:13:12,190 --> 00:13:15,910 Takrif pelbagai set dan set int yang turun di bawah, di bahagian bawah. 263 00:13:15,910 --> 00:13:17,640 >> Dan sebagainya, sekali lagi, saya meminta anda soalan. 264 00:13:17,640 --> 00:13:20,770 Apa yang akan dicetak di sini pada akhir Main? 265 00:13:20,770 --> 00:13:23,020 Ada col cetakan. Saya mencetak dua integer. 266 00:13:23,020 --> 00:13:28,010 Saya mencetak kandungan A dan kandungan B kurungan persegi 0. 267 00:13:28,010 --> 00:13:29,880 Jeda video di sini dan mengambil satu minit. 268 00:13:29,880 --> 00:13:35,482 Bolehkah anda memikirkan apa ini fungsi akan mencetak pada akhir? 269 00:13:35,482 --> 00:13:38,190 Mudah-mudahan, jika anda masih ingat yang perbezaan antara hantaran oleh nilai 270 00:13:38,190 --> 00:13:41,680 dan lulus dengan merujuk, ini masalah tidak terlalu sukar untuk anda. 271 00:13:41,680 --> 00:13:44,130 Dan jawapan yang anda lakukan mendapati adalah ini. 272 00:13:44,130 --> 00:13:47,660 Jika anda tidak benar-benar pasti tentang mengapa itu berlaku, mengambil kedua, 273 00:13:47,660 --> 00:13:50,620 kembali, mengkaji apa yang saya hanya membincangkan tentang lulus tatasusunan 274 00:13:50,620 --> 00:13:53,450 dengan merujuk, berbanding lulus pemboleh ubah yang lain dengan nilai, 275 00:13:53,450 --> 00:13:56,680 dan mudah-mudahan, ia akan membuat rasa yang lebih sedikit. 276 00:13:56,680 --> 00:13:59,760 >> Saya Doug Lloyd, dan ini adalah CS50. 277 00:13:59,760 --> 00:14:01,467