1 00:00:00,000 --> 00:00:03,388 >> [Música tocando] 2 00:00:03,388 --> 00:00:05,104 3 00:00:05,104 --> 00:00:06,020 Doug LLOYD: Todo ben. 4 00:00:06,020 --> 00:00:07,680 Traballando con único variables é moi divertido. 5 00:00:07,680 --> 00:00:09,500 Pero o que se quere traballar con un gran número de variables, 6 00:00:09,500 --> 00:00:12,760 pero nós non queremos ter unha chea de nomes diferentes voando arredor do noso código? 7 00:00:12,760 --> 00:00:15,980 Neste caso, son matrices vai ser realmente útil. 8 00:00:15,980 --> 00:00:19,510 Arrays son datos realmente fundamentais estrutura para calquera linguaxe de programación 9 00:00:19,510 --> 00:00:20,260 que vai empregar. 10 00:00:20,260 --> 00:00:24,450 E son moi, moi útil, particularmente, como veremos, no CS 50. 11 00:00:24,450 --> 00:00:27,870 >> Usamos matrices para soster Os valores de datos do mesmo tipo 12 00:00:27,870 --> 00:00:29,830 en localizacións contiguas de memoria. 13 00:00:29,830 --> 00:00:32,430 É dicir, é unha forma que podemos agrupar 14 00:00:32,430 --> 00:00:35,430 unha morea de números enteiros xuntos memoria ou unha morea de personaxes 15 00:00:35,430 --> 00:00:38,270 ou flota na memoria realmente xuntas e traballo 16 00:00:38,270 --> 00:00:41,930 con eles sen ter que dar a cada un nome propio, o que pode 17 00:00:41,930 --> 00:00:44,500 obter complicado despois de un pouco de tempo. 18 00:00:44,500 --> 00:00:48,130 >> Agora, un xeito de analogize matrices é pensar sobre o seu lugar post 19 00:00:48,130 --> 00:00:49,000 oficina por un segundo. 20 00:00:49,000 --> 00:00:51,820 Entón, paso lonxe de programación e pode pechar os ollos 21 00:00:51,820 --> 00:00:54,120 e vendo na súa mente súa estación de correos local. 22 00:00:54,120 --> 00:00:57,160 Normalmente, a maioría post oficinas, hai un gran banco 23 00:00:57,160 --> 00:01:00,490 as caixas de correos na parede. 24 00:01:00,490 --> 00:01:03,510 >> Unha matriz é un bloque xigante de memoria contiguo, 25 00:01:03,510 --> 00:01:06,120 do mesmo xeito que unha mensaxe base na súa estación de correos 26 00:01:06,120 --> 00:01:11,230 é un gran espazo no parede da estación de correos. 27 00:01:11,230 --> 00:01:15,750 Arrays foron divididos en pequenos, identicamente bloques de tamaño de espazo, 28 00:01:15,750 --> 00:01:19,930 cada un dos cales se chama un elemento, en Do mesmo xeito que a parede do posto 29 00:01:19,930 --> 00:01:23,840 oficina foi dividida en pequeno, identicamente bloques de tamaño de espazo, 30 00:01:23,840 --> 00:01:27,560 que chamamos unha caixa de correos. 31 00:01:27,560 --> 00:01:31,650 Cada elemento da matriz pode almacenar unha certa cantidade de datos, 32 00:01:31,650 --> 00:01:37,540 así como cada caixa de correos é capaz para manter unha certa cantidade de correo. 33 00:01:37,540 --> 00:01:41,540 >> O que pode ser almacenado en cada elemento de a matriz é variables do mesmo datos 34 00:01:41,540 --> 00:01:45,300 tipo, como int ou char, só como na súa caixa de correos, 35 00:01:45,300 --> 00:01:47,300 só se pode caber cousas dun tipo similar 36 00:01:47,300 --> 00:01:50,430 como cartas ou paquetes pequenos. 37 00:01:50,430 --> 00:01:55,050 Para rematar, podemos acceder cada elemento da a matriz directamente polo número de índice, 38 00:01:55,050 --> 00:01:59,770 así como podemos acceder nosa estación de correos caixa por saber o seu número de correo de voz. 39 00:01:59,770 --> 00:02:02,750 Afortunadamente, esta analoxía axuda a obter a súa cabeza 40 00:02:02,750 --> 00:02:05,540 en torno á idea de matrices por analogizante para outra cousa 41 00:02:05,540 --> 00:02:08,400 que probablemente está xa está familiarizado. 42 00:02:08,400 --> 00:02:13,182 >> C, os elementos dunha matriz son indexados desde 0, non a partir do 1. 43 00:02:13,182 --> 00:02:14,390 E isto é realmente importante. 44 00:02:14,390 --> 00:02:18,530 E, de feito, é por iso que, no CS 50, e por que os científicos ordenador con frecuencia 45 00:02:18,530 --> 00:02:22,150 contará a partir de 0, é por mor da variedade de C 46 00:02:22,150 --> 00:02:24,660 indexación, que sempre comeza en 0. 47 00:02:24,660 --> 00:02:28,730 Polo tanto, se unha matriz consiste n elementos, o primeiro elemento desa matriz 48 00:02:28,730 --> 00:02:32,960 sitúase no índice 0, e o último elemento da matriz 49 00:02:32,960 --> 00:02:36,610 sitúase no índice n menos 1. 50 00:02:36,610 --> 00:02:43,160 Unha vez máis, se hai elementos da nosa n array, o último índice é n menos 1. 51 00:02:43,160 --> 00:02:46,820 >> Entón, se a nosa matriz ten 50 elementos, os primeiro elemento está situado no índice 0, 52 00:02:46,820 --> 00:02:51,060 eo último elemento sitúase no índice de 49. 53 00:02:51,060 --> 00:02:53,940 Desafortunadamente, é sorte, dependendo da súa perspectiva, 54 00:02:53,940 --> 00:02:56,170 C é moi branda aquí. 55 00:02:56,170 --> 00:02:59,480 Non vai impedilo de saír dos límites da súa matriz. 56 00:02:59,480 --> 00:03:03,080 Pode acceder a menos 3 elemento da súa matriz 57 00:03:03,080 --> 00:03:07,400 ou o elemento 59 da súa matriz, a matriz ten só 50 elementos. 58 00:03:07,400 --> 00:03:11,060 Ela non vai deixar o seu programa de compilando, pero en tempo de execución, 59 00:03:11,060 --> 00:03:14,350 podes atopar un fallo de segmento temido 60 00:03:14,350 --> 00:03:17,460 se comezar a acceder a memoria que está fóra dos límites do que 61 00:03:17,460 --> 00:03:19,260 vostede preguntou ao seu programa para darlle. 62 00:03:19,260 --> 00:03:21,250 Polo tanto, teña coidado. 63 00:03:21,250 --> 00:03:23,120 >> O que fai un array declaración parece? 64 00:03:23,120 --> 00:03:26,940 Como é que imos codificar unha matriz á existencia como nós codificar calquera outra variable? 65 00:03:26,940 --> 00:03:31,250 Hai tres partes para unha matriz declaration-- un tipo, un nome, 66 00:03:31,250 --> 00:03:31,880 e un tamaño. 67 00:03:31,880 --> 00:03:34,088 Isto é moi semellante a un declaración de variable, que 68 00:03:34,088 --> 00:03:36,970 é só un tipo e un nome, sendo o elemento de tamaño 69 00:03:36,970 --> 00:03:39,860 o caso especial dunha matriz, porque estamos recibindo unha morea deles 70 00:03:39,860 --> 00:03:41,830 ó mesmo tempo. 71 00:03:41,830 --> 00:03:45,560 >> Así, o tipo é o tipo de variable que quero que cada elemento da matriz para ser. 72 00:03:45,560 --> 00:03:47,150 Non quero que un array de enteiros? 73 00:03:47,150 --> 00:03:49,010 A continuación, o tipo de datos debe ser int. 74 00:03:49,010 --> 00:03:51,760 Quere que sexa un matriz de dúos ou flotadores? 75 00:03:51,760 --> 00:03:54,545 Tipo de datos debe ser o dobre ou flotar. 76 00:03:54,545 --> 00:03:56,420 O nome é o que quero chamar a súa matriz. 77 00:03:56,420 --> 00:04:00,970 O que quere para nomear este xigante base de enteiros ou flotadores ou caracteres 78 00:04:00,970 --> 00:04:03,250 ou dobres, ou o que ten? 79 00:04:03,250 --> 00:04:04,700 Que queres chamalo? 80 00:04:04,700 --> 00:04:06,110 Bastante auto-explicativo. 81 00:04:06,110 --> 00:04:08,610 >> Para rematar, o tamaño, o que vai dentro corchetes, 82 00:04:08,610 --> 00:04:12,180 é cantos elementos faría como a matriz para conter. 83 00:04:12,180 --> 00:04:13,530 Cantos enteiros que quere? 84 00:04:13,530 --> 00:04:15,570 Cantos Carrozas que quere? 85 00:04:15,570 --> 00:04:19,070 >> Así, por exemplo, int notas dos alumnos 40. 86 00:04:19,070 --> 00:04:26,020 Este declara un array chamado Student graos, que consta de 40 números enteiros. 87 00:04:26,020 --> 00:04:28,180 Bastante auto-explicativo, eu espero. 88 00:04:28,180 --> 00:04:29,330 Aquí está outro exemplo. 89 00:04:29,330 --> 00:04:31,560 Dobre prezos de menú 8. 90 00:04:31,560 --> 00:04:34,610 Isto xera unha matriz chamada Menú prezos, que consiste 91 00:04:34,610 --> 00:04:38,300 de espazo na memoria por oito dobres. 92 00:04:38,300 --> 00:04:42,000 93 00:04:42,000 --> 00:04:45,750 >> Se pensar en cada elemento dunha matriz de tipo de datos tipo, 94 00:04:45,750 --> 00:04:49,860 Así, por exemplo, un único elemento de unha matriz de tipo int, do mesmo xeito que 95 00:04:49,860 --> 00:04:52,770 podería pensar de calquera outro variable do tipo int, 96 00:04:52,770 --> 00:04:56,440 todas as operacións que familiares discutidos anteriormente nas Operacións 97 00:04:56,440 --> 00:04:58,270 vídeo vai ter sentido. 98 00:04:58,270 --> 00:05:01,620 Entón, aquí, podemos declarar unha matriz de Booleans chamados Truthtable, 99 00:05:01,620 --> 00:05:05,590 que consiste en sala para 10 Booleans. 100 00:05:05,590 --> 00:05:09,650 >> E entón, así como nós só podería atribuír un valor a calquera outra variable do tipo 101 00:05:09,650 --> 00:05:13,470 Booleano, poderiamos dicir algo como paréntese Truthtable 102 00:05:13,470 --> 00:05:18,040 2, que é como nós indicamos, cal elemento da táboa de verdade? 103 00:05:18,040 --> 00:05:20,350 O terceiro elemento do táboa verdade, pois lembre, 104 00:05:20,350 --> 00:05:21,800 estamos contando a partir de 0. 105 00:05:21,800 --> 00:05:25,690 Entón é así que indican a terceiro elemento da táboa de verdade. 106 00:05:25,690 --> 00:05:28,680 Truthtable 2 é igual a false, así como nós podería declare-- 107 00:05:28,680 --> 00:05:33,560 ou poderiamos atribuír, en vez diso, calquera Variable do tipo booleano para ser falsa. 108 00:05:33,560 --> 00:05:35,050 >> Tamén podemos usalo correctamente. 109 00:05:35,050 --> 00:05:39,000 if (7 == truthtable certo), o que quere dicir, 110 00:05:39,000 --> 00:05:42,370 O oitavo elemento de Truthtable é certo, 111 00:05:42,370 --> 00:05:46,760 quizais queremos imprimir unha mensaxe para o usuario, printf ("TRUE! N");. 112 00:05:46,760 --> 00:05:50,290 Isto nos leva a dicir Truthtable 10 é igual a verdade, non? 113 00:05:50,290 --> 00:05:53,590 Ben, podo, pero é bastante perigoso, pois lembre, 114 00:05:53,590 --> 00:05:56,260 temos un array de 10 Booleans. 115 00:05:56,260 --> 00:06:02,340 Así, o índice máis elevado que o compilador nos deu é 9. 116 00:06:02,340 --> 00:06:06,010 >> Este programa pode compilar, pero se algunha outra cousa na memoria 117 00:06:06,010 --> 00:06:09,110 existe onde iríamos esperar Truthtable 10 para ir, 118 00:06:09,110 --> 00:06:13,980 nós podería sufrir un fallo de segmento. Nós pode fuxir con el, pero, en xeral, 119 00:06:13,980 --> 00:06:14,710 moi perigoso. 120 00:06:14,710 --> 00:06:19,759 Entón, o que eu estou facendo aquí é legal C, pero non necesariamente a mellor xogada. 121 00:06:19,759 --> 00:06:22,300 Agora, cando declarar e iniciar unha matriz á vez, 122 00:06:22,300 --> 00:06:23,960 hai realmente unha fermosa sintaxe especial que 123 00:06:23,960 --> 00:06:26,250 pode usar para cubrir a matriz cos seus valores iniciais. 124 00:06:26,250 --> 00:06:30,130 Pode estar abondo para declarar unha matriz de tamaño 100, 125 00:06:30,130 --> 00:06:33,430 e, a continuación, teño que dicir, o elemento 0 é igual a este; elemento 1 é igual a este; 126 00:06:33,430 --> 00:06:34,850 elemento 2 é igual a iso. 127 00:06:34,850 --> 00:06:36,370 Cal é o punto, non? 128 00:06:36,370 --> 00:06:39,470 >> Se é unha pequena matriz, podería facer algo coma isto. 129 00:06:39,470 --> 00:06:44,360 Bool truthtable 3 é igual aberta chaveta e logo coma 130 00:06:44,360 --> 00:06:48,060 separar a lista de elementos que quere poñer na matriz. 131 00:06:48,060 --> 00:06:50,520 A continuación, pecha rizado coma cinta. 132 00:06:50,520 --> 00:06:53,910 Isto crea unha matriz de tamaño tres chamado Truthtable, 133 00:06:53,910 --> 00:06:56,090 con elementos falso, é verdadeiro, e certo. 134 00:06:56,090 --> 00:06:59,270 E, de feito, a instanciação sintaxe que teño aquí é 135 00:06:59,270 --> 00:07:03,350 exactamente o mesmo que o que fai sintaxe elemento individual abaixo. 136 00:07:03,350 --> 00:07:09,380 Estas dúas formas de codificación faría producir a mesma matriz exacta. 137 00:07:09,380 --> 00:07:11,740 >> Do mesmo xeito, poderíamos facer unha iteración ao longo de todos os elementos 138 00:07:11,740 --> 00:07:15,400 dunha matriz usando un lazo, o cal, en realidade, é un moi encarecidamente 139 00:07:15,400 --> 00:07:16,790 at-home exercicio. 140 00:07:16,790 --> 00:07:20,720 Como crear unha matriz 100 de números enteiros, onde 141 00:07:20,720 --> 00:07:23,477 cada elemento da matriz é o seu índice? 142 00:07:23,477 --> 00:07:26,560 Así, por exemplo, temos unha gama de 100 números enteiros, e no primeiro elemento, 143 00:07:26,560 --> 00:07:27,790 queremos poñer 0. 144 00:07:27,790 --> 00:07:29,810 No segundo elemento, queremos poñer un. 145 00:07:29,810 --> 00:07:33,319 No terceiro elemento, queremos para poñer 2; e así por diante e así por diante. 146 00:07:33,319 --> 00:07:35,360 Isto é realmente un bo at-home exercicio para facelo. 147 00:07:35,360 --> 00:07:38,190 148 00:07:38,190 --> 00:07:40,220 >> Aquí, non se parece como moi cambiou. 149 00:07:40,220 --> 00:07:44,170 Pero teña en conta que entre o corchetes, esta vez, 150 00:07:44,170 --> 00:07:45,830 Realmente omitido o número. 151 00:07:45,830 --> 00:07:48,000 Se está usando este moi instanciação especial 152 00:07:48,000 --> 00:07:50,380 para crear unha sintaxe array, o que realmente non facer 153 00:07:50,380 --> 00:07:53,491 necesidade de indicar o tamaño da matriz de antemán. 154 00:07:53,491 --> 00:07:55,740 O compilador é intelixente dabondo saber que, en realidade, 155 00:07:55,740 --> 00:07:58,980 Queres unha matriz de tamaño 3, porque poñer tres elementos 156 00:07:58,980 --> 00:08:00,640 á dereita do signo igual. 157 00:08:00,640 --> 00:08:04,140 Se colocara catro, tería lle deu unha táboa de verdade de tamaño catro; 158 00:08:04,140 --> 00:08:06,270 e así por diante e así por diante. 159 00:08:06,270 --> 00:08:09,380 >> As matrices non está limitado a unha única dimensión, o que é moi legal. 160 00:08:09,380 --> 00:08:12,000 Pode realmente ter tantos especificadores secundarios como quere. 161 00:08:12,000 --> 00:08:16,470 Así, por exemplo, se quere crear unha placa para o xogo Batalla Naval, que, 162 00:08:16,470 --> 00:08:20,910 se xa xogou, é un xogo que é xogado con cravetas na 10 por 10 reixa, 163 00:08:20,910 --> 00:08:22,450 pode crear unha matriz como este. 164 00:08:22,450 --> 00:08:26,030 Pódese dicir bool paréntese buque de guerra 10 165 00:08:26,030 --> 00:08:29,590 cadrado pechado paréntese soporte 10 pechou paréntese. 166 00:08:29,590 --> 00:08:32,710 >> E entón, pode optar por interpretar isto na súa mente como un 10 167 00:08:32,710 --> 00:08:35,576 por 10 reixa de células. 168 00:08:35,576 --> 00:08:37,409 Agora, en realidade, na memoria, realmente fai só 169 00:08:37,409 --> 00:08:42,440 seguen a ser un elemento 100, matriz dimensional única. 170 00:08:42,440 --> 00:08:46,070 E iso, en realidade, vale para se teñen tres dimensións ou catro ou cinco. 171 00:08:46,070 --> 00:08:49,420 Realmente só se multiplica todo o indices-- 172 00:08:49,420 --> 00:08:51,130 ou a totalidade do tamaño specifiers-- xuntos, 173 00:08:51,130 --> 00:08:53,480 e é só incorporarse un unidimensional matriz dese tamaño. 174 00:08:53,480 --> 00:08:57,090 >> Pero en termos de organización e visualización e percepción humana, 175 00:08:57,090 --> 00:08:59,240 pode ser moito máis doado traballando cunha reixa 176 00:08:59,240 --> 00:09:02,980 se está a traballar nun xogo como Tic-tac-dedo do pé ou Battleship, 177 00:09:02,980 --> 00:09:05,179 ou algo así. 178 00:09:05,179 --> 00:09:06,970 É unha gran abstracción, en vez de ter 179 00:09:06,970 --> 00:09:09,340 para pensar nun Tic-tac-dedo do pé tarxeta como unha liña de nove 180 00:09:09,340 --> 00:09:13,810 cadrados ou un taboleiro de batalla como unha liña de 100 prazas. 181 00:09:13,810 --> 00:09:16,010 A 10 por 10 reixa ou tres por tres reixa pode ser 182 00:09:16,010 --> 00:09:17,225 moito máis fácil de entender. 183 00:09:17,225 --> 00:09:19,820 184 00:09:19,820 --> 00:09:22,280 >> Agora, algo realmente importante sobre matrices. 185 00:09:22,280 --> 00:09:25,950 Podemos tratar cada individuo elemento da matriz como unha variable. 186 00:09:25,950 --> 00:09:27,700 Vimos que antes cando estabamos atribuíndo 187 00:09:27,700 --> 00:09:32,240 o valor True a certos Booleans ou probando os en condicionais. 188 00:09:32,240 --> 00:09:35,960 Pero non podemos tratar todo si matrices como variables. 189 00:09:35,960 --> 00:09:41,760 Non podemos, por exemplo, asignarlle unha matriz a outra matriz usando a asignación 190 00:09:41,760 --> 00:09:42,930 operador. 191 00:09:42,930 --> 00:09:44,640 Non é legal C. 192 00:09:44,640 --> 00:09:47,920 >> Se queremos, por que example-- estariamos facendo nese exemplo 193 00:09:47,920 --> 00:09:50,200 sería copiar unha variedade a outra. 194 00:09:50,200 --> 00:09:53,810 Se queremos facelo, nós, en realidade, Debe usar un loop para copiar 195 00:09:53,810 --> 00:09:56,550 cada elemento individual unha de cada vez. 196 00:09:56,550 --> 00:09:58,700 Sei que é un pouco lento. 197 00:09:58,700 --> 00:10:04,022 >> Así, por exemplo, se tivésemos estes parella de liñas de código, isto funcionaría? 198 00:10:04,022 --> 00:10:05,230 Ben, non, non, non? 199 00:10:05,230 --> 00:10:07,860 Porque estamos tentando para asignar a comida bar. 200 00:10:07,860 --> 00:10:09,860 Isto non vai funcionar, porque é unha matriz, 201 00:10:09,860 --> 00:10:13,130 e nós acabamos de describir que iso non é legal C. 202 00:10:13,130 --> 00:10:15,580 >> Pola contra, se queremos por favor copie o contido da comida 203 00:10:15,580 --> 00:10:18,070 en bar, que é o que nós estamos intentando facer aquí, 204 00:10:18,070 --> 00:10:19,970 necesitariamos dunha sintaxe como esta. 205 00:10:19,970 --> 00:10:24,170 Temos un loop que de J é igual a 0 ata 5, 206 00:10:24,170 --> 00:10:28,390 e nós incrementar J en cada iteración o loop e elementos asignar así. 207 00:10:28,390 --> 00:10:33,360 Isto ía producir barra tamén sendo un, dous, tres, catro, cinco, 208 00:10:33,360 --> 00:10:36,730 pero hai que facelo neste exacto forma lenta elemento por elemento, 209 00:10:36,730 --> 00:10:40,009 no canto de só copiando a matriz enteira. 210 00:10:40,009 --> 00:10:42,050 Noutra programación linguas, máis modernos, 211 00:10:42,050 --> 00:10:45,610 pode, de feito, facer exactamente que é igual a sintaxe simple. 212 00:10:45,610 --> 00:10:49,620 Pero C, por desgraza, estamos Non ten permiso para facelo. 213 00:10:49,620 --> 00:10:52,026 >> Agora, hai outra cousa que quero mencionar 214 00:10:52,026 --> 00:10:54,650 sobre matrices que poden ser un pouco pouco complicado a primeira vez que 215 00:10:54,650 --> 00:10:55,990 traballar con eles. 216 00:10:55,990 --> 00:10:59,860 Discutir nun vídeo sobre o ámbito de variables, 217 00:10:59,860 --> 00:11:04,940 que a maioría das variables en C, cando chamar Los en funcións, pásase por valor. 218 00:11:04,940 --> 00:11:08,620 Vostede recorda o que significa para pasar por algo de valor? 219 00:11:08,620 --> 00:11:12,570 Isto significa que nós estamos facendo unha copia do variable que está a ser pasado. 220 00:11:12,570 --> 00:11:16,290 A función de receptor, a función que está a recibir a variable, 221 00:11:16,290 --> 00:11:17,730 non recibe a propia variable. 222 00:11:17,730 --> 00:11:20,850 Recibe o seu propio local, copia do mesmo para traballar. 223 00:11:20,850 --> 00:11:24,070 >> Arrays, por suposto, facer non seguir esta regra. 224 00:11:24,070 --> 00:11:27,600 Pola contra, o que chamamos este está pasando por referencia. 225 00:11:27,600 --> 00:11:31,360 O destinatario da chamada, en realidade, non recibe a matriz. 226 00:11:31,360 --> 00:11:34,207 Non recibe seu propia copia local do mesmo. 227 00:11:34,207 --> 00:11:36,040 E se pensar sobre el, iso ten sentido. 228 00:11:36,040 --> 00:11:39,750 Se matrices son realmente grande, leva moito tempo e esforzo 229 00:11:39,750 --> 00:11:44,470 para facer unha copia dunha matriz de 100 ou 1.000 ou 10.000 elementos, 230 00:11:44,470 --> 00:11:48,290 que non paga a pena para un funcionar para recibir unha copia do mesmo, 231 00:11:48,290 --> 00:11:51,037 facer algún traballo con el, e, a continuación, só pode facer coa copia; 232 00:11:51,037 --> 00:11:53,120 que non debe ter Lo colgado en torno de máis. 233 00:11:53,120 --> 00:11:54,710 >> Como os arrays son algúns voluminosos e pesados, 234 00:11:54,710 --> 00:11:56,001 nós só paso-los por referencia. 235 00:11:56,001 --> 00:12:01,210 Nós só confiar en que a función para non romper nada. 236 00:12:01,210 --> 00:12:03,010 Entón, realmente obter a matriz. 237 00:12:03,010 --> 00:12:05,290 Ela non recibe a súa propia copia local do mesmo. 238 00:12:05,290 --> 00:12:07,170 >> Entón, o que iso significa, a continuación, cando o receptor 239 00:12:07,170 --> 00:12:08,970 manipula elementos do array? 240 00:12:08,970 --> 00:12:10,780 Que pasa? 241 00:12:10,780 --> 00:12:13,210 De momento, imos encubrir sobre por que exactamente esta 242 00:12:13,210 --> 00:12:15,320 ocorre, por que matrices pásase por referencia 243 00:12:15,320 --> 00:12:17,810 e todo o demais é pasado por valor. 244 00:12:17,810 --> 00:12:20,470 Pero eu prometer a vostede, nós iremos volver e darlle a resposta 245 00:12:20,470 --> 00:12:23,750 para iso nun vídeo máis tarde. 246 00:12:23,750 --> 00:12:28,110 >> Aquí está máis un exercicio para ti antes de finalizar as cousas en arrays. 247 00:12:28,110 --> 00:12:31,400 O monte de código aquí, iso é non particularmente bo estilo, 248 00:12:31,400 --> 00:12:33,400 só vou facer esa excepción. 249 00:12:33,400 --> 00:12:36,660 Hai comentarios aquí, o que é moi mala forma. 250 00:12:36,660 --> 00:12:39,750 Pero é só porque eu quería ser capaz de caber todo na pantalla. 251 00:12:39,750 --> 00:12:44,360 >> Na parte superior, podes ver que eu teño dúas declaracións de funcións para matriz set 252 00:12:44,360 --> 00:12:45,820 e establecer int. 253 00:12:45,820 --> 00:12:49,680 Set matriz aparentemente recibe un array de catro números enteiros como a súa entrada. 254 00:12:49,680 --> 00:12:52,767 E conxunto int aparentemente leva un único enteiro como a súa entrada. 255 00:12:52,767 --> 00:12:54,350 Pero ambos non teñen unha saída. 256 00:12:54,350 --> 00:12:57,689 A saída, o retorno escriba, de cada un é nula. 257 00:12:57,689 --> 00:12:59,480 Na principal, temos unha par de liñas de código. 258 00:12:59,480 --> 00:13:02,730 Declaramos unha variable enteira A chamada e asignar-lle o valor 10. 259 00:13:02,730 --> 00:13:07,080 Nós declarar unha matriz de catro números enteiros chamado B e asignar os elementos 0, 1, 260 00:13:07,080 --> 00:13:08,730 2, e 3, respectivamente. 261 00:13:08,730 --> 00:13:12,190 Entón, temos unha chamada para definir int e unha chamada para definir matriz. 262 00:13:12,190 --> 00:13:15,910 Os axustes de conxunto de matriz e conxunto int están alí en baixo, na parte inferior. 263 00:13:15,910 --> 00:13:17,640 >> E así, unha vez máis, pídolle a pregunta. 264 00:13:17,640 --> 00:13:20,770 O que queda impreso aquí a finais principal? 265 00:13:20,770 --> 00:13:23,020 Hai unha col impresión. Eu son imprimindo dous enteiros. 266 00:13:23,020 --> 00:13:28,010 Estou imprimindo o contido da e o contido de soporte B cadrado 0. 267 00:13:28,010 --> 00:13:29,880 Deter o vídeo aquí e tomar un minuto. 268 00:13:29,880 --> 00:13:35,482 Pode descubrir o que esta función imprimirá a finais? 269 00:13:35,482 --> 00:13:38,190 Esperemos que, se se lembra o distinción entre pasaxe por valor 270 00:13:38,190 --> 00:13:41,680 e paso por referencia, este problema non era moi complicado para ti. 271 00:13:41,680 --> 00:13:44,130 E a resposta que faría atopei é esta. 272 00:13:44,130 --> 00:13:47,660 Se vostede non está realmente seguro de como a por que ese é o caso, teña un segundo, 273 00:13:47,660 --> 00:13:50,620 volver, revisar o que eu era só discutir sobre o paso de matrices 274 00:13:50,620 --> 00:13:53,450 por referencia, contra o paso outras variables por valor, 275 00:13:53,450 --> 00:13:56,680 e esperanza, que vai facer un pouco máis de sentido. 276 00:13:56,680 --> 00:13:59,760 >> Eu son Doug Lloyd, e este é CS50. 277 00:13:59,760 --> 00:14:01,467