ROB: Molt bé. Benvinguts a la primera secció. Sóc Rob. JOSÉ: Sóc Josep. ROB: Llavors anem a bussejar a la dreta dins A primera hora de parlar de és l'aparell. Així que espero que la majoria de vostès tenen descarregat ja. Però pots veure les instruccions en cs50.net/appliance. Oh déu, ara sóc conscient de si mateix. Encara sento. JOSÉ: Wow, sona com és desorientat. ROB: Així que algunes persones han estat tenint problemes amb ell, així que no espereu fins que l'últim minut del problema s'estableix en tractar de resoldre el Appliance i descobrir que no està funcionant. JOSÉ: I si alguna cosa no està funcionant i vostè necessita ajuda, vostè pot anar a cs50.net/discussion on tenir un fòrum en el qual pot enviar les seves preguntes. I anem a arribar a ells amb el temps. ROB: Molt bé. Així que això és el que l'aparell s'assembla. Un cop més, és només una forma completament separada sistema operatiu que s'executa dins de qualsevol sistema operatiu que s'estan executant a l'ordinador portàtil. I les coses principals que vostè ho va a fer estar usant són gedit. Així que espero que això ja té convertit en un lloc familiar. El terminal. I també pot executar Chrome dins de l'aparell. Hi ha hagut un parell de persones que han informat d'Internet No treballar en l'aparell. I alguns d'ells només han assumit que no se suposa que és Internet al Appliance. Però això sí, se suposa ser Internet. Vaig a dir ara mateix, però no és així realment significa res. Si l'internet no funciona, això és el que tendeixen a necessitar córrer a arreglar-ho. Si vostè està tenint problemes d'Internet, no recordar-ho, només publicar-lo a Discutim, i ho direm, executeu això. Però Internet hauria d'estar treballant. Així que l'única altra cosa - si, res la resta és realment rellevant. Però jo només volia assenyalar que - veure en aquesta cantonada inferior dreta. Així que cadascun dels seus aparells han tenir una adreça IP. I més tard en el semestre, aquesta IP direcció serà més rellevant quan que està treballant en la web p-set, perquè vostè serà capaç d'accedir a la lloc web que està treballant des de Chrome local utilitzant aquesta adreça IP. Però el que m'agrada utilitzar l'adreça IP - I vostè no ha de fer això, només vull assenyalar - és aquí. Així que aquesta és una finestra de terminal a el meu Mac, això no és en el Appliance en absolut. I vostè pot buscar el que aquesta comanda fa. Però vaig directament a SSH al meu Appliance. No sé el que la IP és. JOSÉ: 168 - 168.224.1.0. ROB: Així que una vegada que he acabat amb això, ingressi Ara, bàsicament, això és idèntic a un finestra de terminal dins del meu Appliance. Així que gairebé mai va funcionar realment des de dins del propi aparell. Acabo sempre he funcionant en el fons minimitzat i SSHed-hi. El problema amb això és que no es va per ser capaç d'utilitzar fàcilment gedit directament des d'aquesta. Però si vols ser un veritable fresc hacker, llavors vostè ha d'acostumar a una comandament de la línia d'edició de text de totes maneres. Així Vim i Emacs i Nano, tots aquests diferents alternatives. Nano tendeix a ser el més fàcil. I crec que no té ressaltat de sintaxi. Oh, no, és totalment fa. Així que vostè pot utilitzar Nano, perquè que un és bastant fàcil. Veus tots aquests ordres a la part inferior. Aquest petit símbol pastanaga. Si vostè no ha vist abans, se li Probablement veure molt ara. En general, significa la pastanaga control, com la part inferior esquerra del teu teclat caràcter de control. Així que aquí em diu aquí - oh, no està tallat si fer més gran Així de control, X és com Vaig a sortir. I diu que pot colpejar I per Sí, per a l'estalvi, N per No Així que això és Nano. Vim i Emacs tendeixen a ser lleugerament més complicat i aclaparador. Però vostè pot acostumar-se a ell, i després et va encantar. Així que això és tot. JOSÉ: No hi ha necessitat de fer això. ROB: Si. Vostè és lliure d'utilitzar gedit per a la resta del semestre. Així que qualsevol pregunta relacionada a aparells domèstics? O vostè té alguna idea sobre què més necessita ser parlat sobre l'aparell? Sí ALTAVEU 1: Quan SSHed en el seu cosa, va ser el carmesí contrasenya? ROB: Si. La contrasenya per a gairebé tot en l'aparell que està passant ser carmesí. ALTAVEU 2: Instal · lar com un veritable IDE en l'aparell, funcionarà? ROB: M'imagino Eclipse té un Versió de Fedora, en aquest cas, sí, vostè pot fer això. Probablement no és realment val la pena. ALTAVEU 2: OK. Així que és probablement més fàcil si volia utilitzar Eclipse, només ha d'utilitzar el natiu i a continuació, pujar a - ROB: Oh, això també és probablement més fàcil. Però vostè pot aconseguir que funcioni dins de l'aparell. JOSÉ: I per a la càmera, la pregunta era, pot instal · lar un altre IDE a l'interior de l'aparell? ROB: Eclipsi ser un exemple d'una IDE. Alguna altra pregunta Appliance? Està bé. Així que ara anem a passar a la línia d'ordres coses relacionades amb la interfície, de manera CLI. I de nou, jo només vaig a treballar en aquí, perquè aquest és idèntica a treballant dins d'una finestra de terminal dins de l'aparell. Com està buscant aquesta font? Això és prou gran? Està bé. Així que hi ha una gran quantitat de comandes que vostè ha d'aconseguir bastant utilitzat per al llarg del semestre. Els dos grans per navegar són ls, llista els arxius d'aquest directori, i cd, per canviar de directori. Així que puc canviar d'escriptori i després un patró molt comú és cd a un directori i immediatament ls el que està en el directori. La gent també de vegades no s'adonen que la finalització Tab és una cosa. Cd Així com, vh, i després em va colpejar Tab. Gairebé mai escric a terme tota la cosa. I després si segueixo colpejant Tab de nou, que va automàticament Inici Llistat per mi. Així que puc cd vhosts, host local. I això és només anar a - en cas que vostè no ha sentit parlar del terme abans, el directori és només una altra paraula per a la carpeta. Així que ara si que es veu - anem a portar això a la part superior. Així que ara si veus entre parèntesis, que veure l'accent poc, slash, vhost, retallar, host local. Així que la titlla, que es refereix al meu directori personal. És un directori que està en tant SSH polz És el directori que està en tant vostè obre un terminal. És el lloc on començar. I així estic dins del meu directori home, i jo estic dins del host virtual directori dins del meu directori home. I llavors jo estic dins del local seu de directori a d'això. Pel que algunes altres coses útils amb cd - o bé, en general, de manera que sempre dot correspon al directori actual. Cd, de punt és una ordre bastant inútil. Però això està canviant a la directori actual. Una més útil en termes de cd és punt, punt, que és només ha d'anar d'un sol directori. I tingui en compte que aquests - Vull dir àlies, però aquests símbols, punt i punt, punt, els treballs per a gairebé qualsevol ordre que ets estarà pensant en córrer. Així com el cd és probablement on podràs l'ús de la majoria, però aquests no són coses que simplement cd entén. És més o menys alguna cosa que la seva totalitat línia d'ordres entén. Una gran quantitat de programes de comprendre punt i punt, punt. Així que els altres els estris - cd, Dash. Així que això em portarà a la últim directori que jo era polz Així que de vegades vaig a fer una cosa així, oh, estic treballant aquí. I veig un error amb alguna cosa, i Aniré a investigar anant a algun directori aleatòria en algun lloc. I jo no sé si va a m'ho dius a mi entrar allà. Ho farà. Així que faig el que vull en aquest directori. Bla, bla, bla, bla, bla. I jo estava com, sí, vull per tornar a on era. cd, guions i em porta de tornada. Així que em vaig a tirar un munt d'aquests en el dia d'avui. No espero memoritzar tots ells. És una espècie de només sé que hi ha. I després, més endavant, quan vostè és com, hmm, vull tornar a la directori que estava just a, oh, espera, existeix alguna cosa així. No ha de simplement introduïu a tot el directori de nou. JOSÉ: I el temps s'acaba utilitzar una i altra vegada, i es convertirà en la memòria muscular. ROB: Si. Llavors, com he dit abans, que titlla és el seu directori personal. Així que puc cd, accent. Però jo ni tan sols he de això si només - Vaig a tornar al directori de manera que no és un exemple de sentit. Però si acabo de fer cd, això és també la mateix que, aneu a la meva directori home. Faig Comando, K. JOSÉ: També podeu escriure clara, la paraula, i s'ha de desactivar-la. ROB: I crec que també de control, L també ho fa. Així que un munt de diferents maneres. Crec que hi ha algunes diferències en el clara i Control, L s'acaba realment empènyer a la part superior i Encara puc retrocedir. Comando, K destrueix literalment tot, i tu no es pot moure cap amunt. Si més no, això és com funciona en iTerm2. No sé com altres coses - oh. Amb sshing, així que si estàs en Windows, hauràs de descarregar PuTTY per tal de SSH, ja que Windows no ho fa tenir com una eina integrada SSH. De Macs, pots simplement SSH directament des d'una finestra de terminal. D'acord. Preguntes? Amb ls, així que alguna cosa s'acostumi a amb la majoria d'aquests ordres és - bé, només faré un. Ls, tauler, l. Així tauler, l és el que anem per trucar a una bandera per ls. I molts d'aquests comandaments tenen banderes que es pot passar a ells. Així que en aquest cas, guió, l és una bandera que diu que em donarà una completa llista de tota la informació d'aquests arxius. Així que veiem aquí que l'escriptori era modificada el 30 de juliol a les 12:54. Descàrregues es va modificar al 6 de setembre. Aquests són la mida actual i bytes d'aquests directoris. No ha d'entendre tot això. Aquesta cosa de l'esquerra, aquests de drwx, que es convertirà en molt més rellevant més tard, quan vostè ha de fer front - que té a veure amb qui tens autorització a veure aquests arxius. I pel que si vostè no era l'únic usuari en aquest equip, vostè seria capaç de per exemple, OK, jo hauria de ser l'únic permetre mirar aquest arxiu o estic permetrà a tots mirar aquesta imatge. Així que una altra persona en el meu equip pot llegir aquest fitxer. Jo ni tan sols sé el que això - Què fa això? JOSÉ: No estic molt segur, en realitat. ROB: No tinc idea. JOSÉ: Però si vostè no sap, no hi ha una ordre útil que pot utilitzar per dir-li el que significa que la sortida. I si escriu en l'home abans de l'ordre - per la qual cosa M-A-N. ROB: Home. Així que l'home és un altre això és molt útil. I l'home, ls. Així que les pàgines de manual, que tenen tant comandes que es va a utilitzar en la línia d'ordres, i també tenen funcions que seran rellevants amb C. Així que vostè pot l'home - i no vaig fer cas 3. Però man 3 printf portarà fins a la versió C de printf. Però si acabo de fer l'home printf, això és anar perquè aparegui la comanda printf això passa en la línia d'ordres. Així que l'home, ls. Les pàgines del manual poden ser bastant aclaparadora. Aquí, però, veurà aquest llistat de totes aquestes banderes que LS entén. Així que si anem a llançar-se, l, i - Jo només vaig a tirar això a vostè. Però amb la finalitat de buscar, vostè vol per colpejar primer la qüestió marca o botó de barra. Així que retallar. I llavors puc buscar per al que vulgui. Així que vaig a retallar per al tauler, l. I allí estava. Així que utilitzi un format de llistat llarg. Això no ajuda a esbrinar què aquesta columna particular, volia dir, però em assumir en algun lloc d'aquí això explicaria això. Així que utilitzi les pàgines del manual de qualsevol ordre que no entén immediatament. Estic bastant segur que vostè pot fins i tot home, home. Una interfície per a la línia manuals de referència. Ah, una última que és potser una mica és LS pertinents, tauler, a. Així compte si acabo de fer ls, Aconsegueixo aquests cinc arxius. Si faig ls, guió, a, I aconseguir molts més arxius. Així que la cosa en comú entre tots aquests nous arxius és el punt per endavant. Així que la convenció és que un arxiu que comença amb un punt amagat. Així que no vols veure aquest arxiu, no vull haver de ficar-se amb la llista de directoris. És només quan es demana de manera explícita, bé, ls, guió, una, mostrar. Una és sinònim de tots els arxius, incloent les ocultes. Pel que alguns altres comandaments. Oh, les preguntes en aquest moment? Sí ALTAVEU 3: Quan vostè fa un ls, a, quin és el punt, punt? ROB: Oh. Així que això és el que jo estava parlant. És el mateix quan Puc agradaria cd, punt, punt. Així que, tècnicament, punt i punt, punt són arxius que hi ha en cada un guia on l'arxiu de punt es refereix en el directori actual. Així que si jo cd, punt, jo només vaig romandre en el directori. I punt, punt sempre es refereix a la anterior directori d'un a nivell. Així que si entro en troncs i ls, guió, al, Veuré punt, punt. cd a punt, punt em porta al directori anterior. Sí D'acord. Així que una altra molt important comanda és rm. Així que això és el que anem a utilitzar per eliminar. I m'ho dius a mi en realitat faig una altra comandament primer. Així mkdir. Mkdir és com es pot crear directoris. I vaig a crear un directori temporal i entrar en aquest directori temporal. I com era d'esperar, està buit. Però si ls I, guió, una, encara tenen punts i punt, punt, perquè es refereix a punt el directori actual. I punt, punt es refereix a la directori anterior. I els sempre existirà sense importar el directori que es in I aquest és un completament innecessari comandament, però el tacte. Jo només el faig servir, perquè és una manera fàcil de crear arxius. Així que toqui una, toc b, toc c és només crearà tres fitxers cridats a, b i c que són completament buida. Així que el punt de crear-me els de la primer lloc és només perquè rm és com podem eliminar-los. Així rm, a. Es va a preguntar-me, retiri fitxer regular un buit? I després vaig a dir que si. Pel que si estic segur que vull esborrar aquest arxiu sense haver d'estar sol · liciti, retiri arxiu buit regular?, a continuació, rm, guió, f serà el bandera que diu, forçar la treu sense fins i tot em va portar, oh, estàs Segur que vol eliminar l'arxiu? Sí, estic segur. Així rm, guió, fb s'acaba fer-ho sense fer soroll. Així que anem a fer algunes més directoris. mkdir, tmp2, cd, tmp2, tocar un toc b. D'acord. Així que ara em vull treure tmp2 com un directori. Tmp2 Així rm. No es pot treure tmp2, és un directori. Així que la qüestió aquí és que no rm treballar immediatament en els directoris. Només ha significat per a arxius com arxius que no són directoris. I així, el que podem fer aquí és rm, guió, r. Això significa de forma recursiva, el que podria no significa res per a tu encara. Però quan s'arriba a la recursivitat, que dirà més. Així rm, guió, r, tmp2 va a recursivament entrar en aquest directori. Així baixarà al directori tmp2? Sí, entrarem en això. Volem eliminar tmp2 / a? Sí Volem eliminar tmp2 / b? Sí Ara volem eliminar la tmp2 directori? Sí I pel que ara directori i tot dins que s'ha eliminat. No és tècnicament una ordre rmdir que es pot utilitzar per eliminar directoris, però només funciona en els directoris buits de totes maneres. I en veure que, anem a fer mkdir, tmp2 nou. Tmp2, toqui a. D'acord. Així que si intento treure dirtmp2, que va a dir, un directori no buit. Així que gairebé mai faig servir el remove comandament dir de tota manera, perquè rm, guió, r funciona en els directoris buits i els directoris no buits. I també, si jo no vull haver de passar per tot aquest procés de baixar al directori i extreure cada arxiu individual, rm, tauler, rf, tmp2. I ara s'ha anat. Una cosa anar amb compte aproximadament és rm, guió, rf. I fins i tot em fa por que escriure-la, perquè si accidentalment premeu Enter o alguna cosa així. Així rm, guió, rf, titlla faria, sense em va portar, el f no sol · licita em, eliminarà automàticament el meu directori sencer i tot en ell. Així que vostè pot pensar que és una estupidesa. I bé, ho és. Però pot succeir molt fàcilment per accident si, per exemple, volia eliminar la meva barra, directori vhost. I just a la tipificació ràpida, Accidentalment fer això. Això eliminarà de forma recursiva tant el meu directori principal i el directori vhost en aquest directori particular que només passa a no existir en aquests moments. Però això encara eliminar el meu directori sencer. Almenys en no tenir un f, em incitaria a primera. I m'agradaria ser com, oh, no, no vull fer això. Però la gent, slash, incloent m'inclino a entrar al hàbit de sempre-ing rf. Fins i tot els arxius regulars que només pot i rm, c, tendeixo a només rm, guió, rf, c. Només vés amb compte quan estiguis-ing rf. ALTAVEU 4: Què fer C? ROB: C és que estic parlant d'aquest arxiu C En aquest directori, que rm, c. JOSÉ: I que és més perillós, si utilitza una estrella, es refereix a tot en directori. Així que el que comunament tendeixen a fer és que ho faré Entro en un directori i vull eliminar tots els arxius allà. Així rm, guió, rf, estel. ROB: Si. Rm, guió, rf, estel. JOSÉ: I si vostè no té cura el que està en el directori - Jo no era a la temperatura, però jo estava accidentalment en el meu directori home, llavors vaig a treure tot en el meu directori home. I realment he fet això abans, i Crec que vostè ha fet això abans o Jay ha fet això abans. ROB: He eliminat accidentalment - així que ignori aquest comando per una mica. JOSÉ: No és divertit. ROB: Així que en el directori bin slash és un munt d'arxius binaris, on hi haurà ser els familiars com so metàl · lic. Bé, Clang i, bàsicament, tots ells coses que estic corrent en la comanda línia estan en aquest directori bin slash. JOSÉ: Igual que ls és aquí. ROB: Així punt, ratlla vertical, ls es llistar aquest directori. JOSÉ: Rm és també en aquest directori. ROB: He rm accidentalment, bin rf-ed, que va eliminar qualsevol ordre que vaig poder possiblement desitjar. Que després em reinstal · lació d'un nou Appliance en aquest punt. JOSÉ: Així que tenir molta cura en utilitza aquesta comanda. AUDIÈNCIA: [inaudible]? ROB: Si. Això també és un mal hàbit per entrar. Si et fixes, ara sóc - així, no es pot notar, però el meu zoom-in potser pugui. Així que ara sóc root @ electrodomèstic. Així jharvard és l'usuari que volem vostè sempre estigui utilitzant. Root és l'usuari que té permís per no fer absolutament res. Així notar quan estic jharvard, si tracte de cd - el que és un directori que? Oh, l'arrel és un bon exemple. Així cd, arrel. Permís denegat. Perquè si ens fixem en aquest llistat - i una altra, vostè no ha de totalment d'entendre això. No obstant això, aquests tres guions que opinen que no deixis que cap altre usuari en aquest directori. I el directori passa a ser propietat de l'usuari root. Així que el fet que sóc jharvard i no un que no és root és permès en aquest directori, això significa que sóc vas a obtenir permís denegat quan tractar de cd a ell. Així que quan estic arrel, tinc permís per fer absolutament qualsevol cosa, incloent esborrar arxius essencials per a l'aparell i destruir la cosa sencera. Així que és un mal hàbit per entrar simplement passejar pel seu sistema operatiu com a root. Jo ho faig de totes maneres. Preguntes? I em surto de l'arrel, quedo com jharvard. D'acord. Comandes més rellevants. Així que tornant a la nostra temperatura, la ordre mv és sinònim de moviment. Vostè pot moure un arxiu. Ara volem dir-b, de manera que ara es diu b. O potser volem avançar b d'un sol directori. Així que ara buits d'aquest directori. Vaig a tornar al meu directori personal, i veiem que b és aquí, perquè el directori personal era un directori des el directori que b havia estat dins També hi ha cp. Així cp és copiar súper secció, punt, el text. Puc dir-s, punt, text. Ara tenim dos súper secció, punt, text, i s, punt, text. Això també funciona en els directoris. Em RF-ed un sol arxiu. Així CP - Bé, primer anem a tractar de cp, tmp, tmp2. Així ometent directori tmp. Així similars RM, el comportament per defecte és que no funciona en els directoris. I de nou, similar a RM, el valor per defecte comportament - així, aconseguir que funcioni amb els directoris és un guió-r de distància. Així que copiar de forma recursiva la temperatura directori en tmp2. I el que ara tenim tant tmp i tmp2, i que no és útil ja que tmp estava buida en el primer lloc. Tmp2. Ara anem a copiar tmp en tmp2. I veiem que tmp2 també té l'arxiu una, perquè el directori i tot dins d'aquest directori va ser copiat. I això pot ser una mica útil si, diguem que vostè està treballant el problema d'establir un - o en realitat, els butlletins de problemes posteriors són encara més important, ja que serà un manat sencer d'arxius i les coses. Però el que desitja, per una fracció de en segon lloc, vostè és com, bé, estic va intentar alguna cosa diferent. Permetin-me copio tota la meva pset1 directori en la còpia de seguretat de manera que si pset1 M'acaben arruïnar les coses, no puc tornar al meu directori de còpia de seguretat. Hi ha formes més apropiades d' versions de còpia de seguretat del seu codi, però això sempre és una forma ràpida de fer només Assegureu-vos de tenir una còpia d'alguna cosa que està a punt de modificar. Així que trobo és també una ordre d'un sol cop que tipus de sillily s'acaba d'imprimir a la línia d'ordres exactament el que volia fer ressò. Així que trobo hola. Només anem a imprimir hi. Echo hello world. Publicarem hello world. Aquí entra en ús quan iniciar la combinació de les ordres. I de nou, no esperis que en la seva totalitat entendre això encara, però és alguna cosa a veure. I llavors, si vostè està buscant a Google per veure exemples o t'adones que vols fer alguna cosa, pot ser útil. Així que anem, com un exemple, així que ls, tauler, l. Així que aquí veig la sortida de ls, guió, l. I jo dic, OK, vull emmagatzemar en un arxiu que. Tota aquesta producció aquí, vull posar en un arxiu separat. Així que aquest petit símbol major que és el que anomenarem. Estem reorientant la de sortida en un arxiu. Anem a trucar a la bla arxiu, perquè això és el que jo sòl dir sempre ell. Així que ara veiem que tenim un presentar bla aquí. I si ho obro, m'encarregaré que és exactament de la sortida de l'ordre que m'acabo de trobar. I de la mateixa manera, es pot - si es tractava de la sortida a un fitxer, aquest és prendre l'entrada d'un arxiu. Què és una ordre que jo - JOSÉ: Crec que es pot utilitzar menys o més, probablement. ROB: Però què tal una mica menys bla? No. Si vostè entra en aquest escenari, igual que hi ha conjunts de processadors que és útil per. JOSÉ: Es pot canalitzar en eco. Pipe l'arxiu en eco per veure-ho. ROB: És la canonada. JOSÉ: Ho sento. ROB: Molt bé. Així que aquesta és la sortida a un fitxer. Es tracta d'obtenir el text del fitxer i es el lliurament al programa. I també es veurà aquest tipus. Així que això és una mena de fer ambdues coses alhora. I, de fet, vaig a introduir dos nous comandaments només per fer ús d'ella. La història és una ordre molt útil que és només voleu imprimir una llista de res mai m'he trobat una línia d'ordres. Així que aquí veiem tot el que tinc estat funcionant tot aquest temps. Molta de ls. I un altre ordre útil és grep que el seu propòsit és buscar a través de text a la recerca de patrons, així, a la recerca de qualsevol cosa que vull buscar. I així un ús útil aquí és, diguem volem aprofitar la història. I vull que buscar els comandaments on I - Què és un una utilitat per cercar? JOSÉ: [inaudible]? ROB: O anem a veure per a tots toca, per qualsevol raó. Així que això és el que es veurà així. I vostè no ha de completament entendre això. Però la idea és que aquí, la història està donant la mateixa sortida que va fer aquí on s'imprimeixi la totalitat història de tot el que sempre he corregut. Llavors estem passant això - així que en lloc d'imprimir a la pantalla, volem transmetre que a la grep comandament que està buscant totes les instàncies de la paraula toc. I així, l'ús d'aquesta combinació de la eines de la història i grep, puc veure, OK, he aquí tots els comandaments que he córrer, i aquí està una mica comú. Som a la part inferior. I també m'ha de donar l'ordre Acabo de funcionar que tenia el paraula toc-hi. No obstant això, la canonada és una cosa molt útil per combinar múltiples programes. I, de fet, és un accés directe per a lloguer me la història sortida de presentar bla, i m'ho dius a mi grep usant el bla arxiu com el que vull per mirar per sobre. Així que la canonada és només una drecera per aquests dos ordres. Sí ALTAVEU 4: [inaudible]? ROB: Si. Què és - Oh. Anem a provar. Així gat, gos, peix. Així que vull a grep. Dash, r, de nou, serà recursiva, per la qual cosa vull baixar tots els directoris. Vull grep recursivament per a tots - i veurem si temporalment aquesta fora del camí. Em faci cas. D'acord. Així que vull a grep temporalment per totes les instàncies de la paraula peix. Així que aquí el que estic fent és grepping recursiva per la paraula peix. I l'estrella significa sobretot això arxius d'aquest directori. I pel que em va donar un permís denegat, perquè no se li permet llegir que fitxer. Però van trobar peixos a l'arxiu, de prova. Jo també podria dir que, en concret, només que desitgi veure en el bla arxiu, en aquest cas no trobarà res. Jo només vull mirar l'arxiu, de prova. Trobareu els peixos. És una ordre molt útil a saber en general. Hi ha algunes alternatives a grep que se suposa que són més Programador amable, però tendeixo encara recórrer a grep. Preguntes? D'acord. Hi ha altres ordres? Oh. Només una sola vegada una que sempre em trobar a ser divertit és CAL. Així notar quan estic en aquesta bella mode de pantalla completa, no tinc ni superior com barra d'eines o qualsevol cosa. Així calç encara no he un petit calendari que sigui adequat ara tallada, suposo. Però poc agradable d'ordres. JOSÉ: És [inaudible]. Altres ordres que pugui tenir vist inclouen so metàl · lic i crea. Anem a anar sobre ells en més detall més endavant. Però si vostè ha estat treballant en la PSET, vostè ha de ser familiaritzats amb els. ROB: Molt bé. Preguntes sobre la línia d'ordres coses? Està bé. Així que anem a passar a alguns Coses relacionades-C. Variables matemàtiques. D'acord. Així que igual que vam tenir matemàtiques en Scratch, també pot utilitzar les matemàtiques en C. Abans d'arribar a això per complet, pel variables. Recordeu que cada vegada que es declara una variable, com int o float i x, que cal donar-li el tipus abans el nom de la variable. Així que els tipus que hem vist fins ara són int, float, double, molt, molt, que em en realitat no sabem si hem vist que fins ara. Hi ha alguns altres. Hem veiem caràcters. Hi ha poques paraules, que és com si fos el oposat de llarg a llarg on està més petit que un nombre sencer. També hem vist cadena. Llavors, què hi ha d'especial en la cadena? Per què anava jo a dir que és no és com int? ALTAVEU 4: En realitat, no existeix. ROB: Si. Així que l'única raó per la qual tenim cadena és perquè quan ho fas hash, incloure cs50.h. I anem a veure exemples d'això més tard - oh, que no maneja tan bé - on cs50.h està fent alguna cosa al llarg de les línies de text def, estel char, string. Així que això és dir que ni tan sols sap el que és una estrella de carbó encara. Però això està dient que volem cadena. Qualsevol lloc que ha estat amb cadena, podria haver estat utilitzant estrella char, que en realitat és un tipus que existeix en el llenguatge C. Però ja arribarem a això. Ah, i que va a la dreta de nou. Neat. Així mateix amb bool on la veritable i la falsa. Això no és realment un tipus incorporat en C. En el seu lloc, és sol, té això a el valor zero? Després només haurem de considerar que és falsa. Això té el valor - així, té això que qualsevol valor que no és zero? A continuació considerarem que és veritat. Així que una és vertadera, dues és vertadera, res diferent de zero és veritable. Així que aquests són els que. Les preguntes sobre la declaració de variables i tipus de variables i tot això? Sí ALTAVEU 4: Per molt de temps, en el llibre, que va dir que no tenia per què ser llarg long int. Però funcionarà igual de llarg temps? ROB: Així que aquests modificadors de tipus. Així int x. Així també podem dir unsigned int x. Podem dir short int x. Podem dir long long int x. Però gairebé cap d'aquestes coses que em acaba de dir, unsigned int, short int, int llarg termini, vostè pot desfer-se de el int i que només assumirà que et referies a int. X tant sense signar, que només significa - vostè sap com normalment amb un int, es pot dir x és igual a 3 negatiu? Amb un int sense signar, no es pot. JOSÉ: I de nou, per a la càmera, el pregunta era, quina és la diferència entre long long int i només el temps llarg? ROB: Si. Així ho faré gairebé mai escriure long long int. Vaig a escriure molt, molt. JOSÉ: Alguna pregunta? ROB: OK. Petit recordatori Que ximple que és com declarem una variable i inicialitzem la variable i declarar un altre variables i inicialitzar tot en un sol pas. Així que la declaració de la variable i la variable d'inicialització no tenen a, però pot ser en la mateixa línia. Així que tenim els operadors matemàtics estàndard que vostè està acostumat a - més, menys, dividir el temps. També hi ha un mòdul, que ja veurem. No hi ha, si més no en C, un poder incorporat operador de exponenciació caret. Bé, hi ha un operador d'intercalació, però no és el poder. JOSÉ: Però no és l'exponenciació, Sí ROB: No utilitzeu el símbol d'intercalació assumir que això significa com quadrat o el que sigui. Així que algunes coses a tenir en ment sobre la divisió. Vaig a estar. Així declarar resposta initialize. Així que estem dient resposta flotador és igual a 1 dividit per 10. Imprimir resposta a dos decimals. I aquest és el tipus de coses que jo seria l'home printf per adonar-se que Què diables vol dir%, punt, 2f vol dir? I això només significa que, bé, ignorant el 0,2. I%, f és el que fem servir per imprimir a surar. El 0.2 està dient, d'impressió que surar amb dos decimals. Així que aquest programa té un error, i és possible que han vist això abans en alguna Per descomptat CS prèvia. Però, què és aquesta bestiola? ALTAVEU 5: Zero. ROB: Si. Així que quan diem, la resposta és igual 1 dividit per 10, volem que el respondre que és 0,1. Però 1 dividit per 10, 1 és un nombre enter, 10 és un nombre enter. I així, quan fem un sencer dividit per un enter, que anem a tornar un nombre sencer. Així que 1 dividit per 10 és 0,1. Ja que ha de donar-nos un nombre enter, que només va a llençar que decimal i dir que la resposta és 0. I així, quan imprimim contestar aquí, que voleu imprimir 0.00. JOSÉ: I així com una nota, que en realitat llença a les escombraries el que hi ha després de la punt decimal. Així que si en comptes tenies 6 dividit per 10, es podria pensar que li donaria 0.6 i després li arrodonir a 1. Però en realitat, el que passa quan s'escrigui tasques és que cau pel que és després del punt decimal. Així que 0.6 es converteix en 0. ROB: Si. I direm truncat per això. Així que cada vegada que juguis a un int, el decimal es trunca. Així que la solució perquè - no hi ha en realitat dues. I jo faré aquest segon, perquè aquesta és una solució molt més fàcil. Així que una solució és utilitzar flotadors en la divisió. I realment, n'hi ha prou amb fer que un d'ells un flotador. Però és una cosa més clara just per fer els dos flotadors. Així 1,0 dividit per 10.0 és dividint dos flotadors. Així que la resposta va a acabar sent un flotador, i pel que es correctament imprimir 0.10 aquí. Una cosa que no funciona tan bé aproximadament, és a dir, bé, clar, era fàcil suficient per convertir un 1 surar pel que és 1,0. Però i si en lloc d'això tenia dos enters com int x és igual a 1 i la int i és igual a 10, i després volíem fer X dividit per I? Així que no és fàcil simplement fer X.0 o alguna cosa així. Així que la solució a la qual està projectant. Així que la fosa és una forma en C per convertir d'un tipus variable a una altra. Així que aquí, 1 és un nombre enter. I en posar aquest flotador davant ella, estem llançant 1 a un flotador. I pel que aquest es convertirà la 1 a un 1,0. I això convertirà el 10 a un 10,0. I després les coses es comporten de manera semblant a la versió anterior només hem vist on, com era d'esperar, s'obté 0,10 i que voleu imprimir això. I podem fer-ho amb variables, també. Així que podem dir, float x dividit per flotador i. JOSÉ: Alguna pregunta? ROB: Així com en matemàtiques regular, tenim prioritat dels operadors. Així que a la classe de matemàtiques, és més probable cridar ordre de les operacions. Aquí, el terme oficial és prioritat dels operadors. Però la prioritat dels operadors, o la majoria operadors, és com es pot esperar. Així que igual que en matemàtiques, 2 vegades 10 és serà agrupats més de prop que aquest 10 dividit per 2 i després 2. L'ordre de les operacions, que va a fer 2 temps de 10, 10 dividit per 2, i després que farà 20 més 5 més 2. Així que és com s'esperava, i es pot utilitzar parèntesi per agrupar expressions. No es pot utilitzar claudàtors per agrupar expressions. Sí? ALTAVEU 5: Podria realment simplement retrocedir un segon? Pots fer una int a una cadena? ROB: Així que en C, pot convertir qualsevol cosa vol el que vulguis. Això no vol dir que sigui una bona cosa a fer. Així que quan llances 01:00 int a una cadena, que significa - i entrarem en aquest molt més a fons - JOSÉ: Molt més tard. ROB: jo no volia dir molt més tard, així que vaig tractar de canviar la meva sentència. Anem a entrar en molt més a fons més tard quan realment quan es té un variable de cadena - de manera que una cadena pot ser arbitràriament molt, oi? I hem estat dient que és un int 04:00 bytes i de llarg temps és de vuit bytes i un flotador és de quatre bytes. Així que una cadena, com un int, només té ha un cert nombre de bytes a la mateixa. I això serà de quatre bytes. Però una cadena pot ser bastant arbitràriament llarga, no? Així que hola món ja, si això és 10 personatges o el que sigui, això és ja serà durant els 4 bytes Puc cabre en una cadena. I llavors, ¿com funcionen realment les cordes és que que són lloc de la memòria aquesta cadena està sent cuidada. I així per aquí, quan dic cadena x iguals hola món, a l'interior de x és Només dic, oh, hola món s'emmagatzema en aquest lloc especial en la memòria. Així que si tractem de fer una sencer en un cadena, llavors estem tractant d'interpretar una part aleatòria de la memòria com una cadena. I que gairebé sempre trenca coses. JOSÉ: Però si això confon vostè, estarem cobrint el més en profunditat més endavant. ROB: Si. Aquí és on vostè va per entrar en punters. I això és una part significativa dues setmanes d'aquest curs. ALTAVEU 6: Funciona igual que els objectes en altres idiomes o no realment? ROB: En altres llengües, objectes es representaria l'ús de punters. No és el mateix, però. Alguna idea? JOSÉ: No No hi ha pensaments. ROB: OK. JOSÉ: Següent. ROB: Només has d'anar amb això. Està bé. Així mòdul. Igual que tenim més, menys, dividir i multiplicar. Així mòdul és un que vostè pot no han vist abans. I simplement diu, donen em la resta. Així 55% 10. La resta de fer 55 dividit per 10 seria 5. Així el 55% 10 és 5. I 3% 5 seria 3. 8% 8 serà 0. 16% 15 serà 1. JOSÉ: Una cosa a destacar amb això, també, és que potser no funcioni com s'esperava si s'utilitza un nombre negatiu. Així negatiu 5% 4, algunes persones Podríem pensar que és - ¿Què li sembla negatiu 5% 4 seria? ALTAVEU 5: Primer. JOSÉ: Així que hi ha gent que diu un, algunes persones diuen que un negatiu. Però el que - ROB: jo ni tan sols tenen , Va dir un d'ells. JOSÉ: Dos, ho sento. Hi ha gent que diu - ROB: Tres. JOSÉ: Tres? ROB: Negatiu - que va ser el - negatiu de cinc - JOSÉ: Tres, tres, tres. Ho sento. A causa mòdul, generalment, quan has vist en altres llocs, en general significa retornar un nombre positiu, no? ROB: Així que quan diem en matemàtiques, del 10%, que tendeixen a voler donar-li - si mod 10, llavors esperem obtenir un nombre entre 0 i 9. Aquí, aquest no és el cas que obtindrà els nombres negatius es retornen. JOSÉ: Així negatiu 5% 4 seria negatiu gener. ROB: Però és estrany que vostè és-ing mod els números negatius, per començar. Ometeu aquest. JOSÉ: Sí ROB: Meh. D'acord. Així que una última cosa a destacar sobre carrosses és que és un comportament perillós, però els flotadors no són una exacta representació. Així que tornant a bytes més, recordi que un int és sempre quatre bytes i un flotador és sempre quatre bytes. Així que l'exemple de Lluc és bastant bo. Així que pensa en 1 dividit per 3. Així 0,3333333. Si només tinc 32 bits, com pot Emmagatzemo 0,33333 exactament? I potser, per alguna raó, vostè diu, bé, bé, direm que aquest particular 1011001, anem a Només cal dir que ha d'haver 0,333333. Bé, n'hi ha prou amb un nombre finit de aquests bits, pel que és impossible representar cada punt flotant valor donat només 32 bits. Bé, és impossible representar qualsevol valor de coma flotant dóna infinita - així, donat qualsevol nombre finit de bits. Així que la qüestió aquí és, bé, quan es va utilitzar per imprimir a dos decimals, ens van fer arribar la resposta correcta 0.10. Però sota de la caputxa, és realment sent emmagatzemat el més a prop possible a 0.10 com aquests bits pot representar. És això en la següent diapositiva? O no és així? JOSÉ: Sí, és això. ROB: Blegh, blegh. JOSÉ: Sí, vostè pot tot just estirar les notes una mica. ROB: Jo només vaig per ampliar en l'últim en això. Oh, Déu meu, això és [inaudible]. Així que aquest nombre. Això és el que es va a imprimir si ens trobem amb aquest programa. I observi que no és realment un gran problema si només estem cuidant sobre com 02:58 decimals. Com només ens originalment imprimim 0.10, i és per això que vam veure res dolent. Però una vegada que vam començar a entrar al exacta, el nombre exacte que és que representa, veiem que no pot exactament representar 0.1. I part del problema aquí és com, bé, això està bé, però, bé, en primer lloc, què passa si tractem de fer, resposta igual a igual a 0,1? És que va a tornar vertader o fals? I el que és difícil de dir. Crec que en realitat podria tornar true. Ho farà primer - No. La resposta és un cop de començar a tractar amb valors de coma flotant, que pràcticament tant no haurien d'usar la igualtat a causa d'aquesta imprecisió. I per tot el que sap, és la centèsima decimal que el punt flotant no va poder per a manejar correctament. I així la igualtat s'acaba de fallar fins i tot encara que el nombre - si haguessis estat utilitzant nombres exactes, els números han han estat exactament el mateix. És en el transcurs de 50 com càlculs utilitzant aquests flotant valors de punt, l'error pot construir i més i més, i coses tot just aconsegueixen malament. JOSÉ: I ha estat realment famosos exemples de que això passi. Igual que els enginyers de la NASA han arribat a aquest equivocades, coets causen a explotar en l'aire després que han estat llançats. I un munt de temes per l'estil. Així que si. ALTAVEU 6: Quan vostè diu 0.3 f, Què es trunca la resta? O s'arrodoneix cap amunt o cap avall? ROB: Serà printf voltant d'ella? JOSÉ: Crec que trunca printf. ROB: OK. Així que de manera similar podem anar en la direcció oposada direcció d'aquest, on, en aquest cas, el més a prop que podria representar 0.1 va ser amb aquest número. El més proper que podria ser capaç de representar 0.2 és en la direcció oposada direcció, ,199999996356 o alguna cosa així. Així que si ens vam anar en aquesta direcció d' coses, llavors printf 0.3 f tornarien 1.99 en lloc de 2.00. JOSÉ: I no estic del tot segur d'això. És possible que vulgueu escriure un petit, petit programa per només comprovar això. ROB: No obstant això, el que sí estem segurs és que si es va tractar de tirar això a un int, i tirant a un int va a fer que es trunqui el decimal, si intenta convertir 1.9999999 a un int, obtindrà 1. I així, en general vostè ha d'utilitzar el funció ronda a la biblioteca de matemàtiques. Preguntes? D'acord. JOSÉ: Passem ara a les condicions i les expressions booleanes. Pel que han vist aquests abans. I en realitat, deixa assegurar-me que la meva equip està en el format correcte aquí. Espai. Ho sentim, però haurem de fer front a poc amb punt de tall en les vores. Però sí, vostès han vist això abans de Scratch. Així que això d'aquí és una expressió que s'utilitza en una sentència condicional. Així que la resposta més gran que zero voluntat dir veritable o fals. I aquests són molt importants, perquè que ens permeten introduir lògica en el nostre codi. Així, per exemple, aquest és un programa escrit en scratch que demana a l'usuari per a un sencer i els diu si el sencer que et donaven era un nombre positiu o negatiu. I la conversió per aquí a veure és imprimir en primer lloc la declaració, dóna'm un sencer. I després se'ls pregunta per un nombre enter. I a continuació, utilitza la lògica condicional sobre aquí per comprovar si aquest nombre era en realitat major que zero o no. Així que aquí tenim una expressió booleana dins d'un condicional If. Hi ha alguna pregunta? Hi ha alguna pregunta sobre això? D'acord. Així que hi ha alguna cosa més que més gran que, és clar. Pot construir expressions booleanes utilitzant la majoria dels tipus de coses que vostè pensaria en matemàtiques. Així més gran que. Això hauria de ser un menor que. Ho sento. I la separació. ROB: Déu no ho vulgui vostè ho deixa. JOSÉ: Bé. Per tant gran que, menor que, major que, o igual a, menor que, o igual a. Utilitzem igual doble per comprovar si hi ha la igualtat, perquè només és igual a medis assignació, oi? Sí I llavors podem també no és igual per utilitzant el signe d'exclamació, és igual. I aquest símbol d'exclamació pot També s'ampliarà de manera que si vostè vol invertir qualsevol tipus de Boole expressió, es pot fer això. Així que això s'avaluarà com true Només si la resposta és menys que o igual a zero. Teniu alguna pregunta respecte això? D'acord. Així també pot combinar aquests expressions usant lògica I i lògic Or. Així que això és només el símbol d'I, que ha de ser Shift, 7. I aquest és el símbol de canalització, que és No és un cas menor L. És el que això és just a sobre de la tecla d'Intro. Així que utilitza dos d'aquests per simbolitzar lògica i la lògica Or. Així que això només retornarà true si la resposta és un, dos, tres, o quatre. I això només es retornarà true si la resposta està més enllà que a cada costat. Així que no és d'un, dos, tres, o quatre. I la forma en què utilitzaria que en una expressió - ROB: O un zero o un cinc. JOSÉ: Zero o un cinc. Ho sento. Sí, sí, sí. D'acord. I per aquí ara, de la mateixa manera que utilitzaria aquesta expressió, una més petita banda l'expressió d'un Si condicional declaració, també ho utilitzaria la mateixa manera, amb només col · locar a l'interior de els parèntesis de la instrucció If. Així que aquest printf només es dispararà si la resposta és un, dos, tres, o quatre. Teniu alguna pregunta respecte la combinació expressions? Així que hi ha una altra condicional Construïm que anomenem un If / Else. Així que, bàsicament, això significa ara, OK, Si cosa que jo volia veure no era veritable, llavors veu el Else i realitzar aquesta altra acció. Així que en aquest cas particular, em vaig preguntar l'usuari d'un sencer. És el nombre enter més gran que zero? Sí? Bé, llavors escollir un nombre positiu. Si no, llavors ha de tenir estat negatiu o zero. Així que va triar un nombre negatiu o un zero en aquest cas. Sí O un zero. I després també tenim If / Else, Si i Else. Així que això ens permet executar una seqüència de coses només si els primers fallen. Així que en aquest cas, ara estem fent l'últim que vostè escull zero. Així que si ells no van escollir un positiu ni un nombre negatiu, llavors han han recollit zero. Pel que només es va pel cadena com aquesta. Així un exemple de com una Si és diferent de - un if / else és diferent de només una seqüència de IFS. I aquesta és una pregunta comuna que la gent es pregunta és, bé, si et poses així un 95 en CS50, què serà aquest programa et va dir? ALTAVEU 5: Tens una A. JOSÉ: Sí Tens tots els un d'aquests dreta. Tens una A, que tens una B, tinc una C i una D, oi? Així que tots aquests es van avaluar en ordre. Així, mentre que un 95 és més gran que 90, és també és més gran que 80, és també superior a 70, i és també major que 60. Així que tens tots aquests graus. I suposo que ho faria només volen que l'A La manera d'arreglar això és reemplaçar aquells amb Else / Si 's. Així que en aquest escenari, es veu que 95 és més gran que 90, i després ho fa no avaluar la resta dels estats. Una pregunta sobre això? Així que hi ha una altra classe condicional de estructura que tenim aquí, que ens truqui a una sentència switch. Així que això li permet comprovar bàsicament qual cosa el valor d'un nombre es posa en la sentència switch és. Així que en aquest escenari, estem canviant en n, i nosaltres estem dient, oh, si n és un, a continuació, imprimir aquesta declaració. I a continuació, trencar, el que significa que la sortida sortir de la sentència switch. Si no era un, llavors, bé, finalment, comprovar tots els casos. I així es comprova si és un o dos o 3, i s'imprimeix en conseqüència. I el que aquí aquesta paraula clau per defecte mitjans és si ells no van entrar en cap dels que, a continuació, dir no vàlid. Així que diguem que demano ni l'usuari em fa 4. Bé, no coincideix amb cap d'aquests casos, pel que s'imprimirà el que està en el secció default. Sí, la pregunta? ALTAVEU 5: Es pot utilitzar Boolean expressions en lloc de un, dos, o tres? JOSÉ: Llavors la pregunta és Es pot utilitzar Expressions booleanes en lloc d'un, 02:03? I en C, crec que No pot fer això. Però en altres idiomes, cosa que li podria trobar-se al final de la semestre com JavaScript, es pot. Bé, vostè hauria de calcular primer aquest valor i, a continuació, utilitzeu en el canviar comunicat. Sí? ROB: Així que part dels beneficis de l'interruptor declaracions es pensa de si ho va fer com If / Else, així com si n és igual a és igual a un o el que sigui. Else / Si n és igual a és igual a dos, el que sigui. Else / Si n és igual a és igual a tres. Així que la forma en què el programa s'executi és el seria seqüencialment baixar aquesta llista i comprovar, és n un? Nope. És núm 2? Nope. És núm 3? Sí Feu això. Mentre que amb sentències switch, és realment capaç de compilar que sigui molt ràpid. I tan aviat com ho diu interruptor, diu, està bé, n és 2, jo sóc immediatament va a saltar a on Se suposa que he de començar a executar. Jo no vaig a comprovar en primer lloc, es n un, és n 2? Es pot començar immediatament fent el que se suposa que ha de fer. I a causa d'això, no es pot tenir condicions booleanes. O del que hauria de fer el seqüencial, com, bé, és n més gran que zero? Else és n major de 10 o el que sigui. JOSÉ: En aquest cas, si s'ha utilitzat Si / Si no, Si és així, llavors l'interruptor faria executar aproximadament tres vegades més ràpid que el If / Else If. Podem organitzar l'interruptor de tal de manera que no trenquem després de cada un dels casos. Així que en aquest cas, estic dividir el nombres que triem en un i 2 no és un nombre elevat i 3 que són un nombre alt. Així doncs, en aquest cas, si n és un o dos, arribarà el cas i després ho farà cauen a través, perquè no hi ha descans. I que va a acabar aquí. Així que si vam triar una, que va a fer el printf i després trencar perquè cap aquest s'executa. I per descomptat, si entren en tres o alguna altra cosa, llavors es saltarà aquestes i no anar-hi, i s'executarà en el seu lloc el línia corresponent. Hi ha alguna pregunta sobre això? Sí? ALTAVEU 4: Vols aconseguir un error si es tingut un descans després d'un cas, però no tenir alguna cosa perquè ho faci? JOSÉ: Llavors la pregunta és li aconsegueix un error si té un descans després de cas que un, però no hi ha res a fer? I la resposta és no. No va a aconseguir realment un error. Sí, mm hmm. Així com una espècie d'un petit canvi aquí, Vaig a posar un printf aquí. Vaja. Així que el imprimiria això si Vaig posar un a com a entrada? Sí Es diria que no va passar un alt nombre dues vegades, no? Perquè seria arribar a aquest primer cas, no es trencaria i cauria fins al segon cas. Una pregunta sobre això? ROB: Alguna altra pregunta? JOSÉ: OK, refredar. Està bé. Així que no és altra cosa que anomenem un operador ternari, que és bàsicament una sintaxi alternativa per fer Si i després la resta. I et permet fer-ho tot en una sola línia. Així que en aquest programa en especial, Estic preguntant a l'usuari per n. I si n és major de 100, li dic ells van escollir un nombre alt. Else els dic que triat un nombre baix. Així que podem usar aquesta sintaxi molt llarg, cadena, S, i després verifiqui si n és superior a 100 i assignar en conseqüència. Però podem fer això molt més concisa mitjançant l'ús d'aquesta sintaxi operador ternari que consisteix en una pregunta marca i dos punts. Així que la interrogant és essencialment fer una pregunta, no? ROB: zoom Potser en això. JOSÉ: Sí Bon punt. Així que aquest és l'operador ternari. La primera vegada que faig la pregunta, n és més gran que 100? Si ho és, llavors executo el primer part abans dels dos punts. Si no és així, llavors executar la segona part després dels dos punts. Així que si n és més gran que 100, a continuació, es recull alta i posa que en la cadena s. Si n és menor que 100, que recull baixa i després posa això en la cadena s. Així que es condensarà aquest tros gran cap avall en aquesta sola línia. ALTAVEU 5: Això és popular? JOSÉ: Sí, és molt popular per als coses en essència el que desitja do una assignació basada en algun tipus de condició. I en aquest cas, estàvem intentant per assignar un valor a la cadena s. No és tan - Suposo que en realitat no prefereixo en els altres casos. Però és especialment útil per a aquesta tasca. ROB: Això és un patró bastant comú on es té una variable que que vas a dir, si alguna cosa, ajust aquesta variable a un valor, una altra, estableix aquesta variable a un altre valor. I aquest és l'escenari on utilitzar un ternari. JOSÉ: I vostè està estalviant un munt de línies, no? I només fa que el codi es podria dir que una mica més llegible. Sí, la pregunta? ALTAVEU 6: Per a un ternari, podries anar, string s iguals seg, signe d'interrogació? I llavors vostè podria tenir, per exemple, cinc opcions diferents. I depenent del que el nombre de n va ser, triaria un d'aquests? JOSÉ: tant el dubte és, hi ha una espècie de sintaxi on es pot fer la cadena s és igual a N, i després tenir més de dos opcions després que el signe d'interrogació? I una resposta simple és no, no hi ha realment una bona manera de fer això llevat que que desitgi niar ternària múltiple operadors dins de l'altra. Vostè podria fer com n major que 100, signe d'interrogació, i després un altre operador ternari, n major que 50, signe d'interrogació, i el niu d'aquesta manera. Però en aquest escenari, el codi és fent una mica il · legible i desordenat, i potser seria millor anar només a una instrucció If / Else en aquest punt. ROB: I també, com a nota al marge, PHP implementa incorrectament el ternari operador de manera que ternaris niats fins i tot no treballen com haurien. JOSÉ: Sí Així es posa una mica confús, especialment quan vas a diferents idiomes. ROB: Està bastant confús que llengües estan equivocats sobre això. JOSÉ: Així que en realitat, només per aclarir, ¿Tothom sap el que % S fa per aquí? Una pregunta sobre això? Suposo que només per la càmera, el% s bàsicament ens permet posar un marcador de posició per a una cadena. I després, al final, s'especifica que el la variable que volem posar en aquesta marcador de posició és s. Així que, bàsicament, té s i es posa aquí. I després s'imprimirà, que va triar un alt o recollit un nombre baix. D'acord. Així bucles li permeten realitzar coses amb moviments circulars, oi? És possible que hagi trobat amb això en Esgarrapades en forma de bucles per sempre o Repetir Fins o Repetir una determinada nombre de vegades. Per què és tan bo per a nosaltres? Doncs bé, en C, diguem que tenim aquest cançó implementat en scratch que canta, aquesta és la cançó que mai acaba. Simplement segueix i segueix i per sempre i per sempre. Bé, realment no es pot fer un programa que té un nombre infinit de printf declaracions en ella, no? Així que en aquest escenari en particular, d'una manera que vostè podria fer aquesta feina i per fer que imprimeixi sempre és en lloc d'utilitzar un bucle While. Així que un bucle while s'executarà el que hi ha en el cos dels dos suports que pertany a la mateixa sobre la base del que és la condició. Així, en aquest exemple particular abans, si volem imprimir això per sempre, el que Què podem fer? Bé, és clar, no? Així que aquest tipus de combina la idea d'alguna expressió booleana juntament amb un bucle. I ens assabentem de Boole expressions anteriors. Així que cada vegada que la condició interior de Mentre que segueix sent cert, aquest bucle executarà i segueix i segueix. I en aquest cas, si només subministrem amb dades veritables, això provoca un infinit bucle que imprimeix la cançó una i altra vegada i en el que desitjàvem abans sense tenir un programa que té una infinita nombre d'instruccions printf, que és no és possible. Així que més convincent, però, vostè pot utilitzar això amb un variable i una condició. Així que diguem que volem repetir l' frase, totalment desgavellat, 10 vegades. Llavors, què es pot fer amb un bucle While és primer pot inicialitzar un comptador fora variable de la Mentre bucle a 10. I llavors, bàsicament, cada vegada que es vagi a través del bucle While, imprimiu la declaració i després disminueix el variable comptador fins que al final, en algun moment, un cop es resta prou vegades, 1 de I bastants vegades - i només per aclarir, menys que menys vol dir que és igual a mínim 1. Això bàsicament em porten a la punt en el qual una vegada vaig arribar a zero, condició ja no és veritable i pel que surt fora del bucle. Així que totalment desgavellat només imprimeix 10 vegades. Una pregunta sobre un bucle While? D'acord. Així que hi ha una manera de fer el que acabem de va fer d'una manera més concisa amb el que anomenem un bucle. Per tant un bucle Per consisteix en un inicialització, una condició, i un actualització, igual que teníem abans en aquest bucle While. Així que anem a fer una ullada. En aquest cicle While, vam tenir una inicialització, llavors tenia un condició que ens registrem. I després vam tenir una actualització pas a la part superior. Amb un bucle For, això bàsicament pren aquestes tres coses i el condensa cap avall en una línia. Així que el primer que es fa en el Per bucle és la inicialització. I llavors vostè fa un punt i coma, i després ho fa l'estat, que és el més gran que zero va per allà, i després la fase d'actualització. Així que això es porta a terme en el final del cos del bucle. Així que aquests dos programes són essencialment equivalent. Alguna pregunta? Llavors, què és una diferència entre aquests dos? Algú pot assenyalar? Podria ser una mica més subtil. És només una diferència molt petita. Sí? ALTAVEU 5: No podria fer servir la variable i fora del bucle Per [Inaudible]? JOSÉ: Exactament. Així que això és una cosa que anem a arribar a més tard anomenat abast variable. Però, en essència, aquest int vides I fora d'aquest bucle While. Així que un cop aquest bucle Mentre es fa execució, seré capaç d'utilitzar el més tard en en el programa. Mentre que amb aquest bucle, aquesta int I està en l'àmbit interior d'aquest bucle. I pel fet que és a l'interior d'aquesta porció del bucle Per, que comença en els parèntesis, i acaba amb la clau d'allí. Qualsevol cosa que es declara dins d' aquí no es pot utilitzar a l'aire lliure. Així que si tracte d'usar que fos, que va a digues-me, símbol declarat. I, essencialment, no ho faria ser capaç d'utilitzar. ROB: I així, fa 10 anys, en literalment tots els casos, les claus són el que s'utilitza per a determinar l'abast d'una variable. Així que aquí, int I és igual a 10 està declarada dins d'aquest joc de claus. I així, sempre que s'intenta utilitzar I abans que aquesta clau de tancament, està bé. És possible que aparegui en escriure fer, vostè veure guió, guió, std, iguals, C99. Així que és una versió posterior de C que GCC ha implementat, que també dóna aquest accés directe. Així que aquest utilitza per no ser permès en C. es pot veure per què, ja que aquest int I és fora d'aquest claudàtor però encara està considerat com al abast d'aquestes claus. Però això és una cosa molt convenient, i el que és una bona extensió. JOSÉ: Alguna pregunta? D'acord. Llavors, què és més útil és que de vegades vostè vol una espècie de dinamisme en seu bucle, oi? No vol imprimir només necessàriament totalment desgavellat tot el temps, que desitgi comptar de 10 o alguna cosa així. I el que pot utilitzar la variable de comptador dins d'aquest bucle també. I en aquest cas, aquest programa només un compte enrere de 10 tot el camí cap avall. I què s'imprimeix? No imprimir zero, bé, perquè quan - Sí, també no s'imprimeix 11. Per tant, no s'imprimeix zero, perquè quan I és zero, record, avalua la condició abans que entri en per executar el cos del bucle. I quan I és zero, això és fals, per la qual cosa no imprimir el compte enrere zero, només s'imprimeix el recompte baix 10 fins al fons a 1. Si realment volem que s'imprimeixi a zero, llavors podríem posar un signe igual després d'aquest signe més gran que. D'acord. Així que una manera de fer la validació d'entrada, que és quan vostè li demana a l'usuari de fer alguna cosa, vostè vol assegurar-se que seguir les seves instruccions, és utilitzar el bucle While, oi? Així que en aquest cas particular, estic demanant per a un nombre positiu i llavors estic l'espera per a l'entrada. I després he comprovat Encara que l'entrada és menor que zero, segueixi preguntant. Així que, mentre em donen un nombre això no és positiu, segueix preguntant, seguir demanant, seguir preguntant. Però el que és una espècie d'estrany en això? O el que no sembla òptima sobre aquesta estructura aquí? Algú? Sí? ALTAVEU 6: T'estàs repetint la instrucció dues vegades. JOSÉ: així. Així que tenim dues instruccions printf aquí, oi? Així que hi ha una manera que poguéssim aconseguir això només a un que faria la nostra codi més fàcil de llegir i un poc més net. I llavors no hauríem de han Entra al doble de bé. I una manera que vostè pot fer això és mitjançant l'ús d'un bucle Do-While. I un bucle do-while és bàsicament un diferent forma d'un bucle While, on el que està dins de les claus serà executat almenys una vegada. Així que aquí, declaro, int d'entrada, fora primer. I llavors m'acaba de dir, fer això mentre que l'entrada d'instruccions és menor que zero. Així que colpeja el Do primer. Sempre va a executar aquest almenys una vegada, de manera que sempre li demanarà a l'usuari per a l'entrada d'almenys una vegada. I a continuació, s'avalua que l'entrada, i continua en un cercle. Sí, la pregunta? ALTAVEU 6: Hi ha una manera de fer-ho [Inaudible] tipus, igual que si vostè diu, GetString i algú [inaudible] Hi ha alguna manera de [inaudible] JOSÉ: tant el dubte és, hi ha una manera de fer la validació d'entrada si l'usuari no posa en el dret tipus de variable? Així que si demanem un int i donar-nos una cadena en lloc. I en les funcions que implementem per a vostè, GetInt, GetString en totes aquestes funcions, que en realitat ja fer aquest tipus d'entrada de tipus bàsic validació sota el capó. Així que si vostè està utilitzant les funcions que et va donar, que en realitat no ha de fer. Però si vostè vol mirar més en com en realitat es pot fer això, vostè pot mirar sota el capó a l'arxiu I/O-- No present, les funcions d'E / S estàndard com una lectura de l'entrada estàndard i sortida estàndard. I vostè pot tenir una millor idea de com pot fer això. ROB: Un problema, però, és específicament amb l'exemple que va dir que espera una cadena i entro en un int. Com saber la diferència entre voler intencionalment la cadena 123 davant voler el int 123? Així cadena, és gairebé no hi ha validació, és només el que introduït vostè interpretar com una cadena. Int és més fàcil, perquè no importa l' d'entrada es pren per part de l'usuari, que són tenint sempre una cadena. I perquè la cadena es pot llavors comprovar, són tots ells els dígits numèrics en realitat? JOSÉ: OK. Una pregunta sobre un bucle Do-While? ROB: Oh, i això és també - que es remunta al seu abast, alguna cosa comú error està tractant d'utilitzar alguns locals variable a partir de dins d'aquest do-while bucle dins d'aquesta condició. I en realitat, si ens lliurem de això i va dir, equival int entrada GetInt, el compilador va a cridar nosaltres, perquè d'entrada no existeix fora de l'àmbit d'aplicació de aquestes claus. JOSÉ: I és per això que Necessitareu aquesta línia aquí. D'acord. Així també es pot sortir d'un llaç anticipadament si vostè vol. Així que aquesta és una forma diferent de la implementació del que acabem de implementem. I en lloc d'utilitzar la condició dins dels parèntesis, estem usant una Si la declaració a l'interior del cos del bucle Do-While. I en el fons, quan l'entrada és finalment més gran que zero, ho farem trencar el bucle. I així anirem a per totes el camí fins aquí. I es pot veure que això faria probablement serà preferit en aquest escenari, perquè és una mica poc més net i una mica mica més fàcil de llegir. Atès que la present, quin tipus de tenir línies addicionals en el mateix. És només una mica més lleig, Suposo que, en cert sentit. Sí, la pregunta? ALTAVEU 4: Trencarà només rep a sortir d'un joc de claus? JOSÉ: així. Per tant el dubte es trencarà només a sortir d'un bucle? I la resposta és sí. Així que si vostè ha niat bucles For, per exemple, si tinc Per int i és igual a 0 fins a 10 i després per int J és igual a 0 fins a 10, si trenco l'interior llaç, jo encara anar per al bucle extern. Així que mantindrà la realització de la operacions a l'exterior. Una pregunta sobre això? Sí? ALTAVEU 5: Però trencar úniques funcions per claus, no per a una altra declaracions? [Inaudible] JOSÉ: tant el dubte és es trencarà única funció dels bucles en contraposició a altres declaracions com si? I sí, aquest és el cas, perquè que està trencant cap a fora d'un bucle, a la dreta, en un sentit. ROB: En la gran majoria dels casos, és aquest és el tipus de Si alguna cosa, a continuació, trencar. Així que vostè no ha de trencar per aplicar a Si el que està embolicant al seu voltant. I també, això no és molt d'un bucle, però recordeu que els interruptors són també escapat de per descansos. Vam veure les pauses s'utilitzen amb interruptors abans. JOSÉ: I vostè també pot usar- en els bucles while i for bucles. Alguna pregunta? D'acord. Així que la propera és fins funcions. Així que es podria haver fet servir un d'aquests BIOB blocs en el seu projecte de Scratch. I això permet, bàsicament, definir un conjunt de instruccions que s'han de seguir. I el que vull dir amb això és que pensarem de tornada a les matemàtiques, a la dreta, l'àlgebra. Vostè té el que s'anomena una funció de x, alguna variable, i diguem que aquesta funció és f de x és igual a x més 5. Així que vostè pot pensar en f de x com aquest negre caixa que porta en 15 i després produeix 20. Així de forma més general, una funció és cosa que pren alguns insums i després produeix algunes sortides. I per què són bones funcions? Són bons per a una sèrie de raons. Així que, algú vol prendre una punyalada al que l'organització vol dir? En termes de quines funcions són útils? Sí? ALTAVEU 4: Fa que el seu lectura del codi. JOSÉ: així. Així que una de les coses és que fa el codi sigui més fàcil de llegir, oi? En lloc de tenir com int x és igual a x vegades x vegades x, puc tenir el cub de x, que és més llegible i més comprensible per a un lector. L'organització és també en termes de dividir el codi en manejable porcions, de manera que en lloc d'intentar posar en pràctica tot això en una llarga secció en principal, es pot ordenar de dividir- en com, OK, anem a escriure una funció al cub alguna cosa, anem a escriure una funcionar per quadrar alguna cosa. D'aquesta manera vostè pot dividir en minúscula, petites peces que es poden abordar en lloc de tractar d'abordar un gran problema alhora. ROB: O fins i tot petites, petites peces que vostè i la seva parella pot fer front. JOSÉ: Sí ROB: Així que en lloc de dos vostè tractant d'implantar un funcionar al mateix temps. JOSÉ: Simplificació. Algú vol prendre una conjectura? Sí? ALTAVEU 5: Més repetició. JOSÉ: així. Així que una cosa que vostè pot fer amb simplificació és que és una espècie de sobre la mateixa línia que la reutilització és que una vegada que escric una funció de cub, que pugui només ha d'utilitzar una i altra vegada i una altra de nou en el meu programa en lloc d'escriure x vegades x vegades x més i una i altra vegada. I aquí també la simplificació només vol dir que farà que el seu codi de tipus de més fàcil de depurar un cop es divideix això en funcions. Perquè llavors vostè pot localitzar on seus problemes de tipus de són. Alguna pregunta? Així que una altra idea és la abstracció, oi? Aquest quadre negre. Com sap vostè el que fa GetInt per rebre l'entrada de l'usuari? Realment no hem dit a vostè, oi? Tot el que hem dit és GetInt fa exactament el que diu que fa. Així que encara que no li diem com funciona, encara sap. Així que en aquest cas particular, es tracta d' una funció quàdruple, que fa diferents coses per a una entrada per produir una sortida. I vostè pot quadruplicar el nombre multiplicant per quatre. O potser anomenem poc canviar per dos. I anem a cobrir aquest una mica més tard. I no hi ha necessitat de saber com aquesta funció realment funciona, sempre que funciona com s'indica. Així que sota el capó, que podria ser com, torni els temps d'entrada 08:00 dividit per dos. I no sabràs, oi? Tot el que necessites saber és fa el que diu. Així que això és el útil sobre l'abstracció. I una altra cosa és una espècie d'aquesta idea de la localització del seu codi a 01:00 particular la secció. Així que si vostè té un problema, no ho fa has d'anar per tot el codi que intenta per fixar on era el problema. Així que en aquest cas, he implementat cubicar malament. Vaig pensar cub estava multiplicant per tres. Així que en aquest cas, es tracta d'un programa que acaba de multiplicar per tres a tot arreu. I hi ha un altre programa que té cub factorizada fora en una funció. I ara si vull arreglar el meu error aquí, he de arreglar cada línia de codi d'aquest programa. Mentre que, d'altra banda, si faig servir el funció, només ha de canviar el que estava malament en un sol lloc. Així, en ciències de la computació, que trucar a les entrades i sortides. Les entrades es denominen paràmetres o arguments i sortides es diuen tornar valors. I veurem com això ens ajuda a classificar de definir una funció en un segon. Així que aquesta és una definició de funció per a la cubicació. Així que pren una entrada, i després torna aquest nombre multiplicat si mateix tres vegades. Així que anem a desglossar aquesta informació. Així que tenim una capçalera de la funció, que consisteix bàsicament en tres coses. Així que tenim els paràmetres, que són, com he dit abans, la entrades per a aquesta funció. I llavors li donem la funció d'un nom. En aquest cas, es diu cub. I a continuació, especifiquem el que el tipus de del valor de retorn és. Així que en aquest cas, la meva funció cub pren en un sencer i també retorna un enter. Així que si pas en dos, dos és un nombre enter, torna vuit a mi, el que és un nombre enter. Així retornar paràmetres de nom de tipus. Preguntes sobre això? I a continuació, el valor de retorn és en realitat especificat al final dient retorn i després tornar el conté el valor retornat. Així que en aquest cas, si ho posem tot en conjunt, una funció té en paràmetres, es diu alguna cosa, i retorna una cosa que és el tipus que diu que anava a ser. Alguna pregunta? Llavors, com s'utilitza una funció? Bé, escrivim una funció i després el fem servir en el nostre programa, no? Així que el vaig trucar cub, i llavors puc utilitzar cub. Però el que és important tenir en compte és que l'ordre importa. Si tinc cubell sota principal, és va a executar en el cub. I en aquest punt, no hi ha res diu cub en el programa, i és només serà així, no tinc ni idea del que és el cub. Per tant, li dirà, implícitament declaració de la funció. Aquest és l'error que apareix. I així, en aquest cas, el cub està per sota principal, de manera que no va a saber d'ell. ALTAVEU 5: Així principal és en general defineix l'última funció? JOSÉ: tant el dubte és, és el principal sol ser l'últim El que a vostè el defineix? I no. És perquè normalment com a principal per estar al cim, oi? Perquè això és el primer que vol obrir el programador de la programa per veure. I llavors, com podem resoldre aquest problema que vull principal per estar al cim, però el funcions que volem, ens els volen a estar per sota principal però, ser capaç d'utilitzar ells dins de la principal? Bé, utilitzem el que anomenem un prototip de funció. Així que el que és un prototip de la funció essencialment s'està en primer lloc el la signatura o de la capçalera de la funció del que volem implementar baix aquí, i ho posem en la part superior d'un programa. Així que en aquest cas, es diu que, bé, més endavant en el nostre programa, anem fer una promesa per implementar aquesta funció anomenada int cub, que pren sencer d'entrada. Així que ara, ja que està per sobre de principal, principal, que dirà, oh, bé, més endavant en el programa, que serà allà, així que pot fer referència a ella, així que vaig a només s'ha d'esperar que, per ara. I a continuació, a la part inferior, implementem cub. I llavors principal s'acaba de dir, així, s'ordenarà d'enllaç aquests dos símbols junts. I anem a cobrir el que significa més tard. I així sabrà que aquest és el funció de cub que s'ha d'utilitzar. ROB: El [inaudible] de voler principal a la part inferior o superior, he vist tant. Hi ha coses que simplement els agrada posar principal a la part inferior. Però una vegada que un projecte es posa particularment gran, en general principal es troba en una presentar tots els seus. I en aquest punt, igual que el line cub int faria - dins stdio.h són un grup de línies igual que int línia d'entrada de cub int. I així els prototips són coses que tendeixen a posar en els arxius de capçalera, a l' aquest moment, no importa. Bé, no importa. Aquells sempre van en la part superior. I si principal no és un de propi, vostè no ha de preocupar de posar prototips de funcions individuals a l'arxiu. JOSÉ: I anem a arribar a això una mica poc més tard, quan Rob comença a parlar sobre la compilació. I per això també hi ha una diferència entre paràmetre i argument. I paràmetre és just el anomenem a aquestes entrades quan definim la funció. I en diem un argument quan realment passar-lo a la funció. Així doncs, en aquest cas, aquest és un paràmetre, com hem dit abans. I quan realment el fem servir per allà, cúbica de x, llavors x sí que és el que anomenem un argument al cub funció. ROB: Llavors els arguments dels paràmetres són - hi ha aquesta distinció, molt confós indistintament. En aquest punt, per a mi, és com una de aquestes paraules que quan ho vegi en la naturalesa, no pot deixar de forma immediata qüestió de si el fan servir a el context correcte, perquè el diferència és prou subtil que només tothom tendeix - Jo gairebé sempre dic argument independentment del que vull dir. JOSEPH: funcions i també són útils per al que anomenem efectes secundaris. Així que una funció pot rebre cap input, i també pot produir cap sortida. Així que en aquest cas particular, estic la definició d'una subrutina que no té valor de retorn. I per tal d'especificar que, utilitzem el que anomenem un buit aquí. I pel que l'efecte secundari d'aquesta funció és que només imprimeix coses a la pàgina. En realitat, no pren cap entrades, i no ho fa en realitat produir qualsevol sortida. Però això podria ser útil en el sentit si vostè vol, per exemple, depuració alguna cosa en el seu programa, si desitja escriure una petita subrutina que imprimeix, diguem, el contingut de memòria o alguna cosa així. I així, aquests efectes secundaris són de vegades útil fora del context de la mateixa manera que les entrades i sortides. Alguna pregunta? I per finalitzar aquest segment en particular, Què fa aquest programa? Et vaig a donar un parell de nois segons per llegir a través d'ell. En un nivell molt bàsic, el que volem dir és que intercanvia x i y, no? Llavors, quants de vostès pensen en realitat això canviarà xiy? Aixequin la mà. Ningú. D'acord. Qui creu que ho farà No intercanviar xiy? I la suma que era No tota l'habitació. Així que algunes persones no estan segurs. D'acord. Això és raonable. Així que anirem a través del que succeeix quan en realitat es diu a les funcions per primera vegada en Per respondre a aquesta pregunta. Així que això és el que la memòria Classe de semblar. Això és una cosa així com un model simplificat del que la memòria es veu com quan executa un programa. Així que hi ha alguna cosa que es diu la pila fins aquí i cosa que es diu el munt. I aquestes creixen cap el mitjà de memòria. Així que en aquest cas particular, quan es crida a una funció, aconsegueix posar a la pila. I llavors tot el que està contingut en aquest la funció es queda en el que anomenem marc de pila de la funció. I així, per aconseguir una bona visualització de això, let 's - per exemple, vam tenir l' principal del programa anterior. I a l'interior de la principal, que es diu cub. Així principal seria primer van a la pila emmarcar, perquè és la primera funció això es diu. I després, quan el cub es diu dins principal, que es va posar a la part superior de la principal dins de la memòria. Així que el que vostè notarà és que el cub té els seus propis paràmetres i la seva propis vilatans. Així que quan realment passa alguna cosa una funció, els paràmetres que aconsegueix són còpies del que va ser passat des principal. I per explicar espècie d'això, anem a caminar a través d'un programa. Així que tenim la pila, el que és només la part de la pila. I el que fem és el primer que inicialitzem x i i a un i dos. Així que tenim aquestes petites caixes. Estan asseguts a la pila del principal emmarcar a la pila. Contenen un i dos. Ara que anomenem intercanvi. El que passa és que vam passar x i y en canvi i canvi, crea les seves pròpies còpies d'aquestes variables a utilitzar en l'interior del seu marc de pila. Així que ara per allà, tenim una, que conté el valor que tenia x, ib, que conté el valor que i tenien. Així que un, dos. I t'adonaràs que això és independent de x i i a l'interior de la principal. Així que ara creem un temporal variable per contenir un. Hem establert una igual a b, de manera que canvis d'un a dos. I llavors ens vam posar b igual a la temperatura, que és un. I llavors ara sortim fora d'aquesta funció. En sortir de la funció, el marc de pila es va fer esclatar de la pila. L'anomenem empenta. Vostè prem un marc de pila a la pila i si vostè fa esclatar de la pila. I així, el que passa és tot el que havia en aquesta pila marc espècie de just puja en flames. I perquè ja no existeix. Però, què ens adonem? Mai hem canviat realment el els valors de x i y, no? Així que aquells es van quedar local principal. I passant coses en swap, que en realitat mai ha canviat els valors. I com diem a això? Nosaltres cridem a això passa per valor. Així que en C, quan es passa les coses en funcions, se les passa pel seu valor i fa una còpia d'ells per la funció d'utilitzar. I anem a aprendre sobre alguna cosa que es diu passant per la seva posterior consulta, però això és una forma que pot resoldre aquest problema. Però no et preocupis per que fins més tard. ROB: I en realitat, aquest terme, que passa per referència, pel que C no té ni tan sols passant per referència. C exclusivament ha de passar per valor. No importa el que facis, sempre estàs passant una còpia d'alguna cosa. És només que, igual que en certa manera em vaig esmentar que abans amb punters i que una cadena és realment només quatre bytes que apunta a algun lloc de la memòria. Bé, si tinc aquesta cadena i és em diu que és on la cadena - bé, si tinc aquest punter a aquesta col · locar en la memòria, llavors puc passar un còpia d'aquest punter a una funció, i aquesta funció encara sap on en memòria que és. Així que aquests dos indicadors estan assenyalant al mateix lloc en la memòria, i això és el que serem capaços de per modificar les coses més enllà de la marc de pila actual. JOSÉ: Vols fer la compilació? ROB: No, són les 5:30. JOSÉ: OK. És 05:30. D'acord. Així que anem a cobrir la compilació Suposo que en la propera secció, o la secció de LEADER en aquest punt. I - ROB: Alguna pregunta? JOSÉ: Alguna pregunta? Sí? ALTAVEU 5: Ús de cadenes de CS50, qualsevol funcions que volem utilitzar per aquells, que serà com a funcions C. CS50 no ha entrat i fet cap addicional. ROB: Correcte. Qualsevol dels de C com [inaudible], que utilitzaria els de les nostres cadenes. JOSÉ: I una última cosa que vull menció és que tenim una guia d'estil per a aquesta classe. ROB: Oh, si. JOSÉ: Així que si vens d'un programació de fons abans, podria tenir certes convencions quan estàs escrivint codi com posar claus en la mateixa línia o particulars formes de sangria o anomenar les variables. En aquesta classe, volem seguir un guia d'estil específica només perquè, així, si vostè surt i treballa a la indústria, que va a esperar seguir la guia d'estil de la empresa a la qual vas a. Com per exemple, Facebook crec té un tipus particular de nomenar convenció. I hi ha diferències entre el camell variables de la carcassa i igual que separant-los amb guions baixos. I també, crec que és més important, igual que per exemple, la sagnia, oi? Nosaltres vam començar claus on la condició és, i estan en la línia següent. I també posem claus en fins i tot si és només una línia. I moltes vegades, hi ha maneres de fer on vostè pot deixar aquests aparells de si es tracta d'una sola línia sota la instrucció If. Però en aquesta classe, volem seguir un guia d'estil específic perquè el rep utilitzat per a aquest tipus de coses. ROB: Sí, i Style 50 es va a fer complir aquesta guia d'estil, i estem utilitzarà Style 50 al grau del seu codi. Pel que fa les coses més fàcils per a nosaltres i esperem que no ha de fer coses que molt pitjor per a vostè donat la estil estandarditzat no hauria de ser tan poc realista. JOSÉ: I finalment, per trobar l'estil Guia, aneu a manual.cs50.net/style. I sí. ALTAVEU 4: Vas a fer complir caràcters per línia? ROB: Si. JOSÉ: Ho sento, nois. ROB: Això és com un dels únics. En aquest punt, estic bé amb 120. Estic bé amb dir 120 caràcters per línia. Entenc que hi hagi un límit. Crec que 80 és tan petit, però estem aplicar-la. JOSÉ: En el personal, crec que amb C, 80 caràcters és més bé. Una vegada que comença a rebre a un altre llenguatges com Javascript i PHP, i no tan raonable que simplement limitar a 80 caràcters. D'acord. Bé, això va ser la secció super. Algú vol dolços? ALTAVEU 4: Si.