ANDI Peng: D'acord.
Benvinguts a la quarta setmana de la secció.
Fa un dia precios aquí a New Haven
així que realment crec que l'escassa dispersió dels nens que
es va unir a mi per a la secció d'avui, gràcies.
>> Així que ràpidament, just abans que començar, l'agenda d'avui.
Anem a anar a través d'una alguns anuncis breus.
Tenim un horari molt boig que vénen en les pròximes dues setmanes
més o menys, així que anem a anar sobre això.
En segon lloc, ho sé topic-- favorit de tots
Estic segur que això es va fondre la seva ment durant la conferència, no es preocupi,
Encara espècie que no ho entenc.
Està bé.
Això va ser una broma.
En realitat, jo ho entenc.
Però m'asseguraré que vostès ho aconsegueix, també.
Així que anem a passar un molt, molt bona quantitat
temps parlant de punter d'avui.
Com es pot veure, Candy xerrada és enorme avui.
Estem realment va a mantenir que-- Sí, això és correcte.
Seguiu prenent dolços.
Vaig a passar a ells al voltant en aquest moment.
No et preocupis.
Intentarem de veritat per mantenir el sucre en la sang de les persones
perquè aquest cervell es va a cremar alguns avui oxigen a causa punters
són molt, molt difícil.
Llavors anem a parlar sobre gestió de memòria que tipus de és
en el mateix regne.
I mourem a redirecció i arxiu
I / S que són sintaxi just, agradable coses que hem de parlar.
I després, finalment, estic va intentar una vegada més
deixar com 10, 15 minuts per pset4.
Això és degut als pocs dies, així que estem va realment amable de donar
alguns consells útils si Ja es va iniciar en això.
Fresc.
D'ACORD.
Així que alguns anuncis per aquesta propera setmana.
Classificació.
No sé realment en aquest punt quants de vostès
nois estan realment en el meu et secció- bé allà?
D'ACORD.
Però, per a aquells de vostès que estan en la meva secció,
només un parell comenta sobre qualificacions.
>> En primer treball realment bo, de comentar.
Aquells de vostès que no fan cap comentari, vostè saben qui són, ja que probablement
té alguns punts d'estil dinged aquesta setmana.
Només assegureu-vos que en la totalitat del seu programes afegeixen un parell de comentaris.
Realment, l'estil és molt fàcil aconseguir punts correctes en el seu àmbit d'aplicació.
Així que per a nosaltres, simplement fer Segur que ets una mica
d'afegir una breu descripció en tot seus programes sobre el que estàs fent.
>> Secondly-- això és un gran problema per una gran part del TA aquesta week-- passat
així que assegureu-vos que hi ha la possibilitat de pujar a la carpeta correcta amb correctament
programes amb nom.
I la raó per la qual demanem això és perquè, en el curs d'anivellament,
realment executar un script en el seu codi que descarrega automàticament
tots els conjunts de processadors, corre proves d'exactitud en tots ells,
a continuació, càrrega teves puntuacions directament en el llibre de qualificacions.
No obstant això, en qualsevol moment, si anomenat incorrectament seu programa,
cargols ell cap amunt tota la programa per a tothom.
>> I així, legítimament, aquesta bella guió
que hem escrit que fa tot això per a nosaltres, completament
es bloqueja si no té el seu programa nomenat correctament.
Així que només pujar a la correcta carpeta, haver-los cridat correctament,
i llavors la vida és bona.
Amb si els seus conjunts de processadors de tornada a vostès anteriors
perquè em permet qualificar-los ràpidament.
Sí.
D'ACORD.
I també parlarem sobre-- Yale té un molt, molt
horari boig en aquestes properes dues setmanes.
Així que aquells de vostès en Harvard, això no s'aplica.
Però per a nosaltres, els nens encantadors de Yale tenim cosa que es diu caiguda break-- sento,
Harvard-- on tenim cinc dies de descans de l'escola.
I si bé això és preciosa, tipus de fa malbé el nostre ritme pset
perquè conjunts de processadors s'han Dijous, divendres.
I pel que si no som aquí Dijous, divendres, que
no pot tenir una feina per a vostès degut dijous, els divendres.
>> Així que el que farem és-- estem com el 99% segur que això és el que està passant,
pot haver alguna canviar, però crec que és
subtle-- és que anem a tener-- aquesta setmana és normal.
Així que tenim la nostra secció de Dimarts, seguit de les hores d'oficina
tota la resta de la setmana i després pset4 venç el divendres.
Llavors, com vostès saben, com Els vaig recordar nois la setmana passada,
tenim la nostra prova 0 pujant dimecres.
>> I així, sent un estudiant a mi mateix, Sé que molt pocs de vosaltres
nois en realitat estar treballant en pset5 els dos dies abans de la seva prova.
Llavors, què anem a probablement acabar fent és,
que la nit de dilluns, anem en realitat, 5: 30-07: 00,
tenir una breu ressenya període de sessions sobre els temes coberts.
No queda clar si es tracta d'un revisar sessió o un Q & A.
Serà una espècie d'opinió forma en què anem a cobrir
alguns temes d'interès per a vosaltres.
>> I després el dilluns i dimarts a la nit d'aquesta setmana 8: 00-11: 00,
tindrem horari d'oficina.
Aquestes hores d'oficina va més probablement més de simplement entrar,
demanar TA seves preguntes sobre qualsevol concepte que vostè està confós sobre,
i van a classe d'anar amb vosaltres i conceptes de revisió de la prova.
Qüestionari 0, si estàs en la Dilluns, dimecres secció,
serà el dimecres de durant class-- dimecres durant la classe.
I llavors, si vostè està en el Dimarts, Dijous secció,
serà també durant la classe dijous.
Realment no es pot triar quina la que vas.
Si vostè és un dilluns, dimecres, has d'anar a dimecres.
Si estàs en dimarts, dijous has d'anar a dijous.
Però després d'aquella nit, nosaltres el personal és encantador, es
tenir una prova gegant classificació de festa en que arribarem a les seves puntuacions de nou a vostè
Aquella nit.
A quina hora?
Incert, qui sap, però ho farà estar de tornada en el termini de 24 hores
perquè vostès amb sort tenir una mica de retroalimentació per al divendres.
>> I després tenim una setmana molt boig.
Així pset5 és una de les conjunts de processadors més difícils de l'any.
Així que ho sento nois.
El que anem a tractar de fer és que tindrem
algun suport real d'aquest cap de setmana.
Perquè, com vostès poden veure, el pset s'ha de abans de les vacances de tardor.
No tenim suport a nois durant les vacances de tardor
i pel que realment tipus de vull expressar això com,
anem a acabar amb això, treballarem molt, molt dur
aquestes properes dues setmanes, reben aquest qüestionari i afegir aquests dos conjunts de processadors fets amb
i després vostès tenen un bon relaxant set dies sense pensar en CS.
>> Així que perquè a succeir, és probable que estiguem
va a moure la meva secció per a les tardes de diumenge.
Es va filmar el que no es preocupi si vostè no pot venir.
Però la filmació en línia ho farà ser-hi i accessible
perquè vostès tenen Diumenge, Dilluns, dimarts, per treballar en pset5.
I llavors és caiguda trencar-se i cap CS i després
tornem i la seva tornada a la rutina.
>> Però serà un setmana meravellosa per a les vacances de tardor
i realment volem que sigui el més estrès gratis per a tothom com sigui possible, que
És per això que ens vam traslladar al conjunt de processadors que s'ha de abans de les vacances de tardor en lloc de després.
A causa és-- Vull dir, em sento una mica com en contra del propòsit de tenir
la data límit després de les vacances de tardor si hi ha cap suport de totes maneres durant les vacances de tardor.
Així que és rather-- Crec preferim centrar-nos en això ara.
Algú té preguntes sobre aquest horari?
Qualsevol cosa confusa?
Sí.
>> AUDIÈNCIA: Tenim encara tenim una conferència sobre el 21?
ANDI Peng: Sí.
Així que el dia 21, que serà una conferència que és en viu des Harvard.
No sé si David és el rodatge o si en realitat està donant conferències,
però que estarà disponible en línia per a vostès a l'accés.
Així que assegureu-vos de tallar 1 hores en algun lloc de les vacances de tardor
així que vostès poden agafar en aquesta conferència.
Sí?
>> AUDIÈNCIA: Sí.
Ho sento.
Tinc ací un couple--
>> ANDI Peng: No es preocupi.
Aquí, prendre una mica de caramel.
>> AUDIÈNCIA: Hey, em va cridar això.
Així que per recapitular, no demà, però el Dimecres després d'això, tenim un concurs.
ANDI Peng: Correcte.
AUDIÈNCIA: I va ser-- ¿Quin és el format de la prova?
ANDI Peng: Oh.
Així t'enviarem un correu electrònic que cobreix tot el més en profunditat.
Però, en essència, que només cobreix temes bàsics ja coberts
en la primera meitat del semestre.
Tindrem sessions de revisió i pregunta i respostes pel que no es preocupa per això.
Però anem a anar sobre això també.
AUDIÈNCIA: ¿Va a ser, ens portar als nostres ordinadors i codi allà-
ANDI Peng: No.
Va a ser que vostès escriuen i respondre a les preguntes de la mà.
>> AUDIÈNCIA: Oh.
>> ANDI Peng: Així que anem a donar pràctiques fora i coses
així que vostès poden voler anar potser enrere i reescriure Mario amb la mà just
per assegurar-se que vostès tenen una idea de com fer-ho.
Perquè a vegades quan escriviu per que la mà
oblidar comes i altres coses i això és molt dolent.
AUDIÈNCIA: ¿No serà [inaudible]?
Igual, que està rebent un punt i coma en tu--
>> ANDI Peng: Sí i no.
Parlarem més en profunditat sobre com el disseny de qüestionari és
i com anem a grau.
Però, en essència, només sé que el format general serà vostè
nois, ja sigui interpretant code-- respondre a les preguntes bàsiques.
Si jo li vaig preguntar, què és una biblioteca?
Vostès han de saber el que una la biblioteca fa i escriure això.
O es em permet dir-ho, escriure un programa que imprimeix Hello World a la pantalla.
Vostès escriuria, int main void printf hola coma món.
Sí.
>> AUDIÈNCIA: ¿Així que no va estar en qualsevol lloc [inaudible]
nivell de dificultat del problema estableix?
>> ANDI Peng: No.
No.
Ens won't-- si.
Escriu la totalitat de la joc de 15 a 20 minuts, vaja.
No, no serà això.
No.
AUDIÈNCIA: OK.
Així que aquest és el dimecres.
Durant aquesta setmana també han creat el problema més difícil?
ANDI Peng: No.
Així que el problema el va posar per el dia abans de les vacances de tardor.
El schedule-- el correu electrònic va ser enviar realment fos
Fa 20 minuts respecte a tot això.
Així que vostès simplement consultar el seu correu electrònic.
Serà allà.
Sí.
No et preocupis.
Fresc.
>> Teniu alguna pregunta generals sobre anuncis, classificació, qüestionaris,
Abans d'aprofundir la dreta en punters que consumirà
la major part del nostre temps secció d'avui?
Fresc.
Tot bé.
Així ho van fer vostès tots Veure aquest lovely-- No sé el que ells diuen.
El que l'animació amb plastilina va volar a si mateixa, ja que
no utilitzar un punter correctament.
Bé, el programa va probablement esclatar a si mateixa si
no utilitzi punters correctament també.
Així que farem Segur que això no succeeixi.
>> Avui anem a fer una mica de diversió punter.
Vaig a anar sobre les coses tan bé com crec
que és possible en un marc de temps petit.
Però hi ha tantes coses per cobrir que realment vull que vostès,
si vostè no entén alguna cosa, que no només em va permetre seguir endavant.
Perquè si no ho fa entendre alguna cosa,
és probable que no va a entendre res del que dic després d'això.
Així que per favor em parar i fer una pregunta.
A causa de que tota la classe de boles de neu junts.
Igual que, punters condueixen a plom de memòria en altres coses.
I pel que si vostè no entén punters, aturar-me i nosaltres ho resoldrem
i la vida va a estar bé.
>> Fresc.
Llavors, quants de vostès en la conferència, quan David va esmentar punters,
seus cervells tipus de convertir en gelatina?
Sí.
Bé.
Anem a tractar de de-Jell-O el teu cervell avui.
Anem a realment sistemàtica passar pel que exactament un punter és,
el que fa, i com els utilitzen.
>> Així que tot el pointers-- normalment amb les variables
hem estat utilitzant en la codificació, com variables com nombres sencers o cadenes
o flotadors, tots són essencialment un valor que se'ls assigna
així com una adreça que apunta a aquest valor.
Així que vaig a treure això ara mateix.
Gairebé no tenim guix però això està bé.
>> Així, per exemple, normalment la forma en què hem
estat utilitzant variables és que vam crear el nom de la variable de tipus int, anem a
només dir.
Així que aquí tenim int x i estem inicialitzar que int a 50.
Així que aquí, en aquest bloc de memòria en la nostra ordinadors que hem emmagatzemat un nombre de 50.
Llavors, on punters entren en joc és que l'equip itself--, aquí,
físicament en el disc dur en la RAM del meu computer--
que només té una quantitat finita de memòria.
No es pot mantenir l'emmagatzematge de les coses a la part superior de les coses a la part superior de les coses
i tenen tots ells.
>> Així que la forma en què dinàmicament assignem memòria per poder emmagatzemar el que volem
i accedir-hi, és per tenir punters.
Així que imagina't en el seu espai en la memòria, a la dreta.
Si aquest és el RAM de la seva ordinador, vostè té aquests petits trossos
o blocs o bytes de memòria en which-- aquests són només poc
blocs que han estat assignats a terme en el disc dur o la memòria RAM del seu ordinador,
i dins de cada un d'aquests blocs pots emmagatzemar diferents coses.
Així, per exemple, un array en aquest exemple
aquí és un byte que és que consta de vuit bits.
El nombre canvia depenent del sistema operatiu del seu ordinador.
Per exemple, quants de vostès tenen sentit parlar de 32 bits enfront de 64 bits de funcionament
sistemes?
Exactament.
>> Així que tot el que està dient és que el memory--
que la forma en què l'equip gestiona la memòria és diferent.
Què és això que és molt important entendre
quines funcions si mateix en lloc de memòria de prestar atenció als números.
Així que en realitat no importa el gran que aquesta matriu
És a dir, només hem de importa el gran que què necessitem un int a ser,
què tan gran Necessitem una cadena ser, què tan gran és un punter?
D'ACORD.
Així que serà molt , La informació densa de pesada.
Vaig a donar a vostès un parell de moments d'alleugeriment d'historietes aquí.
Tots Vostès haurien de poder entendre això ara.
Perquè sabem que punters són direccions,
i els que són diferents de variables.
D'ACORD.
Fresc.
Acudits CS són els millors, no?
>> Així que la forma en què anem sobre la creació d'un punter
és un tipus molt específic de sintaxi.
Igual que amb la creació de qualsevol tipus de variable, és
serà una específica Sintaxi fem servir per crear-la.
Així que quan es declara cap punter, un punter és només essentially--
Crec que l'important part de punters és
que, mentre que una variable té tant un valor i una direcció,
un punter és una adreça.
El seu valor és una adreça.
Així que és una adreça emmagatzemada en una direcció diferent.
Si això té algun sentit.
Anem a repassar això amb més detall, però aquesta és la forma genèrica
de què-- de com s'emmagatzema una impressora.
>> Així que la forma en què es crea un punter és fent qualsevol tipus de dades
que el punter es va ser referència i llavors--
amb el star-- i després el nom del punter.
Així que aquí, si volíem per crear un punter que
apuntant cap a un nombre sencer, i ens volia el nom del punter sigui x,
faríem int estrelles x.
Sí?
>> AUDIÈNCIA: I pel que si la següent línia que
fer int x, int serà l'estrella de x indicar la ubicació de la x
estàs definint després?
>> ANDI Peng: Molt bona pregunta.
Anem a repassar això en una parella llisca més tard.
Sí.
I després el mateix amb carbó i les mateixes carrosses cosa.
Només sé que en aquest moment hem creat un punter,
que en realitat no hem fixat de la mateixa manera res encara.
En realitat no hem referenciat ella.
El mateix aquí quan es crea una variable,
que ha creat el nom de la variable, que en realitat no ha establert un valor a la mateixa.
El mateix aquí.
>> D'ACORD.
Llavors, ¿com es defineixen els valors dels punters?
És referenciant i eliminació de referències.
Així que la forma en què podem referenciar 1 varia-- un punter, en essència
tornem la direcció en la memòria dels quals s'emmagatzema una variable.
Així que si jo tingués un pointer-- vaig a dibuixar aquesta vegada arribem a la següent diapositiva,
però només sé que, en essència, la i- el signe
i tot el que la variable-- fa és dir-li a la direcció
d'on alguna cosa s'emmagatzema.
I dereferencing és el contrari d'això, que és només l'estrella.
L'estrella simplement li dóna la real les dades emmagatzemades en aquesta direcció.
>> Així que un li dóna l'adreça emmagatzemat en una direcció,
l'altre li dóna la real valor emmagatzemat en la direcció.
Així que els dos d'ells donen que coses diferents.
Un cop més, els portaobjectes es tots en línia de manera que no es preocupi
si vostès no poden copiar això en el temps.
>> Així que anem a fer una ullada en aquest exemple.
Així que tenim un gegant matriu de memòria aquí, oi?
Quan només tenim blocs de memòria o bytes de memòria,
en el qual podem emmagatzemar diferents coses.
Diguem que es tracta de la punts de direcció en la memòria.
Així que cada vegada que tingui - veure el 0x, tot el que està dient vostè és que
això és un dígit hexadecimal.
Com vostès saben, els números podria basar-se en diferents bases.
Base 10 és la forma en què normalment interpretar els nombres.
També hi ha base 2, que és binari.
I en aquest cas, hexadecimal és base 16.
És només una forma diferent de dir de zero a 10-- o zero a nou
i després també A, B, C, D, E, F. També fa referència a un nombre diferent.
David es va acostar això en conferència breument.
Si vostès són confós, busca-ho a google.
Hi ha maneres molt fàcils d'aprendre el que és un dígit hexadecimal és.
Tot el que és realment rellevant en aquest moment és per a vostè
nois que saben que una dígits hexadecimals en C
usted-- diu que típicament li diu que és un punter.
O això és una adreça.
>> Així que en aquest exemple aquí, int x és igual a 5.
Estem creant un integer-- Ho sentim, una variable de tipus
sencer i estem inicialitzar a 5.
Així que aquí a la nostra targeta de memòria, podem veure que x està en la direcció de 0x0
i el valor que tens emmagatzemat a l'interior de la mateixa és de 5.
Això hauria de donar-li sentit a tothom, no?
D'ACORD.
>> I llavors el que hem fet en la segona línia de codi
és que hem creat un punter de tipus int.
Això és el que el int indicador de l'estrella està fent.
I això és igual que el signe x és que li dóna l'adreça d'alguna cosa.
Així que la direcció de x en aquest exemple és 0x0.
I perquè la direcció està sent emmagatzemat en aquest punter.
¿Això té sentit per a tothom?
>> Així que pensar en esto-- pensar en pointers-- aquí
en Yale tenim un sistema d'apartat postal on cada estudiant té un mailing
enfront d'on es pot anar al soterrani de LW
i vostè pot simplement anar i agafar tot el que necessita d'aquesta direcció.
El mateix està succeint aquí a un ordinador.
Vostè té aquests bytes de memòria que pot emmagatzemar informació en,
però per saber què peces d'informació
partit del que estàs tractant de trobar i on, necessita un punter que
et diu com anar-hi.
>> Així, per exemple, per a mi, el meu apartat de correus, Tinc un nombre de cinc dígits específic.
Aquesta és la meva adreça.
Així que puc anar físicament a la memòria, Puc mirar en la direcció,
Puc anar a la casella de correu i accedir a les dades a l'interior.
¿Això té sentit per a tothom L'ordinador és essencialment
fent exactament el mateix.
>> Així que tot punter està fent és que és només la creació d'una memòria
i les seves dades de memòria és en realitat la direcció d'una altra cosa.
Llavors vostè pot anar a buscar això.
Cada un de bo?
Tothom bo amb mi fins ara?
D'ACORD.
Fresc.
Tot bé.
Així gairebé el mateix que abans.
Així que tenim, primer, una variable crida x en què cas--
Vaig a canviar aquest valor a 5.
Diguem que la direcció d'aquesta memòria és 0x0.
00.
Gran.
>> Així doncs, en el nostre segon línia de codi, que estem
crearà un punter anomenada punter ptr.
I la direcció d'això, anem a Només cal dir que és 0x01 a la memòria.
I realment volem almacén-- el signe
x li dóna l'adreça del que X era.
I la direcció de x era 0x00.
Així que aquest punter ara en realitat té la direcció
emmagatzemada com el seu valor del que X era.
Tothom amb mi fins ara?
Fresc.
>> I llavors, la forma en què hauríem de copiar,
és si volem declarar i inicialitzar un altre bloc de memòria de tipus int.
Oi?
Això seria un int.
Es diria còpia.
I vas a get-- el l'indicador de l'estrella li dóna
les dades reals d'aquesta direcció.
El signe et dóna l'adreça, l'estrella que dóna les dades.
Així que les dades de punter.
Aquest punter apunta a 5.
I així aquesta funció aquí-- l'estrella pointer--
va, aconsegueix el que està en aquest bloc i ho emmagatzema aquí.
Tothom clara sobre com va succeir això?
>> Allà- Així que els dos operadors de la dreta el signe i la star--
acaba de fer coses diferents quan s'utilitza en punters.
Un que té la direcció, un vostè obté el valor real.
Així que assegureu-vos que quan vostès estan codificació que no confondre els dos
perquè són molt diferents.
Aquí tenim un bon exemple d'un 0x01.
Aquesta és una molt agradable nombre petit per recordar.
En l'equip real vostè va a tenir
un nombre cul gegant que és una cosa això no és agradable, no és agradable.
Serà un valor escombraries.
I així va realment, realment desordenar els seus programes.
És molt important ara que tenim
els fonaments sota per què-- similars, el que passa físicament quan
s'està executant aquests blocs de codi.
Everyone-- sí?
>> AUDIÈNCIA: Llavors int x és igual int còpia?
>> ANDI PENG: No, perquè, en aquest cas, int x-- el valor de x-- és igual a 5, oi?
I després int còpia és igual a 5.
Així que si anés a equiparar- entre si perquè són nombres enters,
sí, s'avaluarien en true.
Però si fossin cadenes en memòria, com el que David va fer durant exemple,
això és diferent perquè que estan referència
les adreces dels llocs de la memòria i que equivaldrien a fals.
>> Així que aquí seria cert perquè estàs comparant directament values-- integers--
però en els altres que ets punts de referència.
A causa que una cadena està en una matriu, i tot-- parlarem d'aquesta tarda-
però matriu és essencialment només un Punter a un grup de caràcters en la memòria.
Així que aquests són una mica diferents.
Però en aquest cas, sí, vostè podria fer això.
>> AUDIÈNCIA: Pot explicar la direcció de la còpia?
ANDI Peng: Sí.
Així que això és el sol-- no emplenar un valor
però és només una mica a l'atzar una altra valor de les escombraries que no ens preocupem.
Perquè una vegada que s'iniciï el programa t'adones que no ho fem realitat
m'importa el que la adreces reals són,
només hem de saber el que està en les direccions.
Sí.
>> AUDIÈNCIA: L'estrella al costat de int al segona línia, que és diferent no sigui:
ANDI Peng: Sí.
AUDIÈNCIA: --el desreferència i fer referència a l'estrella?
ANDI Peng: Sí.
Així que els autors de C-- qualsevol decidit a escriure el llenguatge de la C--
no era molt intel·ligent.
No eren molt intel·ligents en l'intent esbrinar per què hauríem de fer això.
Si fos jo, ho faria sens dubte utilitzar dos personatges diferents.
Però es va decidir utilitzar la mateixa.
>> Així que l'estrella després d'un int, que li diu a l'equip
que vostè està a punt de crear un punter.
Però si vostè està tractant d'eliminar la referència alguna cosa-- en altres paraules,
anar a l'adreça i tirar les dades de somewhere--
l'estrella s'utilitza de manera diferent.
Així que vostès acaba de tenir cura amb no fer malbé els dos usos.
Fresc.
Sí?
>> AUDIÈNCIA: Llavors, només per repetir a assegurar-se que estic following--
>> ANDI Peng: Totalment bé.
>> AUDIÈNCIA --al costat esquerre de aquesta diapositiva, fem una cosa que sabem.
Declarem un enter [Inaudible] que són igual a 5.
ANDI Peng: Sí.
AUDIÈNCIA: Correcte.
I després tenim una cosa int estrella i que diu que, d'acord, una cosa així com que
declarar un sencer, ara estem declarant un punter.
ANDI Peng: correctament.
Correcte.
>> AUDIÈNCIA: Oi?
I el nostre punter ptr.
>> ANDI Peng: Sí.
El nom del punter és ptr.
Punter.
AUDIÈNCIA: I llavors iguals nx que simplement li diu a C
que vol accedir al valor en sencer x-- el valor que sencer x
va ser assignat.
>> ANDI Peng: Aneu amb compte perquè signe x realitat
diu usted-- l'equip que voler estirar la direcció del que x és.
Així signe et dóna la direcció, estrelles, li dóna el valor.
>> AUDIÈNCIA: Llavors volem la direcció.
Diguem que x era at--
ANDI Peng: En realitat, saber el que x és, oi?
Perquè sabem que x era-- estic inventant això, però anem a dir,
arbitràriament, era 0x00.
Oi?
Així que sabem que la direcció és 0x00, i així quan anem i ampersand x,
sabem que això d'avaluar tot 0x00.
És per això que ens van guardar que com el valor de la nostra punter.
Això té sentit?
>> AUDIÈNCIA: Sí.
I còpia va a ptr-- dereference
ANDI Peng: Correcte.
AUDIÈNCIA: -que és un punter que hem
declarar que ens el compte direcció del nombre enter x.
>> ANDI Peng: Sí.
>> AUDIÈNCIA: I en aquest un cas, ptr estrelles és
igual al valor de x que és igual a 5.
>> ANDI Peng: Correcte.
>> AUDIÈNCIA: Cool.
I això és una manera més senzilla d'aconseguir això, o és que l'únic manera-
ANDI Peng: Així que ara mateix no sembla molt lògic per a nosaltres
passar tot aquest temps fent aquesta cosa molt complicada quan
tot el que hem fet és simplement crear de dues sencers amb el valor de 5, oi?
No té sentit.
Però una vegada que anem a repassar assignació de memòria i- anem
repassar per què això pot ser pràctic i útil més endavant.
Confia en mi quan dic que no ho fem només crear aquestes funcions arbitràries per a vostè
nois aprenguin perquè som tractant de ficar-se amb vostè.
Hi ha realment utilitza per a tots ells coses i anem a parlar d'ells.
>> AUDIÈNCIA: Awesome.
>> ANDI Peng: Sí.
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: Bona pregunta.
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: No ho és.
Realment no ho és.
AUDIÈNCIA: Variables --Dos que també iguals [inaudible].
D'ACORD.
>> ANDI Peng: Sí.
D'ACORD.
Abans de passar, és clar tothom?
Sé Taylor, que va rebre en una mica tard.
Està bé.
Està en línia.
Vas a veure els primers 20 minuts i estaràs bé.
D'ACORD.
Fresc.
>> Tot bé.
Així que això és essencialment una espècie de cosa similar que simplement ho vam fer.
És només en una forma gràfica.
Si es va a realitzar un seguiment del que que acaba de succeir, int x és igual a 5,
tot el que hem fet en aquest punt és crear una variable anomenada x de tipus int.
Anem a emmagatzemar el valor de 5 en l'interior de la mateixa.
No hi ha cap punter perquè no tenim en realitat creat un punter però, ¿no?
I després, en la següent línia, punter int estrella,
aquí és on som en realitat crear físicament el punter
i estem establint que igual o referències
el punter, amb signe x.
Que és on arreu memòria aquest va passar a ser.
Jo en realitat no molestar que constitueixen un valor en aquesta ocasió.
Però en aquest cas, aquest punt que seria igual a això.
>> I llavors allà baix, l'estrella punter és la desreferència.
Aquí és on som tirant de la informació.
Així que el valor en x és en realitat serà igual a 35.
Així que en aquest punt, tenim essencialment simplement reiniciat a 35 x
sense tocar x.
Només a través del punter que apuntava a x,
en realitat podem canviar el que x era.
Vaig a treure això cap a fora també.
>> Així que aquí hem creat alguna direcció aleatòria aquí.
Diguem 0x00 nou.
Diguem que aquesta és la direcció.
I hem creat un sencer anomenat x i el valor que he assignat a es 5.
En la segona línia, int pointer-- de manera que ara que hem
aconseguit aquesta segona cosa aquí es diu un pointer--
i anem A-- diguem és alguna altra adreça de memòria aleatòria.
>> Així que anem a establir aquest igual al que era.
I aquest punter va apuntar cap al valor de x
I després, si canviem ell-- si fem indicador de l'estrella,
això va a la valor del nostre punter.
En aquest cas, es va a realitzar un seguiment Aquesta fletxa a aquest valor de x
i que canviarà a 35.
Efectivament, només canviem x x sense tocar.
A través de punters només fan referència, podem anar i canviar el valor de x.
Això té sentit?
>> Així d'aquesta manera, podem realment canviar el nom i valors rechange i reassignar
a coses que no vam fer realment fer nosaltres mateixos.
¿Això té sentit per a tothom?
Fresc.
D'ACORD.
Gràfic tan complex aquí.
Anar línia per línia.
Essencialment, acaba de fer l'exacta el mateix que jo acabo de fer.
Abans de passar, em realment vull fer només
que tothom és molt clar en això.
Així que aquí, el codi que tenim és int a és igual a 3, b és igual a 4, c és igual a 5.
Per això hem creat tres enters nom a, b i c que són igual a 3, 4 i 5.
I llavors estem creant 3 punters aquest punt a cadascuna d'aquestes variables.
>> I ara anem per repassar essencialment
el que passa quan s'opera en ells.
Així que treure'ls.
Prengui un full de paper-- no ho faig saber si vostès tots tenen paper,
però aquells de vostès que no ho fan, potser demanar prestat a aquells de vostès que ho fan.
Prengui fulls de paper i anar línia per línia.
I en cada operació que vostè ho fa, Vull que vostès escriuen realment a terme
ho és a, b i c en aquest punt.
¿I quines són les direccions, el que són els punters que apunten a una, bic
en aquest punt?
>> I llavors espero que això serà amable del seu pas nois
a través de la forma de pensar dels punters.
No anirem a través de tots ells.
Potser et donaré five-- com tres minuts.
Començar a treballar en els primers.
Oh.
Vaya.
>> AUDIÈNCIA: En la segona línia, per què no és l'estrella variable [inaudible]?
>> ANDI Peng: Recordeu que en operadors, en la primera setmana,
parlem de com si vostè fa iguals, a més,
això només significa una és igual a un plus c.
En aquest cas-- pel que aquest és un altre forma en què es podria utilitzar l'estrella.
A més de referència i declarant punters,
recordar que també significa la multiplicació.
Així que en aquest cas, que acabava de sigui a és igual a vegades c.
Això és només tan diferents forma d'escriure això.
>> AUDIÈNCIA: una és igual a vegades c.
ANDI Peng: Sí.
>> AUDIÈNCIA: Què vol dir si diu una carta signe?
>> ANDI Peng: mitjans Ampersand vas a que-- ets
anar al lloc el punter és apuntant i tirant de la direcció.
Així signe et dóna l'adreça, estrelles, li dóna el valor real allà.
>> AUDIÈNCIA: Som sobre la base de línia per línia?
>> ANDI Peng: Ets sobre la base de línia per línia.
Llavors només ha d'anar línia per línia un temps i llavors-- que
no s'han de preocupar de acabar tot l'assumpte.
Anem a tractar d'aconseguir a través de potser dos, tres línies
i després anem a convocar i acabem això.
>> És totalment bé si es perden vostès.
Aquest és un concepte molt difícil.
Si vostès estan preocupats que la classe diu així com David estava dient,
no ho fa.
Estem arribant a la pic conceptual de dificultat
i després es va a estar pendent negatiu.
Així que nois està gairebé allà.
Tenim un munt de caramels per aconseguir vostès a través de la gepa.
Crec que més o menys després de la caiguda trenquem estarem sobre la gepa
i la vida va a estar bé una altra vegada.
Així que no et preocupis en absolut.
Tot bé.
Et vaig a donar 20 nois més segons per acabar.
D'ACORD.
Tot bé.
Anem a prendre una punyalada en això.
Com vostès em donen respostes, Jo només vaig a escriure en.
I és d'esperar nosaltres-- puc?
En realitat no puc escriure-la.
Vaig a dibuixar a la pissarra.
>> Així que aquí en aquesta primera línia tenim una d'igual a b c estrella.
També Elliot va plantejar una molt, molt bon punt.
Perquè es va oblidar que a més de les dues formes en què poden utilitzar el símbol de l'estrella,
en realitat hi ha una tercera via.
Multiplicació.
I així que no es confongui perquè que és la primera forma d'usar una estrella.
És només dient l'ordinador que estic a punt de crear un punter.
>> La segona manera de fer l'estrella del punter,
que diu el punter que desitja accedir a les dades en aquest punter.
I després, per descomptat, no hi ha una simple multiplicació
entre dos nombres que et diu que vull multiplicar els dos.
Així que hi ha un munt de maneres podem utilitzar el símbol de l'estrella.
No es confongui.
Només assegureu-vos que vostè els individus enteneu exactament el que els tres d'ells
estan fent.
>> Així que en aquesta primera línia, 1 és igual a b c.
Així que anem a anar a través del és una, el que és b, el que és c?
¿I quin és el punter d'un, el punter a b, i el punter de c?
Quins són els tots igualant?
D'ACORD.
>> Així que vam començar amb un igual a 3, b és igual a 4, i c és igual a 5, oi?
Així que després d'aquesta primera línia, pot algú em digui què és?
Sí.
Siéntase lliure per simplement cridar respostes.
20.
Bé.
Quin és b?
>> AUDIÈNCIA: 4.
ANDI Peng: Quin és c?
AUDIÈNCIA: 5.
ANDI Peng: Yay.
Bé.
Quins són pa, pb i pc?
>> AUDIÈNCIA: 000.001 i 002?
ANDI Peng: Sí.
Així que tipus d'una pregunta amb trampa però no realment perquè aquí
treure memòries reals.
Però com que, per exemple, no ho fem realment saben el que aquests números són,
només podem dir signe.
Ni tan sols sé si pot dibuixar un símbol d'unió.
És com-- com ho fas?
>> AUDIÈNCIA: Com dibuixar un vuit.
>> ANDI Peng: Igual que un vuit.
Així.
D'ACORD.
AUDIÈNCIA: Bingo.
>> ANDI Peng: Matant ell.
Així Ampersand 1, només pot fer això.
Perquè el que fem en realitat no importa el que el valor d'aquesta
és, i és una mica llarga valor cul de totes maneres,
estem utilitzant només Giong dir un signe.
Llavors quin és pb?
AUDIÈNCIA: [inaudible].
ANDI Peng: Sí.
Fresc.
Tot bé.
Fàcil primera línia.
Vam aconseguir això.
Els punters són fàcils.
Està bé.
>> Segona línia.
I així, l'estrella és igual que és el mateix El que equival a dir unes vegades c.
És només una manera més fàcil d'escriure.
Així que no estem tractant de fer un punt o qualsevol cosa aquí.
Així va fer amb la primera línia.
Què és una a la segona línia després de fer a és igual a vegades c?
>> AUDIÈNCIA: 100?
ANDI Peng: És 100.
Bé.
Què hi ha de b?
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: Què hi ha de c?
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: I què hi ha dels punters?
Són ells-- el mateix, no?
D'ACORD.
Ara tercera línia.
Poc més complicat.
b és igual pa estrelles.
Pot algú dir-me, primer, el que fa pa estrelles iguals?
>> AUDIÈNCIA: És el valor que s'emmagatzema en un.
ANDI Peng: Exactament.
¿I quin és el valor que s'emmagatzema en una?
>> AUDIÈNCIA: 100.
>> ANDI Peng: OK.
Així que el que anava a ser un després l'execució d'aquesta línia de codi?
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: Què passa amb b?
>> AUDIÈNCIA: 100.
>> ANDI Peng: Sí.
I després tota la resta és pràcticament sense canvis, no?
A causa de que no el va tocar.
Fresc.
Quarta línia.
Una mica més complexa.
Així pc-- un cop més, la PC és el punter que apuntaven a C-- és igual a pa.
Què és un?
>> AUDIÈNCIA: 100.
ANDI Peng: Què és la b?
AUDIÈNCIA: 100.
ANDI Peng: Quin és c?
AUDIÈNCIA: 5.
ANDI Peng: Quin és pa?
AUDIÈNCIA: Ampersand a.
ANDI Peng: pb?
AUDIÈNCIA: Ampersand b.
ANDI Peng: I complicat, quina és la PC ara?
AUDIÈNCIA: Ampersand a.
ANDI Peng: Yay.
Woo Hoo.
Vostès, ¿veuen?
Això està bé.
No és tan dolent.
Tenim més dolços si no és tot bé, però crec que està bé.
I anirem només un més abans de tirar-nos les més difícils.
Les respostes que tenen aquí.
>> En essència, sé que això és igual que les matemàtiques en aquest punt.
Quan vostè té equacions simples com un més b, de vegades c, això és fàcil de fer.
I quan s'inicia l'expansió a ella, només ha d'anar el cap de les operacions.
El mateix que abans.
>> Porteu un registre de si la seva estrelles està davant alguna cosa.
Això et diu el valor.
Si vostè té una i abans alguna cosa, que et diu la direcció.
I vostè ha d'assignar qualsevol punters o aquest valor.
Així que anem a repassar aquest últim ràpida real.
No és aquest últim, ho sento.
En realitat, vostès poden triar.
Quin et nois vol anar més de les tres restants
que tenim?
No crec que només podem fer això perquè no podem simplement saltar a la línia.
D'ACORD.
Vostès no té una opció, és només el tercer a l'últim.
>> Pc estrella és igual a b c.
>> AUDIÈNCIA: Estrella pb?
>> AUDIÈNCIA: Estrella pb.
ANDI Peng: Ho sento?
AUDIÈNCIA: Estrella pb.
ANDI Peng: Star pb.
Oh, el meu mal.
Pb estrella és igual a b c.
Vaig a donar a vostès 10 segons.
Només cal pensar ràpidament.
Això és que tenim el ara, el que passa després que
executar aquesta cinquena línia allà?
D'ACORD.
Què és un?
>> AUDIÈNCIA: 100.
>> ANDI Peng: 100.
Què és b ara?
>> AUDIÈNCIA: 500.
>> ANDI Peng: Good.
Vol algú explicar per a mi per què això és 500?
No em sento com si en realitat mai tocat b.
Com ens les arreglem per canviar la valor de b sense tocar b?
Sí?
>> AUDIÈNCIA: A causa pb estrelles significa el valor en PB--
ANDI Peng: Exactament.
AUDIÈNCIA: -que és b.
ANDI Peng: Exactament.
Així que aquí al nostre diagrama, la nostra punter PB és en realitat apunta a aquest dret
aquí, la qual cosa és el real b física.
I així, si vas i fas pb estrelles, això és
seguint la fletxa del punter i canviant físicament el valor de b.
Així que per això hem canviat a B 500 sense tocar b.
I llavors tota la resta segueix sent el mateix perquè no toquem això.
Això és b.
Fresc.
I llavors--
>> AUDIÈNCIA: Només tinc una pregunta.
>> ANDI Peng: Sí?
>> AUDIÈNCIA: Des we've-- ja no hi ha c signe,
¿Significa un signe redirigir a la mateixa cosa ara?
>> ANDI Peng: Sí.
Tan--
AUDIÈNCIA: Llavors la fletxa tipus de simplement mou i-
ANDI Peng: Així essentially--
AUDIÈNCIA: --Ara no podem access--
ANDI Peng: --quan ens dereference c en-- em falsificador.
Que ha sigut això?
La tercera línia?
Quarta.
Quarta línia.
Tot el que vam fer va ser, en essència, canviar aquesta fletxa
i ho han apuntat cap a un lloc.
>> AUDIÈNCIA: Així que no podem accedir c més.
>> ANDI Peng: Si tinguessis aquesta exacta nombre, vostè pot accedir-hi.
Però no.
No tenim un punter c apuntant cap més.
Crec que si volia per tornar a accedir-hi,
crearia un altre punter que re-va assenyalar c
o desreferenciado això i va assenyalar cap a enrere.
Així que no, a partir d'ara, els tres punters, cap d'ells apunten a c.
>> Cada un de bo?
Les respostes estan en línia.
Siéntase lliure, després de la secció, repassen els dos últims i de prova a si mateixos.
Els mateixos conceptes, només un poc més complicat.
Només has de seguir a través de la lògica de per què les coses són coses diferents.
I la seva pista, els punters són un tema que ens agrada
per a cobrir en les proves perquè són conceptualment molt difícil.
Així que em permeto suggerir que vostè nois tots revisin aquesta taula
o retallar conceptes similars això abans del seu concurs de la propera setmana.
>> AUDIÈNCIA: disculpeme.
>> ANDI Peng: Sí?
AUDIÈNCIA: [inaudible] última un-- [inaudible].
>> ANDI Peng: 50.000?
Que hauria de seguir un altre cop.
Però somewhere-- Crec que la línia abans, que ha creat valor gegant c.
c és igual a aquesta cosa gegant que és 100 vegades 500.
No.
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: Sí.
100 vegades 100, que és de 10.000.
La qual cosa és 10.000.
Així que de tornada hi ets multiplicant bi c.
Així que el punter que apunta a B-- que és el valor de 500-- vegades A--
>> AUDIÈNCIA: [inaudible].
ANDI Peng: Potser això està malament.
AUDIÈNCIA: No, no, no ho és. [Inaudible] punter en c està ara apuntant a A--
ANDI Peng: Sí.
Té raó.
>> AUDIÈNCIA: --és en el seu en uns iguals 1 vegades-- és el valor de c.
ANDI Peng: Pots dir que una mica mica més fort pel que tothom pot escoltar-te?
AUDIÈNCIA: Llavors punter en c Punts ara al que el punter d'un utilitza per assenyalar
A-- i encara does-- però apunten a el mateix que és el d'una, ¿no?
El valor d'una, però que ha estat recentment definida.
I al principi que ets dient un abans era 100 vegades
el valor en b que és 500.
I això és, per molt que sigui.
50000.
Et estan reasignando que al que el espai de memòria en c és-- el punter al c
s'apunta que és un.
Així que vostè està redefinint un ésser 50.000.
ANDI Peng: Ella va poder secció d'ensenyar per a mi.
La propera vegada que és tot teu.
Aquí.
Aquí hi ha més dolços per això.
Et mereixes dolços per això.
>> AUDIÈNCIA: gairebé vaig agafar això.
>> ANDI Peng: Gairebé capturat aquest.
Està bé.
Sí.
Però ella tenia raó.
Així que el que has de fer és que-- Crec que
de seguir el fet que els punters són ara
apuntant a diferents valors.
Així que la value-- sento, la punter de c tornar a apuntar a un.
I perquè va canviar tots els nostres números.
I per això, quan accedeixi a la valor emmagatzemat aquí, és diferent.
Això té sentit?
D'ACORD.
Fresc.
Tothom bo, abans de passar?
>> AUDIÈNCIA: El ell-- quan vas per les files de la columna de l'esquerra,
no la primera fila afecta la segona fila i després el second-- com, és tot--
ANDI Peng: Sí.
Així que imagino que és de codi en el que acaba d'escriure en un igual a b c vegades, un estel és igual a c.
Només imagino que tinc simplement va córrer aquest codi
i no em imprimeixo el totes aquestes coses eren.
Si jo fos només per imprimir la primera cosa a la part superior, que seria aquí.
Si després em vaig trobar amb tots aquestes línies de codi,
el que aquests valors haurien estar al final són això.
>> Així que he fet un programa escrit aquí.
No he fet tot la multiplicació.
Però imagina't.
Així que aquí només tinc una programa anomenat punters.
Vaig a fer un zoom si guys-- acord.
Així que he creat variables a, bi c.
He creat iguals a 3, 4 i 5 i no tinc
creat els seus corresponents indicadors.
I llavors aquí només vaig imprimir el que és això.
Així que permetin-me que corro.
>> Vostès veure- escombraries.
Vostès veuen com 1, b i c són aquests valors
però els seus punters són aquest gegant valor de les escombraries que no ens preocupem?
Així que si jo fos a connectar realitat en tota la multiplicació
i després tornar a imprimir tots això, s'executaria a terme
al que és a la part inferior.
Així que si vostès volen jugar amb la codificació en realitat físicament,
vostès només pot connectar tots els de.
El codi serà en línia i llavors la seva valors han d'imprimir en què després.
>> I llavors vostè veurà com el punter direccions realitat han reassignat.
Així veuràs com la direcció del c es converteix en realitat
per igualar qualsevol que sigui la direcció d'una era.
I ells s'ajusten al que sigui que gran nombre és.
Bona pregunta.
Tothom està bé?
Una última trucada per a les preguntes.
D'ACORD.
Tot bé.
Així es preparen per tenir la seva ment cremat una mica mica més.
Les matrius són en realitat només els punters.
Això és tot el que són.
I recorda, ¿quines són les cadenes?
També són matrius.
Llavors, què són cadenes en realitat?
Són com punters a la a partir d'un char de més caràcters.
>> Així que és només conceptes que comencen per construir a la part superior de l'altra.
Així que això és què-- vostè recordi en la conferència, David,
quan va tenir aquesta comparació de int cadena de mama
és una cosa i després una altra mare cadena i
tractar d'igualar els dos entre si, et donen diferents valors.
És perquè les cadenes si no són valors.
Tots ells són són adreces de memòria char-- que són matrius de caràcters i matrius
són només punters.
>> Així, en essència, quan David era comparing--
Està bé si em esborro tot això?
Així que en la conferència quan David tenia mare és igual és igual a la mare,
per a nosaltres que sembla ser la mateixa cosa.
Oi?
Però, a l'ordinador per sota de la capó, el que realment està succeint
és que aquesta cadena, tot el que és és una matriu.
Amb una ampersand-- o, ho sento, amb un terminador nul al final.
Oi?
Backslash 0.
Barra invertida incorrecte.
>> Així que tot el que were-- tot aquestes dues cadenes were--
són sèrie de quatre potes de mida amb les cartes de la mare i la mare.
Però el que realment són les matrius són només punters a un lloc específic en la memòria
que li diu que comenci la matriu.
Així doncs, en aquest cas, tot això era era només un valor d'escombraries,
alguns punter a l'atzar.
I tot això es va anar algun altre valor d'escombraries.
Diguem 0x200.
>> I així, quan vostè tracta de la igualtat ells dos a un a l'altre,
avaluen com false perquè el addresses-- els punters
que were-- eren diferents.
Considerant que és diferent si ets tractar de comparar nombres enters reals.
Com si volgués compare-- en l'últim exemple-- int A a B,
que avaluarien true com va dir Elliot
perquè eren sencers que estaven emmagatzemats
i que està avaluant només els valors.
Aquí, perquè les cadenes són arrays i totes les matrius són punters,
és per això que no ho són iguals entre si.
>> Així que una mica confús, aquest gràfic.
Però anem a imaginar.
Tenim crear una matriu de mida 3 amb un índex de 0 a 2-- 0,
1, 2 amb els valors d'1, 2, 3 i emmagatzemats en ells.
Tota la gamma de veritat does-- aquí, anem a
dic que estic creant un punter a aquesta matriu que és
accedir al valor en el primer índex d'aquest arranjament.
Així que aquí seria 0.
Oi?
Tothom entén com aquesta primera línia avaluada?
Gran.
>> I així que si volies per inicialitzar els valors addicionals després d'això,
tot el que estem fent és la reassignació.
Per tant 0, 1, 2, 1.
Així que aquest punter que una vegada va ser assenyalant aquí, tot el que estem fent
es mou cap avall.
Això és el que el més 1 està fent.
I llavors podem posar 2 allà.
Si volguéssim posar 3 en el qual després, ens agradaria esborrar aquest indicador,
lloc 3 en aquest país.
Té sentit tothom?
Sí.
¿Vostè té una pregunta?
AUDIÈNCIA: És [inaudible] té una pregunta, ho diré de totes maneres.
No crec que en realitat és un pregunta però- en anglès, array
és igual a 1 té sentit.
Som com, OK, el primer.
Però les coses són 0 Índex [Inaudible] la matriu és igual a 0
per indicar el primer lloc.
ANDI Peng: Sí.
Així que en realitat el que estic fent aquí és No estic accedint al primer índex.
Tot el que estava doing-- el primer de tot, digues-me ¿quina varietat estrella fer?
Què fa una estrella abans que un punter de fer?
>> AUDIÈNCIA: Indica un punter.
Que vostè està declarant un punter.
Es de--
>> ANDI Peng: S'elimina referències els mitjans va i aconsegueix realment el valor.
Oi?
Així que en aquest cas, vol aconseguir el valor aquí i establir que a 1.
Sí?
Així que no estic actually-- no ho faig realment es preocupen per l'índex d'aquest,
tot el que estic fent és simplement la iteració baix movent la meva punter per la matriu.
I després, finalment, em ha de parar, no?
I la forma en què m'aturo és quan em va colpejar, en el cas
d'una cadena, un terminador nul.
Ja ho sé, oh, si em va colpejar una part posterior-- si veig barra invertida 0, sé que he acabat amb aquesta
i sé que puc simplement deixar d'iteració a través.
Molt bona pregunta.
>> I realment a anar més lluny en profunditat en aquesta setmana que
a causa de que la peça que es va a implicar una gran quantitat d'ús de punters.
Però només sé que en aquest moment, això és només una més-- diferent
això és només una manera diferent per l'ordinador per escriure, en essència,
el que hem estat fent.
Igual que David va dir a donar una conferència, la forma en què
accedir a una matriu és només per fer matriu 0, suport 0, si només
volgut per accedir al primer valor.
>> Tot l'equip està fent és convertir que en això i iterant si mateix.
Així ho anomenem sintàctica sucre, que és només
una forma elegant de dir fàcil d'usar maneres de nosaltres saber programar.
Però l'equip per sota, el que està fent,
en realitat és només tenir un punter que està ajustant.
Però la forma en què escrivim, perquè és més fàcil per a nosaltres
per pensar en les coses en termes de caixes i com moure per les caixes,
és per tenir els suports.
Ho sentim, però que en realitat era, molt malament però- si.
AUDIÈNCIA: Llavors, com es comparar dues cadenes
per veure si són iguals entre si?
>> ANDI Peng: David escriure aquest programa a la conferència
així que només vaig a anar més ràpidament i breument.
La forma en què ho faries és que ho faria realitat
que hagi d'anar i comparar la addresses-- o els valors
obtingut a partir dels punters.
Així que recordi, com obtenir el valor aquí?
No m'importa sobre la direcció aquí.
Com obtinc la realitat valor del que sigui aquí?
>> AUDIÈNCIA: [inaudible].
>> ANDI Peng: Exactament.
Així es compara l'estrella aquí davant de l'estrella aquí.
Són aquelles iguals.
I després cal baixar.
Són l'estrella aquí i l'estrella aquí igual?
D'ACORD.
Són iguals.
I que acaba de seguir baixant fins que has arribat al final de tots dos.
I si tots ells són iguals, llavors vostè sap que la seva cadena és igual.
I C té en realitat una funció escrita diu
Cadena Comp, que en realitat només ho fa per vostè perquè no '
has d'escriure tu mateix.
Sí?
>> AUDIÈNCIA: Crec que en la conferència és quan fem la comparem.
Nosaltres realment no necessitem una taulell com pi, oi?
>> ANDI Peng: No ho fa perquè en realitat no importa
quantes caixes que hem itera a través.
Tot el que importa és que anem a seguir endavant fins que sàpiga parar.
I saps que parar quan hi ha algun tipus d'indicació
que estàs en un terminador nul.
Sí.
Tan--
AUDIÈNCIA: [inaudible].
ANDI Peng: Sí.
Així en el cas de la comparació de cordes, jo realment no
tenir cura com moltes cartes tracti: Necessito comparar
si són veritables o falses si que són iguals entre si.
No m'importa com moltes cartes es troben en cada un d'ells, no?
Jo només m'importa que aquesta partits amb això i el
després dels partits i el de després partits tot el camí fins al final.
Oi?
Això té sentit?
>> Així que no m'importa com moltes cartes, Jo només m'importa que totes les lletres
partit.
Sí.
D'ACORD.
Puc passar d'això?
Gran.
Ens estem quedant una mica curt en temps, així que vaig a permetre que vostè acaba de
nois a veure breument en aquest.
Executar al seu ID de si vostès són curiosos.
I vostès poden veure el que això serà imprimint.
D'ACORD.
>> Així que una cosa que tindrem també toquem en un bit és la idea de l'aritmètica de punters.
La qual cosa, tot el que és, és en lloc d'ajustar
els valors del que s'emmagatzema en la direcció del punter,
és només realitat canviant la direcció de si mateix.
Així que si vostè com volies que és humà per ajustar el punter de forma manual,
la forma en què ho faries és només fer n vegades la mida del punter.
Oi?
>> Així que un int.
Un int-- quants bytes en la memòria és un int?
Són les quatre, no?
Així que si jo sé que tinc una gran varietat de tot sencers i ho vull perquè apunti a la
després, m'agradaria saber que jo només he de moure el punter cap avall quatre octets, oi?
I així n vegades la mida dels bytes de punter
és però molts bytes no ets més que va a moure el punter per.
>> Així, per exemple, si tenim una sèrie de sencers, el primer, anem a dir,
s'emmagatzema com 0x00.
Vostè sap que el següent va a estar a 0x04 perquè això és quatre bytes més tard.
I l'un després que va a ser 0x08 i així successivament i així successivament.
I així, nois, mirin.
>> Tot el que estem fent aquí és que disposa d'un punter i
i va afegir que al seu la memòria perquè pugui moure cap avall
els blocs de memòria assignats.
És una espècie de concepte de nivell superior.
Vostès no necessitaran saber per aquesta setmana,
però això és tot el que està fent allà.
D'ACORD.
>> En una altra ocasió broma.
Dues cadenes de peu en un bar.
Un diu, m'agradaria un rom i els valors d'escombraries de Coca-Cola.
L'altre diu, hauràs de disculpar el meu amic, ell no està acabada en nul.
Vostès ho aconsegueix.
Ho sento.
Així és com em mantinc anar quan em PREP per a la secció
és inserir unes diapositives parella broma.
De totes formes.
D'ACORD.
Abans de passar en-- així que, en essència, tenim
cobert tot el conceptual qüestions relacionades amb els punters.
I després anem a talk-- mòbil més, parlar sobre per què això és important
i com encaixa en el idea de la gestió de memòria.
Però abans de seguir endavant, ¿Algú té preguntes
sobre l'ús del punter, el que està passant quan crearà punters,
com són les referències de cada una altra, com es dereferencing?
Una pregunta sobre que abans de passar?
D'ACORD.
Gran.
>> Així que això ens porta a aquesta major concepte de nivell superior
de gestió de la memòria en el seu conjunt.
Per tant, bàsicament, en l'ordinador, hi ha
dos tipus bàsics de memòria o regions en què la memòria s'emmagatzema.
Vostè té aquí el que s'anomena el munt i tens aquí baix
el que crida l'pila.
I parlarem de la pila primer perquè és
el més finagley que quin tipus de conceptualment
entendre el que està passant.
>> Així que tota la pila és-- pensar com una pica de la memòria física
on es té un bloc de memòria això es van reservar per al seu programa
mentre s'està executant.
I aquí és on, en essència, tot de s'emmagatzemen les variables locals.
Així que això és només un zoom en la imatge d'aquesta pila.
La pila d'aquí baix, jo sóc simplement apropar una mica més.
>> Per tant, bàsicament, en una pila que té un munt de funcions en el seu programa.
Així que anem a tornar a la setmana dos exemples
on vam tenir la nostra funció principal així com una funció de cub
on tractem de crear una funció que cubed-- que va tenir paràmetres com a entrada,
tallada en glaçons ells i va tornar de tornada a principal.
Així que la forma en què això està emmagatzemat en la memòria és que vostè té la seva funció principal
aquí a la part inferior.
I després, amb cada funció addicional que cridi i afegir per sobre d'això,
la memòria simplement s'apila a la part superior.
Penseu en això com una pila física.
>> I pel que té tots vostès principal variables de les seves funcions principals,
tot el que està passant aquí, emmagatzema.
I després, quan vostè va cridar cub, va i es
crea còpies de tots aquells paràmetres i els emmagatzema
anteriorment en un lloc diferent.
I així, per què ens preocupem?
La raó per la qual ens importa és que no podem simplement utilitzar els paràmetres aquí-- les variables
aquí-- i canviar-los, esperem que també poden canviar aquí, oi?
>> La idea és que estan guardats en diferents llocs de la memòria
de manera que, quan s'està accedint diferent funcions, el que vostè pensa que està succeint
no està succeint realment, perquè el bits de memòria no estan interconnectats.
Per tant el dubte que realment important per a nosaltres entendre la classe de
És a dir, què passa si, quan ens estem quedant un programa, la mida d'una funció
apilar frame-- tan físicament, com la quantitat de memòria què hem de donar-li?
Potser és una funció gegant així que ha de donar-li aquesta quantitat de memòria.
Però si fos més petit que havíem necessitarà una miqueta.
>> Així que la idea és que quan ens estem quedant un programa la mida d'aquesta funció
depèn de quants variables i el tipus de variables
que volem donar-li.
Però i si el nombre de variables-- i llurs mides,
això no determinat perquè el codificador, però
es determina pel reial usuari del seu programa.
Així que si jo volia crear una funció que va tenir cordes de l'usuari,
però jo no sé realment què tan gran aquestes cadenes són, és difícil per a mi
assignar l'específica quantitat de memòria necessària.
Oi?
>> Perquè si aquesta function-- si Aquest usuari introdueix una cadena gegant,
que crearà un error del que es diu en essència
desbordament de pila on vagi més enllà de la límits de la memòria que vostè té.
I llavors, què fem?
Si no podem crear aquest gegant pila que pot salvar tot,
Què fem per resoldre aquest problema?
>> Així que seguirem endavant i parlar sobre aquest segon tipus de memòria
i llavors podrem parlar de com podem utilitzar els dos junts
per resoldre aquesta qüestió.
Així que ara anem a ascendir a una part diferent de la memòria
al nostre ordinador.
Això es diu el munt.
Així que tot el munt és una piscina memòria de què disposa
es pot assignar de forma dinàmica.
Així que això pot canviar, mentre que el programa s'està executant.
>> I així, una regió de memòria no utilitzada que pot
allowed-- ser que pot haver assignat amb la funció de
anomenada malloc, o l'assignació de memòria.
Per tant, bàsicament, quan s'està executant un programa,
pot crear dinàmicament la memòria de el munt i l'ús que de tot aquí.
I així llavors, totes les seves funcions aquí es pot accedir a la pila.
>> I així malloc, aquesta idea que David tipus de forma ràpida, breument passat per alt
en la conferència, és només una forma de vostè controli la seva memòria.
Igual que, quan estàs creant apilar funcions, quan ets a
que la seva funció principal amb les seves funcions aleatòries,
vostè pensa en ells com els nens que s'acaba es va escapar quan estava acabat amb ells.
Ells eren realment dolents fills.
Vostè els creu ensenyar alguna cosa,
i després quan vulgui accedir-hi de nou són
No hi ha perquè el seu memòria simplement va fugir.
>> Però malloc, o la pila, és una forma de tenir millors fills, on
pots espècie de crear ells, els assignen valors,
utilitzar ells-- que sonava realment bad-- usar-los, però, que volies,
però llavors ser capaç de controlar i després alliberar memòria
sempre que els necessiti.
Així que, quan hagi acabat amb la seva funció, els nens s'acostin de nou a vostè
i vostè encara ha de les dades allà.
>> Així que la forma en què malloc, o crear, la memòria és la funció void estrelles
mida malloc en bytes.
Així que això és només el prototip per què ho fem.
Així que un exemple és que vam crear un punter de tipus int-- iguals int estrella pointer--
mida malloc de int.
Així que la raó per la qual fem mida de i no només un number--
perquè tots sabem que 1 int és de quatre bytes,
dreta- però un int és només quatre bytes en certs sistemes operatius.
>> La idea per a nosaltres com programadors és que ens
voler crear codi que pot executar en tots els equips, no només
nostres ordinadors simples.
I per això ens agrada fer servir grandària i no només el número quatre.
¿Això té sentit per a tothom?
Així mida de-- tot, és un C funció o operador que
li indica quants bytes de memòria fa un cert tipus de variable prengui.
Així que en aquest cas, la mida d'un int és de quatre.
Quatre bytes.
I malloc va a alliberar 4 bytes en el munt,
llavors vostè pot utilitzar en el seu principal funció per a ser capaç d'emmagatzemar memòria.
És clar que fins al moment tothom?
Sí?
>> AUDIÈNCIA: Sóc clar, però només per estar més clear--
ANDI Peng: OK.
Totalment bé.
AUDIÈNCIA: --size d'es [inaudible] pot en realitat [inaudible]
i va a fer realment el El que nosaltres volem.
No és un pseudo-.
>> ANDI Peng: No.
>> AUDIÈNCIA: És com una cosa-- reals
>> ANDI Peng: Aquest és el codi real.
>> AUDIÈNCIA: --ens pot utilitzar-lo.
És real.
Fresc.
ANDI Peng: Mida de ve amb C.
AUDIÈNCIA: Això me fa la vida més feliç.
ANDI Peng: Sí.
Així que si ets un programador mandrós com quin tipus de sóc de vegades,
No m'agrada la memorització el que la mida d'un int
és, no m'agrada la memorització amb la mida d'un flotador és.
Grandària de tan sols li diu el que és i que és molt més fàcil.
>> Tot bé.
Així que una cosa important que vostès tots volem
a tenir en compte quan s'està usant malloc és que sempre
han de comprovar per veure si és nul.
Així com he dit, de nou a aquesta foto de la pila.
El munt és només aquest gegant pila de memòria que tens.
I vostè vol ser capaç de prendre trossos de la memòria d'ella i utilitzar-la, oi?
>> Però el que si vostè no té cap més memòria en aquest munt?
Què passa si jo ja he fet servir tot d'ella i tracte de malloc més?
Això no existeix.
Bé, això és per què estàs aconseguirà un error.
Esteu SEG culpa. Vas tenir una fallada de segmentació en el qual
tractar d'accedir a coses que no hi són.
I així, la forma en què fem això i la forma en què
evitar això és que vam comprovar per veure si nul·la del punter.
>> Així que si jo fos a malloc alguna cosa i jo no tenia més memòria,
que imprimiria un error perquè el punter retornat a tu és simplement nul·la.
I així, la forma en què fem esto-- això és només un gran disseny,
simplement memoritzar esto-- és que qualsevol vegada que intenti malloc res,
vostè va a necessitar comprovar per veure si és nul.
Perquè cada vegada que intenti obtenir memòria de la pila,
sempre cal fer Comprovar si hi ha memòria.
Això és tot el que és.
>> Així que més o menys aquests tres línies de codi, a aprendre de memòria.
Cada vegada que malloc, plop en.
Vostè va a necessitar.
Perquè jo garanteixo que anem a vostè provar en un cas i el seu equip
es va a explotar perquè ets va a tractar de memòria d'accés que és
no existeix i les coses van a accident i no serà bo.
Així que perforar que en el seu cervell.
Malloc, nul.
Bé.
Tot bé.
>> Llavors això engendra el qüestió del que succeeix
després que hàgim acabat amb aquesta memòria.
A causa de que tota la idea de tenir malloc era
que tenim aquest munt que podem prendre memòria des i llavors podem usar-lo.
Oi?
I llavors, què hem de recordar és que, després que hàgim acabat amb ella,
llavors podem alliberar-lo.
Deixa-ho anar.
Podem deixar-lo anar.
O si vostè també va a filtrar memòria i més coses dolentes succeiran.
>> Essencialment, cada vegada vostè està tocant la memòria,
coses dolentes succeiran si no fer les coses correctament.
Així que cal comprovar, en primer lloc, si vostè té la memòria disponible.
I després, després que hagi acabat, vostè vol alliberar-lo i permetre que el seu sistema operatiu
a prendre de nou.
Així que la forma en que fem que és només això funció, lliure de buits, i el punter
a aquest munt de memòria.
>> Així que l'exemple és punter gratuïta.
És bastant fàcil, simple, no vull oblidar-ho.
Per tal de comprovar per veure si és nul·la, lliure.
Cada un de bo?
Així que una vegada més, el codi que vostès pot prendre la classe de forma ràpida una mirada a.
Sé que és una gran quantitat de nova sintaxi i que està bé si ets com, ah,
¿Què significa això de nou?
No et preocupis.
Tot això estava destinat a ser que es presenten una acció, com totes aquestes coses
es poden utilitzar junts.
Així que això és posar junts com un grup del passat
diapositives ens vam anar a través d'en un sol programa.
AUDIÈNCIA: En certa manera que podem actually--
ANDI Peng: D'una manera que en realitat podem utilitzar.
Vostè podria plop que en el seu ID, es pot executar i que havia de funcionar.
AUDIÈNCIA: OK.
Així que això és real?
>> ANDI Peng: Això és real.
Sí.
Intento fer el que el fonts són diferents pel que
que sempre que escric reals codi de la font és un codi font
i que el meu codi de nota és diferent, però No sé si això funciona realment.
AUDIÈNCIA: No.
Penso que--
>> ANDI Peng: OK.
>> AUDIÈNCIA: --sometimes [Inaudible] i estic
com, això seria molt bonic si era realment una cosa útil
però llavors no és una cosa útil.
M'agrada que això és una cosa útil.
>> ANDI Peng: OK.
Sí.
Vaig a passar això junt.
Sé com, David, els nens són molt trist quan s'escriu codi fals.
Tot bé.
Sí?
>> AUDIÈNCIA: Llavors els ptr aquí No és en realitat un punter,
és un bloc de memòria?
>> ANDI Peng: Així que estàs parlant la primera línia o el que ací baix?
Estàs parlant d'aquest d'aquí?
>> AUDIÈNCIA: El NAD és de coses diferents en--
>> ANDI Peng: Bé, pel que fins aquí el que estic doing-- realitat,
anem a passar per aquí.
Aquest tipus de vincles a molt bé tots els conceptes.
Així que aquí tenim ptr int estrelles.
Així int punter, que és on en realitat estem creant
un punter que apunta a un sencer.
Bé, va apuntar a un sencer.
I anem a malloc, o donar-li, suficient memòria assignada
per emmagatzemar un nombre sencer.
Així que quatre octets en aquest cas.
>> I llavors si que és igual als iguals null-- és igual null-- anem a imprimir.
Oh, tens un error perquè vostè està fora de la memòria, no?
En cas contrari el retorn, que simplement li diu al seu programa
que tens un error.
I després si ho fa tenir aquesta memòria, que és
va a emmagatzemar ho aconsegueix int li dóna a la ubicació
i establir-ho com el valor del punter.
Així que en realitat va a esborrar físicament aquest valor
i posar ho aconsegueix int devolucions.
I després vas a imprimir tot el que van entrar.
>> AUDIÈNCIA: ¿I això és va a estar a l'munt?
>> ANDI Peng: Això va per estar en el munt.
>> AUDIÈNCIA: I perquè serà accessible.
ANDI Peng: Exactament.
Niça.
Bé.
>> AUDIÈNCIA: Així que quan ens alliberem ptr en aquest pas final, estem alliberant el punter
o estem alliberant el bloc?
ANDI Peng: Sí.
Així que estem alliberant a l'pointer-- així, alliberant al bloc de memòria.
Així que l'única manera en què podem igualar l'accés la memòria és per tenir el punter.
Si vostè no té el punter, ets com, oh, no sé on és,
Oi?
Així que si t'alliberes, estàs essencialment alliberant tot aquest bloc.
Llavors l'equip sap, oh, no hi ha res útil aquí,
Jo només puc posar les escombraries els valors de nou en ella de nou.
>> AUDIÈNCIA: Llavors existeixen nombres enters al respecte?
>> ANDI Peng: Existeixen els nombres enters?
Ho sento.
Es pot reformular la seva pregunta?
AUDIÈNCIA: vaig voler dir, després d'alliberar el punter, el sencer que s'obté,
caldrà encara existeixen?
>> ANDI Peng: No, no ho farà.
O almenys que va existir en la seva la memòria abans que el seu ordinador fa
el que sigui amb ell, però hi ha no hi ha manera per tu per aconseguir això.
Perquè alliberat el punter.
Vostè no sap on és més.
Sí.
>> Vaig a passar aquí.
Uf.
Així que estem a través d'una gran quantitat del conceptual dificultats de gestió de memòria
i només anem per passar essencialment
5, 10 minuts que van sobre les coses de sintaxi que
serà utilitzable i útil per a vostès, però res massa conceptualment per aquí.
D'ACORD.
>> Així que estem canviant completament engranatges aquí.
Gestió de la memòria, difícil. Punters, difícil. Sí.
És molt, molt difícil.
Totalment bé.
És per això que la seva peça és serà molt dur.
Però si vas i fas les coses que estem
suposa que ha de fer, fer que les coses són nuls,
vos de comprovar si les coses són null, assegureu-vos de memòria lliure,
fan que les coses no són fuites, podràs bona.
Se li ha establert.
Tot bé.
Així que anem a entrar en aquest completament nou concepte de redirecció.
I així, fins ara, la principal via que hem
estat interactuant amb el nostre programes és a través de l'entrada estàndard
i la sortida estàndard.
Oi?
Nosaltres, com l'entrada de l'usuari les coses i l'equip
escup de nou a nosaltres a la terminal.
>> Però hi ha una altra formes perquè puguem interactuar
amb l'ordinador amb el nostre programes que no són només jo
coses físicament mecanografia quan estic em demana.
I la forma en que fem que és a través de la major de pastanaga
i el símbol de canalització.
Així també podem llegir i escriure en arxius usant això.
>> Així que la forma en què fem això és el superior a la pastanaga, tot el que està fent
està escrivint el que la seva arxiu té un arxiu separat.
Així, per exemple, si volia córrer hola món
i volia que la sortida guardar en un altre arxiu
i no només imprimeix a mi, pot simplement fer més gran que la pastanaga,
output.txt.
Així que tot el que està fent és prendre meu programa hello.world,
i qualsevol que sigui la sortida és, és estalviar en un arxiu anomenat output.txt.
Així que la forma en què David va fer el .csv amb els noms dels estudiants,
que és el mateix que vostès poden fer.
>> I el que és especialment útil en aquest cas són el major
no sigui: els dos més gran que la pastanaga signes que es pot annexar a una sortida
arxiu, el que significa que vostè simplement pot afegir en la part superior de la mateixa.
Vostè pot simplement seguir afegint a output.txt de cada cosa addicional
que vostè està fent.
O, si vostè comença a rebre a més programes complicats, els dos més
que la pastanaga, que només impressions els missatges d'error.
Així que vostè té un gegant quantitat de missatges d'error
i vols llegir a través de tots ells i que
no vull haver de desplaçar a través del seu terminal,
vostè pot fer realitat més gran que output.txt
i que va a estalviar tots els seus errors
en un arxiu anomenat output.txt que vostè pot anar a través i llegir.
AUDIÈNCIA: On es guarda l'arxiu de text?
ANDI Peng: Es guarda a la mateixa directori que el seu programa és.
Així que vostè acaba d'anar enrere i mirar per ella.
I el mateix que nosaltres pot fer per entrada és
que en realitat podem tenir el contingut d'algun arxiu
i ens pot introduir això en el nostre programa.
Així que en lloc d'haver de fer-ho d'ordres arguments de la línia d'on físicament
ha d'escriure coses cada vegada, vostè
en realitat només hi ha un fitxer anomenat input.txt que així ho posa tot a.
>> I després canonada és especialment bo perquè que pot prendre la sortida d'un programa de
i utilitzar-lo com entrada d'un altre programa.
Així per exemple, en Vigenère seus nois, existeix aquesta línia de codi que ha
nois estan executant que potser potser realment no sabia el que era doing--
aquest ./generate 1.000 canonada ./42.
Oi?
>> Així que tot el que està fent, si només fer una ullada a aquest pas a pas,
el ./generate, això vol dir que sóc córrer el meu programa genera.
Que s'està portant en 1000 en la seva entrada.
Així que vull per generar 1.000 a l'atzar nombres i vaig a la canonada que--
o vaig a utilitzar que-- sortida com a entrada per al meu programa anomenat troballa.
I jo vaig a tractar de trobar 42 de els números generats a partir dels 1.000
nombres.
Té aquesta línia de codi fa sentit a tots els altres?
>> Així que d'aquesta manera estem estalviant nosaltres un munt de passos.
Nosaltres no hem de córrer a generar, desar l'arxiu i després el posen en la troballa.
Només podem fer-ho tot en una sola línia.
Així que el que generen és la sortida, plop coses bé de nou a trobar.
Sí?
>> AUDIÈNCIA: I en termes d'ordres arguments de la línia, és això-- això és
tres arguments de la línia d'ordres?
És generar, find-- no, four-- generar, 1000, trobar i 42?
O és ell--
ANDI Peng: Així que la canonada en realitat no comptar com un argument de línia d'ordres
perquè el compilador o el Terminal sap que la canonada,
oh, jo sé que he de mirar abans la canonada, perquè aquest és el meu sortida
i he de vetllar pel canonada perquè aquest és el meu entrada.
Pel que sap el que-- ./generate i 1000,
aquests són dos de comandament llavors els arguments només per al primer programa.
I llavors el ./find 42 són dos d'ordres arguments de la línia per al segon programa.
Sí.
Tothom bo en això?
>> Així que molt ràpid, què fer aquestes tres línies de codi fan?
Bastant simple.
Algú em vol dir el que fa la primera línia?
AUDIÈNCIA: [inaudible].
>> ANDI Peng: Penseu en això com sol-- ¿Què fa el major de la pastanaga?
>> AUDIÈNCIA: Posa una mica en la següent línia.
ANDI Peng: Llavors, què és el contrari d'això?
AUDIÈNCIA: Posa la següent cosa en el primer.
ANDI Peng: Sí.
Així que tot el que està fent és que ets l'execució d'un programa de .hello--
s'està executant un programa anomenat hola.
Vas a donar-li una entrada anomenada input.txt.
Oi?
A causa de que pensi en això com just anar físicament a saludar.
I després vas a guardar el sortida en un arxiu anomenat output.txt.
Què hi ha de la segona línia?
Vols dir-me què la segona línia fa?
AUDIÈNCIA: [inaudible].
ANDI Peng: Ho sento.
Digues-ho de nou.
Elliot.
>> AUDIÈNCIA: Pel que posa un llista de nombres en la troballa.
>> ANDI Peng: Sí.
Així que trobar, recorda, en Per executar trobar-te
necessita saber on vostè està buscant.
I així tot el que està fent aquí és que se li està donant
1 preassignat conjunt de nombres, llavors va a trobar
per buscar-hi per al nombre de 42.
I després 15.
Recordin, vostès van córrer aquest quan es prova el seu codi.
Comprens ara el que estava fent?
>> AUDIÈNCIA: És posar en el conjunt d'instruccions
per [inaudible] a través d'una de tres per 3 per obtenir ell-- per guanyar el joc.
>> ANDI Peng: Sí.
>> AUDIÈNCIA: S'introdueix els instruccions en el programa.
>> ANDI Peng: Més o menys.
Així que el CS50 accent. / Pset3 / 3x3, tot el que estava fent era que vam crear un text
arxiu que tenia tot el títols llestos per a vostès.
I així, per al seu joc per jugar, que sol-- només cal posar això al seu programa.
Així que havíem creat aquest tauler i llavors estem
posar aquesta placa en el seu programa que va córrer i creat un mosaic de cada tres
per tres.
Això és tot el que estava fent.
>> I el que no era en realitat la màgia passant darrere de les escenes
que vostès no ho van fer programa que programem.
Però ara vostès entenen per què ho vam fer així que està tot bé.
Tot bé.
>> Així, mentre la redirecció és una molt útil, C té un mecanisme general
per a lectura i escriptura arxius del seu propi.
Res conceptualment difícil aquí, així que estic
només va a anar a través de molt, molt ràpid.
Tot el que és és una mica de memorització i assegurar-se que els nois
són sintàcticament usar-lo correctament.
La forma en què ens agradaria fer que sigui crear una referència a l'arxiu,
ens agradaria obrir l'arxiu, i després faria tota la lectura i l'escriptura
i tanqueu el fitxer.
Quan cosa que vostès vulgui tenir en compte és
que en fer això, perquè estem tancant i obrint els arxius,
tots aquests ordres estan inclosos al standard-- l'estàndard d'E / S
biblioteca.
Així que assegureu-vos sempre que estigui fent això que has included--
# Included-- estàndard d'E / S de punts h.
>> Tan real ràpidament.
El primer pas, que desitja crear una referència a aquest arxiu.
I ara que hem punters acabat, nois em poden dir el que aquesta línia de codi
està fent.
Oi?
Tot el que s'està fent és crear un punter nom de fitxer del tipus de fitxer.
Perquè vostè sap que va perquè apunti a un arxiu i ja està
va a obrir el fitxer.
Llavors vostè és f open-- tot el que fa és obrir l'arxiu.
>> Aquest és el nom de l'arxiu.
I hi ha tres coses que vostè pot fer.
Vostè pot llegir, escriure o annexar.
Més en general, nois es llegir o escriure
perquè vostè està bé serà introduir un arxiu o la sortida d'un.
Així que més o menys r i w són els dos coses que van a utilitzar més.
>> Així que en aquest cas, l'únic que he fet és crear un punter a un arxiu anomenat arxiu.
Estic obrir-lo i estic reading-- estic obrir aquest fitxer anomenat fitxer.txt
i ho estic llegint.
Això és tot el que estic fent en aquest moment.
I llavors aquests són només funciona en que es pot llegir coses diferents
o escriure coses diferents o saltar a diferents llocs
en la qual desitja cercar.
Tots aquests són en línia.
Tot això pot simplement Google.
No hi ha necessitat de memoritzar-les.
Ells hi són, un sol ús per al seu ús
si vol ser capaç d'utilitzar-les.
>> Així que si jo volia acaba de llegir en un caràcter alhora,
Jo faria arxiu fgetc.
O si volia llegir en una línia de text alhora, ho faria fgets.
I així successivament i així successivament.
Tot això només ho fan diferent el que vostès poden utilitzar.
>> I després, finalment, després que jo sóc acabat de llegir o escriure,
Jo només vaig a fclose aquest arxiu.
I recordi, aquest és un dels que, recordeu, si us plau
fer això o en cas contrari el seu arxiu no va a treballar.
Sempre obrir un arxiu abans la lectura o la lectura,
vostè ha de sempre tancar si l'obres.
El mateix amb la memòria, no?
Vostè ha de prendre sempre memòria i alliberar-la.
Aquí vostè ha d'obrir sempre una presentar abans d'intentar llegir-lo
i sempre cal tancar després d'obrir-lo.
>> Així que això és també en línia.
Vaig a desafiar els nois tipus d'escriure un programa que imprimeix
hello.world en un arxiu.
És molt simple.
És essencialment només implica les poques línies de codi
que eren simplement escrit prèviament.
Vas a posar-los junts i escriure això.
>> Així que algunes coses importants a tenir en compte mentre que vostès estan tractant d'utilitzar aquest.
Si tot això és molt útil per a la seva conjunt de processadors d'aquesta setmana,
és que fopen crea un punter d'arxiu.
No és en realitat l'arxiu físic.
Tot el que està apuntant a la el fitxer que voleu obrir.
I tu ets en essència, sempre vostè està utilitzant qualsevol de les altres funcions
com fread o fwrite o fgetc o fgets, és
que està de pas per aquesta Punter a totes aquestes funcions.
Així que vostè no està prenent en realitat que presentar i usar-lo per a les seves funcions,
vostè està prenent el punter i posar-lo a aquestes funcions
de manera que vostè pot utilitzar.
>> I si vostè s'oblida de tancar el seu arxiu després d'usar-lo,
el programa va a perdre memòria.
Essencialment, tot el que significa és que les coses dolentes succeiran
i el programa ho farà no funcioni correctament.
I així, en el conjunt de processadors en Al principi, crec que
hi ha un curt en què explained-- Nate explained-- quin era Valgrind.
Tot Valgrind és és una manera perquè vostè assegureu-vos que vostè no està perdent memòria.
Així que vostès volen fer Segur que veure aquest curt
perquè això ho explica tot molt bé el que passa.
D'ACORD.
Així que em vaig anar a través d'aquesta realitat, molt ràpid perquè realment
vol arribar a parlar de el conjunt de processadors abans que vostès se'n van.
Algú té preguntes conceptualment?
Parcialment tot això és la sintaxi només que que pot utilitzar per llegir o escriure arxius.
>> Finalment, de tots favorit.
Anem a parlar sobre el conjunt de processadors ara.
Així, a mà alçada, quants de vostès llegeixen l'especificació aquesta setmana?
Oh, això és mitjà.
Això és bó.
Així que això és realment un molt, molt divertit conjunt de processadors en el sentit
que se sent com un detectiu perquè ets
fent totes aquestes coses molt interessants que vostè no sabia que vostè podria fer
però ara és molt cool que pot fer-les.
I és en realitat molt senzill del que vostès pensen.
>> Així les meitats bàsiques de aquest programa és que ets
va descarregar el codi font o codi de distribució escrit per nosaltres.
I vas a tenir una carpeta anomenada BMP i una altra carpeta
anomenada JPG.
Dins del seu BMP, ets va a tenir tres programes.
Un d'ells ja està escrit per a vostè.
Així copy.c és un programa que ja hem escrit
per a tu que vols descarregar.
Tot el que fa és prendre com a entrada una imatge i fa una còpia del mateix com a sortida.
Això és tot el que l'arxiu està fent.
>> Però el que vol fer per whodunit-- així que com molts de vostès
nois recorden en cinquè grau o maybe-- estàs younger-- potser el tercer grau,
quan vostès tenien missatges secrets i calia posar un tros de paper sobre ella
per descodificar el missatge?
Sí?
Així que això és tot el que estem fent excepte que aquesta vegada d'un ordinador.
Així que li hem donat a aquesta imatge encantadora.
No es veu com res però per sota
és una pista que va a ajudar amb respondre a la pregunta li demanem.
>> En essència el que vols de fer és introduir aquest arxiu,
ajustar algunes coses, potser ajustar els colors,
canviar les coses, de manera que tot el que el missatge és pot venir a través.
Així que a l'interior s'amaguen i informació píxels
que si vostè escriu el seu codi correctament va a descodificar i li dirà
el que aquesta pista és.
I així alguns consells útils sobre com que aniries a l'apropar-se a aquest.
>> De debò vols familiaritzar a tu mateix amb l'arxiu d'E / S
perquè estem llegint arxius i escriure en arxius.
Oi?
I així, cada vegada que fem que, que implica
File I / O. Vas a han de familiaritzar-
amb, com obrir arxius d'imatges?
Com s'escriu als arxius com imatges?
Com ho fas totes aquestes coses?
Això serà realment útil.
>> En segon lloc, com estàs serà capaç de canviar
els colors d'aclarir aquesta foto?
Probablement va implicar ajustant les seves píxels o els seus valors RGB
en algun lloc d'aquí, en essència.
No hi ha forma de dret de la solució d'aquest, sempre que
can-- com el temps que puguis tipus de ajustar els píxels perquè sigui
semblar-se a una cosa que t'importa.
Això és l'únic que ens importa també.
Així que hi ha moltes maneres de fer això.
Només jugar una estona amb ell fins vostè aconsegueix una cosa que funciona.
I seria molt Em va sorprendre el poques línies de codi
que ha de fer realitat això.
Estic parlant com de tres línies de codi totals
que vostè necessita per escriure per tal de fer això.
Així que si vostè es troba escriptura 40, 30 línies de codi,
probablement estàs fent malament.
Tot el que has de fer és tipus de jugar amb els colors
i veure com això funciona.
>> Així que ens dirigim cap a una mica per més dur d'un problema.
Aquí tenim redimensionar on li estem demanant
A-- li estem donant com a entrada una imatge i el redimensionament
aquesta imatge en alguna cosa més gran o alguna cosa més petit
depenent de les dimensions que li donem.
Així que recorda, en conferència que David ràpidament
va mirar sobre com la informació és detectat pels equips
en el sentit que és un tipus d'arxiu.
Així que un arxiu de Word té especial personatges davant d'aquest
digui-li al seu equip que és un arxiu de Word.
El mateix amb un arxiu JPEG.
En aquest cas anem per donar-li un arxiu JPEG.
Tot el que sabem és que JPEG arxiu és una imatge, oi?
Però els distingeix informàtics en formes molt específiques.
Així que al principi de qualsevol arxiu JPEG, ets
va a tenir el que es diu el mapa de bits informació de capçalera i la capçalera de l'arxiu de mapa de bits.
Tots els que són són diferents peces de dades
que compten seu ordinador, hey, escoltin, 1 JPEG pujant
i aquestes són les dimensions o característiques d'aquest JPEG.
>> Així que vostès realment volen saber quin tipus d'informació s'emmagatzema a l'interior
d'aquests capçaleres i ¿Quin és la mida dels mateixos.
Perquè quan s'està executant a través del seu programa,
vostè va a voler saltar sobre aquesta quantitat.
Oi?
A causa de que no t'importa sobre com modificar la capçalera,
vostè es preocupa sobre com modificar el que està després.
Oi?
Així que assegureu-vos que vostès saben el gran que són aquestes coses.
>> En segon lloc, abans de començar tractant de canviar la mida de la seva imatge,
vostè està probablement va voler guardar les dimensions de l'original.
Oi?
Perquè si jo dic que aquesta imatge és de 100 píxels per 100 píxels,
i vull que vostè faci quatre vegades més grans,
vostè sap que vostè ha de multiplicar aquestes dimensions per quatre.
Així llavors vostè vol un fitxer de sortida 400 per 400 píxels, per exemple.
Així que és realment útil per a vostès a guardar les dimensions de l'original.
I a continuació, després, després de hagi finalitzat el canvi de mida,
vostè pot escriure noves capçaleres amb aquestes noves dimensions després de canviar la mida.
>> I la forma en què físicament pot crear en grans píxels
és que es pot escriure nova RGB-- recordi, RGB,
tot el que significa és de color vermell, verd, i els píxels blue-- a un arxiu de sortida.
I vas a voler tenir diferents quantitats del que
que anomenem farcit.
Tots és de farciment són espais fotos abans i després
que compten tu-- essencialment que digui-li a la seva imatge el gran que
hauria de prendre cap amunt.
Això és molt abstracte per a una gran quantitat de si vostè no ha llegit l'especificació conjunt de processadors,
però serà molt útil per quan
en realitat estàs llegint a través d'ell.
Ets com, oh, sí, això té sentit.
Per què he de fer això?
Té sentit.
>> Finalment, aquest és probablement un els programes més frustrants
Alguna vegada només perquè no es pot dir si està funcionant o no.
Tot aquest programa, es recuperen, és fent és que, si s'executa correctament,
ha de ser capaç de sobte recuperar 50 imatges que
es van perdre en el nostre disc dur.
I així, el problema amb aquest programa és que realment no es pot provar que
perquè o et vas recobrar ells o no.
I perquè tipus de sol ha de jugar una estona amb ell,
i si el seu programa és funciona correctament, podràs
de sobte veure que en seu directori tens
té una quantitat enorme de imatges que són ara.
>> Llavors, com aniria aquest problema és que estem
et va a donar el que és anomenat arxiu card.raw.
En essència, això és només un arxiu danyat
amb totes les fotos que emmagatzemen vostè va a necessitar per recuperar-se.
Així que vostè està probablement va voler per introduir el seu card.raw, o obert,
el seu arxiu card.raw i ja està voldrà manipular
que sigui capaç d'emmagatzemar arxius JPEG.
>> Així que m'agradaria començar pel seguiment i emmagatzematge cada JPEG individual com vostè ho troba.
No va a totes diferents Tot d'una, només cal crear els 50 JPEG.
Vostè va a voler mantenir un registre de quants vostè està obrint.
I llavors vostè vol assegurar-se, quan estàs
al gravar en una buffer-- vostès sabrà el que estic parlant
una vegada que llegeixi el spec-- desitja assegureu-vos que vostè està utilitzant un sense signar
char buffer.
>> I a continuació, desitja sol·licitar a tu mateix la pregunta de,
quants bytes es troben en una CF-- estan en un arxiu de la targeta?
Aquesta és la quantitat que va a voler llegir en el seu memòria intermèdia.
Vostè va a voler assegurar- els dos align perquè llavors
no tindrà memòria aleatòria escapament.
Vostè sap exactament quants bytes que necessita i quants
bytes que volem que tinguin.
>> I, finalment, que vols utilitzar una funció anomenada sprint--
s d'impressió F-- per generar arxiu personalitzat noms per a cada nou JPEG que vostè trobi.
Per tal de crear i trobar arxius JPEG a la targeta,
vostè va a voler emmagatzemar-los i anomenar-los.
Oi?
I pel que anem a que vulgueu utilitzar aquesta funció
per crear els noms que pot emmagatzemar tots els seus arxius JPEG.
>> I finalment, no us oblideu de tancar cada JPEG després que hagi acabat.
Perquè el que ets farem és que ets
va a tenir, probablement, algun tipus d'un bucle que
itera a través de tots els seus arxius JPEG.
Has de redactar un arxiu JPEG i reanomenar-lo com vostè ho troba.
Però després d'haver acabat amb tots els formats JPEG,
que necessita per tancar perquè pugui començar una vegada i passar a la següent imatge.
I així, una cosa que és molt divertit que ens agrada fer,
perquè es tracta de fixar un problema tan estrany sinó també un problema estranyament satisfactori
conjunt, és que totes les fotos que tenir per a vostè, si vostè es recupera adequadament,
totes les imatges són imatges de seu professorat meravellós, tant
de Harvard, en aquí-- i aquí a Yale.
I si per casualitat recuperar totes aquestes fotos
i identificar el personal membres en aquestes targetes,
i prendre selfies amb nosaltres si ens ha trobat al campus,
per cada foto que es sotmeten a nosaltres, anem a donar-li un gigabyte d'espai de Dropbox.
>> Així que anem a fer els càlculs aquí.
Si hi ha 50 fotografies i 50 membres del personal docent,
si per casualitat vostè troba els 50 de nosaltres, això és 50 gigabytes de Dropbox,
Bàsicament, estarem vostè donant nois.
Així que alguns incentius extra afegit si vostès no es va limitar a
preocupar-se per recuperar imatges perdudes.
També hi ha alguns incentius addicionals.
És un conjunt de problemes divertit.
Realment ho és.
És una mica frustrant, però llavors es torna molt divertit quan te n'adones,
wow, està funcionant i ara tenir totes aquestes fotos
que acabo creat per mi mateix.
>> Teniu alguna pregunta sobre el conjunt de processadors?
Per a qualsevol persona que ja està començat, si vostè té preguntes,
Vaig a ser aquí per un parell de minuts després secció si vols parlar amb mi.
Ben fet, nois.
Ho sento, jo informació objecte de dúmping en vosaltres.
Els punters són molt, molt difícil i frustrant.
>> I estic molt content que vostès es va quedar amb mi.
Parlarem més en profunditat sobre la setmana que
a mesura que vam començar fent taules hash i més funcions que els involucren.
Sí.
Així que si algú té alguna preguntes, estaré voltant.
Gràcies per venir i prendre més dolços perquè hi ha més dolços.
Fresc.