ROB: Todo ben. Benvido á primeira sección. Estou Rob. JOSÉ: Eu son Joseph. ROB: Entón, imos mergullar á dereita dentro O primeiro a falar é o Appliance. Polo tanto, agardamos que a maioría de vós ten descargada xa. Pero podes ver as instrucións en cs50.net/appliance. Oh Deus, agora eu son auto-consciente. Eu aínda oín-lo. JOSÉ: Wow, parece que é desorientado. ROB: Entón, algunhas persoas teñen tido problemas con el, así que non espera ata o último minuto do problema definido para intentar resolver o aparello e descubrir que non funciona. JOSÉ: E se algo non funciona e precisa de axuda, pode ir cs50.net/discussion onde nós ten un foro onde Pode publicar as súas preguntas. E nós imos chegar a eles eventualmente. ROB: Todo ben. Entón é iso que o Appliance parece. Unha vez máis, é só unha totalmente separada sistema operativo rodando dentro calquera sistema operativo que están funcionando no seu portátil. E as principais cousas que estar usando son gedit. Polo tanto, agardamos que este xa ten chegar a ser un lugar coñecido. O terminal. E tamén pode executar Chrome dentro do aparello. Houbo un par de persoas que informaron internet non funciona no aparato. E algúns deles teñen só asumir que non se quere que sexa Internet no aparello. Pero si, alí se quere para ser seguro. Eu vou dicir iso agora, pero iso non ocorre realmente quere dicir nada. Se a internet non funciona, isto é o que tende a ter executar para resolve-lo. Se está a ter problemas de internet, non lembre que, só publicar-la en Discutir, e imos dicir, realizar iso. Pero a Internet debe estar funcionando. Así, a única outra cousa - si, nada o resto é realmente relevante. Pero eu só quería salientar que - ver neste ángulo inferior dereito. Así, cada un dos seus dispositivos debe ten un enderezo IP. E ao final do semestre, este enderezo IP enderezo a ser máis relevante cando se está a traballar na web p-set, xa que será capaz de acceder a sitio web que está a traballar a partir da súa Chrome local usando este enderezo IP. Pero o que máis me gusta de usar o enderezo IP for - e non ten que facelo, eu só quero indicalo lo - está aquí. Polo tanto, esta é unha xanela de terminal en meu Mac, iso non é o Appliance de todo. E pode buscar o que esta orde fai. Pero eu estou indo directamente SSH ao meu Appliance. Eu non sei o que o IP é. JOSÉ: 168 - 168.224.1.0. ROB: Entón xa que eu son feito con iso, facer sesión no Agora, basicamente, este é o mesmo que o dun fiestra de terminal dentro do meu Appliance. Entón, eu practicamente nunca realmente funcionou de dentro do propio aparello. Eu sempre teño que correr no fondo minimizado e SSHed nel. O problema con isto é que non vai para poder utilizar facilmente gedit directamente dende el. Pero se quere ser un verdadeiro legal hackers, entón ten que afacerse a un liña de comandos editor de texto de calquera maneira. Entón Vin e Emacs e Nano, todos estes diferentes alternativas. Nano tende a ser o máis fácil. E eu creo que non ten destaque de sintaxe. Oh, non, é totalmente fai. Logo, pode usar Nano, porque que un é moi fácil. Ve todos estes comandos na parte inferior. Este símbolo pouco de cenoria. Se aínda non viu iso antes, vai probablemente velo moito agora. De modo xeral, significa a cenoria control, como o inferior esquerda do teclado carácter de control. Entón, aquí está me dicindo aquí - Oh, non é cortado se eu zoom in Entón, de control, X é como Vou saír. E el di que podo bater Y para Si, para o aforro, N para Não Entón, iso é Nano. Vin e Emacs tenden a ser lixeiramente máis complicado e desgastante. Pero pode se acostumar con iso, e entón vai adorar. Entón é iso. JOSÉ: Non é necesario facelo. ROB: Yeah. Vostede é libre de usar para gedit resto do semestre. Así, as preguntas relacionadas co aparello? Ou ten algunha opinión sobre o que máis ten que ser falado sobre o aparello? Si COLUMNA 1: Cando SSHed na súa cousa, se o tinto contrasinal? ROB: Yeah. O contrasinal para practicamente todo no Appliance vai ser tinto. COLUMNA 2: Instalar como un verdadeiro IDE no aparello, que vai traballar? ROB: Eu imaxino Eclipse ten un Versión Fedora, caso en que, si, pode facelo. Probablemente non é realmente paga a pena. COLUMNA 2: Aceptar. Por iso, pode ser máis fácil se eu quería usar o Eclipse, é só usar o nativo e a continuación, facer a carga para - ROB: Oh, que tamén pode ser máis fácil. Pero pode facelo funcionar dentro do aparello. JOSÉ: E para a cámara, a cuestión foi, pode instalar outro IDE dentro do aparello? ROB: Eclipse sendo un exemplo dunha IDE. Calquera outra dúbida aparello? Todo ben. Entón, imos agora avanzar na liña de comandos cousas relacionadas coa interface, de xeito CLI. E unha vez máis, eu só estou indo para o traballo en aquí, porque este é o mesmo que o traballando dentro dunha fiestra de terminal dentro do aparello. Como está esa fonte buscando? É grande o suficiente? Todo ben. Entón, hai unha serie de comandos que ten que estar moi utilizado para ao longo do semestre. A gran dous para navegar son ls, lista os ficheiros deste directorio, e cd, así que cambie de directorio. Entón, podo cambiar a zona de traballo e, a continuación, un patrón moi común é a de un cd directorio e inmediatamente ls o que está no directorio. A xente tamén, por veces, non entender que Tab conclusión é unha cousa. Así como CD, VH, e entón eu bati Tab Eu case nunca escribir a cousa toda. E entón se eu seguir batendo Tab novo, que vai automaticamente comezar a lista para min. Entón eu podo cd vhosts, servidor local. E iso só vai - no caso de non ter oído o termo antes, o directorio é só outra palabra á carpeta. Polo tanto, agora se ve - imos levar isto a arriba. Polo tanto, agora se ve entre parénteses, vostede ver o pequeno til, barra, vhost, slash, servidor local. Así, o til, que se refire para o meu directorio home. É un directorio que está cando SSH dentro É o directorio que está en cando abrir un terminal. É onde comeza. E así eu estou dentro do meu directorio home, e eu estou dentro do vhost directorio dentro do meu directorio home. E entón eu estou dentro do local, directorio aloxar dentro diso. Por iso, algunhas outras cousas útiles co cd - ou ben, en xeral, de xeito dot sempre refírese ao directorio actual. Cd, dot é un comando moi inútil. Pero iso está cambiando para o directorio actual. A máis útil en termos de cd é punto, punto, que é só tes que ir ata un directorio. E teña en conta que estes - Quero dicir alias, pero estes símbolos, punto e punto, punto, os traballos para practicamente calquera orde que está estará a pensar en correr. Así como cd é probablemente o lugar onde vai ser utilizando a maior parte, pero estes non son cousas que só cd comprende. É practicamente algo que o seu todo liña de comandos comprende. Unha morea de programas entender punto e punto, punto. Así, os outros útiles - cd, Dash. Entón iso me vai traer á último directorio que eu estaba dentro Entón, ás veces eu vou facer algo como: Oh, eu estou a traballar aquí. E eu vexo algún erro con algo, e Vou investigalo lo, indo a algún directorio chou en algún lugar. E eu non sei se vai déixeme alí dentro. El o fará. Entón fago o que eu queira neste directorio. Bla, bla, bla, bla, bla. E eu estaba tipo, todo ben, quero voltar a onde estaba. cd, trazo, e que me trae de volta. Entón, eu vou xogar unha morea destes en ti hoxe. Non espera que lembra todos eles. É unha especie de só saber que eles existen. E máis tarde, cando está como, hmm, quero volver a directorio que eu estaba en, oh, espera, algo parecido ao que hai. Non ten que escriba en todo o directorio novo. JOSÉ: E, finalmente, será só usalos unha e outra vez, e el vai facer a memoria muscular. ROB: Yeah. Entón, como dixen antes, que til é o seu directorio persoal. Entón eu podo cd, til. Pero non ten sequera a facelo se eu - Vou volver ao directorio así non é un exemplo inútil. Pero se eu só facer cd, que tamén é o aínda que, ir ao meu directorio home. Fago Comando, K. JOSÉ: Tamén pode inserir claro, a palabra, e debe limpa-la. ROB: E eu creo que tamén de control, L tamén o fai. Entón moitas formas diferentes. Eu creo que hai algunhas diferenzas onde clara e Control, L será só realmente empurralo para a parte superior e Eu aínda pode rolar cara atrás. Command, K literalmente destrúe todo, e vostede non pode rolar de volta. Como mínimo, iso é como funciona en iTerm2. Eu non sei como as outras cousas - oh. Con sshing, por iso, se está en Windows, vai ter que baixar PuTTY a fin de SSH desde Windows non fai ten como unha ferramenta interna SSH. De Macs, pode só SSH directamente desde unha fiestra de terminal. Aceptar. Dúbidas? Con ls, así que algo que acostumar coa maioría destes comandos é - ben, eu vou facer un. Ls, trazo, l. Entón, trazo, l é o que imos Para chamar a un elemento para ls. E moitos destes comandos teñen bandeiras que pode pasar para eles. Polo tanto, neste caso, trazo, l é unha bandeira que di-lle para me dar un completo listado de toda a información deses ficheiros. Así, podemos ver aquí que o meu ordenador foi modificado o 30 de xullo ás 12:54. De descargas foi modificado en 6 de setembro. Estes son o tamaño actual e bytes destes directorios. Non ten que entender todo isto. Este material á esquerda, estas drwx de, que se fará moito máis relevante máis tarde, cando ten que xestionar - que ten que ver co que ten permisos ollar para estes arquivos. E por iso, se non foi o único usuario en este ordenador, vostede sería capaz de digamos, OK, eu debería ser o único permiso para mirar para este ficheiro ou eu son permitirá que todos mirar para este ficheiro. Entón, alguén no meu ordenador pode ollar para este ficheiro. Eu non sei o que iso - o que iso fai? JOSÉ: Eu non estou seguro, en realidade. ROB: Non fago idea. JOSÉ: Pero se non sabe, non existe unha orde útil que pode usar para dicir o que significa a saída. E se introducir no home antes do comando - así M-A-N. ROB: Home. Así, o home é un que é moi útil. E o home, ls. Así, as páxinas do manual, eles teñen tanto comandos que vai estar a usar na liña de comandos, e eles tamén teñen funcións que serán relevantes con C. Así, pode o home - e eu ignorei 3. Pero Man 3 printf traerá a versión C do printf. Pero se eu só fago o home printf, este é abrirá a orde printf que pasa na liña de comandos. Así, o home, sl. As páxinas de manual pode ser moi avassaladora. Aquí, con todo, vai ver este anuncio de todas estas bandeiras que ls entende. Entón, se somos a funcionar, l, e - Eu só vou xogar iso en ti. Pero, a fin de buscar, quere ao primeiro hit a cuestión botón barra marca ou. Entón Slash. E entón podo atopar para o que quero. Entón eu vou cortar a trazo, l. E alí estaba el. Polo tanto, usa un formato de listado longo. Iso non me axudar a descubrir o que que determinada columna quería dicir, pero eu asumir nalgún lugar aquí iso explicaría iso. Polo tanto, usa as páxinas man a calquera orde que non entende de inmediato. Estou seguro que pode ata mesmo home, o home. Unha interface para o en liña manuais de referencia. Ah, unha última un que é quizais un pouco ls relevante é, trazo, un. Entón, teña en conta se eu só facer ls, Recibe estes cinco arquivos. Se eu fai ls, trazo, un, eu obter un lote máis ficheiros. Así, a cousa en común entre todos estes novos ficheiros é o punto de antemán. Así, a convención é que un arquivo que comeza cun punto está oculto. Entón non quere ver este ficheiro, vostede Non quero ter que xogar con súa listaxe do directorio. É só cando explicitamente preguntar, todo ben, ls, trazo, un, me amosar. O un significa todos os arquivos, incluíndo as ocultas. Así, algúns outros comandos. Oh, cuestións en que punto? Si COLUMNA 3: Cando fai ls, un, cal é o punto, o punto? ROB: Ah. Entón é iso que eu estaba falando. É o mesmo que Podo gusta de cd, punto, punto. Entón, tecnicamente, punto e punto, punto son ficheiros que hai en cada directorio onde o ficheiro punto refírese a ao directorio actual. Entón, se eu cd, punto, eu só vou para estar no directorio. E punto, punto sempre se refire ao anterior directorio un nivel superior. Entón, se eu entrar en toras e ls, trazo, al, Vou ver punto, punto. cd a punto, punto me leva ao directorio anterior. É. Aceptar. Así, outra moi importante comando é rm. Entón é iso que nós imos usar para eliminar. E deixe-me realmente facer outra primeiro orde. Entón mkdir. Mkdir é como pode crear directorios. E eu vou crear un directorio temporal e ir ao directorio temporal. E, como se esperaba, é baleiro. Pero se ls I, trazo, un, eu aínda teño dot e punto, punto, porque se refire a punto o directorio actual. E punto, refírese ao punto directorio anterior. E os sempre vai existir, non importa o directorio que está dentro E este é un completamente innecesario mando, pero chamada. Estou só usar-o, porque é un xeito fácil de crear arquivos. Entón tocar un, toque b, toque c é só vai crear tres arquivos chamados un, b e c que están completamente baleiras. Así, o punto de me crear os do primeiro lugar é só para que rm é como podemos eliminar-los. Entón, rm, a. Me vai preguntar, elimine regular dun ficheiro baleiro? E entón eu vou dicir que si. Entón, se eu estou seguro que quero borrar este ficheiro sen ter que ser solicitado, elimine ficheiro baleiro regular?, logo rm, trazo, f será o bandeira que di, sen forzar a eliminación ata me alertando, oh, é vostede seguro de que quere eliminar o ficheiro? Si, eu estou seguro. Entón, rm, trazo, fb será só facelo sen pedir. Entón, imos facer algúns directorios. mkdir, tmp2, cd, tmp2, tocar un, toque b. Aceptar. Entón agora quero eliminar tmp2 como un directorio. Tmp2 Entón rm. Non pode eliminar tmp2, é un directorio. Polo tanto, a cuestión aquí é que rm non traballar inmediatamente en directorios. É só significar para arquivos como arquivos non directorio. E así, o que podemos facer aquí é rm, trazo, r. Isto significa de forma recursiva, o que pode non significa nada para ti aínda. Pero cando comeza a recursão, iso vai significar máis. Entón, rm, trazo, r, tmp2 vai recursivamente ir ao directorio. Entón descender directorio tmp2? Si, imos a iso. Queremos eliminar tmp2 / a? Si Queremos eliminar tmp2 / b? Si Agora queremos eliminar o tmp2 directorio? Si E agora o directorio e todo dentro de que foi borrada. Non é tecnicamente unha orde rmdir que pode usar para eliminar directorios, pero el só funciona en directorios baleiros de calquera maneira. E ver que, imos só facer mkdir, tmp2 novo. Tmp2, toque a. Aceptar. Entón, se eu tentar eliminar dirtmp2, vai dicir, o directorio non baleiro. Entón, eu practicamente nunca usar o elimina comando dir calquera maneira, porque rm, trazo, r funcionará en directorios baleiros e directorios non baleiros. E tamén, se eu non quero ter que pasar por todo este proceso de descendendo para o directorio e eliminación de cada arquivo individual, rm, trazo, RF, tmp2. E agora que se foi. Algo que ter coidado é sobre rm, trazo, RF. E iso me asusta incluso gravala-lo, porque se eu accidentalmente prema Intro ou algo así. Entón, rm, trazo, RF, til sería, sen me avisar, o f non solicita min, ha eliminar automaticamente meu directorio home enteira e todo na mesma. Así, pode pensar que é unha cousa estúpida de facer. E ben, é. Pero isto pode ocorrer moi facilmente por accidente, por exemplo, eu quería eliminar miña barra, directorio vhost. E só na dixitación rápida, Eu accidentalmente facelo. Isto eliminará de forma recursiva tanto a miña directorio eo directorio vhost neste directorio específico que pasa a non existir agora. Pero iso aínda sería eliminar meu directorio home enteira. Polo menos por non ter unha f, ía me pedir en primeiro lugar. E eu sería como, oh, non, eu Non quero facer iso. Pero a xente, slash, incluíndo me tenden a entrar no hábito de sempre RF-ing. Mesmo os arquivos regulares que podo só RM, c, que tenden a só rm, trazo, RF, c. Só teña coidado cando está RF-ing. COLUMNA 4: Que facer C? ROB: C é que eu estou fala de este ficheiro C neste directorio, que rm, c. JOSÉ: E máis perigosamente, se usa unha estrela, refírese a todo en o directorio. Entón o que eu normalmente tenden a facer é que eu vou entrar nun directorio e quero eliminar todos os ficheiros dentro. Entón, rm, trazo, RF, estrela. ROB: Yeah. RM, trazo, RF, estrela. JOSÉ: E se non ten coidado o que está no directorio - Eu non estaba en tempo, pero eu estaba accidentalmente no meu directorio home, entón eu vou eliminar todo no meu directorio home. E eu realmente fixen iso antes, e Creo que xa o fixo antes ou Jay fixo iso antes. ROB: Eu eliminar accidentalmente - así ignorar este comando un pouco. JOSÉ: Non é divertido. ROB: Entón, no directorio bin barra é un morea de arquivos binarios onde vai ser os familiares como bumbum. Ben, bumbum e, basicamente, todos estes as cousas que eu estou rodando ao mando liña están neste directorio bin barra. JOSÉ: Como ls está aquí. ROB: Entón dot, slash, ls sería consultar neste directorio. JOSÉ: Rm tamén neste directorio. ROB: Eu accidentalmente rm, RF-ed bin, que eliminou calquera orde que puiden posiblemente querer. Que, a continuación, só reinstalar un novo Appliance naquel momento. JOSÉ: Entón, moito coidado cando usa este comando. Audiencia: [inaudível]? ROB: si. Isto tamén é un mal costume de entrar. Se notar, eu son agora - ben, non se pode ter en conta, pero miña zoom-in quizais poida. Entón, eu estou agora root @ aparello. Entón jharvard é o usuario que queremos sempre que está a usar. Root é o usuario que ten permiso para non facer absolutamente nada. Entón, teña en conta cando estou jharvard, se eu tentar cd - o que é un directorio que? Oh, a raíz é un bo exemplo. Entón cd, raíz. Permiso denegado. Porque se miramos este anuncio - e, de novo, non ten que enteiramente entender iso. Pero estes tres trazos están dicindo que evite calquera outro usuario para este directorio. E o directorio pasa a ser de propiedade do usuario root. Así, o feito de que eu son e non jharvard o que non é raíz se permite en Neste directorio, iso significa que eu son se ve permiso denegado cando tentar cd nel. Entón, cando eu son raíz, eu teño permiso para facer absolutamente calquera cousa, incluso borrar arquivos esenciais para o dispositivo e destruír a cousa toda. Polo tanto, é un mal costume de entrar só vagando ao redor da súa sistema operativo como root. Fago iso de calquera maneira. Dúbidas? E eu vou saír da raíz, estar como jharvard. Aceptar. Ordes máis relevantes. Entón, volvendo ao noso tempo, o mv mando significa movemento. Pode mover a. Agora queremos chamalo b, entón agora é chamado b. Ou quizais nós quere mover b-se un directorio. Entón, agora baleiro deste directorio. Vou volver para o meu directorio home, e vemos que b está aquí, xa que o directorio home foi un directorio desde o directorio que b estaba dentro Hai tamén CP. Entón cp é copiar sección super, punto, o texto. Podo chamalo é, punto, texto. Agora temos dous super-sección, punto, texto, e s, de punto, o texto. Isto tamén funciona en directorios. Eu RF-ed un único ficheiro. Así cp - ben, primeiro imos tratar cp, tmp, tmp2. Así, omitindo directorio tmp. Así, semellante ao rm, o comportamento por defecto é non traballar en directorios. E, de novo, semellante ao rm, o patrón comportamento - ben, facela funcionar con directorios é un, trazo-r de distancia. Copiar recursivamente a temperatura directorio no tmp2. E agora temos tanto tmp e tmp2, e que non é tan útil desde tmp estaba baleiro, en primeiro lugar. Tmp2. Agora imos copiar tmp en tmp2. E vemos que tmp2 tamén ten o arquivo un, xa que o directorio e todo dentro do que directorio foi copiado. E iso pode ser un pouco útil se, digamos que está a traballar nun conxunto de problemas - ou de feito, conxuntos de problemas posteriores son aínda máis importante, porque non hai Será un grupo enteiro de arquivos e cousas. Pero só se quere, por unha fracción de segundo, lle queda tipo, todo ben, eu son imos tentar algo diferente. Déixeme só copiar toda a miña pset1 directorio de backup en pset1 de xeito que se Eu acabo romper as cousas, podo volver ao meu directorio de backup. Existen formas máis adecuadas de version facer backup do seu código, pero este é sempre un xeito rápido de facer só se ten unha copia de algo que está a piques de cambiar. Entón eco tamén é un comando único que tipo de sillily só vai imprimir en liña de comandos exactamente o que quería facer eco. Así ecoam ola. Nós imos só imprimir ola. Eco Ola mundo. Imos imprimir Ola mundo. Isto vén en uso cando comezar a combinar comandos. E unha vez máis, non esperan que enteiramente entender iso aínda, pero é algo que ver. E entón, se está a buscar a exemplos ou entender que quere facer algo, que pode ser útil. Entón, imos, como exemplo, ls así, trazo, l. Entón, aquí eu vexo a saída de ls, trazo, l. E eu digo: OK, quero almacenar iso nun arquivo. Todo iso de saída aquí, quero para poñer nun arquivo separado. Entón este pequeno símbolo maior que é o que imos chamar. Estamos redirixido o saída para un arquivo. Imos chamar o arquivo bla, porque iso é o que eu tenden a chamalo sempre. Entón, agora vemos que temos un arquivar bla aquí. E se eu abri-lo, eu vou velo é exactamente o resultado do comando que eu só corrín. E do mesmo xeito, pode - se iso era a saída a un ficheiro, este é obter a entrada dun arquivo. ¿Que é un comando que eu - JOSÉ: Coido que pode usar menos ou máis, probablemente. ROB: Pero como sobre só menos bla? Eu non sei. Se entrar neste escenario, como Serie de exercicios hai que é útil para. JOSÉ: Pode canalizar-lo en eco. Canalice o arquivo en eco para velo. ROB: É pipe. JOSÉ: Sentímolo. ROB: Todo ben. Polo tanto, esta é a saída a un ficheiro. Este é un texto a partir do ficheiro e entrega-lo para o programa. E tamén vai ver este cara. Polo tanto, esta é unha especie de facer os dous á vez. E de feito, eu vou presentar dous novos ordes só para usalas. A historia é unha orde útil que é só vai imprimir unha listaxe de calquera cousa que eu xa executar unha liña de comandos. Así, podemos ver aquí todo o que eu teño corrido ese tempo. Moita ls do. E outro comando útil é grep que o seu obxectivo é a investigación sobre texto buscando patróns, ben, ollando para o que quere que buscar. E así, un uso práctico aquí é, digamos queremos coller a historia. E quero ollar os comandos onde eu - o que é un un útil para buscar? JOSÉ: [inaudível]? ROB: Ou imos só ollar para todos toca, por calquera motivo. Entón é iso que se ve. E non ten que completamente entender iso. Pero a idea é aquí, a historia está dando o mesmo resultado que fixo aquí onde está imprimindo a todo historia de todo o que eu xa executado. Estamos, entón, de paso, que - así, en vez de imprimir lo para a pantalla, queremos pasar isto para o comando grep que estaba a buscar todas as ocorrencias da palabra chamada. E así, a usar esa combinación de ferramentas de historia e grep, podo ver, OK, aquí está todo comandos que eu xa correr, e aquí está un pouco común. Estamos na parte inferior. E iso tamén me dar a orde Eu corrín que tiña o Preme palabra nel. Pero o tubo é unha cousa moi útil para a combinación de varios programas. E, de feito, é un atallo para deixar me historia saída ao ficheiro bla, e déixeme utilizar o grep bla arquivo como o que quero ollar. Así, o tubo é só un atallo para estes dous comandos. Si COLUMNA 4: [inaudível]? ROB: si. Que é - Oh Imos probar. Entón, gato, can, peixe. Entón, quero grep. Dash, R, unha vez máis, será recursiva, entón eu quero baixar abaixo todos os directorios. Quero grep recursivamente para todos - e me deixe temporalmente esta fora do camiño. Ignore-me. Aceptar. Entón, quero grep temporalmente para todas as ocorrencias da palabra peixe. E aquí o que eu estou facendo é grepping recursivamente para a palabra peixe. E estrela significa máis de todos estes ficheiros deste directorio. E por iso me deu un permiso rexeitada, porque non está autorizado a ler que arquivo específico. Pero el atopou peixes no ficheiro, proba. Eu tamén podería dicir, especialmente, eu só quero ollar no bla ficheiro, en caso en que non vai atopar nada. Eu só quero mirar no arquivo, proba. El vai atopar peixes. Isto é un comando moi útil a saber en xeral. Existen algunhas alternativas para grep que se quere que sexa máis programador agradable, pero tenden para aínda volver a caer grep. Dúbidas? Aceptar. Existen outros comandos? Oh Só un one-off que sempre atopar para ser divertido e cal. Entón, teña en conta cando estou nesta fermosa modo de pantalla completa, non teño como top barra de ferramentas ou calquera cousa. Entón cal só me dá un pouco de bo calendario que é correcto agora cortar, eu asumo. Pero pouco agradable de comandos. JOSÉ: É [inaudível]. Outros comandos que pode ter ver inclúen bumbum e facer. Nós imos pasar por riba deles en máis detalles posteriormente. Pero se está a traballar en o PSET, ten que estar familiarizado con aqueles. ROB: Todo ben. Preguntas sobre ordes de liña de cousas? Todo ben. Entón, imos pasar a algúns Cousas relacionadas-C. Variables de matemáticas. Aceptar. Así como tivemos matemáticas en scratch, Tamén pode usar as matemáticas en C. Antes de chegar a iso por completo, así variables. Lembre que sempre que declarar un variable como int x ou y boia, vostede ten que dar antes de escribir nome da variable. Así, os tipos que vimos ata agora son int, float, double, long long, que eu de feito, non sei se temos visto que, ata agora. Hai algúns outros. Nós ver Char. Hai pouco, que é como se fose o contrario do longa, longa, onde é menor que un número enteiro. Vimos tamén cadea. Entón, o que é especial sobre corda? Por que digo que é non é así como int? COLUMNA 4: En realidade non existe. ROB: Yeah. Así, a única razón pola que temos corda é porque cando fai hash inclúen cs50.h. E veremos exemplos desta tarde - Oh, iso non tratar con isto ben - onde cs50.h está facendo algo ao longo das liñas de Tipo def, char estrela, corda. E o que é dicir que nós non sabemos aínda sabe o que unha estrela char é aínda. Pero iso está dicindo que queremos cadea. Calquera lugar que está a usar corda, vostede podería usar o carácter estrela, que realmente é un tipo que existe na linguaxe C. Pero nós imos chegar a iso. Ah, e que vai á dereita de volta. Neat. Así, mesmo con bool onde o verdadeiro eo falso. Isto non é realmente un tipo de embutido en C. Pola contra, é só, que isto ten o valor cero? Entón imos considerar só que é falsa. Isto ten o valor - ben, iso ten ningún valor que non se cero? Entón imos considerar que é certa. Entón, é certo, dous é certo, algo distinto de cero é certo. Polo tanto, estas son eses. Dúbidas sobre declaración de variables e tipos de variables e todo isto? É. COLUMNA 4: Por moito tempo longo, no libro, el dixo que tiña que ser long long int. Pero vai funcionar moi longo tempo? ROB: Entón eses modificadores de tipo. Así, int x. Así, podemos tamén dicir unsigned int x. Podemos dicir short int x. Podemos dicir long long int x. Pero practicamente calquera desas cousas que me só dixo, int sen sinal, short int, long long int, pode se librar de int e el vai asumir que quería dicir int. X Entón non asinados, que significa - sabe como normalmente cun int, pode dicir que x é igual a 3 negativo? Cun int sen sinal, non pode. JOSÉ: E unha vez máis, para a cámara, o pregunta era: cal é a diferenza entre long long int e só o tempo? ROB: Yeah. Entón, eu case nunca escribir long long int. Vou escribir long long. JOSÉ: Algunha pregunta? ROB: Aceptar. Pequeno recordatorio tan parvo de que é como declaramos unha variable e arrincar a variable e declarar outra variable e arrincar todo iso nunha única etapa. Así, a declaración da variable e a variable de inicio non ten a, pero pode ser na mesma liña. Polo tanto, temos os operadores matemáticos estándar que está acostumado - máis, menos, dividir os momentos. Hai tamén modulo, o que imos ver. Non hai, polo menos en C, un built-in potencia operador circunflexo exponenciação. Así, hai un operador acento circunflexo, pero non é poder. JOSÉ: Pero non é exponenciação, Si ROB: Non use o acento circunflexo supoñer que iso significa como cadrado ou calquera outra cousa. Por iso, algunhas cousas a ter en mente sobre división. Eu estarei. Así declarou resposta initialize. Entón, nós estamos dicindo resposta flotador é igual a 1 dividido por 10. Imprimir resposta a dúas cifras decimais. E este é o tipo de cousas que eu sería o home printf para descubrir que o que diaños%, punto, 2f significa? E iso só significa que, así, ignorando a 0,2. E%, f é o que usan para imprimir a flotar. O 0.2 está dicindo, a impresión que flotar ata dúas cifras decimais. Polo tanto, este programa ten un erro, e pode xa vin que antes nalgún Por suposto CS antes. Pero o que é este erro? COLUMNA 5: Cero. ROB: Yeah. Así, cando dicimos, a resposta é igual a 1 dividido por 10, queremos que o responder a 0,1. Pero 1 dividido por 10, 1 é un número enteiro, 10 é un número enteiro. E así, cando facemos un enteiro dividido por un enteiro, imos voltar un enteiro. Entón 1 dividido por 10 é de 0,1. Dende que necesita dar un enteiro, el só vai xogar fóra que casa decimal e dicir que a resposta é 0. E así, cando imprimir responder aquí, vai imprimir 0,00. JOSÉ: E así como unha nota, realmente xoga fóra o que hai despois da punto decimal. Entón, se, no canto tiña 6 dividido por 10, pode pensar que ía darlle 0,6 e entón redondear a 1. Pero, en realidade, o que pasa cando se escribe tarefas é que deixa caer o que se despois do punto decimal. Así, se fai 0,6 0. ROB: Yeah. E nós imos dicir truncada por iso. Así, sempre que converter a un int, o decimal é truncado. Así, a corrección para que - non hai de feito, dous. E eu vou facer iso, segundo, porque esta é unha solución moito máis fácil. Entón, unha corrección é usar flotadores na división. E realmente, só ten que facer un deles un coche alegórico. Pero é só un pouco máis clara para facer os dous flotadores. Entón, 1,0 dividido por 10,0 é división de dous coches alegóricos. Polo tanto, a resposta vai acabar sendo un float, e así vai correctamente imprimir 0,10 aquí. Algo que non funciona tan ben sobre o que é, así, con certeza, era fácil suficiente para converter un a un flotar, tornándose a 1.0. Pero e se en vez tivemos dous enteiros como int x é igual a 1 e int y é igual a 10, e logo, queriamos para que x dividido por y? Así, non é fácil de só facer x.0 ou algo así. Así, a corrección para que está lanzando. Entón, lanzando é un xeito en C para converter desde un tipo de variable a outro. Entón, aquí, 1 é un enteiro. E, poñendo esta boia fronte tanto, estamos lanzando un a un float. E para que isto ha converter a 1 a 1,0 un. E isto converterá a 10 a unha media de 10,0. E entón as cousas se comportan de forma semellante ao versión anterior, só mostrou en que, como se esperaba, obtemos 0,10 e só pode imprimir iso. E podemos facelo con variables, tamén. Así, podemos dicir, float x dividido polo flotador y. JOSÉ: Algunha pregunta? ROB: Entón, así como en matemáticas estándar, temos precedencia do operador. Entón, na clase de matemáticas, que é máis probable chamalo orde das operacións. Aquí, o termo oficial é precedencia do operador. Pero a precedencia do operador, ou máis operadores, é como sería de esperar. Así como en matemáticas, 2 veces 10 é vai ser agrupados máis preto do que 10 esta dividida por dous e logo, 2. A orde das operacións, que vai facer 2 10 veces, 10 dividido por dous, e despois que vai facer 20 máis 5 máis 2. Entón, é como se esperaba, e pode usar parénteses para agrupar expresións. Non pode usar corchetes para agrupar expresións. Si? COLUMNA 5: Vostede podería realmente só volver un segundo? Pode lanzar un int nunha cadea? ROB: Entón, en C, pode lanzar calquera cousa Quere o que quere. Iso non significa que é unha boa cousa que facer. Entón, cando lanzar un int para unha corda, o que significa - e nós imos entrar neste moito máis profundamente - JOSÉ: Moito máis tarde. ROB: Eu non quero dicir moito máis tarde, entón eu intento cambiar a miña frase. Nós imos entrar máis minuciosamente máis tarde, onde realmente cando ten un variable cadea - así que unha corda pode ser arbitrariamente moito tempo, non? E nós temos que chegou a dicir que é un int catro bytes e longo tempo é de oito bytes e un float é de catro bytes. Así, unha corda, como un int, só ten un certo número de bytes a ela. E iso vai ser catro bytes. Pero unha serie pode ser moi arbitrariamente longo, non? Entón Ola mundo xa, si é 10 caracteres ou calquera outra cousa, que xa está será ao longo dos 4 bytes I poden encaixar nunha cadea. E así como cordas realmente funciona é que son, onde na memoria esa secuencia está a ser mantido. E así por aquí, cando digo corda x Ola mundo é igual, dentro de x é só dicindo, oh, Ola mundo almacénase neste lugar especial na memoria. Entón, se nós tratamos lanzar un enteiro para un cadea, entón estamos intentando interpretar algures aleatoria de memoria como unha cadea. E iso case sempre rompe as cousas. JOSÉ: Pero se iso confunde ti, nós estaremos cubrindo-o máis en profundidade máis tarde. ROB: Yeah. Este é o lugar onde está indo para entrar en punteiros. E esa é unha parte significativa de dúas semanas de curso. COLUMNA 6: Funciona como obxectos noutras linguas ou non verdade? ROB: Entón, noutras linguas, obxectos sería representado mediante punteiros. Non é o mesmo, con todo. Calquera pensamentos? JOSÉ: Non Sen pensamentos. ROB: Aceptar. JOSÉ: Next. ROB: Só tes que ir con iso. Todo ben. Así módulo. Así como temos máis, menos, dividir e multiplicar. Entón modulo é aquel que se pode non teña visto antes. E el só di, dar me o resto. Así, o 55% 10. O resto de facer 55 dividido por 10 sería 5. Así, o 55% de 10 é 5. E 3% 5 será de 3. 8% 8 será 0. 16% 15 será 1. JOSÉ: Unha cousa a notar, con iso, tamén, é que non funcione como se esperaba se usa un número negativo. Entón negativo do 5% 4, algunhas persoas Pode pensar que é - o que pensas negativo 5% 4 sería? COLUMNA 5: Unha. JOSÉ: Entón, algunhas persoas din que un, algunhas persoas din que unha negativa. Pero o que - ROB: Eu non tería sequera , Dixo un deles. JOSÉ: Dous, Sentímolo. Algunhas persoas din - ROB: Tres. JOSÉ: Tres? ROB: Negativo - cal era o - negativo de cinco - JOSÉ: Tres, tres, tres. Sentímolo. Porque modulo, en xeral, cando ten vin isto en outro lugar, iso normalmente significa voltar un número positivo, non? ROB: Entón, cando dicimos en matemáticas, o 10% do, tenden a querer darlle - se mod por 10, entón esperamos obter un número entre 0 e 9. Desde aquí, que non é o caso que terá números negativos retorno. JOSÉ: Entón negativo do 5% 4 sería negativo 1. ROB: Pero é raro que é mod-ing números negativos, para comezar. Ir iso. JOSÉ: É. ROB: meh. Aceptar. Así, unha última cousa a destacar sobre flotadores é que é un comportamento perigoso, pero Carrozas non son unha exacta representación. Entón, volvendo a bytes de novo, lembre-se que un int é sempre catro bytes e un flotador sempre catro bytes. Así, o exemplo de Lucas é moi bo. Entón, creo que de 1 dividido por 3. Entón 0,3333333. Se eu só teño 32 bits, como pode Eu gardar 0,33333 exactamente? E quizais, por algunha razón, di: todo ben, ben, imos só dicir que que este particular 1011001, imos só dicir que debe ser 0.333333. Ben, só ten un número finito de eses bits, polo que é imposible representar cada punto flotante valor dado só 32 bits. Ben, é imposible representar calquera valor de punto flotante dado infinito - ben, dado calquera número finito de bits. Polo tanto, a cuestión aquí é, así, cando usamos para imprimir en dúas cifras decimais, que fixemos correctamente obter a resposta 0,10. Pero debaixo do capó, é realmente sendo almacenadas tan próximo como sexa posible 0,10 como eses bits pode representar. É este o próximo foto? Ou non é? JOSÉ: Si, é iso. ROB: Blegh, blegh. JOSÉ: Si, pode só tirar as notas superior un pouco. ROB: Eu só vou para aumentar en no último niso. Oh meu Deus, iso é [inaudível]. Así que o número. Iso é o que será impreso executar o programa. E teña en conta que non é realmente un gran negocio se estamos só preocuparse como 2-3 cifras decimais. Como nós só orixinalmente impreso 0,10, e é por iso que non viu nada de malo. Pero unha vez que comezan a entrar no exacto, número exacto de que é representando, vemos que non pode exactamente representar 0,1. E parte do problema aquí é como, Todo ben, todo ben, pero, ben, primeiro, o que se intentou facer, resposta é igual a igual a 0,1? É iso que vai voltar verdadeiro ou falso? E por iso é difícil de dicir. Eu creo que realmente pode voltar certo. Será que vai en primeiro lugar - Eu non sei. A resposta é unha vez que comezar a tratar con valores de punto flotante, ten moito moito non debe estar usando a igualdade debido a esta imprecisión. E para todo o que sabe, é o centésimo casa decimal que o punto flotante non era capaz para xestionar correctamente. E así, a igualdade só vai fallar mesmo aínda que o número - se fose mediante cifras exactas, as cifras deben ser exactamente o mesmo. É ao longo duns 50 cálculos usando estes flotante valores de punto, o erro pode construír arriba e cara arriba e cara arriba, e as cousas só quedan mal. JOSÉ: E houbo realmente exemplos famosos de isto acontecer. Como os enxeñeiros da NASA comezar esta erradas, causando foguetes para explotar en o aire despois de seren publicados. E moitas cuestións como esta. Entón, si. COLUMNA 6: Cando di que 0,3 m, el truncar o resto? Ou será que redondear para arriba ou para abaixo? ROB: Será printf arredor del? JOSÉ: Coido que trunca printf. ROB: Aceptar. Así, podemos ir de igual xeito no oposto dirección deste, onde, neste caso, o máis próximo que podería representar 0,1 Foi con ese número. O máis próximo que pode ser capaz de representan 0,2 é o contrario dirección, 0,199999996356 ou algo así. Entón, se nós fomos nesa dirección de cousas, entón printf 0,3 f retornaría 1,99 en vez de 2,00. JOSÉ: E eu non estou totalmente seguro sobre iso. Pode querer escribir un pequeno, pouco programa para comprobar iso. ROB: Con todo, o que temos seguro é de que se intentou lanzar isto para un int, e lanzando para un int vai causar-lle a truncar o decimal, se tentar converter 1.9999999 para un int, vai ter un. E así, ten que xeralmente usar o función round na biblioteca matemática. Dúbidas? Aceptar. JOSÉ: movendo Así, para condicións e expresións booleanas. Entón, xa viu iso antes. E, de feito, déixeme que seguro que o meu ordenador está en formato correcto aquí. Espazo. Sentímolo, nós imos ter que tratar un pouco con corte nos bordos. Pero si, vostedes viron que antes en scratch. Entón, iso aquí é unha expresión o cal é utilizado en unha instrución condicional. Entón conteste maior que cero ganas dicir verdadeiro ou falso. E estas son realmente importante, porque eles nos permiten introducir lóxica na nosa código. Así, por exemplo, este é un programa escrito en scratch que pide ao usuario para un enteiro e di a eles se o enteiro que lle deron foi unha número positivo ou negativo. E a conversión por aquí a ver se imprimir por primeira vez a declaración, déame un enteiro. E entón lles pedir para un enteiro. E entón usa a lóxica condicional sobre aquí para comprobar se este número foi realmente maior que cero ou non. Polo tanto, temos aquí unha expresión booleana dentro dunha condicional Se comunicado. Hai algunha dúbida? Hai algunha dúbida sobre iso? Aceptar. Polo tanto, non hai máis que maior que, por suposto. Pode construír expresións booleanas usar a maioría dos tipos de cousas que pensaría en matemáticas. Así superior. Iso debe ser un menor que. Sentímolo. E o paso. ROB: Deus non permita que deixalo. JOSÉ: Todo ben. Así, máis que, menor que, maior do que, o igual a, menos do que, o igual a. Usan dous iguais para comprobar a igualdade, porque só é igual a medio concesión, non? Si E entón podemos tampouco é igual por usando o punto de exclamación, é igual. E este símbolo signo de admiración pode tamén ser estendido, de xeito que, se quere para inverter calquera tipo de Boolean expresión, pode facelo. Entón, que vai avaliar a realidade só se a resposta é menos que ou igual a cero. Calquera dúbida sobre iso? Aceptar. Entón, tamén se pode combina-las expresións utilizando lóxica E e Ou lóxico. Polo tanto, este é só o símbolo E, que debe ser Shift 7. E este é o símbolo pipe, que se non un caso menor L. É a única iso mesmo por riba da súa tecla Intro. Entón usa dous destes para simbolizar lóxico ea lóxica Ou. Entón, iso só vai voltar true se a resposta é un, dous, tres, ou catro. E iso só vai voltar true se a resposta está ademais de que en ambos os dous lados. Polo tanto, non é un, dous, tres, ou catro. E a forma que usaría que nunha expresión - ROB: Ou un cero ou un cinco. JOSÉ: Cero ou un cinco. Sentímolo. Si, si, si. Aceptar. E aquí, agora, do mesmo xeito que usaría esa expresión, un menor lado dunha Se condicional expresión declaración, tamén usaría o Así mesmo, só poñelas dentro dos parénteses da instrución If. Polo tanto, este printf só será accionada se a resposta é un, dous, tres, ou catro. Calquera dúbida sobre a combinación expresións? Polo tanto, non hai outra condicional construto que chamamos If / Else. Entón, basicamente, significa que agora, ok, se algo que eu quería ver non era feito, entón vai para o Else e realizar a outra acción. Polo tanto, neste caso particular, eu pregunta o usuario a un número enteiro. É o número enteiro maior que cero? Si? Ben, entón eles escolleron un número positivo. Se non, entón debe ter ser negativo ou cero. Entón tes para un número negativo ou un cero neste caso. Si Ou un cero. E despois tamén temos If / Else, Se e Else. Entón, iso nos permite realizar unha secuencia de cousas só os primeiros fallan. Polo tanto, neste caso, agora estamos facendo o último que incorporarse cero. Entón, se eles non escolleron un positivo nin un número negativo, entón eles deben escoller cero. Entón, el só vai para abaixo da cadea como esta. Así, un exemplo de como un Se é distinto de - un If / Else é diferente de só unha secuencia de IFS. E esta é unha pregunta común que a xente pregunta é, así, se comeza como un 95 en CS50, o que será este programa de che dicir? COLUMNA 5: Ten un A. JOSÉ: Si Ten todos os un deses dereita. Ten un A, ten un B, vostede teño un C e un D, ​​non? Entón, todo isto se valorou en orde. Así, mentres unha 95 é maior que 90, é tamén maior que 80, é tamén maior que 70, e é tamén maior que 60. Entón tes todas esas calidades. E supoño que faría só quero o A. O xeito de solucionar isto é substituír aqueles con Else / Se 's. Polo tanto, neste escenario, el ve que o 95 é superior a 90, e, a continuación, fai non avalía o resto das declaracións. Calquera dúbida sobre iso? Polo tanto, hai outro tipo de condicional estrutura que temos aquí, que nós chamar unha instrución switch. Entón, iso permite que verifique basicamente cal é o valor dun número que poñer para a instrución switch é. Polo tanto, neste escenario, estamos alternando en n, e nós estamos dicindo, Oh, se n é un, a continuación, imprimir esta afirmación. E, a continuación, romper, o que significa que a saída fóra da instrución switch. Se non fose un, entón, así, só finalmente comprobar todos estes casos. E así, el comprobar se é un ou dous ou tres, e ela imprime en consecuencia. E o que esta palabra chave default aquí medios e se non entrar en calquera destes, a continuación, dicir non válido. Entón, digamos que eu pido e n o usuario dáme catro. Ben, el coincide con ningún destes casos, polo que vai imprimir o que está no sección estándar. Si, cuestionar? COLUMNA 5: Pódese usar Boolean no canto das expresións un, dous, ou tres? JOSÉ: Entón a cuestión é pode usar Expresións booleanas en vez de un, dous e tres? E en C, eu creo en ti Non podo facelo. Pero noutras linguas, o que pode atopar ao final do semestre como JavaScript, pode. Ben, que tería que calcular primeiro ese valor e, a continuación, usalo no instrución switch. Si? ROB: Entón unha parte do beneficio do interruptor declaracións é pensar se fixo iso como If / Else, así como se non é igual a é igual a un, ou o que sexa. Else / Se n é igual é igual a dous, que sexa. Else / Se n é igual é igual a tres. Así, a forma na que o programa sería executado é se secuencialmente descender esta lista e comprobar, é n un? Non. N é dous? Non. É n tres? É. Faga iso. Considerando que, con instrucións switch, é realmente capaz de recompila-lo para ser moi rápido. E así que di switch, el di, todo ben, non é dous, eu son inmediatamente vai saltar a onde É que eu vou comezar a executar. Eu non estou indo para a primeira verificación, n é un, é n dous? Pode comezar inmediatamente a facer o que se quere facer. E por iso, non pode ter condicións de booleanos. Ou tería que facer o secuencial, como, todo ben, é n maior que cero? Else é n superior a 10 ou o que quere. JOSÉ: Neste caso, se usou If / Else, de Se, a continuación, a clave sería executar preto de tres veces máis rápido que o If / Else, Se. Podemos organizar a chave de tal un xeito que non romper despois de cada un dos casos. Polo tanto, neste caso, eu estou dividindo o números que escoller un e dous que non números elevados e sendo tres un número elevado. Polo tanto, neste caso, se non é un ou dous, Vai bater o caso e, a continuación, que vai caer, porque non hai ruptura. E iso vai acabar aquí. Entón, se nós escoller un, que vai facer o printf e logo, romper, de xeito que ningún dos este é executado. E, por suposto, se eles entran en tres ou calquera outra cousa, entón vai saltar aqueles e non ir máis alá, e utilizará no canto do liña correspondente. Hai algunha dúbida sobre iso? Si? COLUMNA 4: Vostede obterá un erro se tivo unha pausa despois de un caso, pero non tiña algo para el facer? JOSÉ: Entón a cuestión é que comeza un erro se ten unha pausa despois maiúsculas dun, pero non hai nada que facer? E a resposta é non. Non vai realmente obter un erro. Si, hmm mm. Entón, como unha especie de un pequeno cambio aquí, Vou poñer un printf aquí. Gritos. Entón, o que este impreso se Engada un en como entrada? É. Ía dicirlle non tardou un elevado número dúas veces, non? Porque ía bater aquel primeiro caso, non estaba a romper, e caería ata o segundo caso. Calquera dúbida sobre iso? ROB: Ten pregunta? JOSÉ: OK, arrefriar. Todo ben. Polo tanto, non hai outra cousa que chamamos operador ternário que é basicamente un sintaxe alternativa para facer Se e, a continuación, Else. E iso permite que fai todo nunha liña. Polo tanto, neste programa especial, Estou pedindo ao usuario para o n. E se non é maior que 100, digo eles escolleron un número alto. Else Eu digo a eles que escolleu un número baixo. Así, podemos utilizar este tempo moi longo de sintaxe, corda, S, e logo comprobar se n é maior que 100 e asignar lo de conformidade. Pero podemos facelo moito máis concisa empregando esta sintaxe operador ternário que implica unha cuestión marca e un colonos. Así, o punto de interrogación é esencialmente facer unha pregunta, non? ROB: Quizais ampliar iso. JOSÉ: Si Bo punto. Entón que é o operador ternário. A primeira vez que facer a pregunta, n é maior que 100? Se for, entón executar a primeira parte antes dos dous puntos. Se non é, entón eu executar o segunda parte despois dos dous puntos. Así, se non for maior que 100, a continuación, el pega alta e puts que en cadea s. Se non for menor que 100, que escolle baixa e logo, pon isto en cadea s. Así que condensa este gran pedazo abaixo en só que unha liña. COLUMNA 5: Isto é popular? JOSÉ: Si, é moi popular para cousas onde esencialmente quere non unha asignación en base a algún tipo de condición. E neste caso, nós estabamos intentando para asignar un valor a cadea s. Non é así - Eu creo que realmente non prefiren nos outros casos. Pero é especialmente útil para esta tarefa. ROB: Isto é un estándar moi común onde ten algunha variable que vai dicir, se algo, axuste esta variable a un valor, senón, establecer esta variable a outro valor. E ese é o escenario onde usar un ternário. JOSÉ: E está a aforrar lotes de liñas, non? E só fai o código indiscutibelmente algo máis lexible. Si, cuestionar? COLUMNA 6: Para un ternário, podería ir, cadea s iguais s, punto de interrogación? E entón vostede pode ter, por exemplo, cinco opcións distintas. E, dependendo do que o número de n foi, ten que escoller un destes? JOSÉ: Entón a pregunta é, existe un tipo de sintaxe onde podes facer corda s é igual a n, e, a continuación, ter máis que dous opcións despois de que o punto de interrogación? E a resposta simple é non, non hai realmente unha boa forma de facelo, salvo quere niño ternário múltiple operadores dentro do outro. Podería facer como n maior que 100, punto de interrogação, e despois outro operador ternário, n superior a 50, punto de interrogação, e aninhar-lo desa forma. Pero, nese escenario, o código é quedando medio lexible e confuso, e quizais sexa mellor ir só para unha instrución If / Else naquel momento. ROB: E tamén, como unha nota lateral, PHP incorrectamente aplica o ternário operador tal que ternários noutras citas nin sequera funcionan como deberían. JOSÉ: É. Entón, el está un pouco confuso, especialmente cando vai para diferentes idiomas. ROB: É confuso o suficiente para que linguas están errados sobre iso. JOSÉ: Entón, en realidade, só para aclarar, que todo o mundo sabe o que iso % S fai aquí? Calquera dúbida sobre iso? Coido que só para a cámara, o% s basicamente nos permite colocar un espazo reservado a unha cadea. E despois, ao final, que especifica que o variable queremos poñer nesa titular lugar é s. Así que, basicamente, ten s e pon-lo aquí. E entón el vai imprimir, escolleu un alto ou escolleu un número baixo. Aceptar. Entón lazos permiten que executa as cousas en movementos circulares, non? Pode encontrar tanto en Raspadinha en forma de lazos para sempre ou repetir ata ou Repetir unha especial número de veces. Entón, por que iso é bo para nós? Ben, en C, imos dicir que temos esta canción aplicado en scratch que canta, esta é a canción que nunca remata. El só vai sobre e sobre e para sempre e para sempre. Ben, non realmente pode facer un programa que ten un número infinito de printf declaracións, non? Polo tanto, neste escenario en particular, de forma que podería facer este traballo e para facelo imprimir sempre é en vez usar un loop while. Así, un loop while executará o que é no corpo das dúas cintas que pertence a ela con base no que é a condición. Polo tanto, neste exemplo particular, antes, se queremos imprimir isto para sempre, o que que podemos facer? Ben, por suposto, non é? Polo tanto, este tipo de combina a idea dalgunha expresión booleana xunto con un lazo. E aprendemos sobre booleano expresións anteriores. Así, sempre que a condición dentro Mentres tanto segue a ser verdade, este lazo executará sobre e sobre e sobre. E neste caso, se nós só ofrece-lo con verdade, iso fai que un infinito lazo que imprime a canción sobre e sobre e sobre como nós desexado antes sen ter un programa que ten un infinito número de instrucións printf, que é non é posible. Entón, máis convincente, con todo, pode usar isto cun variable e unha condición. Entón, imos dicir que queremos repetir o frase, totalmente tolo, 10 veces. Entón o que podes facer con un loop while é primeiro pode inicializar un contador variable fóra do While a 10. E entón, basicamente, cada vez que vai a través do loop while, imprime a declaración e, a continuación, vostede diminúe a contador variable ata o final, nalgún momento, xa que eu restar abondo veces, 1 da I bastante veces - e só para aclarar, eu minus minus Significa que é igual a que menos 1. Isto vai levar basicamente I ata o punto no que xa que eu chegar a cero, este condición non é certa e polo que sae fóra do circuíto. Entón, totalmente maluco só imprime 10 veces. Calquera dúbida sobre un loop while? Aceptar. Polo tanto, hai un xeito de facer o que acabamos de fixo dunha forma máis concisa con o que chamamos un loop For. Entón, un circuíto para consiste nunha arranque, un estado, e un actualización, así como tiñamos antes neste loop while. Entón, imos dar un ollo. Neste loop while, tivemos un arranque, entón tivemos un condición de que fixemos o check. E entón tivemos unha actualización pisar na parte superior. Con un loop for, isto leva basicamente estas tres cousas e condensa-lo abaixo nunha liña. Entón o primeiro que fai o Para loop é o arranque. E entón fai un punto e coma, e, a continuación, fai a condición, que é o que eu maior que cero vai para alí, e, a continuación, a etapa de actualización. Polo tanto, este queda realizada o finais do corpo do lazo. Entón, eses dous programas son esencialmente equivalente. Algunha pregunta? Entón, o que é unha diferenza entre eses dous? Alguén pode indicalo lo? Pode ser un pouco sutil. É só unha diferenza moi pequena. Si? COLUMNA 5: Non sería capaz de utilizar a variable I, fóra do loop for [Inaudível]? JOSÉ: Exactamente. Entón, iso é algo que nós imos chegar a máis tarde chamado de ámbito de variables. Pero, esencialmente, este int vida I fóra dese loop while. Entón, unha vez que este loop while faise execución, eu vou ser capaz de utilizar, máis tarde, en no programa. Considerando que, con este loop, este int I ten como ámbito dentro deste loop. E por dentro desta parcela do circuíto para que inicia nos parénteses e remata con a bosquexo alí. O que é declarada dentro aquí non se pode empregar no exterior. Entón, se eu tentar empregar eu fóra, que vai dígame, símbolo non declarado. E, esencialmente, eu non faría poder usalo. ROB: E así, hai 10 anos, en literalmente todos os casos, as claves son o que usou para determinar o ámbito dunha variable. Entón, alí dentro, int I é igual a 10 é declarada dentro deste conxunto de claves. E entón, mentres tentar empregar I antes deste bosquexo, todo ben. Podes ver cando escribe make, vostede verse trazo, trazo, std, iguais, C99. Entón, esta é unha versión posterior do C que GCC aplicou que tamén dá este atallo. Polo tanto, este empregado para non ser permitido en C. E podes ver por que, porque este int I está fóra deste bosquexo pero aínda é considerado o alcance destas claves. Pero iso é unha cousa moi cómodo, e por iso é unha boa extensión. JOSÉ: Algunha pregunta? Aceptar. Entón, o que é máis útil é que, ás veces, quere tipo de dinamismo o seu ciclo, non? Non quere só necesariamente imprimir totalmente tolo o tempo, vostede quero contar para abaixo de 10 ou algo así. E así pode utilizar a variable do contador dentro dese ciclo tamén. E neste caso, este programa só conta atrás de 10 todo o camiño. E o que non imprime? Non imprimir cero, dereito, porque cando - Si, el tampouco imprime 11. Por iso, non imprimir cero, porque cando Eu é cero, lembre, el avalía a condición antes de entrar en para realizar o corpo do loop. E cando é cero, isto é falso, así non imprimir en conta atrás cero, el só imprime conta caída de 10 todo o camiño ata a 1. Se nós realmente quería para imprimir cero, entón poderiamos poñer un signo igual tras este signo maior que. Aceptar. Así, unha forma de facer a validación de entrada, que é cando pide que o usuario faga algo, quere estar seguro de que eles seguir as súas instrucións, é por o loop while, non? Polo tanto, neste caso particular, eu estou preguntando a un número positivo e, a continuación, eu son agardando entrada. E entón eu chequei Mentres a entrada é menor que cero, sigo a preguntar-lles. Entón, mentres eles me dan un número que non é positivo, sigo a preguntar, sigo a preguntar, sigo a preguntar. Pero o que é unha especie de estraño sobre iso? Ou o que non parece ideal sobre esta estrutura aquí? Calquera? Si? COLUMNA 6: Está repetindo a instrución de dúas veces. JOSÉ: Certo. Polo tanto, temos dúas declaracións printf aquí, non? Polo tanto, hai un xeito que poderiamos conseguir isto só ata un que faría o noso código máis fácil de ler e un pouco máis limpo. E, entón, non tería que Póñase en ter dúas veces tamén. E un xeito de facelo é usando un loop do-while. E un lazo do-while é basicamente un forma distinta de un loop while onde todo o que está dentro de claves é executado polo menos unha vez. Entón, aquí, eu declaro, int de entrada, do lado de fóra por primeira vez. E entón eu acaba de dicir, facelo instrución mentres que a entrada é menor que cero. Así que chega a facer primeiro. Sempre pode executar tanto polo menos unha vez máis, por iso sempre vai pedir o usuario para a entrada de, polo menos, unha vez máis. E, a continuación, el avalía que a entrada, e pasa en un círculo. Si, cuestionar? COLUMNA 6: Existe unha maneira de facelo [Inaudível] tipos, como se di, GetString, e alguén [inaudível] existe unha forma de [inaudível] JOSÉ: Entón a pregunta é, existe un forma de facer a validación de entrada se o usuario non poñer na dereita tipo de variable? Entón, se se require para un int e eles dános unha corda no seu lugar. E nas funcións que implementan para ti, GetInt, GetString en todos estas funcións, realmente xa facer este tipo de entrada de tipo básico validación baixo o capó. Entón, se está a usar as funcións que lle deu, o que realmente non precisa. Pero se quere ollar máis para como pode realmente facer iso, pode ollar baixo o capó o arquivo I/O-- non presentar, as funcións de E / S por defecto como unha lectura da entrada estándar e saída estándar. E pode ter unha noción mellor de como pode facelo. ROB: Unha cuestión, con todo, é especialmente co exemplo que dixo, espera unha cadea e eu entrar nun int. Como dicir a diferenza entre intencionalmente querendo o corda 123 contra querendo int 123? Entón corda, é practicamente non hai ningunha validación, é só o que eles entrou vai interpretar como unha cadea. Int é máis fácil, porque non importa o entrada que tomar a partir do usuario, que é sempre levando unha corda. E así que a secuencia que pode, entón, comprobar, son todos estes díxitos numéricos, en realidade? JOSÉ: Aceptar. Calquera dúbida sobre un loop do-while? ROB: Ah, e este é tamén - volvendo ao ámbito, un tanto común erro está intentando usar algúns sitios variable dende esta do-while loop dentro desta condición. E en realidade, se nós só se librou de isto e dixo, a entrada é igual a int GetInt, a continuación, o compilador vai berrar con nos porque a entrada non existe fóra do ámbito da estas chaves. JOSÉ: E é por iso que ten esa formación aquí. Aceptar. Entón, tamén se pode saír dun malla máis cedo se quere. Polo tanto, esta é unha forma diferente de aplicar o que acabamos aplicado. E en vez de usar a condición dentro dos parénteses, estamos a usar un Se declaración dentro do corpo do loop do-while. E, basicamente, cando a entrada é por fin maior que cero, iremos saír do loop. E así imos todos o camiño ata aquí. E podes ver que esta sería probablemente ser preferible neste escenario, porque é algo pouco máis limpo e un pouco pouco máis fácil de ler. Considerando isto, especie de ter liñas extra na mesma. É só algo máis feo, Coido que, de certa forma. Si, cuestionar? COLUMNA 4: Será que romper só comezar lo fóra dun conxunto de chaves? JOSÉ: Certo. Entón a pregunta é só romper tiralo dun loop? E a resposta é si. Entón, se ten aninhado For loops, para exemplo, se eu teño a int I é igual a 0 ata o día 10 e, a continuación, para int J é igual a 0 ata o día 10, se eu saír do interior loop, eu irei ao circuíto externo. Por iso, vou seguir a realizar o operacións do lado de fóra. Calquera dúbida sobre iso? Si? COLUMNA 5: Pero romper só as funcións para chaves, non a outro declaracións? [Inaudível] JOSÉ: Entón a cuestión é vai romper única función para loops en oposición a outras declaracións, como se? E si, ese é o caso, por que está batendo fóra de un loop, dereito, nun sentido. ROB: Na gran maioría dos casos, é este é o tipo de Si algo, logo romper. Entón non ten que romper a aplicar-se O que está envolvendo en torno a el. E tamén, iso non é moi de un loop, pero lembre de que os interruptores son tamén dobres de por pausas. Vimos breaks en uso con interruptores antes. JOSÉ: E ti tamén pode usalos en loops while e sexa loops. Algunha pregunta? Aceptar. Así, o próximo up é funcións. Así, pode usar un destes BYOB bloques no seu proxecto de cero. E isto permite basicamente definir un conxunto de instrucións a seguir. E o que quero dicir con isto é, imos pensar de volta á matemática, á dereita, álxebra. Ten o que chamamos unha función de x, algunha variable, e imos dicir iso función é f de x é igual a x + 5. Entón pode pensar f de x como este negro caixa que leva 15 e, a continuación, produce 20. Así, máis xeralmente, é unha función algo que leva uns insumos e logo produce algunhas saídas. E por que son funcións ben? Son bos para unha serie de razóns. Así é que alguén quere tomar unha facada o que significa organización? En termos da razón pola que as funcións son útiles? Si? COLUMNA 4: Fai o seu código máis lexible. JOSÉ: Certo. Entón, unha das cousas é que fai seu código máis lexible, non? No canto de ter como int x é igual a x veces x veces x, podo ter cubo de x, que é máis lexible e máis comprensible para un lector. Organización tamén é en termos de dividíndose o seu código en gerenciável racións, de xeito que, no canto de tentar aplicar iso todo nunha longa sección na principal, pode clasificar de división la en como, OK, imos escribir unha función ao cubo algo, imos escribir un funcionar a cuadratura algo. Desta forma, pode división la en minúscula, pequenas partes que pode facer fronte ao contrario de tentar resolver un gran problema dunha soa vez. ROB: Ou incluso pequenas, pequenas pezas que vostede e un compañeiro pode afrontar. JOSÉ: É. ROB: Entón, en vez de dous Estás a implantar un funcionar á vez. JOSÉ: Simplificación. Alguén quere dar un palpite? Si? COLUMNA 5: Máis repetición. JOSÉ: Certo. Entón, unha cousa que podes facer con simplificación é que é unha especie de no no mesmo sentido como reutilización é que xa que eu escribir unha función cubo, podo é só usar que máis e máis e máis de novo no meu programa en vez de escribir x veces x veces x máis e unha e outra vez. E simplificación aquí tamén só significa que fai o tipo de código máis fácil de depurar xa que dividir este se en funcións. Porque entón podes atopar onde seus problemas especie de son. Algunha pregunta? Así, outra idea é abstracción, non? Esta caixa negra. Como vostede sabe o que fai GetInt para recibir a entrada do usuario? Nós realmente non dixo a ti, non? Todo o que dixo é GetInt fai exactamente o que di que fai. Así, aínda que non lle din como funciona, aínda sabe. Polo tanto, neste caso particular, este é unha función cuádruplo que fai cousas distintas para unha entrada para producir unha saída. E pode cuádruplo dun número pola multiplicación por catro. Ou pode o que chamamos bits transferir-lo por dous. E nós imos cubrir este un pouco máis tarde. E non hai necesidade de saber como esta función realmente funciona, sempre que funciona como indicado. Así, baixo o capó, que eu podería ser como, o retorno veces entrada oito dividido por dous. E non sabe, non? Todo o que precisa saber é fai o que di. Así que esta é a cousa útil preto de abstracción. E outra cousa é unha especie de esta idea de atopar o código para un especial sección. Entón, se ten un problema, non ten que ir todo o seu código intentando para corrixir onde era o problema. Polo tanto, neste caso, eu apliquei cubo mal. Penso cubo foi multiplicando por tres. Polo tanto, neste caso, trátase dun programa que acaba de multiplicar por tres en todas as partes. E hai outro programa que ten cubo fatorados nunha función. E agora, se eu queira corrixir o meu erro aquí, eu teño que corrixir cada liña de código neste programa. Considerando, por outra banda, se eu usar o función, eu só teño que cambiar o que estaba mal nun só lugar. Así, en ciencia da computación, que chamar entradas e saídas. As entradas son chamados parámetros ou argumentos, e as saídas son chamados valores de retorno. E imos ver como iso nos axuda a resolver de definir unha función nun segundo. Polo tanto, esta é unha definición de función para cubagem. Por iso, leva unha entrada, e, a continuación, el retorna ese número veces si tres veces. Entón, imos decompô-lo. Polo tanto, temos unha cabeceira de función, que consiste basicamente de tres cousas. Polo tanto, temos os parámetros, que son, como dixen antes, o contribucións para esta función. E entón damos a función dun nome. Neste caso, é chamado de cubo. E, entón, indicar que o tipo de do valor de retorno é. Polo tanto, neste caso, a miña función cubo toma en un número enteiro e é tamén retorna un enteiro. Entón, se eu pasar en dous, dous é un número enteiro, el retorna oito para min, o que é un número enteiro. Entón voltar parámetros nome do tipo. Preguntas sobre iso? E, a continuación, o valor de retorno é realmente especificado no final dicindo retorno e, a continuación, regresar o que quere contén o valor de retorno. Polo tanto, neste caso, se colocarmos todo en conxunto, unha función ten en parámetros, chámase algo, e el retorna algo que é do tipo que dicir que ía ser. Algunha pregunta? Entón, como imos empregar unha función? Ben, nós escribimos unha función e, a continuación, podemos usalo no noso programa, non? Entón eu liguei para el cubo, e entón podo usar cubo. Pero o que é importante ter en conta é que as cuestións de orde. Se eu tivera cubo debaixo principal, é indo funcionar en cubo. E, neste punto, non hai nada chamado cubo no programa, e é só vai ser así, eu teño idea do que é cubo. Entón, el vai dicir, implícita declaración de función. Ese é o erro que aparece. E así, neste caso, o cubo está abaixo principal, polo que non está a suceder para saber sobre el. COLUMNA 5: Así principal adoita a última función definida? JOSÉ: Entón a pregunta é, é o principal adoita ser a última cousa que definir? E non. É porque normalmente temos como principal para estar na parte superior, non? Porque esa é a primeira cousa que quere abrir o programador a programa para ver. E así, como é que imos resolver esta cuestión de nós quere principal para estar na parte superior, pero o funcións que queremos, queremos que eles ser inferior a principal aínda ser capaz de usar los dentro principal? Así, usamos o que chamamos un prototipo de función. Entón, o que un prototipo de función esencialmente se é que primeiro ten que sinatura ou a función header do que queremos aplicar abaixo aquí, e imos poñelo o inicio dun programa. Polo tanto, neste caso, dicimos que, así, máis tarde, no noso programa, imos facer unha promesa para aplicar esta función chamada int cubo, o que leva unha entrada enteira. Entón, agora, porque iso está por riba de inicio, principal, que vai dicir, oh, así, máis tarde no programa, que será alí para que eu poida consultalo la, entón eu vou só deixar pasar por agora. E, a continuación, na parte inferior, Implementar cubo. E entón principal será só dicir, ben, ha clasificar de conexión estes dous símbolos xuntos. E nós imos cubrir o que iso significa máis tarde. E así vai saber que esta é a función cubo que debe empregar. ROB: O [inaudível] sobre querer principal na parte inferior ou top, vin os dous. Hai cousas que simplemente quere poñer principal na parte inferior. Pero unha vez que un proxecto é especialmente grande, xeralmente principal está nun arquivo propio. E nese punto, como o liña cubo int sería - dentro stdio.h son unha banda de liñas só como aquel int liña de entrada cubo int. E para que estes prototipos son cousas que tenden a poñer en arquivos de cabeceira, en Nese punto, non importa. Ben, non importa. Aqueles sempre ir na parte superior. E se de inicio non é un ficheiro propio, non se preocupe en colocar prototipos de funcións individuais no arquivo. JOSÉ: E nós imos chegar a iso un pouco pouco máis tarde, cando Rob comeza a falar sobre a compilación. E así tamén hai unha diferenza entre parámetro e argumento. E parámetro é só o que chamamos eses insumos cando definimos a función. E chamamos iso dun argumento cando realmente pasalo para a función. Polo tanto, neste caso, este é un parámetro, como dixemos antes. E cando nós realmente usalo de alí, cubo de x, entón X en si é o que chamamos un argumento ao cubo función. ROB: Entón os argumentos de parámetros son - hai esta distinción, moi confundida alternativamente. Neste momento, para min, é como un dos aquelas palabras que, cando velo en o salvaxe, eu non podo axudar, pero inmediatamente cuestión de saber se eles están usando-o en no contexto correcto, xa que o diferenza é sutil abondo para que todos tenden - Eu case sempre digo argumento independentemente do que quero dicir. José; e funcións tamén son útiles ao que chamamos de efectos secundarios. Así, unha función pode tomar ningunha entrada, e el tamén pode producir ningunha saída. Polo tanto, neste caso particular, eu son definición dunha sub-rutina que non ten ningunha valor de retorno. E, a fin de indicar que, utilizamos o que chamamos un baleiro aquí. E así, o efecto colateral desta función é que só imprime o material á páxina. En realidade, non tomar calquera insumos, e iso non ocorre realmente producir calquera saídas. Pero isto pode ser útil no sentido se quere, por exemplo, depuración algo no seu programa, se quere para escribir un pouco sub-rutina que imprime, imos dicir, o contido de memoria ou algo así. E así, estes efectos secundarios son, ás veces, útil, fóra do contexto só quere entradas e saídas. Algunha pregunta? E para rematar este segmento particular, o que este programa fai? Vou dar a vostedes un par de segundos para lelo. Nun nivel moi básico, o que queremos dicir é que cambio x e y, non? Entón, como moitos de vostedes realmente pensan iso vai cambiar xe y? Levante súa man. Ninguén. Aceptar. Quen pensa que vai non cambiar xe y? E a suma de que era non o cuarto enteiro. Por iso, algunhas persoas non está seguro. Aceptar. Iso é razoable. Entón, imos pasar polo que acontece cando realmente chamar funcións por primeira vez en Para responder a esta pregunta. Entón, iso é o que a memoria tipo de parecer. Este é máis ou menos como un modelo simplificado memoria do que parece cando executar un programa. Polo tanto, hai algo chamado a pila abaixo aquí e algo chamado heap. E estes crecen cara o medio de memoria. Polo tanto, neste caso particular, cando chamar a unha función, el colócase na pila. E entón o que está contido no que función permanece no que chamamos que stack marco da función. E así, para obter un bo visualización de iso, imos - por exemplo, tivemos a programa principal antes. E dentro do principal, que chamamos cubo. Así principal sería primeiro van para a pila enmarcar, porque é a primeira función que se chama. E entón, cando cubo se chama dentro principal, que é colocado na parte superior da principal dentro da memoria. Entón, o que vai notar é que cubo ten os seus propios parámetros ea súa propios veciños. Entón, cando o que realmente pasar algo para unha función, os parámetros que se son copias do que se pasado do principal. E a sorte de explicar isto, imos camiñar por un programa. Polo tanto, temos a pila, o que é só a parte do conxunto. E o que nós facemos é primeiro arrincar x e y de un e dous. Polo tanto, temos esas pequenas caixas. Eles están sentados na pila do principal enmarcar na pila. Eles conteñen un e dous. Agora chamamos intercambio. O que pasa é que pasamos x e y en intercambio, e intercambio crea as súas propias copias destas variables para usar dentro do seu cadro de pila. Entón agora alí temos, un que contén o valor que tiña xe b, que contén o valor que tiña y. Entón, un, dous. E vai entender que este é separado de x e y no inicio. Así, temos agora crear un temporal variable conteña un. Definimos un igual ab, polo que cambios dun a dous. E, entón, establecer b igual a temperatura, o que é un. E entón agora imos saír esta función. Cando saír da función, o cadro de pila queda eliminado da pila. Chamámoslle empurrar. Aperta un cadro de pila para a pila e pop fóra da pila. E entón o que pasa é que todo o que Foi nese cadro de pila tipo de só sobe en chamas. E para que non máis existe. Pero o que percibimos? Nós nunca realmente cambiou o valores de x e y, non? Polo tanto, aqueles permaneceu lugar para inicio. E, pasando as cousas a cambio, nós en realidade nunca cambiou eses valores. E o que chamamos iso? Chamamos iso de pasaxe por valor. Así, no C, cando pasa as cousas en funcións, pasa-los por valor e fai unha copia deles para a función de usar. E nós imos aprender sobre algo chamado paso por referencia máis tarde, pero iso é un xeito que pode resolver este problema. Pero non vai preocuparse que ata máis tarde. ROB: E de feito, ese termo, que pasa por referencia, entón C non ten sequera pasando pola referencia. C exclusivamente ten pasaxe por valor. Non importa o que fai, está sempre pasando unha copia de algo. É que, como eu medio que mencionei que antes con punteiros e que unha cadea é realmente só catro bytes apuntando a un lugar na memoria. Ben, se eu tivera esa cadea e é me dicindo que é onde a cadea - ben, se eu tivera ese punteiro para este poñer na memoria, entón eu podo pasar un copia do punteiro a unha función e que a función aínda sabe onde en memoria que é. Entón, eses dous punteiros están apuntando para o mesmo lugar na memoria, e é así que nós imos ser capaces para modificar as cousas ademais da cadro de pila actual. JOSÉ: Quere facer a compilación? ROB: Non, é 5:30. JOSÉ: Aceptar. É 5:30. Aceptar. Entón, imos cubrir a compilación creo que en á seguinte sección, ou a súa sección líder vontade nese punto. E - ROB: Algunha pregunta? JOSÉ: Algunha pregunta? Si? COLUMNA 5: Usando cordas de CS50, calquera funcións que quere empregar para aqueles, que será como funcións C. CS50 non pasou e fixo ningunha adicional. ROB: Correcto. Calquera dos C como [inaudível], vostede usaría aqueles nas nosas cadeas. JOSÉ: E unha última cousa que quero mención é que temos unha guía de estilo a esta clase. ROB: Ah, si. JOSÉ: Entón, se veu dun programación fondo antes, pode ter certas convencións cando está escribindo código como poñer claves na mesma liña ou especial formas de recuar ou nomear súas variables. Nesta clase, queremos seguir un guía de estilo específico, só porque, ben, se saír e traballar en industria, vai ser esperado a seguir a guía de estilo da empresa en que vai. Como por exemplo, Facebook creo ten un tipo particular de nomear convención. E hai diferenzas entre camelo variables da carcasa e, así como separándoos con guións baixos. E tamén, eu creo que o máis importante, como por exemplo, o repregamento, non? Nós claves comezar onde condición, e están na liña seguinte. E nós tamén poñer chaves en aínda que sexa só unha liña. E unha morea de veces, hai formas de facer lo onde podes deixar esas claves fóra se é só unha liña baixo a instrución If. Pero nesta clase, queremos seguir un guía de estilo específico só para que obteña usado para este tipo de cousas. ROB: Si, e estilo dos anos 50 vai facer cumprir esta guía de estilo, e estamos vai utilizar estilo dos anos 50 para grao de seu código. Por iso, fai as cousas máis fáciles para nós e esperemos que non debe facer cousas que moito peor para vostede, dada a estilo estándar non debe ser tan irrealista. JOSÉ: E, finalmente, para atopar o estilo guía, vai a manual.cs50.net/style. E si. COLUMNA 4: Vai facer valer calquera carácteres por liña? ROB: si. JOSÉ: Sentímolo, persoal. ROB: Isto é como un dos únicos. Neste punto, estou Aceptar con 120. Eu estou ben con que dicir 120 caracteres por liña. Eu entendo que haxa algún límite. Eu creo que 80 é tan pequeno, pero estamos aplicala. JOSÉ: Persoalmente, creo que con C, 80 carácteres é máis Aceptar. Unha vez que comeza a estar a outro linguaxes como JavaScript e PHP, e non de xeito razoábel só limitar -A 80 caracteres. Aceptar. Ben, esa foi a sección de super. Alguén quere doce? COLUMNA 4: Si