Tip:
Highlight text to annotate it
X
>> ALTAVEU 1: Hola a tots.
Anem a començar.
Crec que la gent encara va per ser filtrat polz
No obstant això, en nom del temps, pel que podem aconseguir nois d'aquí a temps,
anem a començar.
Així que benvinguts a la CS50 Qüestionari 0 crítica.
Per a aquells de vostès que no s'han adonat però, vostè té una pregunta per al Dimecres.
Woo-Hoo.
>> Si no ha començat a estudiar amb tot o No s'han adonat que això existeix, però,
concursos anteriors i tota la informació sobre el seu concurs estan en cs50.net/quizzes.
Hi ha una mica de coses molt bones allà, concursos passats dels últims 10
anys, així com la informació sobre aquesta prova i temes
que seran coberts.
Així que anem a començar.
>> Així que vostès podran recordar, la primera dia de classe David tenia aquestes llums en.
Així que, essencialment, tot el que passa sota el capó d'un ordinador és
fet en binari.
Binary significa el que sona com, de 0 i 1.
Té dos valors que pot ser representada.
>> Així que igual que en el primer dia de la secció quan David va encendre una llum
bombeta per representar encesa, o 1, el nostre equip entén binari com 0 i de
1 de, encès o apagat.
Fonaments de la binària.
Cada lloc està representat en base dues.
Així s'agrega 2 a 0 al 1 al 2 de tot el camí cap amunt.
>> Per calcular el que el seu binari és decimal, només has de seguir aquesta equació
escrigui alguna cosa.
Si vostè té un 1 en qualsevol d'aquests llocs, el multipliques per qualsevol
fonamentar que es troba, afegir cap amunt, i a obtenir el decimal.
Així que aquesta és la forma d'explicar a 5 en binari.
Igual que el que estàvem fent en el última diapositiva, així és com ho faria
representar 1 a 5.
>> De la mateixa manera, igual que vostè pot afegir i restar en decimal o base 10, o
Realment qualsevol base, pot afegir el i resta en binari.
Exactament el que cal esperar quan afegir els dos a dalt, si és igual a major
que 1, vostè porta un 1, el converteixen en un 0, i fer l'addició d'aquesta manera, només
com era d'esperar amb regularitat decimal o qualsevol altra base.
Genial.
>> Així que com he dit abans, tot el que que passa sota el capó del nostre ordinador
que es fa en de 0 i 1 d'o binari.
Llavors, com ens expressem, per exemple, lletres o números, o caràcters?
I la resposta a això és ASCII.
>> ASCII és un mapatge entre caràcters que normalment veuríem al
Anglès com a doctors, B, De C, subratllen, guions i
res d'això.
I és que mapeja a un valor ASCII.
Un valor ASCII és només un nombre que pot ser entès per l'ordinador.
I igual que pot fer la suma i resta amb nombres, es pot fer
amb valors ASCII.
>> Així que en aquest exemple, el que serà aquesta imprimir?
Sí, de manera que només un espai espai espai B C D. On és el meu ratolí?
Tingueu en compte que pot definir un int en 65.
I en imprimir que utilitzant cent C, que interpretarà això com un
caràcter i imprimirà A.
>> De la mateixa manera, es pot declarar com un char.
I quan ho imprimeixi utilitzant per cent C, que interpretarà que, com
cent D. I igual que es pot afegir un nombre, pot afegir caràcters són
Valors ASCII, en aquest cas.
>> Així que un punter poc per a tothom.
5, com una cadena, no en realitat igual a 5.
Llavors, com podríem convertir l' cadena 5 al sencer més 5?
Alguna idea?
Sí
>> Així que si tenim 5 com a una cadena, podem restar 0.
I això ens donarà 5.
I de la mateixa manera, si tenim 5 com a sencer, afegir que a la cadena de 0.
I això ens dóna la cadena 5.
Genial.
>> Ara, recordar de nou a fer una conferència un on parlem d'algorismes.
Llavors, com és el que realment volem un ordinador per fer coses interessants?
Ja saps, només sumar i restar números i d'impressió de les coses fora no és
que emocionant.
En general, volem que el nostre ordinador per realitzar algun tipus d'algorisme.
Cosa una mica més complex que només l'aritmètica simple.
>> Un algorisme és només un pas a pas conjunt d'instruccions de com realitzar
una tasca determinada -
igual que una recepta.
Potser recordi el primer dia de classe on David havia explicar-nos una habitació
de les persones i la quantitat de persones estaven a l'habitació.
Vostè pot ser utilitzat per al recompte un per un.
1, 2, 3, 4.
En aquest cas, un algorisme de temps lineal.
>> Però David va introduir un algoritme per que expliquis a la gent a l'habitació
on tothom es posa dret, ha dit que es nombre a una altra persona, afegir que
nombre, i una persona se senti.
I repeteixes això.
Això és un tipus d'algorisme.
Podem analitzar el grau d'eficiència d'un algorisme es basa en que és temps d'execució.
Però anem a parlar una mica més sobre això més endavant.
>> Així que tots els algoritmes també pot escriure en pseudocodi.
Pseudocodi és només un anglès com sintaxi utilitzada per representar
un llenguatge de programació.
Per exemple, si volguéssim demanar a un usuari endevinar el meu número favorit, ens
podria tenir pseudocodi com a tal.
>> Obtenir un usuaris d'endevinar.
Si la suposició és correcta, digui'ls si és correcta, en cas contrari els dic
que no són correctes.
I pseudocodi és una manera de fàcil en representació d'una idea o un algoritme.
Així que ara el que es vol realment escriure això en el llenguatge que l'ordinador
podria entendre.
Així podríem escriure el nostre pseudocodi i interpretar que en el codi font.
>> Fins ara, el codi font ha de complir a una certa sintaxi
un llenguatge de programació.
I fins ara, en el CS50, hem estat utilitzant majoritàriament c.
Així que aquest podria ser el codi font de c.
Més ***, en el curs, s'arriba la nit en contacte amb una altra programació
llenguatges com PHP.
O si vostè fins i tot prendre altres classes, vostè podria fer Java, Python, o fins i tot OCML.
Però en el nostre llenguatge de programació C, és a dir com podríem escriure el codi font de
l'algorisme de pseudocodi que Que acabo de descriure anteriorment.
>> Llavors, com fa l'equip en realitat entendre això?
Com he dit abans, és realment només entén zeros i uns.
Llavors, com arribar de la font codi per a alguna cosa que pot ser
Entesos?
Bé, tenim alguna cosa anomenat un compilador.
>> Si vostè recorda de nou en la major part del seu conjunts de processadors, que tenia algun tipus de programa
escrit en un arxiu de punt c.
I llavors hauria d'escriure make.
Llavors, què es fa fent?
>> Pot escriure make per compilar el programa perquè algú -
qui va escriure el seu conjunt de p; Probablement David -
creat un fitxer make.
I això li diu a make saber per fer funcionar la seva compilador, anomenat so metàl · lic, que la voluntat
a continuació, compilar el codi font per tal de codi, que és zeros i uns
que l'ordinador entén.
Però una mica més ***, ens dirigirem més a fons sobre els compiladors.
>> Així recordar PSET 0, on - si, vostè té una pregunta?
>> AUDIÈNCIA: [inaudible]?
>> ALTAVEU 1: Si.
Crec que en realitat ha d'estar en línia.
Sí
>> AUDIÈNCIA: És com [inaudible]?
>> ALTAVEU 1: No ho és.
La estan en cs50.net/quizzes.
>> AUDIÈNCIA: Raya vertical concursos, barra 2013, slash 0 i, només cal fer clic a través de
concursos 2013 i concurs 0, Reviseu la secció diapositives.
>> ALTAVEU 1: Sí, així que si vostès volen tiri cap amunt i mirar el seu
propi ordinador, que està molt bé també.
Digues-ho de nou.
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Sí, [inaudible] és la variable dummy.
Ah, sí?
>> AUDIÈNCIA: [inaudible]?
>> ALTAVEU 1: No, vagues no estan en l'examen.
Ho sentim, la pregunta era, va ser vagues en l'examen.
I no ho és.
Així PSET 0, vostès han de tenir tota implementat alguna cosa amb zero.
I vam aprendre una mica de programació bàsica blocs de construcció usant el principi.
>> Així que donem una ullada a alguns d'aquests blocs de construcció
que componen un programa.
En primer lloc és l'expressió booleana.
Les expressions booleanes són estimats i 0 d'o tot el que tingui
dos valors possibles.
En aquest cas, vertadera o falsa, dins o fora, i si o no.
Un exemple d'un simple, molt simple, programa que utilitza un booleà
expressió aquí.
>> Així que per expressions booleanes per ser útil, tenim operadors booleans.
Aquests són els operadors que es poden utilitzar comparar certs valors.
Així que tenim i o no igual, menor que o igual a, més gran que o
igual a, i menys de o major que.
No obstant això, aquests operadors no són molt útils llevat que puguem combinar-los en
condicions.
>> Així que vostès podrien recordar a partir de zero i des del seu p estableix que
tenia condicions.
Són, en essència, com tenidors de la lògica del seu programa que
executa depenent de si es compleix una condició.
Així que una de les condicions que vam tenir utilitzat moltes vegades en aquest curs és el
if, else, si les condicions, i altres.
>> Heus aquí un exemple de com vostè pot utilitzar això.
Algú sap la diferència entre simplement utilitzant les sentències if tots
el camí cap avall versos if, else, si, i una altra combinada?
Sí?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Exactament.
Així que si jo tingués, si fins al fons d'aquest manera, encara que aquesta condició torna
veritat, encara continuarà provar els dos següents.
Atès que, amb un else-if, else declaració, si el que retorna true,
els altres no es posen a prova.
Una pregunta sobre això?
Genial.
>> Així que utilitza una persona si d'una cosa declaració si vostè sap que només pot
ser un d'aquests casos.
Així que sabem que si x és menor que 0, és definitivament no serà
més gran que 0.
>> A continuació, un altre bloc de construcció que hem après són els bucles.
Tenim tres tipus de bucles.
Per bucles, els bucles while, i fer bucles while.
I, en general, quan vostè se senti a escriure alguna cosa, vostè ha de decidir
quin dels tres que voleu utilitzar.
Així que com decidir quina d'elles?
>> Generalment fem servir un bucle for si sabem Quantes vegades volem repetir
a través d'alguna cosa o quantes vegades volem realitzar una tasca.
Utilitzem els bucles while si necessitem alguna condició de ser fidels a seguir corrent.
I utilitzem fer-ho bé és molt similar a la temps, però volem que el nostre codi s'executi en
almenys una vegada.
>> Així que no, mentre que, el que està en el fer la voluntat sempre s'executen almenys una vegada.
Atès que, amb el temps, es pot no funcionar en absolut si la
condició no es compleix.
Qualsevol pregunta amb això?
>> Així que l'estructura d'un bucle for.
Tot el que vostès han vist això.
Vostè s'inicialitzi.
Vostè té algun tipus d'afecció.
Així, per exemple, podríem inicialitzar com per a i és igual a 0.
i és menor que 10.
I i + +.
Molt senzill que el que hem fet.
>> Per a un bucle while, de la mateixa manera, vostè té tenir algun tipus d'inicialització,
algun tipus de condicions, i algun tipus d'actualització.
Així que podem implementar el nostre bucle també com un bucle durant l'ús d'aquest.
I de manera similar amb un bucle do while, podríem tenir una mica d'inicialització,
executar alguna cosa, actualitzar-lo, i a continuació, comprovar la condició.
>> Així que ara funciona.
Vam posar tot junts.
Podríem voler escriure alguna cosa tipus de funció.
Funció comuns que podria han vist ja és principal.
Principal és una funció.
Té un tipus de retorn, int.
Té un nom de funció, principal.
I té arguments, argc i argv.
Així principal és només una funció.
>> Altres funcions que es podria haver utilitzat, printf - printf és una funció -
GetInt, ToUpper.
Però aquests resulten haver estat implementat per nosaltres
algun tipus de biblioteca.
Si vostès s'acorden incloent aquesta biblioteca CS50.h o la
biblioteca d'E / S estàndard.
Sí, la pregunta?
>> AUDIÈNCIA: És principal, just inherent c?
Ho fa només una mica de [inaudible]?
>> ALTAVEU 1: La pregunta és si principal és inherent a c.
I sí, totes les funcions tenir una funció principal.
És una espècie de necessari que l'ordinador a saber per on començar
executar el codi.
>> AUDIÈNCIA: Així que no [inaudible]?
>> ALTAVEU 1: No
Alguna altra pregunta?
Genial.
Així que igual que vostè pot utilitzar una funció que està escrit per a vostè, també pot
escriure la seva pròpia funció.
Aquesta és una funció que algú podria han escrit per calcular el volum
d'un q, per exemple.
Hi ha un tipus de retorn aquí, en aquest cas int, el nostre nom i la nostra funció q
llista de paràmetres.
>> I tingui en compte que vostè ha d'escriure les dades tipus del paràmetre que voleu
utilitzar o bé la funció no saber quin tipus de
paràmetre he acceptarà.
Així, en aquest cas, volem un enter com la nostra entrada.
Llavors per què podríem voler utilitzar funcions?
>> En primer lloc, ideal per a l'organització.
Ells ajuden a trencar el codi en més organitzada trossos i fer
més fàcil de llegir.
Simplificació.
Això és bo per al disseny.
Quan vostè està llegint un fragment de codi i la funció principal és realment,
molt llarg, podria ser més difícil d' raó sobre el que està passant.
Així que si el desglossem en funcions, pot ser que sigui més fàcil de llegir.
I la reutilització de les habilitats.
Si vostè té un tros de codi que està sent trucada o executar diverses vegades,
en lloc de tornar a escriure el codi 10 vegades en la seva funció principal, és possible que
volen tornar a utilitzar-lo.
I llavors cada vegada que vostè necessita per utilitzar aquest peça de codi, truqui a la funció.
>> Així que ara si recordem de nou a zero, també parlem d'alguns conceptes,
un dels quals està roscat.
Tema és el concepte de múltiples seqüències de codi
executar al mateix temps.
Així que pensin en el primer dia en què David tenia vostès, compti el nombre de
persones a l'habitació.
>> Essencialment, el que anava On és tots vostès eren
córrer fils separats.
I aquests fils s'uneixen per obtenir algun tipus de resposta.
De la mateixa manera, en Scratch, quan es té múltiples sprites, és possible
tenir un gat i un gos.
I estarien simultàniament la gestió dels seus propis guions.
Aquest és un exemple de roscat.
>> I l'altre concepte que era introduït en scratch va ser esdeveniments.
I quan els esdeveniments són múltiples parts el seu codi es comuniquen entre si.
En Scratch, això va ser quan es va utilitzar el control i difusió de l'Al
Rep blocs.
>> I també, en el Butlletí de problemes 4, vam veure una mica dels esdeveniments també.
Vostès podrien haver utilitzat la biblioteca Gevent.
I hi havia una funció waitForClick en què estaves esperant
perquè l'usuari faci clic.
I el clic, en aquest cas, seria l'esdeveniment i esperar que Click és la seva
controlador d'esdeveniments.
>> I també, mitjançant la publicació dels seus conjunts de processadors i treballant en els seus conjunts de processadors, que
podria haver estat en contacte amb alguns d'aquests comandaments.
Això és el que ha escrit al seu finestra de terminal o el que sigui finestra
que apareix en la seva edició en g, essencialment, navegar pel seu ordinador.
>> Així, per exemple, LS enumera la contingut d'un directori.
Feu directori crea una nova carpeta.
CD, canvi de directori.
RM, eliminar, esborra un arxiu o algun directori.
I a continuació, eliminar el directori Elimina un directori.
>> AUDIÈNCIA: [inaudible]?
>> ALTAVEU 1: Sí, és clar.
Ho sentim, la pregunta era si suggeriria posar aquest
en el full de trucs.
Podria ajudar.
Si té espai, pot posar-se'l.
També és a generalment prou bo de recordar, perquè quan s'utilitza
és possible que vulgueu simplement han memoritzat.
Això va a fer la seva vida molt més fàcil.
He respost a la seva pregunta?
>> Així que ara, hem parlat una mica breument sobre les biblioteques.
Però els dos principals que hem estat utilitzant fins ara en el curs
E / S estàndard i CS50.
Quin tipus de coses s'inclouen a la biblioteca d'E / S estàndard?
>> Sí, fins ara hem fet servir printf.
En CS50, hem utilitzat GetInt i GetString.
I la cadena de tipus de dades també passa per a ser declarat en aquesta biblioteca CS50.
Parlarem una mica més en profunditat sobre com les biblioteques funcionen i com
interactuar amb la resta del seu codi.
Però aquestes són les dues principals que nosaltres, han entrat en contacte amb el que va d'
el curs.
>> Tipus.
Aquests són bons per recordar el molt cada tipus està representat per o com
Quants bytes cada tipus requereix -
int, 4 bytes, char, 1 byte.
Float és de 4 bytes.
Què és un doble?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Sí, i un flotador però doblegar la mida.
Què tal un temps?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: OK.
Què és un temps?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Sí, el doble d'un int.
Sí
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Long [inaudible].
I després d'un llarg temps és el doble.
>> AUDIÈNCIA: No, no.
Un llarg és només un int.
Depèn de l'arquitectura abans de la [inaudible]
i int tenen la mateixa mida.
[Inaudible].
>> ALTAVEU 1: Així que un llarg i 01:00 int són la mateixa.
I després d'un llarg temps és el doble de la int.
Genial.
I llavors, quin és l'últim tipus?
>> AUDIÈNCIA: Punter.
>> ALTAVEU 1: Sí, així que vam aprendre una mica sobre els punters.
I sense importar el que un punter és assenyalant - que podria ser un estel de carbó
o int estrelles -
sempre 4 bytes per al punter.
Preguntes sobre això?
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ALTAVEU 1: Així que molt i un int són el mateix en aquest aparell CS50.
>> AUDIÈNCIA: L'aparell està completament intercanviables.
>> ALTAVEU 1: Si.
Així que un llarg, llarg és el doble d'un int.
>> AUDIÈNCIA: Aquest és el de 32 bits?
>> ALTAVEU 1: 32 bits, si.
>> AUDIÈNCIA: Així que [inaudible]?
>> ALTAVEU 1: Sí, si no ho fa diu explícitament, que
ha d'assumir una mica 32.
>> AUDIÈNCIA: Es diria alguna cosa com assumir una
arquitectura com l'aparell.
Per 64 bits, l'únic que canvi són llargs i punters.
Tots dos [inaudible].
>> ALTAVEU 1: Sí?
>> AUDIÈNCIA: Pregunta.
Així que en una de les proves de la pràctica, es pregunta sobre un int sense signe.
Llavors, com seria això es determinarà d'un int [inaudible]?
>> ALTAVEU 1: Un signe en és també 4 bytes.
Però el que és diferent sobre una signatura int i un int sense signar?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: així.
Un pot representar valors negatius.
Però, com ho fa?
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Sí, s'estalvia 1 bit per representar el signe.
La signatura té un bit que representa el signe.
I sense signe només és de tots els positius.
>> AUDIÈNCIA: OK.
Així que vostè diu que és un doble dues vegades la grandària d'un flotador?
>> ALTAVEU 1: Feu doble és dues vegades la mida d'un flotant, si.
>> AUDIÈNCIA: Com funciona un punter a un llarg, llarg [inaudible]?
>> ALTAVEU 1: Llavors la pregunta és com el punter a un llarg temps -
Com és que només quatre bytes quan un llarg, llarg dels seus 8 bytes.
Així que recorda el que és un punter, fonamentalment, al valor base molt.
>> AUDIÈNCIA: [inaudible].
>> ALTAVEU 1: Sí, així que un punter és només una posició de memòria.
Així que no importa la quantitat d'espai aquest punter està apuntant.
Només es necessita 4 bytes per realitzar un seguiment d'aquesta ubicació de memòria.
Alguna altra pregunta?
Genial.
>> Així que l'última cosa que tinc és la sortida estàndard.
Vostè ha d'utilitzar amb freqüència prou perquè vostè pugui recordar.
Però això és quan fem servir printf, per exemple.
I tenim aquests marcadors de posició que van ser cridats codis de format.
>> Així cent c tar, i per cent de int, i també podem utilitzar el percentatge d.
És la mateixa cosa.
Però, en general, en què CS50 tractar d'usar per cent i.
Percentatge f per float.
Ld Percentatge de temps llarg i cent s de cadena.
>> De la mateixa manera, hem estat utilitzant alguns d'aquestes seqüències d'escapament.
Per exemple, la barra invertida n per a la nova línia.
Això és només per quan estàs format el seu codi per a la impressió f.
Sí?
>> AUDIÈNCIA: Quin és el percentatge de d?
>> ALTAVEU 1: tant el dubte és el que és cent per d?
Percentatge d és per ints.
Percentatge di cent i són els mateixos.
>> AUDIÈNCIA: Quina és la diferència entre barra invertida n com la barra inversa r?
>> ALTAVEU 1: Així que la pregunta és quin és el diferència entre N i reacció violenta
contraatac r?
Crec que la barra invertida és r -
>> AUDIÈNCIA: r Així barra invertida només implica torna al principi de la línia
sense haver d'anar a una nova línia.
Així que si imprimeix una barra invertida r i tornar al principi de la línia
a continuació, s'imprimeix més coses, es sobreescriu la matèria que està ja en
[Inaudible].
Atès que, en realitat n va a una nova línia i passa a [inaudible].
>> ALTAVEU 1: Bé, alguna altra pregunta?
Està bé.
Vaig a passar-ho a Donen que continuarà.
>> [Aplaudiments]
>> DAN: Molt bé.
Així que vaig a estar parlant d'una altra àmplia gamma d'idees de la classe que siguin
més o menys representant de setmana i dos l'inici de la tercera setmana de marxar
amb la fosa, que és només una forma de el tractament d'un valor d'un cert tipus com
un valor d'un tipus diferent.
Així que podem fer això amb caràcters a ints, flotadors de ints, i
longs llarg de duplicar.
>> Totes aquestes coses poden ser utilitzats com a formes de tractament d'algun valor numèric
menys char com alguna altra valor numèric.
Així que hi ha alguns problemes amb això, Per descomptat, que ve quan llances
coses com flotador ints.
Així que això és una mica estrany.
Tenim un flotador que és de 1.31.
Ens multipliquem per 10.000.
I després imprimir com un int.
Què significa aquest resultat?
10.000 vegades 1.31.
Així que 13.000, és a dir que la conjectura?
>> AUDIÈNCIA: Crec que és 10000.
>> DAN: Així que estic multiplicar per 10.000 abans que em llançar.
>> AUDIÈNCIA: Oh.
No Hi haurà un 9 i alguns números de 0?
>> DAN: Vostè podria tenir algunes xifres estranyes.
Així que bé, és 1,3 vegades 10.000.
Així que això és 13.000.
I aquest accessori estrany -
>> AUDIÈNCIA: 13100.
>> DAN: 13100.
Gràcies, Rob.
I aquesta raresa addicional -
aquest 9,9 -
és simplement perquè aquest càsting va acabar arrodonint cap avall, on
que no hauria de tenir.
Sí
>> AUDIÈNCIA: El càsting succeeix després de tota la resta?
>> DAN: Llavors perquè tinc això en impressió, fa aquesta multiplicació abans que es
fa aquest càsting.
>> AUDIÈNCIA: [inaudible].
>> DAN: Crec que seria fet en primer lloc, si, la qual cosa seria de 10.000.
Alguna cosa més?
Genial.
Així que això és 13.099.
Per què passa això?
La imprecisió.
>> Els flotadors no són perfectes.
Ells només poden representar nombres a una cert nombre de xifres significatives.
Així que si imprimim 8 sig figues en aquest flotador, obtenim una mena de
nombre lleig aspecte.
I això és perquè no poden amb precisió 1,31 ser representat per simples
potències de dos a la màquina.
Pel que acaba tenint el més proper Suposo, que acaba
ser una mica baix.
Té sentit?
D'acord.
>> Ara, amb commutació són una forma diferent de fent sentències condicionals on tots
que ens importa és una sola variable.
Així que en aquest exemple en particular, estem obtenir un nombre enter d'al'usuari.
I llavors estem veient el que és sencer.
Presumiblement, és el nombre entre un i quatre.
Això és el que estem demanant.
>> Així que fer un canvi de el nom de la variable.
Després de configurar els casos de possible valora que podria ser.
Així cas que un, diuen que és baixa.
I després es trenca per sortir de la condició de commutació de manera
no seguir endavant.
>> En el següent cas -
de manera que el cas de dos i tres casos -
si és el cas de dos que només baixa a la primera línia de codi que veu com amb
cas, tres, fins que veu un descans.
Així que la raó que vostè aconsegueix el cas que un només sota la impressió es deu al fet que
tenir aquest descans aquí.
Si jo, per exemple, va ignorar aquesta ruptura - si em vaig llançar aquest dissident -
seria imprimir baixa, i llavors seria imprimir mig, i després es trencaria.
>> Així descansos són una part important de canviar les condicions i
haurien d'estar allà.
Els casos que no es declarin són manejats pel default
CASE en l'interruptor i s'ha d'emetre.
>> AUDIÈNCIA: Així que 1, 2, 3, i 4 seria n?
>> DAN: Valors que n pot ser.
Sí
Sí?
>> AUDIÈNCIA: Així que quan vostè té que [inaudible]?
>> DAN: Es podria imprimir baixa, i després seria imprimir mitjana i
llavors es trencaria.
>> AUDIÈNCIA: Per què seria imprimir mitjà si [inaudible]?
>> DAN: Així que tot sota un cas abans d'un descans cau sota.
Així cas que un d'impressió és el cas per sota de un com és aquest següent impressió.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DAN: Així que aquest nombre és només un particular, valor que aquesta variable
pot prendre, no?
Això té sentit?
Sí
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, el cas de dos imprimiria mitjà i després trencar.
>> AUDIÈNCIA: [inaudible]?
>> DAN: Crec que qualsevol?
Quins altres tipus de dades es pot canviar de nou?
>> AUDIÈNCIA: Vostè pot canviar a través de qualsevol tipus de dades.
Però això només significa més caràcters i ints i coses per l'estil, perquè
Si canviarà més d'un punter que en realitat no té sentit,
commutació de càrregues, si és que anem a vostè fa això, a causa de coma flotant
en precisió, ho faria en realitat no vull fer això de totes maneres.
Així que més o menys, igual intercepcions i caràcters i coses per l'estil.
>> DONEN: Sí, és quan tens explícita valors que sap, crec, pot ser
que un canvi és realment útil.
Bé?
D'acord.
>> Abast és el rang que un declarat la variable s'estén.
Així que en aquest petit tros de codi que tinc, que estaria ple d'errors.
I la raó és que va declarar aquest int i dins de l'abast d'aquest bucle.
I llavors jo estic tractant de fer referència a aquest i fora d'aquest àmbit per al bucle.
>> Així que, bàsicament, es pot pensar en l'abast com tot el que es declara
amb l'interior d'un conjunt de claus només existeix dins d'aquestes claus.
I si es tracta d'usar aquesta variable fora d'aquestes claus, se li
obtindrà un error del compilador.
Sí?
>> AUDIÈNCIA: Així que aquesta no funciona?
>> DAN: Això no funciona, si.
Cordes.
Cadena char *.
Són exactament el mateix.
Ells són només punters a caràcters.
I qualsevol cadena que té han d'acabar amb una barra invertida zero, que és només
una convenció c.
>> Es diu el terminador NULL.
I NULL -
N majúscula, capital d'U, el capital L, L majúscula -
no és el mateix que el Terminador NULL.
Aquest és un punter.
Aquest és un personatge.
Són molt diferents.
Recorda.
Serà al qüestionari, probablement.
No he vist la prova.
Sí?
>> AUDIÈNCIA: Així que NULL és, per exemple, el punter?
>> DAN: Si.
>> AUDIÈNCIA: Què [inaudible]?
>> DONEN: Si, per exemple, malloc es diu quan es no tenen prou memòria per obtenir
sigui quina sigui la mida que vostè està demanant, malloc tornarà NULL.
És, bàsicament, cada vegada que una funció és suposa per tornar un punter,
necessitarà comprovar contra NULL perquè NULL és una molt bona -
és, més o menys, el valor de les escombraries.
És un zero en la mesura de com punters van.
>> Cada vegada que es crida a una funció, que retorna un punter.
Vostè voldrà comprovar que Segur que aquest punter no és NULL
perquè NULL és molt comú.
És una espècie d'un retorn de les escombraries.
Així que si alguna cosa no anava bé, només retorna NULL al seu lloc.
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, i això és això.
>> AUDIÈNCIA: [inaudible]?
>> DAN: encanteris com aquest.
És el terminador NULL.
És minúscula N-O-L-L si vostè està amb totes les seves lletres.
>> AUDIÈNCIA: I jo només vaig ser esquena i provat.
I si vostè tracta de posar un punt flotant valorar en un interruptor, que va a cridar a vostè
el dir, declaració requereix l'expressió de tipus sencer.
>> DAN: Aquí el tens.
Però sí, ho era la pregunta?
>> AUDIÈNCIA: [inaudible]?
>> DAN: So N majúscula, capital d'U, el capital L, L majúscula és una cosa real c.
És el punter NULL i voluntat només ser tractats com a tals.
Vostè mai va a tractar d'explicar el Caràcter nul i veure qualsevol
altra manera que això.
Sí?
>> AUDIÈNCIA: Així que tornant a char max o alguna cosa en les notes, oi
encarnar la mateixa funció com [inaudible]?
>> AUDIÈNCIA: Així que vols dir retornant caràcters màx de getchar, o
sigui el que sigui?
>> AUDIÈNCIA: Si.
>> AUDIÈNCIA: Sí, per la qual cosa el general, termini per a totes aquestes coses
són valors sentinella.
Així com un sencer de retorn màxim de GetInt i caràcters màx de getchar, és
suposa que és igual, d'acord, si aquestes coses estan tornant a nosaltres,
alguna cosa va sortir malament.
>> Per als gossos, només passa que té aquest valor sentinella que tothom
Coincideix en.
I això és el que torni quan les coses van malament.
Max Així char és el que estem utilitzant per representar alguna cosa
com NULL o getchar.
>> AUDIÈNCIA: Així que si vostè està provant getchar, podria vostè acaba de posar NULL?
Seria això una diferència?
>> DAN: No podies comprovar NULL.
Caldria comprovar max carbó perquè el valor de retorn de la funció és
un personatge no un punter.
Sí?
>> AUDIÈNCIA: Aquesta pregunta es refereix a per a la longitud de la cadena.
Això inclou el caràcter NULL?
>> DAN: No
I això és en realitat la forma de longitud de sèrie sap de parar, ja que passa a través de
la seva matriu de caràcters fins que veu un caràcter NULL.
I llavors és com, totes bé, estic fet.
>> AUDIÈNCIA: [inaudible] i 5?
>> DAN: Hola seria cinc.
Sip.
Així que les matrius són contínues blocs de memòria.
Ells tenen accés immediat al dir que el nom de la matriu i, a continuació, en l'arrissat
aparells ortopèdics, qualsevol que sigui l'índex que vol anar a, que estan indexats a partir del zero al
la longitud de la matriu almenys 1.
>> I estan declarats pel tipus de la El que vostè està emmagatzemant al
matriu, el nom de la matriu, i després sigui quina sigui la mida és d'aquesta matriu.
Així que aquesta és una matriu de caràcters de longitud sis que té aquests valors.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DAN: Si.
>> AUDIÈNCIA: [inaudible]?
>> DAN: Si vostè té el que està passant en la matriu ja feta.
Així, pots especificar aquest lloc com, dir, char, qualsevol que sigui el nom del seu
matriu és, claudàtors buits és igual arrissat abraçadora H I coma coma coma L L comes
Caràcter O coma NULL i clau de tancament.
Això també funciona com una declaració.
>> AUDIÈNCIA: [inaudible]?
>> DAN: Llavors cal tenir la grandària que ja va fer.
>> AUDIÈNCIA: [inaudible]?
>> DAN: Si.
Molt bé.
Arguments de línia d'ordres són una forma de obtenir l'entrada de l'usuari com
arguments al principal.
Principal té dos arguments.
El nombre d'arguments que s'està passat al llarg de la línia d'ordres i una
vector cadena o una matriu de cadenes de tots els arguments.
>> Així que si, per exemple, es diu una funció com Un punt a 1 espai, 2 espais, tres,
argc seria 4.
I el argv 0 seria un punt fora.
Argv1 seria 1.
argv2 seria 2. argv3 seria 3, en aquest cas particular.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DAN: L'últim element de la matriu perquè la matriu és argc longitud més
un argb, l'últim element és el punter NULL.
És argc més 1.
Així que en el cas que acabo de dir, que es argv 0 és un punt fora.
argv 1 és 1. argv2 és 2. argv 3 és 3.
argv 4, que és un més gran que argc seria NULL.
>> I aquest és el punter nul.
Sí
I això és perquè la cadena és una estrella char és un punter.
Així que ha de ser del mateix tipus.
Sí?
>> AUDIÈNCIA: Dues preguntes.
Així que un, quina és la diferència entre això i GetString altra d'un tipus
en el motor d'usuari?
I dos, que s'emmagatzemen en seva història recent?
Així com, GetString faria ser [inaudible]?
>> DAN: On s'emmagatzema?
No sé on s'emmagatzema.
>> AUDIÈNCIA: Així que, en realitat, ja saps com qualsevol funció que dir-ho d'arguments
s'emmagatzemen a la pila?
Així argc i argv són arguments a principal i estan a la pila, o realment
just per sobre del que vostè pensa que el començament de la pila.
Quina era l'altra part de la pregunta?
>> AUDIÈNCIA: Llavors, quina és la [inaudible]?
>> DONEN: Sí, és només una manera diferent d'obtenir la entrada de l'usuari.
Lleugerament més eficient i d'aquest un que és més pràctic per als scripts perquè
només pot passar arguments al seu principal la funció en lloc d'haver d'esperar
per als usuaris, que no té cap usuari.
>> AUDIÈNCIA: I sí, obtenir cadenes seria [inaudible].
Seria emmagatzemar les coses que necessita.
>> DAN: Sí?
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, argv 0 sempre inclou la barra de punts de la crida a la funció.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, cada un dels arguments són va acabar en caràcter NULL perquè
són cadenes.
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, argv argc és un punter NULL.
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Ah, si.
Sí, ho sento.
>> AUDIÈNCIA: Així que [inaudible]?
>> DAN: tant el dubte és si vostè tingués la línia de punts comandament slash un punt a 1, 2,
seria el número de línia de comandes arguments siguin dos o seria 3?
>> AUDIÈNCIA: Crec que no fa realment importa.
Tendeixo a dir, oh, que no va passar qualsevol argument de línia d'ordres quan,
òbviament, que va cridar a la funció.
Així que tendeixo a excloure vocalment el funció des de la línia d'ordres
arguments tot i que hi ha inclòs en argv.
>> DAN: Però si era a la prova -
si - i també si vostè diu alguna cosa com a iguals argc 3,
vostè està en la caixa forta de peu.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DAN: Crec que si en lloc de trucar a aquest entre parèntesis argc i argv cadena
però mantenen els mateixos tipus i acaba de cridar ells alguna cosa diferent com un
i b, seguiria funcionant?
I no per això deixa treballar, ho faria només -
en lloc d'utilitzar argc - haurà d'utilitzar a i b.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DAN: Llavors la pregunta és getString és va a emmagatzemar la memòria a la pila
perquè GetString és char *.
Emmagatzema la memòria en el munt, ja que demana ara malloc dins de l'actual
aplicació de GetString.
Acceptar, seguim.
>> Seguretat.
Així que per estar realment segura, vostè confia en ningú un i es permeten a ningú l'accés a qualsevol
de la seva informació, de manera que cadascun construeix les seves pròpies màquines,
seus propis sistemes operatius, tot el seu programes a partir de zero, i, òbviament,
no connecti a qualsevol altra màquina a través d'Internet.
Així que els ordinadors no són segurs.
Ells són en realitat.
Hem de confiar en altres persones.
>> I la idea de la seguretat és que ets tractant de limitar la quantitat de
Confiem que vostè necessita.
I un dels mitjans que vostè fa que és a través de la criptografia.
La criptografia és, en essència, tenim secrets.
>> A vegades hem de passar els nostres secrets juntament a través de, per exemple, l'Internet o
altres coses.
I no volem que la gent conèixer aquests secrets.
Així que xifrem nostres secrets en una forma que esperem que ningú pot entendre.
>> Així que fem servir -
a través del curs d'aquesta classe -
coses com el xifrat César i [Inaudible], que són alhora molt, molt
formes precàries d'encriptació de coses.
Són fàcils d'entendre el que són i quins són els seus secrets són.
El món real utilitza molt més esquemes de xifratge complicats.
I no entrarem en molt més que això.
>> Depuració.
GDB és el millor.
Vaig a insistir en això una altra vegada.
Utilitzeu GDB tot el temps cada vegada que tingui un problema.
Les comandes que són útils en el BGF són trenques, el que passa, ja sigui una línia
nombre, un nom de funció, essencialment, on en el codi que desitgi aturar,
i ser capaç de prendre el control.
>> Imprimir pren una variable i imprimeix qualsevol que sigui aquesta variable és en aquest
apuntar en la seva execució.
Següent mou la seva execució al llarg d'un pas.
I pas passos dins d'una funció en la seva execució.
>> Altres coses que s'executen, que és com en realitat s'executa el seu codi.
Continuar pren totes les mesures necessàries per arribar al següent punt de ruptura.
I n'hi ha molts, molts altres.
Busca'ls.
Són excel · lents.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> DONEN: Sí, que és un depurador.
Així que un depurador és un programa que permet depurar el seu programa.
No és un programa que troba errors per que, però, que seria genial.
>> I finalment, per a mi és la recerca.
Així que els tipus de cerca que parlem sobre aquesta classe són recerca lineal,
que és just que vostè mira a través de cada element de l'espai de recerca, un
element a la vegada, fins que trobi el que vostè està buscant o fins que arribi
Al final del seu espai de cerca a la qual punt que dius que no es podia trobar
l'element que estaves buscant.
I això porta, en el millor temps constant, que és 0 d'1 i en el pitjor lineal
temps, que és 0 de n.
>> Hi binària, el que necessita elements sòrdids.
Vostè va a la meitat dels seus elements, veure si l'element que està buscant
és major o menor que l'element que estàs en el medi.
Això és més gran, es diu que el fons del seu espai de recerca és la seva
ubicació actual, el medi, i reiniciar el procés.
Si és menor, et veus diuen que el - Sí, què passa?
>> AUDIÈNCIA: [inaudible]?
>> DAN: Si.
Qualsevol tipus d'espècie que s'ha ensenyat a la classe és joc just per a la prova.
>> [Rialles]
>> DAN: I el fet que vostè no ha tingut que ho faci per un conjunt de problemes, és just
joc per a la prova.
>> AUDIÈNCIA: Podem repassar com -
>> DAN: S'ha anat una altra vegada.
>> ALTAVEU 2: El codi real per [Inaudible] és a study.cs50.net.
Així que si ens fixem en el problema de la pràctica a la pàgina de combinació tipus de
study.cs50.net, hi ha el codi per a l'aplicació de la combinació de classe.
Així que vostè no ha de posar en pràctica vostè mateix aquesta nit.
Però assegureu-vos que entén més aviat que simplement memoritzar-la.
>> AUDIÈNCIA: [inaudible]?
>> ALTAVEU 2: La pàgina de combinació de tipus de study.cs50.net, hi ha una pràctica
problema que, si fa clic a través de la problema, al final hi ha una
solució, que és la combinació aplicació espècie.
Però assegureu-vos que entén el en comptes de memoritzar
o copiar cap avall.
>> AUDIÈNCIA: I una perfectament vàlid problema per a l'examen seria
cosa així com que aquí hi ha una llista.
Què fa aquesta llista veurà com després un pas de seleccions tipus o
ordenació per inserció o el que sigui.
Una iteració completa de la llista.
Així que encara que no acaba damunt de necessitar codi per a això, cal comprendre que
prou per saber com va a la modificació d'aquesta matriu.
>> DAN: Això és tot per a mi.
>> [Aplaudiments]
>> LUCAS: Hola a tots.
El meu nom és Lluc.
Vaig a parlar de la recursivitat, tot les classes que hem après, i un
mica de tots els punters.
¿D'acord?
Així que primer de tot, la recursió.
Què significa dir que és una funció recursiva?
>> AUDIÈNCIA: Trucades de si mateix.
>> LUCAS: OK, diu a si mateix, si.
Així que t'agrada aquesta foto, per exemple.
És com la imatge a l'interior d'una imatge i així successivament.
Així, per exemple, vostè pot tenir - com Dan que parlava de recerca binària.
Una manera com la recerca binària és recursiu és el fet que ets
tractant de trobar un nombre.
Així que anar al centre.
I a continuació, comprovar si els números allà a l'esquerra ia la dreta.
>> I llavors, si vostè descobreix que el nombre és serà de l'esquerra, que és la mateixa
cosa com fer la cerca de nou, però just a l'esquerra de la llista.
Així que aquesta és la forma en què sona com que és recursiva.
Així que és per això que vostès tenen recursiva solució per merge sort.
>> OK, així que aquí hi ha un exemple.
Així que diguem que jo vull triar tots els números d'1 a n.
Puc adonar-me que la suma dels n nombre és n més n menys 1 a 1.
Però llavors, si miro n almenys 1 més n almenys 2 més 1, que és la mateixa
cosa com la suma dels nombres fins an almenys 1.
Així que puc dir que la suma d'una quantitat equivalent és igual a n més la suma de n almenys 1.
Això té sentit?
>> I jo també tindria alguna cosa més anomenat el cas base, que és que
la suma dels nombres fins a zero seria zero.
Així que tan aviat com arribi a la quantitat zero, deixo d'explicar.
Això té sentit?
>> Així que aquí està un exemple de com Puc aplicar això.
Així que tinc aquesta funció en alguns.
Per això es necessita un enter n.
Així que aquí primer comprovo si n és menys o igual a zero.
Així que si és menor o igual a zero, I tornar zero, que és el nostre cas base.
En cas contrari, puc tornar n més la suma dels números de
un a n menys un.
Té sentit?
D'acord.
>> Així que aquí està el que sembla.
Té suma de 2 iguals 2 més la suma d'1.
I alguns d'1 és 1 més el suma de 0, que és 0.
Té sentit?
Així que si ens fixem en la pila de la seva programa, això és el que sembla.
>> En primer lloc, tenim la funció principal.
I llavors la funció principal anomenat suma 2.
I a continuació, suma 2 dirà, oh, suma 2 és igual a 2, més la suma d'un.
Així que afegeixo suma d'1 a la pila.
I la suma d'1 va a cridar suma 0, que també serà afegit
a la pila.
I a continuació, cadascun d'aquests els que estan a la part superior d'un altre haver de tornar
abans que els altres poden seguir.
>> Així, per exemple, aquí, suma de 0, primer, tornarà 0.
I a continuació, escolliu suma d'1.
Llavors suma d'1 va a tornar a la suma gener 2.
I, finalment, suma de 2 va per tornar a la principal 3.
Això té sentit?
>> És molt important entendre com la pila està treballant i intentar
veure si té sentit.
Acceptar, de manera que la classificació.
Així que per què és important la classificació, en primer lloc?
Per què hauria d'importar?
Algú?
Dóna'm un exemple?
Sí?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Sí, està bé.
Així que vostè pot buscar de manera més eficient.
Aquesta és una bona manera.
Així, per exemple, tenim una gran quantitat de coses, en realitat, en les nostres vides que
apareixen ordenats.
Per exemple, els diccionaris.
>> És molt important tenir tota la paraules en algun tipus d'ordre que
pot accedir fàcilment.
Així que això és el que estava dient.
Vostè pot buscar de manera més eficient.
Penseu en el difícil que seria tenir un diccionari en el qual les paraules estan en
ordre aleatori.
Vas a haver de veure, més o menys, cada paraula fins que trobi el
paraula que vostè està buscant.
>> Si utilitzeu Facebook També, quan el que busques en els teus amics, ets
veurem que Facebook posa a la seva amic més proper és al cim dels més
que no parla amb tant.
Si vostè va tot el camí fins a la part inferior de la llista d'amics, vas a veure
persones que probablement ni tan sols recordi que vostè és amic de.
I això és perquè les classes de Facebook seus amics basen en la forma en
prop està d'ells.
>> Així que l'organització de les dades.
També Pokémon.
Així que ja veus que tots els pokemons tenir números.
I això és com un fàcil manera d'accedir a les dades.
>> AUDIÈNCIA: Accés a Pokémon.
>> LUCAS: Si.
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Yep.
Acceptar, de manera que la selecció de classificació.
Selecció d'ordenació es va a seleccionar el menor valor d'una llista sense ordenar cada
temps en cada iteració.
És una mica com el tipus que ho fa en el seu cap quan vostè està tractant de
ordenar una llista a la mà.
>> Bàsicament, tot el que fem és mirar per al nombre més petit.
T'ho poses en la llista ordenada.
I després busques la següent nombre més petit.
I després segueixes fent que i així successivament.
>> Així que la selecció de gènere és, bàsicament, que seleccionar cada vegada que el més petit
valor sense classificar.
Posar a l'extrem de l'ordenada part de la llista.
I seguir fent això.
Així que anem a veure ràpidament el que això s'assembla.
Així que aquí està l'ordenada i una llista sense ordenar.
>> Així que per l'ordenada de la llista, és inicialment buit.
I després vaig a seleccionar el menor nombre aquí, que és 2.
Així que tinc el número 2 i poso a la part frontal de la llista.
I llavors miro a la immediata inferior element, que és 3.
Així que el vaig posar al final de la llista ordenada.
I després segueixo fent això.
Trobada 4 i el vaig posar al final.
Trobar 5 i posar-lo al final.
>> I mira com tots aquests moments en què Jo estic dient que el va posar al final és,
bàsicament, l'intercanvi de dos valors.
¿D'acord?
I després l'última, que acaba de tenir un element més.
Així que ja està solucionat.
>> Acceptar, pel que l'ordenació per inserció.
Inserció de classificació que tindrà també aquesta cosa de tenir una ordenada i
una llista sense ordenar.
L'únic és que cada vegada que va a afegir un element a l'ordenada
llista, que acaba de recollir l'element que està al davant de la llista sense ordenar.
I després vas a trobar el posició que ha d'estar en l'ordenada
part de la llista.
>> Anem a veure què això és així això té més sentit.
Així que al principi, per exemple, estic intentant per inserir el número tres de la
ordenats part de la llista.
Així que la llista no té res.
Així que només puc posar el número 3.
>> Ara, vull afegir el número 5 a la part ordenada de la llista.
Així que miro el número 5.
M'adono que és més gran que 3.
Així que sé que ha de ser posterior al 3.
Així que vaig posar 3 i 5.
>> Llavors vull inserir el número 2.
M'he adonat que el número 2 és en realitat durar llavors ambdós 3 i 5.
Així que en realitat he de posar tot el forma al principi de la llista.
Així que he de fer-ho, una mena de, traslladar tota la elements en la llista ordenada de manera que puc
fer espai per al número 2.
>> Llavors veig el número 6.
Veig que hauria de ser després de les 5.
Així que el vaig posar allà.
I, finalment, em veig en el número 4.
I m'adono que hauria ser d'entre 3 i 5.
I llavors em vaig posar allà i el canvi tots els altres elements.
Té sentit?
>> La classe de bombolla.
Així que l'ordenació de bombolla és bàsicament el que ets farà - en diem bombolla
classe perquè vostè va a través de la llista - en realitat és millor que em mostro
t'agrada aquest -
i vostè va a comparar números adjacents.
I vostè canviarà la seva posicions si no són
en l'ordre correcte.
>> Així que, bàsicament, el que va a passar és que aquí, per exemple,
té 8 i 6.
Vostè sap que l'ordre de classificació es ser en realitat 6 i 5, no?
Així que vas a canviar les ordres.
Llavors veig a 8 i 4 aquí.
I jo *** el mateix.
Em canviaré de nou.
I, finalment, 2 i 8.
També intercanviar-les.
>> Es diu la classe de bombolla perquè després cadascuna d'aquestes iteracions, en realitat,
el major número a la llista rep tota el camí fins al final de la llista.
Això té sentit?
Com que manté canviant i movent cap a la dreta.
>> OK, així que aquesta és la segona iteració.
Seria el mateix.
Vaig a fer un swap i a continuació, l'últim.
I que no hi ha permutes i la llista està ordenada.
Així que a la classe de bombolla, que bàsicament mantenim passant per la llista i l'intercanvi d'
coses fins que em vaig adonar que jo no ho vaig fer qualsevol swaps fent aquesta iteració, que
vol dir que la llista ja està ordenada.
Té sentit?
>> Anem a parlar una mica sobre el temps de funcionament.
Així que sí recordo que vostès Grans O, Omega, i Theta?
Sí?
Bé, què és Big O, en primer lloc?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Sí, es diu el pitjor cas temps d'execució, la qual cosa significa que és
en quant calcula el programa prendre per funcionar.
Igual que, en termes de -
en aquest cas - n.
El nombre d'elements en el enumerar en el pitjor dels casos.
Igual que, en el cas pitjor possible.
>> Així que per a la classe de bombolla, per exemple, tenim Big O de n quadrat.
Per què hem de?
Per què és la classe de bombolla Big O n quadrada?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Sí, de manera que el pitjor dels casos serà que vaig a haver de fer n iteracions.
Així que cadascuna de les iteracions es va a portar l'element més gran fins al final
de la llista.
Així que el pitjor dels casos és que no tinc per fer aquesta cosa n vegades.
I per a cadascuna d'aquestes vegades, he de fer n swaps perquè he de comparar
cadascun dos elements.
Així que és per això que és n al quadrat perquè és n vegades n.
>> Llavors, la selecció de gènere és també n quadrada perquè, per a cada iteració, he de
mirar cada element individual a la llista.
I després trobar el més petit, el que significa que he de
mirar a través de n elements.
I jo he de fer que n vegades perquè He de seleccionar tots els n elements.
>> Una ordenació per inserció és també n quadrada perquè el pitjor dels casos
sent, un, he de inserir n nombres, oi?
Així que ja sé que vaig tenir n iteracions.
No obstant això, per a cada un d'aquests números, si tingués a veure tots els números en
la llista ordenada i el va posar tot el camí a la part davantera, que serà n quadrada
perquè serà N vegades N novament.
Té sentit?
Què passa amb omega?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: És el millor dels casos.
Així és com, en un munt de vegades per la classificació, el millor de casos és
quan la llista ja està ordenada.
Així que realment no té de fer res.
La classe de bombolla té la millor dels casos de n.
¿Coneix usuaris per què?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Sí, si vostè no perd de si la ració de dades va tenir cap swaps o
No, si vostè té una mena conjunt de veritable si hi havia una iteració, si el
llista ja està ordenat, en el fons, el que passarà és que vaig a
intentar canviar cada dos elements adjacents.
Vaig a veure que no hi ha swaps.
I jo acabo de tornar immediatament.
>> Així que això significa que jo només havia de anar a través de la llista una vegada.
Així que és n perquè em veig en n elements.
Per què la selecció de tipus n Square?
>> Sí, encara que la llista està ordenada, per cada iteració d'ordenació per selecció, em
seleccionar l'element mínim.
Així que això significa que he de sortir a buscar en tots els elements en el sense classificar
una llista i trobar el mínim per a cada iteració.
Això té sentit?
>> I l'espasa d'inserció és n perquè al cas que estic tractant d'inserir el
números i tots els números, quan tractar d'inserir, veig que
estan en la posició correcta.
Jo no he d'anar a veure tots els altres números de la llista sense ordenar.
Així que per això serà n.
Té sentit?
I quin és theta?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Què, ho sento?
Digues-ho de nou.
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Exactament.
Així es pot veure que només la selecció emmagatzemada en Merge sort tenir thetas.
I això és perquè només tens theta si tots dos Big O i Omega són els mateixos.
D'acord.
I, finalment, fusionar és un gènere en el registre núm.
>> I llavors, com Dan estava dient, Merge sort és una espècie de la mateixa manera que
feixos de recerca binària.
Així s'obté la llista.
I vostè va a tallar per la meitat.
I després els talla en meitats més petites.
I després combinar-los.
Vostès es recorden d'això, no?
Acceptar, com ell deia.
>> Acceptar, punters.
Llavors, què és un punter?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Una adreça.
D'acord.
Sé que David mostra un grapat de videos de Binky i coses que apunten
entre si.
Però m'agrada pensar de punters simplement com una direcció.
Així que és una variable que es va per emmagatzemar una adreça.
>> Així que és només aquesta variable especial és a dir, quatre bytes de longitud.
Recordeu, aquest punter a qualsevol cosa és sempre quatre bytes de longitud per al nostre 32 bits
màquina perquè el cas amb l'aparell.
I que només té la ubicació d'un interior de la variable de la mateixa.
>> OK, així que hi ha aquesta memòria, bàsicament.
Així que cada bloc de memòria en realitat té un etiqueta, que és l'adreça de la
memòria Slotty.
Així que això significa que puc tenir un punter que apunta a
qualsevol d'aquestes adreces.
Així que la raó per la que utilitzarem punters és si he de recordar la ubicació
que una variable específica és un record.
>> I vostès recordar que un dels casos era si tinc una funció
si realment t'he desitgi intercanvi de reals, en realitat
ha d'enviar un punter.
No la variable.
Vostès se'n recorden d'això?
La diferència entre -
Quin és el nom?
Trucant per valor i cridar per referència, no?
>> Bé, si.
Així que truqui per valor.
Quan vostè acaba d'enviar una variable a funció que està enviant un valor.
Així que en realitat estàs enviant una còpia de la variable.
I el programa ja no li importa sobre si la mateixa variable en realitat
fa una còpia.
>> I trucant per referència vol dir que En realitat estic enviant una còpia de la
punter a aquesta variable.
Així que això significa que estic enviant la ubicació d'aquesta variable.
Així que sentir que tinc la ubicació de la variables, quan truco a la funció
amb punters, sóc capaç de realitat canviar les dades que estaven en la principal.
Té sentit?
>> Encara que, el punter és una còpia, l' punter encara té l'adreça real de
la variable que vull canviar.
Té sentit?
>> Així que la creació de punters.
Recordeu, el punter sempre tenen el tipus que s'està apuntant
i després a una estrella.
I després es posa el nom.
Així que recordi que cada vegada que tingui qualsevol que sigui l'estrella, que és un punter a
que qualsevol que sigui la variable escrigui que vostè tenia.
>> Així que aquí en estrella, per exemple, és un punter i un sencer.
I després l'estrella char és un punter estrelles carbó i així successivament.
Sí?
>> AUDIÈNCIA: Què passa si tenim un punter a n a l'estrella de x.
Sé que crea un punter a x.
També declarem x un nombre enter?
>> LUCAS: OK, així que quan vostè diu n estrella x, no crearà un punter a una
x variable.
Estàs creant un punter anomenat x.
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Així que quan dic n estrella x, estic dient, hey, en la memòria, vaig a
aconseguir una d'aquestes tres caixes.
I jo vaig a dir que això serà x, que és
serà un punter.
I alguna cosa interessant sobre punters és que ens diuen que no tenen
4 bytes per a una màquina de 32 bits.
I la raó d'això és perquè 4 bytes són 32 bits.
>> I les màquines que són de 64 bits en realitat tenir adreces punters
que són 64 bits de longitud.
Pel que només significa que la mida de la adreces a la màquina és diferent.
>> Així Fer referència i Desreferenciar.
Hi ha dos operadors que vostès han de recordar.
La primera es Ampersand.
La segona és l'estrella.
No es deixi confondre per aquesta estrella i això protagonitzar perquè recordi que, en
aquest cas, s'ha n l'estrella.
>> És com una cosa sencera junts.
No hi ha espai n estrella.
El que significa que és el tipus.
Recordeu que quan vostè té l'estrella variable, ets
parlant sobre el tipus.
>> Quan vostè acaba de protagonitzar i després el nom de la variable, vol dir que
estàs dereferencing el punter, que significa que vostè està buscant en el
punter, la recerca de la direcció és assenyalant, anar a aquesta direcció,
i mirant sempre vostè té allà.
Així que els dic als meus estudiants que quan es té estrella, cal pensar que és
l'abreviatura de contingut.
>> Així que si vostè té un punter i fer indicador de l'estrella, és el
contingut del punter.
Així que anar al que està assenyalant i mirar el contingut constant.
I el signe és el mateix El que la direcció de.
>> Així que si tinc una variable a - com, anem a dic que ho vaig fer int a iguals 3 -
si vull trobar l'adreça d'aquest una memòria de variables, puc fer
ampersand a.
Així que és la direcció d'un.
Té sentit?
>> Així que aquí està un exemple.
Aquesta manca int b i c int.
Així int a és igual a 3 vol dir que Vaig a anar a la memòria.
I vaig a trobar una ranura i posar el número 3 aquí.
>> I després int b és igual a 4.
Vaig a fer el mateix.
Anar a la memòria i posar un nombre 4 en una de les caixes.
I int és igual a 5.
Troba altra caixa i posar un número 5.
>> Llavors, què està fent aquesta línia? n pa estrella equival a un signe.
Així que primer de tot, N PA estrelles.
Què fa?
>> AUDIÈNCIA: [inaudible].
>> LUCAS: Sí, llavors n pa estrella, primer, declara un punter anomenat pa.
I després hi ha l'assignació del valor aquest punter és l'adreça d'un.
Així ampersand a.
Llavors, si ho *** pb estrella, Què és un pb estrella?
>> Oh, ho sento.
Això també ha desaparegut. pb estrella n.
Vull dir pc estrelles.
Ho sento molt.
És la mateixa cosa.
Però ara estic bé ar la creació d'un punter ab i després un punter a c.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: Si.
Així que si vas a la memòria i que vagi a la caixa que és el designador de pa,
realment vas a veure la direcció d'un.
¿D'acord?
Sí?
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: Sí, el punter és una direcció.
Mai ho oblidis.
És com el més important part dels punters.
No ha emmagatzemar i direcció a alguna variable.
Alguna cosa més?
Alguna altra pregunta?
D'acord.
>> Així Punters i matrius.
Recordeu que quan *** int matriu 3, Bàsicament, el que estic fent és sóc, bo
de, declarant en un punter.
Així matriu és com un punter a una lloc específic en la memòria en la qual em
assignat tres ranures per als nombres enters.
Això té sentit?
>> Així que quan em INT Matriu 3, el que estic fent, bàsicament, és la creació de tres
ranures en la memòria.
Així que em trobo tres ranures de memòria.
Així que si ho ***, llavors, una matriu d'estrelles, bàsicament vol dir que el contingut de la matriu,
el que significa que esborro el punter, vaig a aquest lloc que està assenyalant,
i vaig posar el número u.
>> I després, si ho *** array estrella més 1, això és el mateix que fer array
suports d'un, la qual cosa significa que hagi de el lloc que està apuntant a.
I llavors el més gener marques em moc en una posició.
Així que vaig a aquesta posició, en realitat, i posar el número dos.
>> I llavors, per fi, quan ho *** gamma més 2, vaig a on
de senyalització matriu a.
I llavors em mut a blocs de memòria.
I llavors em vaig posar el número tres aquí.
Sí?
>> AUDIÈNCIA: array Així estrella és simplement dient que el primer punt.
I vostè pot afegir 1, només perquè només estem realment
referència a aquesta primera direcció.
>> LUCAS: Si.
Per què, per exemple, diem array 0, 1 camp, i la matriu 2?
El que estic dient, per què fas 0, 1, 2, 3 en lloc d'1, 2, 3?
Una de les raons és, un, equip programadors prefereixen començar
a comptar des de 0.
Dos és perquè quan ho fas de matriu 0, és el mateix que fer array
més el 0, el que significa que vaig a aquesta posició, i no ho fan
ometre qualsevol bloc de memòria.
Així que no em moc tots els blocs de memòria.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: Així que està preguntant què és la diferència entre fer
això o fer malloc.
Una de les diferències és que int matriu 3 està creant un
matriu a la pila.
I quan ho faci malloc, es crea en el munt.
Això té sentit?
>> Llavors, com funciona malloc realitat?
Llavors, per què necessitem utilitzar malloc?
La seva compilador tipus de figures tot les variables que es declaren.
I es crea un espai per a tots d'ells a la pila.
Així que totes les variables es van a estar en algun lloc a la pila.
Així que aquí és les variables d'entorn.
>> Així que, bàsicament, l'espai per a les variables en la memòria s'assigna a
temps de compilació.
Així que això significa que l'equip té conèixer totes aquelles variables
per endavant.
No cal saber quin és el valor vostè va a posar en ells.
Però cal saber com la quantitat de memòria que necessita.
>> Però ara anem a dir que, per exemple, està creant una matriu o prendre una
cadena que vostè està prenent des de l'usuari.
No sap quant temps la cadena serà, per exemple.
Així que vostè no sap exactament quants blocs de memòria que assignen, oi?
>> Per tant, no té gaire sentit per que diguis posar 100 caràcters.
I llavors què passa si l'usuari escriu 150?
Vostè serà fotut.
>> Així que, bàsicament, no es pot estar segur de com quantitat de memòria que necessita assignar
en compilar el programa.
Vostè acaba de saber que el temps d'execució.
Així que és per això que vostè té el munt.
Així que la pila tindrà memòria que vostè està assignant durant el
durada del programa en execució.
>> Així que, bàsicament, quan ho fa malloc, el que estàs fent memòria està assignant a
temps d'execució, el que significa que vostè és decidir just en aquest moment que vostè
hauria de tenir aquest record.
Així que això és quan estàs assignació.
Això té sentit?
>> Així que recorda, la pila té variables que es creen en temps de compilació.
I llavors el munt té variables que es creen sobre la marxa
amb malloc, per exemple.
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: així GetString Trucaré a malloc.
Permetin-me parlar de malloc, i Vaig a explicar GetString.
Així malloc és el mateix com l'assignació de memòria.
Així que destinarà memòria en el munt.
I es va a tornar un punter a on la memòria es va assignar al.
>> Així que quan vostè ho fa -
aquí, per exemple -
indicador de l'estrella n.
I llavors punter és igual a malloc mida de vegades polzades 10.
Estic creant un punter.
I llavors estic assignant aquest punter a el valor del punter que malloc
és donar-me.
>> Així que el que estic demanant malloc pot assignar espai per a 10 nombres enters.
Això és el que està dient.
I malloc produeix una punter a aquest lloc.
Té sentit?
D'acord.
I jo GetString està, bàsicament, fent un trucar a malloc perquè pugui assignar
memòria durant l'execució.
>> Recordeu sempre comprovar la nul perquè malloc tornarà null
si no es pot assignar memòria.
Diguem que vostè demana un ridícul quantitat de memòria.
El seu equip no serà capaç d'assignar molt.
>> Així malloc és només va per tornar null.
Així que sempre recordi verificar si l' punter que va rebre de malloc és
nul · la o no, perquè, si és així, vostè pot ser ser dereferencing un punter i
causant errors secundaris.
I, finalment, no us oblideu seva memòria lliure.
>> Malloc és la creació de la memòria en el munt.
I vostè ha d'alliberar la memòria abans que el programa finalitza.
OK, això és tot per a mi.
Ho sentim, Rob.
Gràcies.
>> [Aplaudiments]
>> LUCAS: Unes últimes preguntes abans que Rob ve?
No?
Sí?
>> AUDIÈNCIA: no vaig veure aquesta línia.
Ha pujat ja?
>> LUCAS: Crec que Dave és pujar aviat.
>> DAVE: Serà publicat.
>> LUCAS: Serà en línia.
>> AUDIÈNCIA: Depèn.
>> LUCAS: Depèn?
D'acord.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: Sí, ha d'alliberar tot el memòria que es posa en el munt.
>> AUDIÈNCIA: [inaudible]?
>> LUCAS: Si.
Cada vegada que té un malloc cultura, vostè ha de tenir una cultura lliure
després de deixar d'usar aquesta variable.
Així malloc i lliure són sempre junts.
Els seus millors amics.
Sí
Rob?
>> ROB: Vaig a anar ràpid.
I també el vídeo serà posat.
Tinc el micròfon encès.
>> OK, així que la setmana 5 coses.
El primer que tenim és la pila.
Així que recordi que només hi ha una pila quadre per crida a la funció activa.
Veurem que en un segon.
I també recordar el que en realitat va en cada marc de pila seran
les variables locals de les nostres funcions, els arguments que es passen al nostre
funcions, juntament amb un parell altres coses que realment no
hagi de preocupar-se.
>> Així que aquí està un exemple de programa que, avís, principal printfing el retorn
valor foo 4.
foo és només va a tornar el valor de la barra de 4 coma juny.
I la barra es va a establir alguns locals la variable n igual a 4 vegades juny.
I després tornar núm.
>> Així que donem una ullada a la pila al llarg la iteració actual d'aquest programa.
Així que la part inferior de la nostra pila.
Recordeu que la pila creixi.
Així que a la part inferior de la nostra pantalla, seguim tenir un marc de pila per a les principals.
En iniciar el programa, el principal sempre va a estar a l'
fons del nostre stack.
>> I el que està dins de la nostra marc de pila de main?
Així que, encara que no existeixen locals variables al principal, com he dit abans,
tenim argc i RGV ocupar espai dins el marc principal de la pila.
Així principal ara va a truqui a la funció foo.
I això vol dir que va a foo obtenir el seu propi marc de pila.
>> Així que ara estem a l'interior d' la funció foo.
I què ha d'anar a marc de pila de foo?
Bé, foo té un argument n.
I n és igual a 4, ja que això és el que principal per a l'argument de foo.
>> Així que ara foo va a cridar bar.
Què és la barra tindrà a l'interior del seu "marc de pila?
Té x igual a 4 i igual a sis.
Això no és tot el que tindrem en el marc de pila perquè la barra
també té una variable local n.
I n anem a configurar de la mateixa a 24.
>> Així que ara la barra va a tornar núm.
Així bar està tornant a 24 el foo marc de pila.
I pel fet que la barra està tornant, que vol dir que estem fent esclatar el marc de pila
Per a la barra fora de la pila.
Així que tota la memòria que la barra havia estat fent servir ara és de la pila.
>> Ara, foo també va per tornar a 24 principal.
Així que ara que foo està tornant, la memòria que foo estava usant en el seu '
marc de pila també s'ha anat.
I ara, el principal va a trucar a printf.
Així printf és només una altra funció.
Quan cridem a printf, que serà un altre marc de pila per al printf
crida a la funció.
>> Què estem passant printf?
Això és el que va a anar en el seu marc de pila.
Si més no, estem passant que cent i barra invertida n i
l'argument 24.
Podria tenir més en ell és marc de pila si printf passa a ser l'ús d'alguns
variables locals.
No ho sabem.
>> Però tot el que passa a la printf marc de pila.
Es va a executar el printf.
Llavors printf està fet.
Tornarà.
Finalment, la principal està fet.
Inici tornarà.
I llavors el nostre programa està fet.
Sí?
>> AUDIÈNCIA: Estàs sortint amb [inaudible]
arguments [inaudible]
paràmetres?
>> ROB: Així que hi ha una subtil diferència entre els arguments i paràmetres.
I realment, en argot comú, la gent tendeix només barrejar tot el temps.
Però paràmetres són els formals nom de les coses.
>> Així argc i argv són el paràmetres al principal.
Els arguments són el que realment Va esdevenir en que aquests paràmetres.
Així que quan em truqui foo de 4, 4 és l'argument que estic passant polz
I el paràmetre n, a l'interior de foo, adquireix el valor 4
des del 4 va ser l'argument.
>> AUDIÈNCIA: [inaudible]?
>> ROB: n és una variable local a la barra.
n segueix sent local per foo, però que és un paràmetre a foo.
No és una variable local.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: foo és simplement trucant bar i tornar qualsevol retorns de barres.
>> AUDIÈNCIA: [inaudible]?
>> ROB: Sí, només per veure múltiples marcs de pila.
Sí?
>> AUDIÈNCIA: Per què es diu foo abans printf?
>> ROB: Per què es diu foo abans printf?
Així que podria haver, en canvi, fer alguna cosa com int x és igual a foo de 4
i després impresa x.
Però en canvi, he combinat la funció posar en l'argument de printf.
>> Però noti que no podem realment executar la crida a printf fins que
esbrinar què foo de 4 és.
Així que anem a avaluar això.
I un cop fet això es van tornar i avaluar això.
Sí?
>> AUDIÈNCIA: Ja que tant la barra [inaudible]
valor, per què no tenim [inaudible]?
>> ROB: Ells totalment han de ser int.
Això no va ser capturat durant múltiples passades.
Per tant, ha de ser int bar i int foo ja que tots dos dels
estan tornant sencers.
Buit és només si no van per tornar valors reals.
Sí?
>> AUDIÈNCIA: Si tinguessis una línia per sobre la tornada, [inaudible]?
>> ROB: Una línia per sobre de la rendibilitat?
>> AUDIÈNCIA: Si.
Igual que si es va fer printf i [inaudible], hauria d'imprimir dues vegades?
>> ROB: Llavors dins foo?
Si tinguéssim un printf aquí?
>> AUDIÈNCIA: Si.
>> ROB: Així que si teníem dret printf aquí, seria imprimir després.
Atès que estem cridant foo vegada dret aquí, llavors anem a colpejar el printf.
Llavors anem a trucar bar.
I llavors foo tornaran.
I això és tot.
Només he trobem printf vegada.
Sí?
>> AUDIÈNCIA: [inaudible]
printf cridar foo perquè estem primer trucar a printf i després estem passant
els arguments.
>> ROB: Així que en teoria, no és printf cridar foo?
Així que no.
Just per tal que c va a executar aquestes coses és, abans de poder
cridar a una funció, tots els arguments a la funció que
ser completament avaluats.
Així és això completament ocupació?
Sí, és només una cadena.
És només un valor.
>> Llavors hem de completament avaluar això.
Un cop fet això, ara tots s'avaluen els seus arguments.
I ara podem fer que el trucar a printf.
Sí?
>> AUDIÈNCIA: Una pregunta.
Si vostè té una funció nul · la, ha vostè té retorn i coma?
>> ROB: No fer un punt i coma retorn si té una funció void.
D'acord.
Així que ara algunes coses munt.
Així munt és com farem front amb la gestió de memòria dinàmica.
I això contrasta directament amb la apilem que anomenaríem automàtica
la gestió de memòria.
>> Així que a la pila, mai s'ha per fer front a com les variables locals
estan sent empès i fet esclatar fora de tot aquests marcs de pila i totes aquestes coses.
Vostè no ha de preocupar per això.
És automàtic.
Així que el munt és manual.
I el [inaudible]
prové d'aquestes funcions malloc i lliure.
>> Així que aquí està un altre programa.
Tot el que estem fent és mallocing un nombre sencer.
Estem emmagatzemar-lo en estrella de x.
Per descomptat, hem de comprovar per veure si x és nul.
Llavors anem al que acaba d'establir X està apuntant a un 50.
Imprimiu el que x està apuntant a, print x, i lliure de x.
>> Llavors, com és això en realitat va a veure si ens fixem en la nostra pila i el munt?
Així que anem a començar de nou.
La part inferior de la nostra pila com abans.
Recorda que et satisfan directament s'oposa a la pila?
Així que anem a tenir la la part superior de la nostra pila fins allà.
>> De manera que la part inferior del nostre stack, tenim nostre marc de pila per a les principals.
Té l'espai per argc, argv, i ara tenim una variable local x, que
és un int estrelles.
Així que repetirem a través d'aquest programa.
El primer que tenim és una crida a malloc.
>> Així que estem fent una crida a malloc.
Malloc és una funció.
Es va a aconseguir un marc de pila.
Què estem passant a malloc?
Això anirà dins d' del marc de pila.
Estem passant mida de n, que és 4.
Així que es passa a malloc.
>> Què fa malloc?
Ens agafa una mica d'espai en el munt.
Així que anirem a la pila.
I anem a agafar 4 bytes de la pila.
Així que donarem que una adreça arbitrària.
0x123 fingir que és una direcció que està en el munt.
>> Llavors, què és en realitat dins d'aquest regió de la memòria en la direcció Ox123?
Garbage.
Així que no hem guardat res en ell.
Així que pel que sabem, podria ser qualsevol cosa.
No ha d'assumir que és zero.
És molt probable que no zero.
>> Així que ara torna malloc.
I què fem quan torna malloc?
Ens vam proposar el que torna.
Fixem x igual al que que està tornant.
Així que què és el tornava?
Està tornant 0x123 ja que és el direcció del bloc de memòria que
acaba de ser assignat en el munt.
>> Així que tornar 0x123 x ara es va a establir igual a 0x123 que, il · lustrat,
que sovint dibuixem com X que tingui un real fletxa apuntant a aquest bloc.
Però x és simplement emmagatzemant aquesta direcció.
Així que ara hem de comprovar si x és nul.
No és nul.
Pretenem que aquesta malloc succeir.
>> Així que ara estrella de x és igual a 50.
Així estrella recorda que significa anar a aquesta direcció.
Així 0x123 Anem a anar a aquesta direcció.
Així que això ens porta fins allà.
Què estem fent en aquesta direcció?
Estem emmagatzemant 50.
>> Així que després d'aquesta línia, que és el que les coses seran similar.
Així que ara que ja no és escombraries allà.
Ara sabem que 50 és en aquest en particular perquè la direcció
ens hi vam posar.
¿D'acord?
Així que ara anem a imprimir f.
>> Així que primer anem a imprimir estrella x.
Llavors, què és l'estrella de x?
Un cop més, l'estrella x mitjans van a la cosa que x està apuntant.
Així que x és l'emmagatzematge de 0x123 Anar a això.
Rebem 50.
Així imprimir f que.
I això vol dir que va a imprimir 50.
I després que torna.
>> I després tenim el segon printf.
Ara estem per cent p.
Si no ho has vist, això és com imprimir un punter.
Així que tenim per cent i, cent f, i tots els que ja.
Així per cent p, imprimir un punter.
>> Així que x és un punter.
Així que si anem a imprimir x si mateix, estem imprimint el que és en realitat l'interior
x, que és 0x123 Així que la primera print f voleu imprimir 50.
La segona impressió f va imprimir 0x123 Sí?
>> AUDIÈNCIA: Utilitza cent x per imprimir un punter?
>> ROB: Així que vostè utilitza per cent x per imprimir un punter?
Així que es pot, però per cent x és just, en general, per com si té alguna
sencer i que voleu imprimir com un hexadecimal.
Així és com es fa això.
>> Atès que, per cent d faria imprimir com decimal.
Aquí és on obtenim cent d. i és simplement sencer.
per cent p és específicament per als punters.
>> Així que x és un punter.
Volem utilitzar cent p.
Però per cent x podria funcionar.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Si.
Almenys per a aquesta convocatòria - així que no incloure aquí.
Però aquests dos arguments són necessàriament dins d'aquest marc de pila
juntament amb les variables locals printf passa a estar usant.
I després la següent crida a printf ara dins el marc de pila printf és
p per cent de barra invertida N i sigui quin sigui el valor de x és, que és 0x123.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Va a imprimir alguna cosa que són aquestes.
>> AUDIÈNCIA: [inaudible].
>> ROB: Així que la imprimeix en format electrònic.
S'assembla a una adreça.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Per què és què?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Per què és aquest punter de 4 bytes?
Així que hi ha un munt de 0 de davant d'aquesta.
Així que és realment 0x0000000123.
En un sistema de 64 bits, no hi hauria un munt de més zeros.
Sí?
>> AUDIÈNCIA: [inaudible].
>> ROB: Així que el primer printf voleu imprimir -
>> AUDIÈNCIA: [inaudible].
>> ROB: Sí, es va a imprimir el que x està apuntant a.
Star diu què és això el que apunta.
Descarregar pdf.
Llavors, què és el que apunta?
50.
Descarregar pdf.
Això és el que anem a imprimir.
Atès que, en el següent, estem simplement imprimir x si mateix.
El que està dins de la f?
0x123.
D'acord.
>> I llavors, per fi, tenim el lliure.
Què estem passant a alliberar?
Estem passant x.
Aquest temps realment exhibició en el marc de pila.
>> Així que estem passant el valor 0x123 per alliberar.
Així que ara sap lliure, benvinguts siguin, He d'anar fins el munt
i lliure que la memòria.
Ja no és l'ús del és en la direcció 0x123.
>> Tan lliure va a alliberar que des del munt.
Ara la nostra pila està buida altra vegada.
No tenim pèrdues de memòria.
Ara lliure tornarà.
Observi que x és encara 0x123.
Però això és ara de memòria no vàlida.
Ja no hauria d'eliminar la referència de x.
Sí?
>> AUDIÈNCIA: Es retornarà 0 redundant?
>> ROB: És returen 0 redundant?
Sí
Acabem de posar que hi ha perquè tenim un canvi d'aire.
Així és com, sí, li permet incloure el retorn 0.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Així que després de lliure x, què passa si tractem d'eliminar la referència al punter?
És possible que no surti malament.
És possible que encara ens aconseguim 50.
>> És possible, també, que aquesta memòria és que ara s'utilitza per a una altra cosa.
Pel que és un comportament indefinit.
I indefinit significa alguna cosa pot succeir.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: No, pel que si vostè assigna x a una altra cosa.
Així que si aquí hem dit x és igual a cosa malloc altres -
esdeveniment mida malloc -
a continuació, que bloc original de la memòria no s'allibera.
I hem perdut oficialment.
Això és una pèrdua de memòria.
Hem perdut totes les referències a aquest bloc de memòria.
Així que no hi ha manera que mai puguem alliberar-la.
OK, així que després tornar 0 significa fet.
>> Molt bé, així que el desbordament de pila.
Quina és la idea aquí?
Així que recorda, munt està baixant.
Pila està pujant.
Així que aquest va ser l'exemple de la conferència, Crec que, en el seu principal només va a
cridar a aquesta funció foo, que va dir recursivament una vegada i
una altra vegada.
>> Així marcs de pila es va a treballar exactament de la mateixa.
Així que anem a començar amb el principal com el marc de pila inferior.
Llavors principal va a trucar a foo, que es posarà un marc de pila.
>> Llavors foo va a trucar a foo de nou, que es va a aconseguir
un altre marc de pila.
I després una altra vegada, i una altra, i una altra, i una altra fins que, finalment, es corre
en el munt.
Així que aquesta és la forma en què obtenim un desbordament de pila.
I en aquest punt, que la SEG culpa.
O vostè realment SEG decisió abans aquest punt, però si.
>> AUDIÈNCIA: És un bolcat del nucli del mateixa com fallada seg?
>> ROB: Llavors veuràs segmentació nucli falla va deixar.
Vostè obté un bolcat de memòria quan vostè SEG culpa.
I és com un bolcat de tota la contingut de la memòria actual per
que es pot tractar d'identificar per què SEG error.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Llavors significa una fallada de segmentació hi ha un desbordament de pila.
Així que no necessàriament.
Un error de segmentació significa que vostè està emocionat record d'una manera
vostè no ha de ser.
Així que una manera que això passi és que, quan apila desbordament, vam començar tocant
memòria d'una manera que no hem de ser.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Llavors dins d'un bucle infinit.
Igual, això és com una infinita recursiva bucle i així tenim una altra
pila emmarcar cada vegada.
Però just a l'interior d'un habitual infinit, mentre que un -
bo, anem ni tan sols imprimir f -
fer alguna cosa.
El que sigui.
>> No estarem rebent un altre marc de pila.
Només mantindrem looping sobre aquesta única instrucció.
La pila no està creixent.
És el fet que cada recursiva anomenada ens està donant un marc de pila.
És per això que tenim un desbordament de pila.
Sí?
>> AUDIÈNCIA: Així que si vostè ha dit per obtenir el while i després [inaudible]?
>> ROB: Així que si dins el bucle while hi havia un printf, malgrat això
No SEG culpa.
Jo simplement no vull confondre les coses.
Seria bucle.
S'obtindria una sola pila marc per al printf.
>> Llavors printf tornaria.
Llavors serà bucle de nou.
S'obtindria una sola pila marc per al printf.
Seria tornar.
Marc de pila individual.
Així que vostè no està aconseguint aquest infinit apilant marcs de pila.
>> AUDIÈNCIA: [inaudible]?
>> ROB: Si.
Així que aquest desbordament de pila passa perquè cap d'ells
trucades a foo estan tornant.
Així que si tornem, llavors ho faríem començar a perdre els marcs de pila.
I llavors no tindríem desbordament de pila.
I és per això que vostè necessita un cas base per les seves funcions personals.
Sí?
>> AUDIÈNCIA: És la mida potencial i la apilar per al munt de la mateixa per
tots els programes?
>> ROB: Aproximadament.
És la mida potencial de la pila i el munt de la mateixa per a tots els programes?
Aproximadament.
Hi ha alguna cosa de l'assignació a l'atzar a on comença la pila i
on comença el munt.
Si li passa que té una gran quantitat de variables i coses globals, és possible
prendre distància d'una mica d'espai per a la seva pila.
>> En un sistema de 64 bits, és pràcticament tenir memòria infinita.
Hi ha tantes coses.
Entre 32 bits i 64 bits, és una diferència significativa.
>> Vostè aconseguirà molt més apilar i espai d'emmagatzematge dinàmic en una de 64 bits
sistema perquè no només més adreces que poden utilitzar.
Però en un sistema individual, ho farà ser més o menys la mateixa quantitat de pila
i espai d'emmagatzematge dinàmic.
Està bé.
>> Així que l'últim és la compilació.
Així que vostè ha de saber aquest procés.
Hi ha quatre grans passos.
Així que el primer ha ser fàcil de recordar.
Pre-processament.
Té la pre prefix-hi.
Així que es tracta abans de tota la resta.
>> La cosa a recordar és el hash.
Així defineix el hash i de hash inclou en tots aquells.
Aquests són tots els pre-processador directives.
Aquestes són les coses que la pre-processador s'encarrega de.
>> Llavors, què fa un pre-processador?
És una cosa molt ximple.
Tot el que és capaç de fer són tots ells operacions de còpia, i tallar i enganxar.
>> Així de hash estàndard inclou dot i0 h.
Què és de fer?
Es va treure la norma dot i0 h arxiu i enganxar-lo a la part superior
on sigui que es diu de hash inclou estàndard dot i0 h.
>> I qualsevol hash de definir que hem vist, el que és de fer?
El seu copiar el valor que el hash definida es defineix com i enganxar que
allà on estigui utilitzant el valor.
Així que el preprocessador simplement fa realitat text simple operacions basades.
No fa res intel · ligent.
Així que tota la resta és més complicat.
>> Així que ara que és preprocessador fet, en realitat compilem.
Llavors, què vol dir compilant?
Estem passant de codi c al codi assemblador.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Sí, vam agafar això.
Així que la compilació.
Anem de c per al muntatge.
Així que això és un canvi d'idioma actual.
Compilació de si mateix significa passar de un llenguatge d'alt nivell per
un llenguatge de nivell inferior.
>> I C és un llenguatge d'alt nivell en comparació amb el muntatge.
Què és l'assemblea?
Les seves instruccions que són, bastant molt, feta per a la seva CPU.
Però l'equip segueix fent No entendre el muntatge.
Només s'entén uns i zeros.
Així que el següent pas és el muntatge, que ens porta a partir d'aquestes instruccions que
seva CPU entén i realitat els tradueix, a
els uns i zeros.
>> Així C per a muntatge en binari.
Però jo no tinc un executable encara.
Així que pensa a la biblioteca CS50.
Nosaltres li proporcionem un binari per aquesta biblioteca CS50, que té GetString
i GetInt i tot això.
>> Però la biblioteca CS50 -
ai de si mateix - no és executable.
No té una funció principal.
És només un munt de binaris que es pot utilitzar.
Així que la vinculació és com reunir tots d'aquests diferents arxius binaris
en un arxiu executable real.
Un que pot escriure dot slash un punt fora.
>> Així que això és com l'arxiu que escriure, - el que el seu programa és -
Ceaser punt c.
Però ara s'ha compilat a binari.
Així Ceaser punt o.
I això és les nostres biblioteques CS50 binari.
I estan sent combinats en un sol executable.
Sí?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Així que primer ha d'incloure, recorda, el hash com és en realitat un
etapa de pre-processador.
Però això és a part.
Si vostè no està utilitzant qualsevol de les funcions que estan fora del seu arxiu només llavors,
no, no cal vincular res ja que tens tot.
>> Dit això, printf està sent vinculat polz
Si alguna vegada utilitza printf, això és una cosa que necessita ser vinculat a
perquè vostè no va escriure això.
I, de fet, printf és automàticament vinculat polz
Vostè sap com en la línia d'ordres o quan que escriu make, veus que té
tauler l CS50, que tinga un enllaç a la biblioteca CS50?
Printf, i coses per l'estil, es va estar vinculat en forma automàtica.
Alguna altra pregunta sobre qualsevol cosa?
>> AUDIÈNCIA: [inaudible]?
>> ROB: Vinculació?
Tenim un munt de diferents arxius binaris.
Aquest és l'exemple canònic que utilitzem és la biblioteca CS50.
Hem recopilat i donat que la binari per aquesta biblioteca CS50.
>> Voleu utilitzar GetString en el seu programa.
Així que veu i utilitza GetString.
Però sense el meu codi binari per GetString, al compilar el codi
baix, vostè no pugui executar el seu programa perquè GetString String és
encara no completament definit.
>> És només quan es vincula al meu binari que conté GetString que ara, tot
D'acord, pot en realitat executar GetString.
El meu expedient està complet.
I puc executar aquest.
Sí?
>> AUDIÈNCIA: El que uneix convertir el binari de l'executable?
Així que encara que no té una altra biblioteques, no seguiria sent
necessari traduir la [inaudible]?
>> ROB: Així un executable es troba encara en binari.
És que la combinació d'un conjunt munt de binaris.
>> AUDIÈNCIA: Moltes gràcies.
>> ROB: Cap problema.
Alguna altra pregunta?
En cas contrari, estem preparats.
Està bé.
Gràcies.
>> [Aplaudiments]
>> AUDIÈNCIA: Gràcies.
>> ROB: Si.