[Música tocando] Doug LLOYD: Aceptar. Traballamos con números enteiros, traballamos cos personaxes, traballamos Carrozas, dobres, cadeas e bools. Nós xa esgotou practicamente todos dos [inaudível] tipo que estiveron dispoñibles para todos xuntos. Pero agora queremos facer algo máis. Como facemos isto? Como podemos crear diferentes tipos de datos? Podemos facelo empregando estruturas. Entón estruturas permitirá a unificación variables de distintos tipos nun único, novo tipo de variable, que podemos asignar o seu propio nome de tipo. Este é realmente un forte cousa que ser capaz de facer, porque podemos agora grupo elementos de diferentes tipos de datos xuntos, que teñen unha conexión lóxica. Fomos capaces de facelo con matrices tipo de, non? Podemos variables do grupo do mesmo tipo de datos xuntos nunha unidade gran de memoria, unha matriz. Pero non fomos capaces de mesturar ata diferentes tipos de datos en conxunto. Non podemos, por exemplo, asociar un número enteiro, e un personaxe, e un dobre todo na mesma cousa e chamar que un todo. Pero coas estruturas, ou frecuentemente chamada estruturas, realmente pode. Así, unha estrutura é unha especie de como unha variable super. É unha variable que conteña outras variables dentro do mesmo. Entón aquí está un exemplo de unha estrutura moi simple. Isto é o que a sintaxe quedaría como para crear unha estrutura de un coche. Agora, imos pasar a sintaxe aquí. Struct, que é a palabra clave que indica que estou creando un novo tipo de datos aquí. En particular, o nome do tipo de datos é será coche struct, como veremos. Pero este é o tipo de punta off para o compilador que este como un grupo de variables que está pasando para ser considerado parte do mesmo tipo nun minuto. Coches, só o nome da estrutura. Unha vez máis, o tipo de datos aquí vai ser o coche struct, non só coche. Pero se ten diferente-- se crear varias estruturas no mesmo programa, ten que distinguir entre e struct. Coche para struct, eu tamén pode ter estudante struct, por exemplo, no mesmo programa. Dentro das claves son todos os campos chamados, ou os membros da estrutura. Entón, cales son algunhas das cousas que son inherentes nun coche? Ben, ten xeralmente un ano, ten un nome de modelo, e unha placa de licenza, un conta-quilómetros que ten xeralmente un certo número de millas sobre el, e quizais un tamaño do motor. E como se pode ver, eu estou mesturando-se enteiros e caracteres e dobres. Están todos indo a ser parte deste novo tipo de datos. Finalmente, a última cousa que eu teño que facer, non se esqueza este pequeno punto e coma Ao final. Despois de que rematar de definir a estrutura, hai que poñer un punto e coma ao final. É unha sintáctica moi común erro, porque cunha función, por exemplo, que tería só chaveta aberta, preto chaveta. Non especificou un punto e coma no final dunha definición de función. Isto parece unha función definición, pero non é, e así o punto e coma non é só un recordatorio de que Debe poñer-lo alí, porque o compilador doutro xeito non vai sabe o que facer con el. É un erro moi común para facer accidentalmente cando está definindo primeiro estruturas. Aceptar. Entón, nós xeralmente definir as nosas estruturas na parte superior dos nosos programas porque pode que vas para ser usado por varias funcións. Non queremos establecer unha struct dentro dunha función, porque entón podemos only-- o ámbito da estrutura realmente só existe dentro desa función. Nós probablemente quere establecer unha estrutura para que poidamos usalo en múltiples funcións, ou que en múltiples arquivos que son amarre para crear o noso programa único. Ás veces, tamén, no canto de definir a estrutura na parte superior, onde poñer o seu libra e inclúe a súa libra define, por exemplo, pode poñelos arquivos dot h separados, que, a continuación, libra incluír a si mesmo. Polo tanto, temos estruturas, pero agora necesitamos comezar dentro deles. Como é que imos ir por dentro unha estrutura para acceso estes sub-variables, estas variables que hai no interior da estrutura? Ben, nós temos unha cousa chamada o operador punto, o que nos permite para acceder aos campos da estrutura. Así, por exemplo, digamos que eu teño declarado meus datos estrutura do tipo nalgún lugar na parte superior do meu programa, ou que en un ficheiro dot h que teño libra incluído. Agora ben, se eu queira crear un novo variable deste tipo de datos, o que podo dicir, struct coche, meu coche, punto e coma. Así como eu podería dicir int x, ou nome da secuencia punto e coma. O tipo de datos aquí é coche struct, o nome da variable é o meu coche, e entón eu podo usar o operador punto para acceder aos varios campos de meu coche. Entón eu podo dicir o meu coche ano punto é igual a 2,011. Isto é perfectamente ben. Ano, se se lembra, foi definida como un campo enteiro dentro deste coche struct tipo de datos. Así, calquera variable dos datos coche struct tipo, como o meu coche, podo dicir que o meu coche ano punto é igual a e despois asignar -lle algún valor enteiro de 2011. Meu punto é igual a tarxeta do coche CS50. Meu hodômetro tarxeta de punto é igual a 50505 punto e coma. Todos estes son perfectamente ben e iso é como podemos acceder ao campos da estrutura. Estruturas, con todo, non é necesario a crear na pila. Así como calquera outra variable, pode reservar los dinamicamente. Se temos un programa que pode estar xerando moitas estruturas, non sabemos cantas imos ter, entón necesitamos dinamicamente reservar esas estruturas como o noso programa está a ser executado. E por iso, se nós estamos indo para acceder ao campos dunha estrutura nese contexto, Lembre que primeiro necesitamos dereference o anotador para a estrutura, e, a continuación, xa que a eliminación de referencia punteiro, entón podemos acceder aos campos. Se temos só un Punteiro para a estrutura, non podemos só dicir campo punteiro dot nome e obter o que estamos buscando. Hai a etapa extra de dereferencing. Entón, imos dicir que no canto do previous-- como no exemplo anterior, no canto de declaralo lo na pila, coche struct, meu coche, punto e coma, digo coche struct, estrela, un punteiro para unha coche struct chamado meu coche, equivale ao tamaño de malloc de coche struct. Tamaño imos descubrir cantas bytes seu novo tipo de datos ocupa. Non necesariamente só precisa utilizar tamaño, ancho, int ou char, ou calquera dos tipos de datos embutidos. O compilador é intelixente dabondo para descubrir cantos bytes están obrigados á súa nova estrutura. Así que me malloc unidade de memoria grande abondo para soster un coche struct, e eu recibín un punteiro de volta para ese bloque de memoria, e ese punteiro se lle atribúe ao meu coche. Agora, se eu queira acceder os campos do meu coche, I primeiro dereference meu coche usando o operador de eliminación de referencia, estrela que vimos desde os punteiros vídeos, e, a continuación, despois de que eu dereference, entón podo usar o operador punto para acceder aos varios campos de meu coche. Protagonizar meu coche dot ano é igual a 2011. Isto tería o efecto queremos neste caso porque temos dinamicamente alocados meu coche. Iso é medio chat, non? Hai un proceso de 2 pasos agora. Agora temos que dereference-- temos un operador de estrela, e temos un operador punto. E como podería esperar, porque Programadores C amo camiños máis curtos para facer as cousas, hai unha camiño máis curto para facelo. Hai outro operador chama frecha, o que fai que este proceso moito máis fácil. A forma como funciona é frecha el primeiro dereferences o punteiro á esquerda lado do operador, e, a continuación, despois de desreferenciado o punteiro á esquerda, el accede ao campo da dereita. E así xa tivemos este tipo Star meu coche dot todo este material, como non había moita cousa a suceder alí. Pero o que podemos facer é, en vez isto-- meu ano frecha coche é igual a 2011. De novo, o que está pasando aquí? En primeiro lugar, eu estou dereferencing meu coche. Que á súa vez, é un punteiro aquí. A continuación, despois de desreferenciado meu coche, eu Pode, entón, acceder aos campos ano, prato, e conta-quilómetros así como eu podería antes de primeiro estrela usado para eliminar referencia o meu coche, e punto para acceder ao campo. Entón vostede pode ter estruturas, vostede Pode que punteiros para estruturas, e ten formas de acceso os dominios destas estruturas, se ten punteiros para Los ou as propias variables. Dot ou frecha en función como a variable foi declarada. Eu son Doug Lloyd, este é CS50.