[REPRODUCCIÓN DE MÚSICA] DOUG LLOYD: De acuerdo. Trabajar con una sola las variables es bastante divertido. Pero lo que si queremos trabajar con una gran cantidad de variables, pero no quiero tener un montón de diferentes nombres volando alrededor nuestro código? En este caso, las matrices son va a venir en muy práctico. Las matrices son un dato realmente fundamental estructura para cualquier lenguaje de programación que va a utilizar. Y son muy, muy útil, sobre todo, como veremos, en el CS 50. Utilizamos matrices para mantener valores del mismo tipo de datos en ubicaciones de memoria contiguas. Es decir, es una de manera que podemos agrupar un montón de números enteros juntos en memoria o un grupo de caracteres o flota en la memoria de verdad cerrar juntos y trabajar con ellos sin tener que dar a cada de un nombre propio, único, que puede volverse un problema después de un rato. Ahora, una manera de analogía entre matrices es pensar en su poste local el cargo por un segundo. Así que paso lejos de la programación y cierra los ojos y visualizar en su mente su oficina de correos local. Por lo general, en la mayoría de post oficinas, hay un gran banco a apartados de correos en la pared. Una matriz es un bloque gigante de memoria contigua, de la misma manera que un correo electrónico banco en su oficina de correos es un gran espacio en el pared de la oficina de correos. Las matrices se han dividido en pequeñas, idénticamente bloques de tamaño del espacio, cada uno de los cuales se llama un elemento, en de la misma manera que la pared del puesto la oficina se ha dividido en pequeñas, idénticamente bloques de tamaño del espacio, que llamamos un apartado de correos. Cada elemento de la matriz puede almacenar una cierta cantidad de datos, así como cada apartado de correos es capaz para mantener una cierta cantidad de correo. ¿Qué puede ser almacenado en cada elemento de la matriz es variables de los mismos datos tipo, tal como int o char, simplemente como en su casilla de correo, sólo se puede encajar cosas de un tipo similar, tales como cartas o paquetes pequeños. Por último, podemos acceder a cada elemento de la la matriz directamente por número de índice, al igual que podemos acceder a nuestra oficina de correos boxear por conocer su número de buzón. Esperemos que la analogía le ayuda a obtener la cabeza en torno a la idea de matrices por analogías a otra cosa que son, probablemente, ya familiarizados. En C, los elementos de una matriz son indexadas a partir de 0, no desde 1. Y esto es realmente importante. Y de hecho, es por eso que, en el CS 50, y por qué los informáticos frecuentes contará a partir de 0, es debido a la gran variedad de C indexación, que siempre comienza en 0. Así que si una serie se compone de n elementos, el primer elemento de dicha matriz se encuentra en el índice 0, y el último elemento de la matriz se encuentra en el índice n menos 1. Una vez más, si hay n elementos en nuestra matriz, el último índice es n menos 1. Así que si nuestra matriz tiene 50 elementos, los primer elemento se encuentra en el índice 0, y el último elemento se encuentra en el índice 49. Desafortunadamente, o afortunadamente, dependiendo de su perspectiva, C es muy indulgente aquí. No le impedirá salir de los límites de la matriz. Usted podría tener acceso al menos 3 elemento de la matriz o el elemento 59 de la matriz, si su array sólo cuenta con 50 elementos. No detendrá su programa de compilar, pero en tiempo de ejecución, puede encontrarse con un fallo de segmentación temida si usted comienza a acceder a la memoria que está fuera de los límites de lo que que pidió su programa para darle. Así que ten cuidado. ¿Qué hace un array declaración parece? ¿Cómo codificar una matriz en existencia como codificamos cualquier otra variable? Hay tres partes en una matriz declaration-- un tipo, un nombre, y un tamaño. Esto es muy similar a una declaración de variables, que es sólo un tipo y un nombre, siendo el elemento de tamaño el caso especial de una matriz, porque estamos recibiendo un montón de ellos al mismo tiempo. Así que el tipo es qué tipo de variable que quiere cada elemento de la matriz sea. No quiero que una matriz de enteros? Entonces, el tipo de datos debe ser int. ¿Quieres que sea un serie de dobles o flotadores? El tipo de datos debe ser el doble o flotar. El nombre es lo que quiere llamar a su matriz. ¿Qué quieres para nombrar este gigante banco de números enteros o flotadores o caracteres o dobles, o lo que usted tiene? ¿Qué quieres llamarlo? Explica por sí mismo bonito. Por último, el tamaño, que va dentro de corchetes, es el número de elementos que lo haría como la matriz para contener. ¿Cuántos números enteros es lo que quieres? ¿Cuántas carrozas es lo que quieres? Así, por ejemplo, int calificaciones de los estudiantes 40. Esto declara una matriz llamada Estudiante calificaciones, que consta de 40 números enteros. Explica por sí mismo bonito, espero. He aquí otro ejemplo. Precios del menú dobles 8. Esto crea una matriz llamada Los precios del menú, que consiste espacio en la memoria durante ocho dobles. Si usted piensa en cada elemento de una matriz de tipo de tipo de datos, Así, por ejemplo, un único elemento de una matriz de tipo int, de la misma manera que pensaría en cualquier otro variable de tipo int, todas las operaciones familiares que nos discutido previamente en las Operaciones vídeo tendrá sentido. Así que aquí, podríamos declarar una matriz de Booleans llamados Truthtable, que consiste en piezas para 10 Booleanos. Y entonces, al igual que pudimos asignar un valor a cualquier otra variable de tipo Boole, podríamos decir algo como Truthtable corchete 2, que es la forma indicada, qué elemento de la tabla de verdad? El tercer elemento de la tabla de verdad, porque recuerden, estamos contando desde 0. Así que esa es la forma en que indicamos el tercer elemento de la tabla de verdad. Truthtable 2 es igual a falsa, al igual que podríamos declare-- o podríamos ceder, más bien, cualquier Variable de tipo booleano es falso. También podemos utilizarlo en condiciones. si (truthtable 7 == true), es decir, si el octavo elemento de Truthtable es cierto, tal vez queremos imprimir un mensaje para el usuario, printf ("TRUE! n") ;. Eso nos hace decir Truthtable 10 es igual a la verdadera, ¿no? Bueno, yo puedo, pero es bastante peligroso, porque recuerden, tenemos un arreglo de 10 Booleanos. Así que el mayor índice de que el compilador nos ha dado es 9. Este programa se compilará, pero si algo más en la memoria existe donde nos haría esperar Truthtable 10 para ir, podríamos sufrir un fallo de segmentación. Nosotros podría salirse con la suya, pero en general, bastante peligroso. Así que lo que estoy haciendo aquí es C jurídica, pero no necesariamente la mejor jugada. Ahora, cuando se declara y inicializar una matriz de forma simultánea, hay realmente una bonita sintaxis especial que puede utilizar para llenar la matriz con sus valores iniciales. Se puede conseguir engorroso declarar una matriz de tamaño 100, y luego tengo que decir, el elemento 0 es igual a esto; elemento 1 es igual a esto; elemento 2 es igual que. ¿Qué es el punto, ¿no? Si se trata de una pequeña matriz, podría hacer algo como esto. Bool truthtable 3 es igual abierta corchete y luego coma separar la lista de elementos que usted quiere poner en la matriz. A continuación, cierre coma corchete. Esto crea una gran variedad de tamaño de tres llamados Truthtable, con elementos falsos, verdadero y cierto. Y de hecho, la creación de instancias sintaxis que tengo aquí es exactamente lo mismo que hacer la sintaxis elemento individual a continuación. Estas dos formas de codificación haría producir la misma gama exacta. Del mismo modo, podríamos iterar sobre todo de los elementos de una matriz mediante un bucle, que, a su De hecho, es un muy fuertemente recomendado en casa de ejercicios. ¿Cómo se crea una matriz de 100 números enteros, donde cada elemento de la matriz es su índice? Así, por ejemplo, tenemos una gama de 100 números enteros, y en el primer elemento, queremos poner 0. En el segundo elemento, queremos poner 1. En el tercer elemento, queremos poner 2; Y así sucesivamente y así sucesivamente. Esa es una muy buena en casa de ejercicios para hacer eso. Aquí, no se ve como también ha cambiado mucho. Pero nótese que entre el corchetes, esta vez, De hecho, he omitido el número. Si está utilizando este mismo instanciación especial sintaxis para crear una matriz, que en realidad no lo hace necesario indicar el tamaño de la matriz de antemano. El compilador es lo suficientemente inteligente saber que en realidad quieren una matriz de tamaño 3, porque usted pone tres elementos a la derecha del signo igual. Si puso cuatro, tendría que dada una tabla de verdad del tamaño de cuatro; Y así sucesivamente y así sucesivamente. Las matrices no están restringidas a un solo dimensión, que está muy bien. En realidad puede tener hasta especificadores secundarios como desee. Así por ejemplo, si desea crear un tablero para el juego acorazado, que, si alguna vez jugado, es un juego que es jugado con clavijas en el 10 por 10 rejilla, podría crear una serie como esta. Se podría decir Bool acorazado corchete 10 cuadrado cerrado corchete soporte de 10 cierra corchetes. Y luego, se puede optar por interpretar esto en su mente como un 10 por 10 rejilla de celdas. Ahora, de hecho, en la memoria, lo que realmente hace justamente siendo un elemento 100, dimensional única. Y esto, de hecho, va para si tener tres dimensiones o cuatro o cinco. En realidad, sólo hace multiplicar toda la indices-- o la totalidad del tamaño specifiers-- juntos, y que acaba de obtener un unidimensional array de ese tamaño. Pero en términos de organización y la visualización y la percepción humana, puede ser mucho más fácil para trabajar con una cuadrícula si usted está trabajando en un juego como Tic-tac-dedo del pie o del acorazado, o algo asi. Es una gran abstracción, en lugar de tener pensar en un Tic-tac-toe tablero como una línea de nueve años cuadrados o un tablero acorazado como una línea de 100 plazas. Un 10 por 10 de rejilla o de tres A las tres de la rejilla es, probablemente, mucho más fácil de percibir. Ahora, algo realmente importante acerca de las matrices. Podemos tratar a cada individuo elemento de la matriz como una variable. Vimos que antes cuando estábamos asignando el valor Fiel a ciertos Booleans o ponerlas a prueba en los condicionales. Pero no podemos tratar todo arrays sí mismos como variables. No podemos, por ejemplo, asignar una matriz a otra matriz mediante la asignación operador. No es C. legal Si queremos, por ejemplo-- lo estaríamos haciendo en ese ejemplo sería copiar una matriz en otra. Si queremos hacer eso, que en realidad necesitará utilizar un bucle para copiar cada elemento individual de una en una. Sé que es un poco lento. Así, por ejemplo, si tuviéramos este par de líneas de código, funcionaría esto? Bueno, no, no lo haría, ¿no? Debido a que estamos tratando para asignar los alimentos a la barra. Eso no va a trabajar, porque es una matriz, y que acabamos de describir que eso no es legal C. En cambio, si queremos copiar el contenido de los alimentos en la barra, que es lo que que estamos tratando de hacer aquí, necesitaríamos una sintaxis como esta. Tenemos un bucle for que va de J es igual a 0 hasta 5, y incrementamos J en cada iteración de el lazo y elementos de asignar el estilo. Esto resultaría en bar también ser uno, dos, tres, cuatro, cinco, pero tenemos que hacerlo esta misma manera lenta elemento por elemento, en lugar de con sólo la copia de toda la matriz. En otra programación idiomas, las más modernas, puede, de hecho, hacer justo así de simple es igual a la sintaxis. Pero C, por desgracia, estamos no se les permite hacer eso. Ahora, hay otra cosa que quiero mencionar acerca de las matrices que pueden ser un poco poco complicado la primera vez que trabajar con ellos. Hemos discutido en un video sobre el alcance variable que la mayoría de las variables en C, cuando se llama en funciones, se pasan por valor. ¿Te acuerdas de lo que significa para pasar algo de valor? Significa que estamos haciendo una copia de la variable que está siendo aprobada en. La función destinatario de la llamada, la función de eso está recibiendo la variable, no recibe la propia variable. Consigue su propio local, copia de la misma para trabajar. Matrices, por supuesto, lo hacen No seguir esta regla. Más bien, lo que llamamos presente se pasa por referencia. El destinatario de la llamada realidad ¿Recibe la matriz. No recibe su propia copia local de la misma. Y si lo piensas él, esto tiene sentido. Si las matrices son realmente grande, toma mucho tiempo y esfuerzo para hacer una copia de una serie de 100 o 1.000 o 10.000 elementos, que no vale la pena para un funcionar para recibir una copia de la misma, hacer un trabajo con él, y luego solo se puede hacer con la copia; no necesita tener que dando vueltas más. Debido a que las matrices son algunos voluminoso y engorroso, acabamos de pasar por referencia. Sólo confiamos en que la función que, no romper nada. Así se pone de hecho la matriz. No puede ser su propia copia local de la misma. Entonces, qué significa esto, entonces, cuando el destinatario de la llamada manipula elementos de la matriz? ¿Lo que pasa? Por ahora, vamos a glosamos sobre qué exactamente esto sucede, por qué matrices se pasan por referencia y todo lo demás se pasa por valor. Pero te prometo, lo haremos devolver y le dará la respuesta a esto en un video más tarde. He aquí un ejercicio más para usted antes de terminar las cosas en matrices. El montón de código aquí, eso es no particularmente buen estilo, simplemente voy a hacer esta advertencia. No hay comentarios por aquí, que es bastante mala forma. Pero es sólo porque yo quería ser capaz de adaptarse a todo en la pantalla. En la parte superior, se puede ver que tengo dos declaraciones de funciones para la matriz de conjuntos y establecer int. Set variedad aparentemente toma una matriz de cuatro enteros como su entrada. Y conjunto int aparentemente toma un solo entero como su entrada. Pero dos de ellos no tienen una salida. La salida, el regreso escriba, de cada uno es nula. En principal, tenemos una par de líneas de código. Declaramos una variable entera denominado A y asignarle el valor 10. Declaramos una matriz de cuatro enteros llamado B y asignar los elementos 0, 1, 2, y 3, respectivamente. Entonces, tenemos una llamada a establecer int y un llamado para establecer matriz. Las definiciones de la matriz de conjuntos y el conjunto de int están allá abajo, en la parte inferior. Y así, una vez más, le pido a la pregunta. Lo que se imprime aquí al final de Main? Hay una col impresión. estoy impresión de dos enteros. Estoy imprimir el contenido de A y el contenido de B cuadrado soporte de 0. Pausa el video aquí y tomar un minuto. ¿Puedes imaginar lo que esto función imprimirá al final? Esperemos que, si usted recuerda la distinción entre pasar por valor y que pasa por referencia, esta problema no era demasiado difícil para ti. Y la respuesta que lo haría he encontrado es esto. Si usted no está realmente seguro en cuanto a ¿por qué ese es el caso, tomar un segundo, volver, reviso lo que yo era sólo discutir acerca de pasar arrays por referencia, que pasa frente otras variables de valor, y es de esperar, que va a hacer un poco más de sentido. Soy Doug Lloyd, y esto es CS50.