1 00:00:00,000 --> 00:00:03,388 >> [MUSIC PLAYING] 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 variabel cukup menyenangkan. 5 00:00:07,680 --> 00:00:09,500 Tapi bagaimana jika kita ingin bekerja dengan banyak variabel, 6 00:00:09,500 --> 00:00:12,760 tapi kami tidak ingin memiliki banyak nama yang berbeda terbang di sekitar kode kita? 7 00:00:12,760 --> 00:00:15,980 Dalam hal ini, array akan datang sangat berguna. 8 00:00:15,980 --> 00:00:19,510 Array data yang benar-benar mendasar struktur untuk setiap bahasa pemrograman 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, terutama, karena kami akan melihat, di CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Kami menggunakan array untuk memegang nilai dari tipe data yang sama 12 00:00:27,870 --> 00:00:29,830 di lokasi memori yang berdekatan. 13 00:00:29,830 --> 00:00:32,430 Artinya, itu adalah cara yang kita dapat mengelompokkan 14 00:00:32,430 --> 00:00:35,430 sekelompok bilangan bulat bersama dalam memori atau sekelompok karakter 15 00:00:35,430 --> 00:00:38,270 atau mengapung di memori benar-benar dekat bersama-sama dan bekerja 16 00:00:38,270 --> 00:00:41,930 dengan mereka tanpa harus memberikan setiap satu nama yang unik, yang dapat 17 00:00:41,930 --> 00:00:44,500 mendapatkan rumit setelah beberapa saat. 18 00:00:44,500 --> 00:00:48,130 >> Sekarang, salah satu cara untuk menganalogikan array adalah untuk berpikir tentang pos setempat 19 00:00:48,130 --> 00:00:49,000 kantor untuk kedua. 20 00:00:49,000 --> 00:00:51,820 Jadi menjauh dari pemrograman dan hanya menutup mata Anda 21 00:00:51,820 --> 00:00:54,120 dan memvisualisasikan dalam pikiran Anda kantor pos setempat. 22 00:00:54,120 --> 00:00:57,160 Biasanya, di sebagian besar posting kantor, ada sebuah bank besar 23 00:00:57,160 --> 00:01:00,490 sebuah kotak kantor pos di dinding. 24 00:01:00,490 --> 00:01:03,510 >> Array adalah blok raksasa dari memori yang berdekatan, 25 00:01:03,510 --> 00:01:06,120 dengan cara yang sama yang mail Bank di kantor pos Anda 26 00:01:06,120 --> 00:01:11,230 adalah ruang besar di dinding kantor pos. 27 00:01:11,230 --> 00:01:15,750 Array telah dipartisi menjadi kecil, identik berukuran blok ruang, 28 00:01:15,750 --> 00:01:19,930 yang masing-masing disebut elemen, di dengan cara yang sama bahwa dinding pos 29 00:01:19,930 --> 00:01:23,840 kantor telah dipartisi menjadi kecil, identik berukuran blok ruang, 30 00:01:23,840 --> 00:01:27,560 yang kita sebut kotak PO. 31 00:01:27,560 --> 00:01:31,650 Setiap elemen dari array dapat menyimpan sejumlah data, 32 00:01:31,650 --> 00:01:37,540 seperti setiap kotak pos mampu untuk mengadakan sejumlah surat. 33 00:01:37,540 --> 00:01:41,540 >> Apa yang dapat disimpan dalam setiap elemen array adalah variabel dari data yang sama 34 00:01:41,540 --> 00:01:45,300 jenis, seperti int atau char, hanya seperti di kotak pos Anda, 35 00:01:45,300 --> 00:01:47,300 Anda hanya bisa muat hal dari jenis yang sama, 36 00:01:47,300 --> 00:01:50,430 seperti surat atau paket kecil. 37 00:01:50,430 --> 00:01:55,050 Terakhir, kita dapat mengakses setiap elemen array langsung oleh nomor indeks, 38 00:01:55,050 --> 00:01:59,770 sama seperti kita dapat mengakses kantor pos kami kotak dengan mengetahui nomor kotak nya. 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 gagasan array oleh analogizing untuk sesuatu yang lain 41 00:02:05,540 --> 00:02:08,400 Anda mungkin sudah akrab dengan. 42 00:02:08,400 --> 00:02:13,182 >> Dalam C, elemen array adalah diindeks mulai dari 0, bukan dari 1. 43 00:02:13,182 --> 00:02:14,390 Dan ini benar-benar penting. 44 00:02:14,390 --> 00:02:18,530 Dan pada kenyataannya, ini adalah mengapa kita, di CS 50, dan mengapa ilmuwan komputer sering 45 00:02:18,530 --> 00:02:22,150 akan menghitung dari 0, adalah karena array C 46 00:02:22,150 --> 00:02:24,660 pengindeksan, yang selalu dimulai dari 0. 47 00:02:24,660 --> 00:02:28,730 Jadi jika array terdiri dari unsur-unsur n, elemen pertama dari array yang 48 00:02:28,730 --> 00:02:32,960 terletak pada indeks 0, dan elemen terakhir dari array 49 00:02:32,960 --> 00:02:36,610 terletak di indeks n minus 1. 50 00:02:36,610 --> 00:02:43,160 Sekali lagi, jika ada elemen n di kami array, indeks terakhir adalah n minus 1. 51 00:02:43,160 --> 00:02:46,820 >> Jadi jika array kita memiliki 50 elemen, Elemen pertama terletak pada indeks 0, 52 00:02:46,820 --> 00:02:51,060 dan elemen terakhir terletak di indeks 49. 53 00:02:51,060 --> 00:02:53,940 Sayangnya, atau untungnya, tergantung pada perspektif Anda, 54 00:02:53,940 --> 00:02:56,170 C sangat lunak di sini. 55 00:02:56,170 --> 00:02:59,480 Ini tidak akan mencegah Anda dari akan keluar dari batas-batas array Anda. 56 00:02:59,480 --> 00:03:03,080 Anda bisa mengakses minus 3 elemen array 57 00:03:03,080 --> 00:03:07,400 atau elemen 59 dari array, jika array Anda hanya memiliki 50 elemen. 58 00:03:07,400 --> 00:03:11,060 Ini tidak akan menghentikan program Anda dari kompilasi, tetapi pada waktu berjalan, 59 00:03:11,060 --> 00:03:14,350 mungkin Anda menemukan segmentasi kesalahan ditakuti 60 00:03:14,350 --> 00:03:17,460 jika Anda mulai untuk mengakses memori yang berada di luar batas-batas apa 61 00:03:17,460 --> 00:03:19,260 Anda diminta program Anda untuk memberikan Anda. 62 00:03:19,260 --> 00:03:21,250 Jadi hati-hati. 63 00:03:21,250 --> 00:03:23,120 >> Apa array deklarasi terlihat seperti? 64 00:03:23,120 --> 00:03:26,940 Bagaimana kita kode array ke dalam keberadaan seperti kita kode variabel lainnya? 65 00:03:26,940 --> 00:03:31,250 Ada tiga bagian ke array declaration-- jenis, nama, 66 00:03:31,250 --> 00:03:31,880 dan ukuran. 67 00:03:31,880 --> 00:03:34,088 Hal ini sangat mirip dengan deklarasi variabel, yang 68 00:03:34,088 --> 00:03:36,970 hanya jenis dan nama, elemen ukuran yang 69 00:03:36,970 --> 00:03:39,860 kasus khusus untuk array, karena kita mendapatkan banyak dari mereka 70 00:03:39,860 --> 00:03:41,830 pada saat yang sama. 71 00:03:41,830 --> 00:03:45,560 >> Jadi jenisnya adalah jenis variabel Anda ingin setiap elemen array menjadi. 72 00:03:45,560 --> 00:03:47,150 Apakah ingin array bilangan bulat? 73 00:03:47,150 --> 00:03:49,010 Kemudian, tipe data Anda harus int. 74 00:03:49,010 --> 00:03:51,760 Apakah Anda ingin menjadi array ganda atau mengapung? 75 00:03:51,760 --> 00:03:54,545 Jenis data harus ganda atau mengapung. 76 00:03:54,545 --> 00:03:56,420 Nama adalah apa yang Anda ingin memanggil array Anda. 77 00:03:56,420 --> 00:04:00,970 Apa yang Anda inginkan untuk nama raksasa ini Bank bilangan bulat atau mengapung atau karakter 78 00:04:00,970 --> 00:04:03,250 atau ganda, atau apa pun yang harus Anda? 79 00:04:03,250 --> 00:04:04,700 Apa yang Anda ingin menyebutnya? 80 00:04:04,700 --> 00:04:06,110 Cukup jelas. 81 00:04:06,110 --> 00:04:08,610 >> Terakhir, ukuran, yang pergi dalam kurung persegi, 82 00:04:08,610 --> 00:04:12,180 adalah berapa banyak elemen yang Anda lakukan seperti array Anda mengandung. 83 00:04:12,180 --> 00:04:13,530 Berapa banyak bilangan bulat yang Anda inginkan? 84 00:04:13,530 --> 00:04:15,570 Berapa banyak mengapung yang Anda inginkan? 85 00:04:15,570 --> 00:04:19,070 >> Jadi misalnya, int nilai siswa 40. 86 00:04:19,070 --> 00:04:26,020 Ini menyatakan sebuah array disebut Mahasiswa nilai, yang terdiri dari 40 bilangan bulat. 87 00:04:26,020 --> 00:04:28,180 Cukup jelas, saya berharap. 88 00:04:28,180 --> 00:04:29,330 Berikut contoh lain. 89 00:04:29,330 --> 00:04:31,560 Ganda harga menu 8. 90 00:04:31,560 --> 00:04:34,610 Hal ini menciptakan sebuah array disebut Harga menu, yang terdiri 91 00:04:34,610 --> 00:04:38,300 ruang di memori untuk delapan ganda. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Jika Anda berpikir dari setiap elemen array tipe data-tipe, 94 00:04:45,750 --> 00:04:49,860 jadi misalnya, satu elemen dari array tipe int, dengan cara yang sama Anda 95 00:04:49,860 --> 00:04:52,770 akan berpikir lain variabel bertipe int, 96 00:04:52,770 --> 00:04:56,440 semua operasi akrab yang kita dibahas sebelumnya 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 bisa mendeklarasikan array dari Booleans disebut Truthtable, 99 00:05:01,620 --> 00:05:05,590 yang terdiri dari ruang untuk 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> Dan kemudian, sama seperti kita hanya bisa menetapkan nilai untuk setiap variabel lain jenis 101 00:05:09,650 --> 00:05:13,470 Boolean, kita bisa mengatakan sesuatu seperti Truthtable braket persegi 102 00:05:13,470 --> 00:05:18,040 2, yang adalah bagaimana kita menunjukkan, yang unsur tabel kebenaran? 103 00:05:18,040 --> 00:05:20,350 Unsur ketiga dari tabel kebenaran, karena ingat, 104 00:05:20,350 --> 00:05:21,800 kita menghitung dari 0. 105 00:05:21,800 --> 00:05:25,690 Jadi itulah bagaimana kita menunjukkan Unsur ketiga dari tabel kebenaran. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 sama palsu, seperti kita bisa declare-- 107 00:05:28,680 --> 00:05:33,560 atau kita bisa menetapkan, lebih tepatnya, setiap Variabel jenis boolean palsu. 108 00:05:33,560 --> 00:05:35,050 >> Kami juga dapat menggunakannya dalam kondisi. 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 elemen kedelapan dari Truthtable benar, 111 00:05:42,370 --> 00:05:46,760 mungkin kita ingin mencetak pesan untuk pengguna, printf ("BENAR! n") ;. 112 00:05:46,760 --> 00:05:50,290 Yang menyebabkan kita untuk mengatakan Truthtable 10 sama dengan benar, kan? 113 00:05:50,290 --> 00:05:53,590 Yah, aku bisa, tapi itu cukup berbahaya, karena ingat, 114 00:05:53,590 --> 00:05:56,260 kami memiliki sebuah array 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Jadi indeks tertinggi bahwa compiler telah memberi kita adalah 9. 116 00:06:02,340 --> 00:06:06,010 >> Program ini akan mengkompilasi, tetapi jika sesuatu yang lain dalam memori 117 00:06:06,010 --> 00:06:09,110 ada di mana kita akan berharap Truthtable 10 untuk pergi, 118 00:06:09,110 --> 00:06:13,980 kita bisa menderita kesalahan segmentasi. Kita mungkin pergi dengan itu, tapi 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 hukum C, tetapi belum tentu langkah terbaik. 121 00:06:19,759 --> 00:06:22,300 Sekarang, ketika Anda menyatakan dan menginisialisasi array secara bersamaan, 122 00:06:22,300 --> 00:06:23,960 sebenarnya ada cukup sintaks khusus yang Anda 123 00:06:23,960 --> 00:06:26,250 dapat digunakan untuk mengisi array dengan nilai awal. 124 00:06:26,250 --> 00:06:30,130 Ini bisa rumit untuk mendeklarasikan array dari ukuran 100, 125 00:06:30,130 --> 00:06:33,430 dan kemudian harus mengatakan, elemen 0 sama ini; Elemen 1 sama ini; 126 00:06:33,430 --> 00:06:34,850 Elemen 2 sama itu. 127 00:06:34,850 --> 00:06:36,370 Apa gunanya, kan? 128 00:06:36,370 --> 00:06:39,470 >> Jika itu array kecil, Anda bisa melakukan sesuatu seperti ini. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 sama terbuka penjepit keriting dan kemudian koma 130 00:06:44,360 --> 00:06:48,060 memisahkan daftar elemen yang Anda inginkan untuk dimasukkan ke dalam array. 131 00:06:48,060 --> 00:06:50,520 Kemudian tutup keriting brace titik koma. 132 00:06:50,520 --> 00:06:53,910 Hal ini menciptakan sebuah array ukuran tiga disebut 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 pada kenyataannya, Instansiasi sintaks saya miliki di sini adalah 135 00:06:59,270 --> 00:07:03,350 persis sama dengan melakukan sintaks elemen individu di bawah ini. 136 00:07:03,350 --> 00:07:09,380 Kedua cara coding akan menghasilkan array yang sama persis. 137 00:07:09,380 --> 00:07:11,740 >> Demikian pula, kita bisa iterate atas semua elemen 138 00:07:11,740 --> 00:07:15,400 dari array menggunakan loop, yang, di Bahkan, adalah sangat dianjurkan 139 00:07:15,400 --> 00:07:16,790 di rumah latihan. 140 00:07:16,790 --> 00:07:20,720 Bagaimana Anda membuat sebuah array 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 misalnya, kita memiliki array 100 bilangan bulat, dan dalam elemen pertama, 143 00:07:26,560 --> 00:07:27,790 kami ingin menempatkan 0. 144 00:07:27,790 --> 00:07:29,810 Dalam elemen kedua, kita ingin menempatkan 1. 145 00:07:29,810 --> 00:07:33,319 Dalam elemen ketiga, kita ingin untuk menempatkan 2; dan seterusnya dan seterusnya. 146 00:07:33,319 --> 00:07:35,360 Itu benar-benar baik di rumah latihan untuk melakukan itu. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Di sini, tidak terlihat seperti terlalu banyak yang berubah. 149 00:07:40,220 --> 00:07:44,170 Tapi perhatikan bahwa di antara kurung persegi, saat ini, 150 00:07:44,170 --> 00:07:45,830 Aku sudah benar-benar dihilangkan nomor tersebut. 151 00:07:45,830 --> 00:07:48,000 Jika Anda menggunakan ini sangat Instansiasi khusus 152 00:07:48,000 --> 00:07:50,380 sintaks untuk membuat array, Anda benar-benar tidak 153 00:07:50,380 --> 00:07:53,491 perlu untuk menunjukkan ukuran array terlebih dahulu. 154 00:07:53,491 --> 00:07:55,740 Compiler cukup pintar untuk mengetahui bahwa Anda benar-benar 155 00:07:55,740 --> 00:07:58,980 ingin array ukuran 3, karena Anda menempatkan tiga elemen 156 00:07:58,980 --> 00:08:00,640 di sebelah kanan tanda sama. 157 00:08:00,640 --> 00:08:04,140 Jika Anda telah menempatkan empat, itu akan memiliki diberikan Anda tabel kebenaran dari ukuran empat; 158 00:08:04,140 --> 00:08:06,270 dan seterusnya dan seterusnya. 159 00:08:06,270 --> 00:08:09,380 >> Array tidak terbatas pada satu dimensi, yang cukup keren. 160 00:08:09,380 --> 00:08:12,000 Anda benar-benar dapat memiliki banyak penspesifikasi sisi seperti yang Anda inginkan. 161 00:08:12,000 --> 00:08:16,470 Jadi misalnya, 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 dengan 10 grid, 163 00:08:20,910 --> 00:08:22,450 Anda bisa membuat sebuah array seperti ini. 164 00:08:22,450 --> 00:08:26,030 Anda bisa mengatakan Bool kapal perang persegi bracket 10 165 00:08:26,030 --> 00:08:29,590 braket tertutup persegi persegi braket 10 ditutup braket persegi. 166 00:08:29,590 --> 00:08:32,710 >> Dan kemudian, Anda dapat memilih untuk menafsirkan ini dalam pikiran Anda sebagai 10 167 00:08:32,710 --> 00:08:35,576 10 grid sel. 168 00:08:35,576 --> 00:08:37,409 Sekarang, pada kenyataannya, dalam memori, itu benar-benar hanya 169 00:08:37,409 --> 00:08:42,440 tetap menjadi elemen 100, dimensi array tunggal. 170 00:08:42,440 --> 00:08:46,070 Dan ini, pada kenyataannya, berlaku untuk jika Anda memiliki tiga dimensi atau empat atau lima. 171 00:08:46,070 --> 00:08:49,420 Ini benar-benar hanya tidak berkembang biak semua indices-- yang 172 00:08:49,420 --> 00:08:51,130 atau semua ukuran specifiers-- bersama-sama, 173 00:08:51,130 --> 00:08:53,480 dan Anda hanya mendapatkan satu dimensi array ukuran itu. 174 00:08:53,480 --> 00:08:57,090 >> Tapi dalam hal organisasi dan visualisasi dan persepsi manusia, 175 00:08:57,090 --> 00:08:59,240 dapat menjadi jauh 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 semacam itu. 178 00:09:05,179 --> 00:09:06,970 Ini adalah abstraksi besar, bukan memiliki 179 00:09:06,970 --> 00:09:09,340 untuk berpikir tentang Tic-tac-toe papan sebagai garis sembilan 180 00:09:09,340 --> 00:09:13,810 kotak atau papan Battleship sebagai garis 100 kotak. 181 00:09:13,810 --> 00:09:16,010 A 10 dengan 10 kotak atau tiga oleh tiga jaringan mungkin 182 00:09:16,010 --> 00:09:17,225 lebih banyak mudah untuk melihat. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Sekarang, sesuatu yang sangat penting tentang array. 185 00:09:22,280 --> 00:09:25,950 Kami dapat memperlakukan setiap individu elemen dari array sebagai variabel. 186 00:09:25,950 --> 00:09:27,700 Kami melihat bahwa sebelumnya ketika kami menugaskan 187 00:09:27,700 --> 00:09:32,240 nilai Benar untuk Booleans tertentu atau menguji mereka di conditional. 188 00:09:32,240 --> 00:09:35,960 Tapi kita tidak bisa mengobati seluruh Array diri mereka sebagai variabel. 189 00:09:35,960 --> 00:09:41,760 Kita tidak bisa, misalnya, menetapkan satu array untuk array lain menggunakan penugasan 190 00:09:41,760 --> 00:09:42,930 operator. 191 00:09:42,930 --> 00:09:44,640 Ini bukan hukum C. 192 00:09:44,640 --> 00:09:47,920 >> Jika kita ingin, untuk apa example-- kita akan lakukan di contoh yang 193 00:09:47,920 --> 00:09:50,200 akan menyalin satu array ke yang lain. 194 00:09:50,200 --> 00:09:53,810 Jika kita ingin melakukan itu, kita benar-benar perlu menggunakan loop untuk menyalin 195 00:09:53,810 --> 00:09:56,550 setiap elemen individu satu per satu. 196 00:09:56,550 --> 00:09:58,700 Aku tahu itu memakan waktu sedikit. 197 00:09:58,700 --> 00:10:04,022 >> Jadi misalnya, jika kita memiliki beberapa ini baris kode, akan pekerjaan ini? 198 00:10:04,022 --> 00:10:05,230 Yah, tidak, tidak akan, kan? 199 00:10:05,230 --> 00:10:07,860 Karena kami berusaha untuk menetapkan makanan untuk bar. 200 00:10:07,860 --> 00:10:09,860 Itu tidak akan bekerja, karena itu array, 201 00:10:09,860 --> 00:10:13,130 dan kami hanya dijelaskan bahwa itu bukan hukum C. 202 00:10:13,130 --> 00:10:15,580 >> Sebaliknya, jika kita ingin menyalin isi dari makanan 203 00:10:15,580 --> 00:10:18,070 ke bar, yang adalah apa yang kita coba lakukan di sini, 204 00:10:18,070 --> 00:10:19,970 kita akan membutuhkan sintaks seperti ini. 205 00:10:19,970 --> 00:10:24,170 Kami memiliki untuk loop yang berlangsung dari J sama dengan 0 sampai 5, 206 00:10:24,170 --> 00:10:28,390 dan kami kenaikan J pada setiap iterasi dari loop dan elemen menetapkan seperti itu. 207 00:10:28,390 --> 00:10:33,360 Hal ini akan mengakibatkan bar juga menjadi satu, dua, tiga, empat, lima, 208 00:10:33,360 --> 00:10:36,730 tapi kita harus melakukannya ini sangat lambat unsur-by-elemen cara, 209 00:10:36,730 --> 00:10:40,009 bukan hanya dengan menyalin seluruh array. 210 00:10:40,009 --> 00:10:42,050 Dalam pemrograman lain bahasa, yang lebih modern, 211 00:10:42,050 --> 00:10:45,610 Anda dapat, pada kenyataannya, melakukan yang sederhana sama sintaks. 212 00:10:45,610 --> 00:10:49,620 Tapi C, sayangnya, kami tidak diperbolehkan untuk melakukan itu. 213 00:10:49,620 --> 00:10:52,026 >> Sekarang, ada satu lainnya hal yang saya ingin menyebutkan 214 00:10:52,026 --> 00:10:54,650 tentang array yang dapat sedikit sedikit rumit pertama kalinya Anda 215 00:10:54,650 --> 00:10:55,990 bekerja dengan mereka. 216 00:10:55,990 --> 00:10:59,860 Kami dibahas dalam video tentang ruang lingkup variabel, 217 00:10:59,860 --> 00:11:04,940 bahwa sebagian besar variabel dalam C, ketika Anda menelepon mereka dalam fungsi, yang disahkan oleh nilai. 218 00:11:04,940 --> 00:11:08,620 Apakah Anda ingat apa artinya untuk lulus sesuatu dengan nilai? 219 00:11:08,620 --> 00:11:12,570 Ini berarti kita membuat salinan variabel yang sedang lewat di. 220 00:11:12,570 --> 00:11:16,290 Fungsi callee, fungsi yang menerima variabel, 221 00:11:16,290 --> 00:11:17,730 tidak mendapatkan variabel itu sendiri. 222 00:11:17,730 --> 00:11:20,850 Ia mendapat lokal sendiri salinan untuk bekerja dengan. 223 00:11:20,850 --> 00:11:24,070 >> Array, tentu saja, melakukan tidak mengikuti aturan ini. 224 00:11:24,070 --> 00:11:27,600 Sebaliknya, apa yang kita sebut ini adalah lewat referensi. 225 00:11:27,600 --> 00:11:31,360 Callee sebenarnya tidak menerima array. 226 00:11:31,360 --> 00:11:34,207 Tidak menerima nya salinan lokal sendiri itu. 227 00:11:34,207 --> 00:11:36,040 Dan jika Anda berpikir tentang itu, ini masuk akal. 228 00:11:36,040 --> 00:11:39,750 Jika array benar-benar besar, itu mengambil begitu banyak waktu dan usaha 229 00:11:39,750 --> 00:11:44,470 untuk membuat salinan array 100 atau 1.000 atau 10.000 elemen, 230 00:11:44,470 --> 00:11:48,290 bahwa itu tidak layak untuk berfungsi untuk menerima salinan itu, 231 00:11:48,290 --> 00:11:51,037 melakukan beberapa pekerjaan dengan itu, dan kemudian hanya dilakukan dengan salinan; 232 00:11:51,037 --> 00:11:53,120 tidak perlu memiliki itu berkeliaran lagi. 233 00:11:53,120 --> 00:11:54,710 >> Karena array adalah beberapa besar dan rumit, 234 00:11:54,710 --> 00:11:56,001 kita hanya melewati mereka dengan referensi. 235 00:11:56,001 --> 00:12:01,210 Hanya kami percaya bahwa fungsi untuk, tidak melanggar apa-apa. 236 00:12:01,210 --> 00:12:03,010 Jadi itu benar-benar mendapatkan array. 237 00:12:03,010 --> 00:12:05,290 Tidak bisa copy lokal sendiri itu. 238 00:12:05,290 --> 00:12:07,170 >> Jadi apa artinya ini, kemudian, ketika callee 239 00:12:07,170 --> 00:12:08,970 memanipulasi elemen array? 240 00:12:08,970 --> 00:12:10,780 Apa yang terjadi? 241 00:12:10,780 --> 00:12:13,210 Untuk saat ini, kami akan gloss lebih mengapa persis ini 242 00:12:13,210 --> 00:12:15,320 terjadi, mengapa array tersebut diteruskan oleh referensi 243 00:12:15,320 --> 00:12:17,810 dan segala sesuatu yang lain melewati nilai. 244 00:12:17,810 --> 00:12:20,470 Tapi saya berjanji, kami akan kembali dan memberikan jawabannya 245 00:12:20,470 --> 00:12:23,750 untuk ini dalam sebuah video kemudian. 246 00:12:23,750 --> 00:12:28,110 >> Berikut ini salah satu latihan lebih untuk Anda sebelum kita membungkus hal pada array. 247 00:12:28,110 --> 00:12:31,400 The sekelompok kode di sini, itu tidak terlalu gaya yang baik, 248 00:12:31,400 --> 00:12:33,400 hanya aku akan membuat peringatan itu. 249 00:12:33,400 --> 00:12:36,660 Tidak ada komentar di sini, yang bentuk sangat buruk. 250 00:12:36,660 --> 00:12:39,750 Tapi itu hanya karena aku ingin menjadi mampu menyesuaikan segala sesuatu di layar. 251 00:12:39,750 --> 00:12:44,360 >> Di bagian atas, Anda dapat melihat bahwa saya memiliki dua deklarasi fungsi untuk mengatur berbagai 252 00:12:44,360 --> 00:12:45,820 dan mengatur int. 253 00:12:45,820 --> 00:12:49,680 Set array yang tampaknya mengambil array empat bilangan bulat sebagai input. 254 00:12:49,680 --> 00:12:52,767 Dan set int tampaknya mengambil satu bilangan bulat sebagai input. 255 00:12:52,767 --> 00:12:54,350 Tapi keduanya tidak memiliki output. 256 00:12:54,350 --> 00:12:57,689 Output, pengembalian mengetik, masing-masing adalah batal. 257 00:12:57,689 --> 00:12:59,480 Di Main, kita memiliki beberapa baris kode. 258 00:12:59,480 --> 00:13:02,730 Kami mendeklarasikan sebuah variabel integer disebut A dan menetapkan nilai 10. 259 00:13:02,730 --> 00:13:07,080 Kami mendeklarasikan array dari empat bilangan bulat disebut B dan menetapkan elemen 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, kami memiliki panggilan untuk mengatur int dan panggilan untuk mengatur array. 262 00:13:12,190 --> 00:13:15,910 Definisi set array dan set int turun di bawah, di bagian bawah. 263 00:13:15,910 --> 00:13:17,640 >> Dan, sekali lagi, saya meminta Anda pertanyaan. 264 00:13:17,640 --> 00:13:20,770 Apa yang akan dicetak di sini di akhir Main? 265 00:13:20,770 --> 00:13:23,020 Ada col printout. Saya m mencetak dua bilangan bulat. 266 00:13:23,020 --> 00:13:28,010 Saya mencetak isi A dan isi B persegi braket 0. 267 00:13:28,010 --> 00:13:29,880 Jeda video di sini dan mengambil satu menit. 268 00:13:29,880 --> 00:13:35,482 Anda dapat mencari tahu apa ini Fungsi akan mencetak di akhir? 269 00:13:35,482 --> 00:13:38,190 Mudah-mudahan, jika Anda ingat perbedaan antara lewat nilai 270 00:13:38,190 --> 00:13:41,680 dan lewat referensi, ini masalah adalah tidak terlalu rumit untuk Anda. 271 00:13:41,680 --> 00:13:44,130 Dan jawabannya akan Anda temukan adalah ini. 272 00:13:44,130 --> 00:13:47,660 Jika Anda tidak benar-benar yakin untuk mengapa itu terjadi, mengambil kedua, 273 00:13:47,660 --> 00:13:50,620 kembali, meninjau apa yang saya hanya membahas tentang melewati array 274 00:13:50,620 --> 00:13:53,450 dengan referensi, dibandingkan lewat variabel lain dengan nilai, 275 00:13:53,450 --> 00:13:56,680 dan mudah-mudahan, itu akan membuat sedikit lebih masuk akal. 276 00:13:56,680 --> 00:13:59,760 >> Aku Doug Lloyd, dan ini adalah CS50. 277 00:13:59,760 --> 00:14:01,467