[Powered by Google Translate] [Aste 4, Continúa]
[David J. Malan - Harvard Unibertsitatea]
[Hau CS50 da. - CS50.TV]
>> Hau CS50 da, eta 4 aste bukaera honetan.
Beraz, albiste onak eta txarrak Berri batzuk.
Buruzko hitzaldia No astelehena, ez dago arazorik, datorren astean. [Ikasle kontsolatzeko]
Ez duzu hori nahi du.
Baina ez dugu hurrengo Asteazkena ordez,
eta ez da, halaber, ikasketa planeko 1 ostirala hitzaldia bakoitzeko hurrengo ostiralera pista jarraitu ahal izango dugu.
Baina dena betiko moduan egingo da filmatu, beraz, ez kezkatu.
>> Eta aldean, 0 quiz zer egin dugu aste bukaera aldera
ikastaro homepage cs50.net azalpen bat bidaltzeko
zer nolako itxaropenak orduan galdetegiaren lehen behar duzu.
Oro har, aukera anitzekoak, egia faltsuak, erantzun laburrean, labur kodifikazioa arazoak izango da.
Ez duzu espero da baliokidea ezartzeko
arazo bat zela ikusi pset bat, ordenagailu bat behar duzu
araztaileak bat eta antzekoak, baina txiki kodeketa arazoak izango dira.
>> Eta, hain zuzen ere, gida CS50 galdetegiak zentzu onena bezala
da cs50.net joan, Galdetegiek link joan
ikusi eta iraganean hainbat urte dezakezu merezi galdetegiek-.
Just konturatzen curriculumean ez dela beti bera izan da urteetan zehar.
Batzuetan, batzuetan kentzen dugu,
hala badagokio, gai batzuk ikus zaharra duten galdetegiak
Ideia ez da zer da hitz egiten duzula, bai da dugun estali zuen
edo ez garela estaliko da.
Baina berrikuspen forma, igande honetan, astelehena, eta astearte
baita, ikastaro-zabal Igande gauean berrikuspena saio gisa
ikastaroa homepage iragarri denbora eta kokapena
Ikastaro irakaskuntza bekadun berrikusteko aukera bat izan duzun guztia
aurtengo material, bi atal eta klase osoa,
eta horiek ohiko moduan egingo da filmatua baita.
>> Guztiak eskubidea. Beraz ADO gehiagorik gabe, pass iruzkin bat / huts egin eta gehitu / jaregin.
Ikusi dezakezu nire ohar bart, eta hau benetan osagarriak reassurance batzuk
bereziki gutxiago erosoa artean, edo nonbait artean badira
eta bakarrik pixka bat sentitzen ari zaren zure burua baino gehiago,
konturatzen da, hain zuzen ere, nahiko normal, eta han laguntza zabal bat leku egitura,
eta horietako batek, bulegoko ordu gehiago hobetzeko nire email gaueko azken per asmo,
eta konturatzen ere pass bezalako aukera bat / hau atsegin klase bat huts egiten
benetan ertz hau atsegin dute ikastaro bat hartu off gisa mekanismo bat ekarri,
beraz, berriro ere bada, 10, 15, 20 ordu zaren gastua
besterik ez pset batzuk lortzeko lan egin nahi eta bide% 90-95 Oraindik ez badakizu
baina ezin duzu madarikatua bug batzuk aurkitu, pass batean / eredua da sort ados huts egin.
>> Ideia da mekanismo orduan dezakezu joan foku zure psets beste
edo lo egin edo edozein dela ere nahi duzun bideratzen da.
Beraz, konturatzen hau datozen Asteartea arte duzula - teknikoki 5ean astelehenean,
baina oporrak, eta, beraz, datozen astearte honetan - pass from kalifikatu edo alderantziz aldatzeko / huts egin.
Oraindik duzu eta benetan amildegi gainean dira, eta guztira jaregiten pentsatzen,
mesedez niri hitzaldia ondoren harrapatzeko edo jaregin ohar bat.
Gutxienez chat genuke love puja adieu aurretik.
Guztiak eskubidea. Beraz, azken aldiz off prestakuntza gurpilak hartzen hasi ginen.
Hain zuzen ere, zentratu, string dugu.
String CS50 liburutegia deklaratu zerbait da,
zehazki cs50.h izeneko fitxategi horretan hasteko aste honetan eta hurrengoan begiratu dugu.
Baina esaldia benetan zerbait sinplifikazioa
apur bat gehiago arcanely char * gisa deskribatu.
Char ezagutzen ari gara. Karaktere bat besterik ez da.
Baina astelehenetik * adierazten da zer? >> [Ikasleak] erakuslea.
Erakuslea. Eta zer da erakuslea da? >> [Ikasleak] helbidea.
>> Helbide bat, memoria kokaleku bat bezalakoa da.
Zer da helbide bat edo kokapena edo memoria?
Berriz ere, guztiok eramangarriak Kontzertu bat edo 2 gigabyte RAM seguru asko egun hauetan,
eta horrek esan nahi du milioi edo 2 milioi byte memoria merezi duzu.
Eta ez benetan axola zer itxura fisikoki bezala,
baina fede zenbakia hartu duzula zure ordenagailu eramangarria bytes banakako
byte 0 da, hau byte 1 da, hau da, byte 2 milioi
eta hori da hain zuzen, ordenagailu bat duenaren.
Espazioaren esleitu pertsonaia bakar bat, esate baterako,
ditu, jakina, nonbait bizi dira eta zure ordenagailuaren memorian,
eta, agian, at byte 12345 zenbakia,
eta hori da nonbait hemen zure ordenagailuaren memorian.
Eta helbidea, eta, ondoren, pertsonaia hori 12345 da.
>> Orain, aste 0 gaur egun bidez, beraz, orain arte, ez dugu benetan zaintzen
memoria gauzak non gordetzen dira normalean erabiltzen ditugun sinboloak,
aldagaiak, eta array benetan gure datuak.
Baina, astelehena eta gaur egun gehiago guztiak bezala, gaur egun ari zaren izan behar
programak idazteko gaitasunak espresibo guztiak
ordenagailuaren memorian benetan manipulatzeko ordea egokitzen ikusiko duzu,
bi helburu onak eta txarrak,
bugs stuff hau ikasteko puntu honetan emaitza oso ohikoa da.
Baina zer esan nahi du benetan char * bat izan?
Aurrera atzera, eta itzuli dugu Binky agindu gaur egun.
Dezagun adibide sinple bat hemen.
Fitxategi hau compare.c gisa gorde dadila me, eta utzi just me txantiloien kodea batzuk hemen
beraz txertatu stdio.h, let me eman ere neure burua artean cs50.h. Han mapan handiago dut.
Nagusia int main (void) idazten hasteko me, eta, gaur egun, honen antzeko zerbait egin nahi dut:
printf ("Emadazu kate bat:") eta, ondoren, erabili egingo dut katea s lortzen GetString
kate erabiltzaileari, ondoren, beste bat eskatu dut.
("Emadazu katea beste:") eta, hori lortzeko GetString bidez eskatu noa.
Deitu dut t t dator kate bat s eta s izen polit bat da ondoren pretty generic delako.
Beraz GetString, eta gaur egun nahi dut behatu kontrol bat egin eta esan nahi dut
(s == t) ondoren, besterik ez bada naiz erabiltzaile kontatzeko printf ("idatzi duzu! gauza bera \ n");
bestela, inprimatu bezala ("duzu zerbait idatzitako desberdinak dira! \ n") zerbait noa
edo edozein esaldi izango da. Horrelako zerbait So.
Ondoren, ohikoa den bezala, 0 besterik ez signified ezer txarra gertatu itzuli dut,
eta aurretik joan eta konpilatu eta exekutatu programa hau noa.
>> Baina, astelehena, programa hau zuena dugu,
eta benetan ziren kontatu HELLO ez dela HELLO eta agurtuko ez da agur.
Portaera ikusi dugu hau atsegin apur bat gehiago izan zen.
Utzi nire iturburu direktorioan sartu me, hemen zoom, eta dezagun konparatu egin ez.
Konpilatuta ados. Utzidazu exekutatu alderatu. Give me kate bat: HELLO.
Give me katea beste: HELLO.
Gauza desberdin idatzi duzu!
Beno, let me errazagoa 50, 50 antzeko zerbait probatzeko. Gauza desberdin idatzi duzu!
hi, hi. Beraz, argi eta garbi, zerbait gertatzen da hemen.
Baina zergatik azalpen zer izan zen?
Dirudienez, line: 12 erabat dysfunctional da.
Zer da funtsezko arazoa hemen? Bai. >> [Ikasleak] helbideak alderatuz.
Bai, hain zuzen. Benetan helbideak alderatuz
horretan, HELLO eta HELLO gordetzen dira.
Ez da letrak alderatuz HELLO behin eta berriro,
zer benetan gertatu delako, denbora honetan guztian izan dugu GetString erabiliz
Hau arbela da berriro gure ordenagailuaren memoria,
eta demagun aldakorreko s geratuko ondoren GetString deitzen diot nik.
Zein da nire memoria itxura?
Dezagun arbitrarioki esan hau atsegin s itxura. Plaza bat da.
Eta nahiko denbora asko edozein memoria zati bat marrazten dut pantailan
32 bit dira dut hau atsegin karratu marrazketa-tresna, hain zuzen ere, delako,
erakuslea bat, helbide bat, 32 bits da. Int bat bezala da.
Hori oinarritutako informatika-sistema aldatu egiten dira.
Vaguely zure Mac edo PC dela 64 bits Izan ere, ezagutzen dutenek,
benetan lu byte irakurtzerakoan ordenagailua 64 bit erakusleak erabiliz,
64 bit-eko helbideak, eta horren upsides artean zure ordenagailu
antaño baino askoz gehiago RAM izan ditzake.
Long Narrazio laburren, atzera egunean ordenagailuak bakarrik erabiltzen 32 bits
helbideak adierazteko, byte kopuru handiena izan liteke
Kasu horretan izan zen 32 bits baduzu?
Beraz, 4 milioi, eskuinera, 2 32 4 milioi dagoelako.
Zenbaki hau izan da ikastaroaren Noizbehinkako.
>> Beraz, bada besterik ez duzu 32 bit, kopuru altuena dezakezu zenbatu da, gutxi gorabehera 4 milioi.
Baina hori ordenagailuen funtsezko muga bat izan zen, duela urte batzuk arte
dezakezu soil-soilik zenbatu gisa altua bada 4 milioi delako,
Ez du axola erosten RAM 8 gigabyte edo are 5 RAM gigabyte bada;
Ezin zenbatzen handiko, beraz Ezertarako izan da.
Soilik sartu ahal izango duzu zure ordenagailuaren memorian lehen 3 edo 4 gigabyte.
Hori da gai bat gutxiago da orain, eta MacBook Pros eta Dells erosi ahal izango dituzu.
8 RAM gigabyte edo, are gehiago egun hauetan.
Baina esleitu dut nahiko besterik ez bada erakuslea programa honetan, erakusle izeneko s,
pantaila hau atsegin zitekeen, hain zuzen ere, atzera zuritu geruza hau behar dugulako.
Esaten katea mantentzen dut, baina, astelehenetan, katea da benetan char *,
pertsonaia batzuen helbidea.
Beraz, dezagun prestakuntza gurpil off nahiz GetString oraingoz jarraituko dugu.
Beraz, deklaratu dut s, eta honen zatia memoria bat da, 32 bit.
Zer lehenespenez memoria hemen? >> [Inaudible ikaslearen erantzuna]
Zer da hori? >> [Ikasleak] Garbage. >> Garbage. Hain zuzen ere.
Programatzailea daukazu, ez bada balio bat jarri aldagai batean, nork daki zer da?
Batzuetan zortea lortuko duzu, eta 0 da, mota, nice garbi default balioa da,
baina ikusi genuen astelehena, batzuetan erabateko zentzugabekeria da,
batzuk benetan big zenbaki hori positiboa edo negatiboa non etorri ziren?
Bai. >> [Ikasleak] funtzio aurretik. >> Bai.
>> Askotan funtzioa izeneko got delako aurretik gogoratu
memoria funtzioak deitzen duzun bezala, sortu dute gero eta leku gehiago behetik gora,
eta ahalik eta azkarren funtzioak, memoria hori lortzen berrerabili
lasaia hurrengo lortzen izeneko, zure memoria xerra bera erabiltzen ari da.
Eta duzun ezkerreko zabor dago, aurreko balioak izanez gero,
s akatsa izango dugu balio izatea denean, benetan ez dugu jarri ezer ez dago.
Beraz, puntu honetan, gure RAM itxura hau.
Orain linea 7 eskuinaldean GetString deitzen ari gara,
zein izan dugu gaur egun egiten asteak, baina zer da benetan egiten GetString?
CS50 langileek idatzitako GetString da apur bat adimenduna
hori ahalik eta azkarren erabiltzaileak hasten idazten gakoak eta hits Sartu
GetString zifra zenbat sakatzeak egin user hit,
zenbat karaktere ez RAM esleitu behar dut.
Eta non RAM hori nondik datorren, nork daki?
Nonbait da zure ordenagailuaren 2 gigabyteko edo memoria whatnot.
Baina Berek ordenagailua aurkitu HELLO hitza espazioa hemen.
Hitza idatzi dut H-E-L-L-O izan zen.
Eta marraztu badugu, karaktere-sekuentzia bat bezala, marrazteko genuke hau atsegin dute.
Baina 1 extra gauza egin behar dut. Zer da C edozein kate amaieran pertenece?
Null pertsonaia, \ 0 idazten dugu.
Teknikoki zenbakia 0 da, baina backslash argiagoa guztiak egiten
hau da, hitzez hitz kopurua 0 osoko 0;
ez da, adibidez, aurrekontu-unquote 0 teklatua idatzi dezake.
Beraz, hau da, HELLO.
>> Eta zer esan astelehena GetString bezalako funtzio bat
benetan itzuli aste horiek guztiak?
Ez da berez kate bat itzuli ez delako benetan dute zentzua
kateak ez delako existitzen. CS50 liburutegia fabrikazio sort Oraindik dute.
Zer da benetan kate bat, teknikoki? >> [Ikasleak] lehen pertsonaia da.
Hain zuzen ere. Nahiko besterik ez da lehen karaktere helbidea erabiltzaileak idatzitako sartu
Beraz, nire hitza HELLO bueltarik byte kopurua 123 at eta gero byte kopurua 124 at bada,
125, 126, eta abar, zenbaki besterik ez dut nire byte 0-tik gora izanez gero,
benetan zer GetString itzuli egin da literalki zenbakia 123.
Beraz, zer lortzen s jarri zenbakia 123, ez da gutun H, hitza ez da HELLO,
nahiko besterik gabe, helbidea HELLO lehenengo letra aurkitu ahal izango dut.
Baina hori ez da nahikoa atsegin dirudi. Kate bat eskatu nion, ez da pertsonaia bat.
Beraz, zer egiten dugu edo ordenagailua ezagutzen ELLO mota batera H?
Zer akordio sort dugu? Bai.
[Ikasleen] bera kontatzea zenbait karaktere gehiago aurkituko mantentzen du. >> Zehazki.
>> Giza-ordenagailu konbentzio horren bidez denean kateak dagoenean,
bestela gaur egun ko char bezala ezagutzen, irudikatu nahi izan besterik ez duzu
non bizi Kate bakoitzaren amaieran benetan besterik ez da loop bat baino gehiago errepikatzean da,
bitartean loop bat, edozein dela ere, eta, beraz, kate amaiera aurkitzen
orain dela infer dezakezu, oh, hitza osoa HELLO zen.
Duzun dutenek aldez aurretik programazio esperientzia duten baliteke Java ezagutzea
besterik gabe, dei egin dezakezu. luzera eta beste hizkuntza batzuetan luzera edo antzeko dei dezakezu.
Hori da, hizkuntza asko, batez ere, gauzak izeneko objektuetara bideratutako hizkuntza
zerbait luzera datuak beraren zati kapsulatuaren barruan mota da,
askoz ere gustatzen zaigu kapsulatuaren identifikazioak eta izenak eta ikasleari astelehena barruan etxeak.
Baina C askoz maila apalagoa da. Objektuak edo klaseak ez daude, entzun dituzun bada termino horiek aurretik.
Guztiak duzu benetan memoria helbideak da.
Beraz, honetan datu interesgarri egitura ordezkari modu zaharra moduko da.
Lehen karaktere helbidea bezala balio Irteeran bat izango duzu
eta, ondoren, batzuk arbitrarioak konbentzio guztiek konpromisoa hartzen du jarraipena.
Beraz, katea luzera nola inplementatu da, ez dugu proposatzen?
Strlen, strlen, batzuk hainbat aldiz erabiltzen dute gaur egun. Nahiko erraza da, ezta?
2 kode-lerro bezala.
Pretty askoz, Nolabaiteko loop bat da, agian tokiko aldagai osagarriak.
Baina strlen erakuslea bat hartu besterik ez du, eta, ondoren, \ 0 bila hasteko.
>> Eta ahalik eta azkarren aurkitzen it, hori kate horretan hartu urrats kopuru osoa itzuli ahal izango da.
Beraz, hau ezin dugu infer zer hurrengo doan.
Demagun, ondoren, t deklaratzen dut Nik line 10 egin.
Hau zabor balio batzuk. Nork daki lehen?
Baina 10-line eskuinaldean berriz GetString deitzen naiz.
Nork daki non da?
Dezagun arbitrarioki esan, sistema eragilearen gela baino gehiago modu hemen aurkitu.
H-E-L-L-O coincidentally idatzi berriro gertatuko I
eta, beraz, irudi-mota bera marraztu ahal izango dugu.
Baina berregin Argazki hau ditudan nahita
hainbat HELLO hau baino. delako
Beraz, hemen hau kokapena 456 izan daiteke, hau 457 da, eta abar.
Beraz, zer non jarri lortzen behin izan zen galdera ikurra?
Kasu honetan 456.
Zenbaki horiek aukeratzea arbitrarioki ari gara benetan delako gaur egun ondoren
ez ari gara hainbeste axola zer da ezer helbidea.
Guztiak buruz zaintzen dugu dugun irudikatu datu-pieza batzuen helbidea HELLO bezala.
>> Beraz, benetan zer jende gehienak informatikako memoria helbideak buruz hitz egiten denean
eta erakusleak buruz hitz egiten,
baino traba kalkulatzen 123 - nork zaintzen non stuff honetan benetan da,
batzuk zenbakizko helbidea ezagutzen dugu dagoela
mundua errazteko eta s esatea besterik ez da pertsonaia bat seinalatuz
eta t pertsonaia bat seinalatuz.
Izan ere, dela gezi bat da, nahiko intentziozko
gaur egun s literalki delako H eta t seinalatuz beste H seinalatuz
egunaren amaieran, ez delako du axola zer da helbidea,
, baina materia kode zati batzuk helbidea adierazteko dugun gaitasuna du.
Ez dugu benetan manipulatu helbide hauek oraindik
beraz, ikusteko non interject dezakegu ordenatzeko do gauzak erakusle dugu,
baina gaur egun line 12 literalki zer balio ari gara alderatuz
istorioa line 12 honen arabera?
123 berdina 456 berdina esaten ari gara? Eta hori da, zalantzarik gabe, ez da kasua.
Eta baita kontzeptualki ere, erakuslea hau da behin betiko ez bezala
izeneko birritan GetString duelako, eta GetString ez super clever saiatu,
ez da konturatzen, oh, HELLO idatzi duzula Duela 5 minutu;
utzi dizu me erakuslea bera eman nuen aurretik,
zatia memoria bakoitzean deitu besterik ez da bideratzen.
>> Beraz, nola ez, arazo hau konpondu dugu?
Maila handiagoa bada, kate HELLO eta HELLO alderatu nahi dut
Ez dut erakusleak buruzko zaintzeko nola joaten galdera erantzun dut,
ez erabiltzaileak idatzi gauza bera? Zer da beharrezkoa hemen? Bai.
[Ikasleak] Erabili funtzioa. >> Funtzio bat erabili ahal izango dut koadroan.
Strcmp, s-t-r-c-m-p izeneko funtzio bat erabili ahal izango dut,
katea alderatu esaten bertsio laburtua.
Eta joan badugu sartu, esate baterako, alderatu 2,, gaur egungo handouts artean dago,
Zehazki egiten dut.
Edozer 1 line bera mantendu dut behera 26 edo
eta, gaur egun, nabarituko zati hau aldatu egin da apur bat.
Dezagun ahaztu une batez line 28 eta fokua hau bat bakarrik.
Zer egin zuen astelehena alderatu str esaten dugu eta horrela, ez?
Hartzen kasu honetan 2 erakusleak, s eta t-prozesua eskumena da,
sort ia bere hatz 2 hizki horiek ipintzeko,
eta zer egin behar den bitartean loop bat edo bat loop antzeko zerbait da,
dira, eta horiek berak esaten du? Hala bada, behatzak edo erakusle aurrera mugitzen da.
Dira horiek berak, horien arabera, bera da, horiek
berean, horien arabera, bera hauek? Eta ooh, naiz bai s eta t katearen amaieran dut.
Ez dut aurkitu kontraesanak edozein. Bai, kateak horiek berdinak dira.
Eta zer ez str alderatu bueltan 2 kateak berdinak dira, itxuraz? Zero.
Beraz, 0 ona da, kasu honetan itzultzen du -1 edo +1 bada delako,
horrek esan nahi du s bakarrik gertatzen t t alfabetikoki aurretik edo ondoren etorriko.
Eta zergatik baliagarria funtzio bat esaten dizu katea dator aurretik izan
edo hiztegi baten ondoren?
[Ikasleak] bilatzen. >> Bilatzea eta ordenatzeko.
>> Beraz, gauza berriak egin dezakezu bilaketa bitarra edo burbuila sort bezala edo batu sort
non gauzak konparatu behar duzu.
Horrela, orain arte moztu txoko batzuei mota dugu, eta bakarrik ordenatzeko buruz hitz egin
zenbakiak testuinguruan atsegina eta erraz hitz egin duelako,
baina, zalantzarik gabe dezakezu alderatu, kateak, sagar eta banana,
sagar banana aurretik etorriko da, era berean, ezaguna bada delako,
kateak mugitu besterik ez Rob atsegin memoria inguruan egin merge sort bideoa
eta hemen egin dugu aukeraketa ordenatu, txertatzeko, ordenatu, eta burbuila sort etapa.
Beraz, non bestela, hau hartuko dugu? Dezagun saiatu honekin.
Dezagun sort ahaztu lesson hori une batez, eta saiatu kopiatu eta 1.c hauek egin.
21 linea inprimatu zerbait esaten dut,
ondoren, kate bat erabili dut,
ondoren, egiaztatzen dut.
Ez dugu, ohitura hau benetan ahaztuak oraindik, baina dezagun orain hau.
Dezagun benetan itzuli geruza hau zuritu. Hau da, char * benetan. Lasaia Hau da, benetan, char *.
Beraz, zer ez s == NULL egiaztapena esan nahi du?
Bihurtzen da. GetString bezalako funtzio bat deitu
edo gehiago, oro har, eskatu ordenagailu bat memoria pixka bat emateko,
zerbait oker joan liteke.
Crazy izango duzu eta memoria terabyte bat ordenagailu eskatu
bite memoria besterik ez dago ordenagailuan trillions eginez,
baina GetString eta beste funtzioak behar duzu at yelling nolabait
duzun gehiegi eskatuko balitzaizu.
Eta GetString ez du memoria gehiago nahi izanez gero, eskatu bada
baino ordenagailua eskuragarri, nahiz eta super, super probabilitatea baxua
gurekin ez dira bilioi-karaktere bat idatzi eta gero, sakatu Sartu joan delako,
baina probabilitate baxua nahiz da, oraindik ere nahi dut egiaztatu bada ez bada,
eta balio berezia GetString, erantzun, eta bestelako funtzioak itzultzen duen
zerbait oker joan da NULL txanoak guztiak.
>> Eta zer da NULL? NULL besterik ez, beraz, gertatzen da erakuslea bat irudikatzeko. Memoria-helbide 0 da.
Mundua erabaki arbitrarioki, hau nire ordenagailuko memorian bada? Zer badakizu -
1 ordenagailu guztien memoria byte lapurtzen ari gara, eta hau kokapena 0 da.
NULL ezizen bat eman dugu, eta agintzen dugu
egingo dugu, inoiz ez benetan jarri benetako datuak
besterik ez arbitrarioki behar dugu baita balio berezi bat, 0, aka NULL,
horrela, erabiltzaile dezakegu Yell zerbait oker joan ezkero.
Bestela, agian ez duzu jakin ez 0 jarri zerbait esan nahi hemen
edo ez zerbait gaizki joan da esan nahi du?
Guztiak bat datoz NULL bide hori ez da ezer itzuli behar dugu,
uneko helbidea ez da itzuliko.
Orain, hemen besterik ez dut nire I konbentzio giza hartu itzultzeko 1 nagusian
Zerbait oker joan ezkero.
Hori nagusia bueltan konbentzio 0 ona bada itzuli delako,
1 edo beste batzuk txarra izanez gero, balioa.
Baina GetString eta memoria itzultzen NULL deals zerbait txarra edozein funtzio.
>> Ongi da. Beraz, zoritxarrez, line 27, izango da, nahiz eta super simple, guztiz huts egiten kate kopiatzeko.
Zergatik? Hau honela ikus dezakegu.
Line 27 naiz s kopia bat egiteko eta t deituz erreklamatzeko.
Beraz, ez noa, 2 kateak denbora honetan erabiltzaile eskatuz; s balioa besterik ez dut esaten
t jarri behar baita.
Beraz, orain nola hautsitako hau da erakusteko, line 29 aurrerantzean zer egiten ari naiz?
Lehenik eta behin, naiz t luzera 0 baino handiagoa bada, egiaztapena.
Kate batzuk bertan. Erabiltzaileak zerbait idatzi sartu
Zer da line 32 egiten, itxuraz?
[Inaudible ikasleak-erantzun] Eskuin >>. Mota infer ditzakezu, zer egiten ari da esan dut.
Baina teknikoki, zer egiten ari da hau? t [0] adierazten du zer?
[Ikasleak] zeroth pertsonaia. >> [Malan] zeroth pertsonaia.
Edo, gehiago bezala, giza-t lehen pertsonaia, edozein izanda ere, hau da, H agian kasu honetan.
Eta toupper du esaten. T izaera zeroth kapitalizatzen du, eta aldatzen da.
Horrek esan nahi du hartu t izaera zeroth Beraz, maiuskulaz
eta jarri duten leku berean.
Beraz, idatzi dut kaixo minuskulaz, hau minuskulaz h aldatu beharko hiriburua H.
Baina arazoa da, 35 eta 36 zer egin naiz lerro inprimatu Gurekin s eta t.
Eta zure hunch zer?
Zer kaixo dut idatzi minuskulaz guztiak ikusteko benetan dut?
Zer inprimatzeko? >> [Inaudible ikaslearen erantzuna] >> Zer da hori?
[Ikasleen] Big H eta gainerako txiki. >> Big H eta gainerako txiki bat, edo t?
[Ikasleak] Bi. >> Bi. Hain zuzen ere. Beraz, zer gertatzen da hemen ikusi.
>> Dezagun aurrera eta hau konpilatu. Hau da copy1, eta, beraz, egin copy1. Guztiak eskubidea.
Txikiagotu sartu aurrera me eta exekutatu copy1, Sartu, zerbait esan dezagun: kaixo minuskulaz.
Kopia kapitalizatzen da,, baina itxuraz kapitalizatutako jatorrizko baita,
orain istorio hau delako gertatzen da?
Line 27 Ez dut benetan Badirudi katea kopiatzeko,
baina, nahiz eta intuizioz dakizukeela espero kasuan,
argazki honi buruz uste baduzu, benetan zer egiten dut?
Irudiaren erdia berdina da.
Hargatik roll, beraz, denboran atzera t istorioa oraindik ez da existitzen.
Istorioa S existitzen da,, baina dezagun minuskula kaixo une honetan.
Beraz, egin iezadazue konpontzeko zer idatzi dut benetan sartu
Hemen kasu honetan h-e-l-l-o dugu.
Karaktere-sekuentzia bat marraztu dugu, nire separator lerro jarri hemen eta nire \ 0.
Beraz, hau da, ahalik eta azkarren linea 1 gara 24-ish bidez, eman edo hartu, exekutatu.
Hau da nire memoria irudia da.
Line 27 I, zer gertatzen da?
Just like aurretik, erakusle, plaza hau marraztu dut lortu dut.
Deitzen da t. Eta zer da lehenetsia du balio? Nork daki? Zabor balio batzuk.
>> Beraz, abstract dut kanpoan galdera-marka bat.
Eta ahalik eta azkarren line 27 eskuinaldean exekutatzen gisa, zer naiz jarriz barruan I t?
Gauza bera s.
Beraz, une batez kendu geziaren abstrakzioa hau eta esan,
oh, hau memoria karga helbidea 123 da, esan duzu t lortzen s, puntu eta koma,
literalki ari zaren 123 jarriz hemen.
Orain errazteko mota dugu gure mundua berriro pictures
benetan zer egiten duzun besterik ez da zure mundua gezi bat gehitu
t berean zehatz kate seinalatuz.
Beraz, 31 eta 32 lerro t [0] aldatzeari buruzko I actually
zer da t [0] itxuraz gaur egun sinonimo? s [0]
Beraz, hori guztia gertatzen da.
Eta sort honetan ere, nahiz eta sentitzen pixka bat maila baxua eta arcane
eta sort honen agian senez honetan lan egin besterik ez dute behar bezala sentitzen
Egin dut, gauzak kopiak aurretik eta lan egin besterik ez da -
benetan zer kate bat benetan da uste, char * bat da.
Beno, zer da hori? Pertsonaia batzuen helbidea da.
Gero, agian, gehiago zentzuzkoa da zerbait egin duzula
super itxuraz hau atsegin simple, guztiak egiten ari zaren kopiatzea memoria-helbide bat da.
Ez duzu benetan katea, berez, ezer egiten.
Beraz, nahiz eta ideia ez duzu nola kodea arazo hau konpondu nahi duzu,
maila altua, kontzeptualki, zer egin behar ditugu, ta s benetako kopia egiteko, itxuraz?
Bai. >> [Ikasleak] Eman kokaleku berri bat? >> Zehazki.
>> T marka kokapen berria eman behar dugu.
Zatia memoria berri bat lortu dugu, nolabait, mundu bat sortu behar dugu,
argitasun-en mesedetan eskubide hori beherago dut marrazteko, baina ez du egon behar.
Baina tamaina bera izan behar da, eta, beraz, leku berean lerro bertikal horiek marraztu dut.
Fina da hau zabor guztiak bada, hasieran. Nork daki zer zegoen?
Hala ere, 1. Pausoan eman behar memoria ere joan behar dut
kaixo kopia bat egokitzeko, eta irudikatu nola h hemen kopiatzeko, e hemen
l hemen eta abar.
Baina hori jada pixka bat bistako sentitu behar du, nahiz eta xehetasun batzuk baino ez dira oraindik abstraktua.
Kate hau kopiatu sartu, bitartean begizta bat edo loop bat besterik ez da
edo zerbait bihurtu duten guztiak ezagutzen duzun.
Hargatik saiatu honekin. Copy2.c sartu me.
Copy2.c ia programa berean dugu line 27 izan ezik.
Txiki konplexu bat dirudi, baina apurtu badugu behera pieza pieza
ezkerraldean berdina da.
Char * t gauza sortzen memoria, galdera-marka bat bada ere
dugu ideia ez delako zer dago lehenespenez.
Eskuinaldean On ari gara orain, funtzio berri bat, malloc sartuz,
memoria esleitu, emaidazu memoria,
hartzen du eta itxuraz zenbat argumentuak, zenbat gauza parentesi barruan?
1 eta 2 murmurings entzun nuen, baina besterik ez 1 da.
Koma ez dago, eta horrek esan nahi du parentesi barruan gauza 1 besterik ez da.
Nahiz eta beste parentesi, let me nabarmendu
parentesi outermost barruan, eta adierazpen hau da:
(Strlen (s) + 1) * sizeof (char).
Beraz, benetan uste baduzu honen bidez, hau da, ematen dit s luzera esanez.
Zergatik am I, ordea, 1 luzera gehitzen gainean? >> [Inaudible ikaslearen erantzuna]
Hain zuzen ere. Guy hau espazioa buztana, seigarren pertsonaia ingelesez esanahia ez du behar dugu
baina programazioko esanahi berezia izan du.
>> Beraz, + 1 behar dugu horretarako strlen itzultzen luzera giza itxaropena delako,
kaixo edo 5, ez du ematen dizute null karaktere osagarriak.
Beraz, gehitu eskuz I + 1.
Eta gero, * tamaina (char), ez dugu ikusi aurretik.
Hau ez da, teknikoki, funtzio bat.
Keyword berezi bat esaten dizu zer tamaina datu-mota batzuk ordenagailu bat da
errealitatea, zeren eta, gurekin batzuk 32-bit ordenagailuak.
Pretty ordenagailu zaharrari bat daukat etxean, eta 32 bits bakarrik erabiltzen erakusleak irudikatzeko.
Eta horrela egin nuen datu mota baten tamaina bada, 32 bit izango da agian.
Baina nago nire ordenagailu berria fancy erabiliz gero, lortu dut izan liteke 64 biteko balioa
helbide bat antzeko zerbait.
Beraz, kasu honetan, super seguru izango, ez ari gara gogor kodea zerbait joan
ondo, zer char zer esan dugu hain urruti arabera tamaina da?
Pretty askoz dugu esan hitzez dela 1 byte, eta hori nahiko askoz egia taula zehar.
Baina, berriro ere, hipotesi joera txarra izan.
Buggy software eramango dute pertsonek erabili software modu ez duzu nahi izanez gero.
Hargatik abstraktu hau kanpoan eta bakarrik oro esan
Memoria zatiak asko behar dut
eta memoria zatia bakoitzak pertsonaia baten tamaina baliokidea izan behar du,
Izan ere, kasu honetan 1 berdina da, baina idazteko modu generiko bat da.
Beraz, hitza kaixo bada, zenbat byte ditu malloc itxuraz kaixo for esleitu?
[Ikasleak] Sei. >> Sei. Zehazki askok galdera pantailan marka.
Eta gero bat asmatu zure GetString ulertzeko oinarritutako
zer ez malloc ziurrenik itzultzeko? >> [Ikasleak] helbidea.
Zer helbide bat? Memoria lehen zatia da.
>> Ideia ez dugu zer ez dago beste funtzio batzuk duelako
izan da memoria hau erabiliz aurretik.
Baina malloc, GetString bezala, helbidea itzultzen memoria lehen bytea
ezarri alde batera utzi behar duzu.
Hala eta guztiz ere, ez du hutsik honetan bete backslash null karakterea
bihurtzen da malloc erabili out ezer esleitu delako: ints, kateak, array,
karroza, ikaslea egitura.
Malloc erabat oro erabili ahal izango duzu.
Ez du axola edo izan oroimena zaren esleitzean ezagutzeko.
Beraz malloc for presumptuous litzateke \ 0 bat jarri
zatia memoria bakoitzaren amaieran, ematen
hau \ 0 gauza kateak hitzarmen bat besterik ez da delako.
Ints erabiltzen ez da, ez da karroza erabiltzen, ez da ikasleek erabiltzen.
Eta horrela, malloc duten Gotcha zama da zuk osorik programatzailea
zenbat byte esleitu gogoratzeko eta ez da inoiz erabili loop
edo, berriz, loop eta iraganeko joan zatia memoria Zuk eman muga.
Jarri beste modu bat, ahalik eta azkarren, esleitu gisa memoria,
ezin duzu galdetu sistema eragilea, oh, bide batez, nola zatia memoria handia izan da hau?
Oso-osorik da sortu ahal izango duzu behar duzun balio hori gogoratzeko.
>> Hargatik ikusi nola memoria hau erabili ahal izateko jarraitu dut.
Line 28 eta 29 zergatik am egiten dut?
Just behatu check guztira.
Badaezpada ere zerbait gaizki joan da, memoria crazy zenbatekoa batzuk eskatzen dut
edo hainbeste gauza ditut ordenagailua ez dagoela besterik ez, ez da nahikoa memoria exekutatzen
horrelako zerbait, nahi dut gutxienez null egiaztatzeko.
Egia esan, ordenagailuak emango dizu ilusioa programa bakoitza
zure RAM guztiak erabili ahal izango du,
baina hala eta guztiz ere, Erabiltzaileak batzuk crazy kate luzea agian motak ari dira txarra lasaia delako
eta benetan zure programa edo hack kraska sartzen saiatzen ari dira,
malloc itzulera-balioa, gutxienez, egiaztatu nahi duzun, eta berdin ote den null.
Eta ez bada, utzi besterik ez irten oraintxe Kasu horretan zer egin jakin ez dudalako.
Nola katea kopiatu dut? Ez da hau egiteko modu batzuk.
Daude str kopiatu C funtzioak, baina super simple hau modu zaharra gurekin egiteko.
>> Lehenik eta behin, utzi irudikatu me s luzera da.
Jarri nuen hau loop, baina ordez jarri besterik ez dut hemen argitasuna.
Beraz, n Kate jatorrizko luzera, hau da, itxuraz 5 gordetzen ditu.
Gero, nire loop for 0-tik ari naiz sortu errepikatzean (e) n
eta iterazio bakoitzean jarri dut s [i] t barruan [i].
Beraz, hori da inplizituki dut nire 2 kateak aurretik behatzak seinalatuz.
Begizta hau atsegin dute hau iterates bezala, kopiatzea h hemen sartu dut,
hau da, hemen, hemen sartu l sartu e s delako, hau da, t.
Eta gero, azkenik, 35. Line zergatik am Hau egiten dut?
Ziur naiz I katea t bukatzeko egin behar dut.
Eta hori egin nuen modu honetan super esplizitura.
Baina proposatzen, norbaitek, ahal izango banu, hori egiteko beste modu bat.
Ez dut benetan behar line 35. Horretarako beste modu bat da.
Bai. >> [Inaudible ikaslearen erantzuna] >> esan du ozenago.
[Ikasleak] baino gutxiago edo berdin. >> Zehazki.
Bakarrik esan izan dugu baino gutxiago edo n, eta, oro har, izan txarra berdin
ia beti gara kontatuta ari gara gauza bera delako
1 urratsa urrunegi joaten gara.
Baina gogoan, zenbat byte genuen esleitu?
S strlen esleitu dugu, eta, beraz, 5 + 1 6 guztira.
Beraz, kasu honetan, honen antzeko zerbait egin izan dugu
beraz, ez bakarrik kaixo, baizik eta \ 0 kopiatzea oso amaieran ari gara.
Bestela, kopia str izeneko funtzio bat erabili izan dugu, strcpy
baina hori ez litzateke ia askoz ere dibertigarria izan.
Baina hori guztia egiten du kanpaia azpian.
Gero, azkenik, lehen bezala gauza bera egiten dugu.
T kapitalizatu nuen, eta, ondoren, originala eta kopia hori itxura itxura aldarrikatzen dut.
Hargatik saiatu honekin orain. Utzi joan hemen Niri. Egin copy2. Handiagotzeko dugu, eta exekutatu copy2.
Minuskulaz kaixo idatzi dut, eta, hain zuzen ere, minuskula kaixo dut jatorrizko
baina kapital Kaixo kopia.
Baina ez dut egin besterik ez oraindik. 1 azken gauza egin behar dut hemen.
46 eta 47 argi eta garbi memoria libre uzten, baina zer esan benetan esan nahi?
Zer am egiten dut, uste duzu deituz line 46 eta 47 lerro?
Zer eragina ez dela izan? Bai.
[Inaudible ikaslearen erantzuna] >> Zehazki.
>> Ari zara sistema eragilearen kontatzea, hey, memoria honen esker.
Erabili ahal izango dituzu beste norbaitek.
Eta hemen, zabor-balioen adibide ezin hobea da.
Dut memoria hau erabili hitza idazteko kaixo 2 lekuak,
Hemen, hemen, hemen, eta hemen.
Beraz, hau h-e-l-l-o-\ 0 da.
Deitzen diot nik, baina, ondoren, 46 linea eta 47 linea, eta badakizu zer gertatzen den han irudian dagokionez?
Egia esan, itxaron, argazki zahar bat da.
Behin kopia egingo dugu, lasaia hori benetan hemen seinalatuz,
beraz kendu zenbakiak eta abstraktu kanpoan gure geziak gisa berriro.
Zer da argazki hau gertatzen da free deitzen diot nik?
[Inaudible ikaslearen erantzuna] >> ere ez.
Deitzen diot nik, s eta t free badu - trikimailu galdera bat mota - irudi hau ez da aldatu guztiak
s deituz eta deituz delako t sistema eragilearen kontatzen du,
hey, memoria hau erabili ahal izango duzu berriro ere, baina ez du aldatu null
edo karaktere berezi batzuk, ez da aldatu,
ez du aldatu h edo posta edo l edo l edo o beste ezer bai.
Irudian dagokionez, free deitzen duzun bezala, ez da ezer aldaketak ahalik eta azkarren.
Eta, bertan, zabor balio jatorria dago dudalako gero programa honetan
GetString edo malloc edo antzeko zerbait memoria gehiago eskatu sistema eragilearen duen
eta sistema eragilearen dio, ziur aski, memoria 12 byte besterik ez libratuko daukat,
erabili horiek, zer egingo entregatu behar duzu?
Entregatu behar dugun zatia memoria normalean marrazteko ari zara
galdera ikurrak, baina zer dira galdera ikurrak horiek?
H-e-l-l-o, h-e-l-l-o izan gertatuko dira.
Honako hauek dira gure zabor-balio berriak ahalik eta azkarren askatzea nahi izanez gero, memoria hori.
>> Mundu errealean inplikazioa da hemen ere.
Gertatzen da hau RAM zerikusirik, baina zure ordenagailuak
benetan egiten gauza bera disko.
Honi buruz hitz egin dugu bereziki arazoa etorkizuneko Kernet oinarritzen da.
Baina zer gertatzen da benetan gertatzen duzu zure mahaigainean finantza sentikorra fitxategia
edo batzuk sketchy JPEG eta arrastatu zure trash sartu
zer gertatzen da, arrastatu trash edo recycle bin?
Zeri buruz hitz egiten zen I bazekien duzu. [Barreak]
Zer gertatzen da froga arrastatu duzun hori recycle bin edo trash sartu?
[Inaudible ikaslearen erantzuna]
Beno, eta, beraz, kontuz ibili. Zer gertatzen da egiten duzu?
Erantzun laburra ez da, ezta?
Sketchy edo sentikorra fitxategia oraindik ez dago eserita nonbait zure disko gogorrean.
Gurekin gehienak, gutxienez, ikasi behar duzula zure trash garbitzeko modu gogorrean
edo zure recycle bin fitxategiak benetan ezabatu.
Eta, hain zuzen ere, egin klik eskuin edo zure trash egin klik kontrola ahal
edo hautatu Fitxategia, Hustu zakarrontzia edo dena delakoa
eta benetan hustu zakarrontzia edo recycle bin, benetan gertatzen da gero irudi hau?
Gehiago ezer egin. Beraz, ez da ezer benetan gertatzen da diskoan.
>> Eta besterik ez dugu aldi baterako bada digress eta idatzi - I'll erabili atzealdean.
Beraz, gaur egun istorioa da RAM, hau da, non programak existitzen aldatzen
ari zaren bitartean exekutatzen, diskoan, hau da, non gordetzen dira epe luzera
baita boterea jokoz kanpo, gaur egun, eta itzuli dugu etorkizunean
dezagun asmoa hau adierazten du, zure ordenagailuaren disko gogorrean barruan
back eguna delako zirkular diskoak izan zuten, askoz disketeak bezala.
Beraz, egin duzu Excel fitxategia sentikorra batzuk, iraun dezake zatia memoria
zure ordenagailuaren disko, eta besterik ez dut arbitrarioak 1s bera eta 0 s marraztuz.
Horrelako arrastatu fitxategia zure zakarrontzi edo birziklatu bin,
literalki ez da ezer gertatzen, Apple eta Microsoft erabaki besterik ez delako
zakarrontzia eta recycle bin benetan da aldi baterako biltegian.
Agian azkenean OS da hustu ahal izango duzu, baina normalean, ez du ezer egin,
gutxienez arte benetan espazio baxua zara.
>> Hala eta guztiz ere, joan trash hutsik edo hutsik recycle bin
era berean, ez dago argazki hau gertatzen da.
Guztiak gertatzen da beste nonbait zure ordenagailuan, mahai-mota batzuk.
Sort da Cheat, demagun, resume.doc little fitxa dioen bezala,
Microsoft Word fitxategi kokapena 123 zure disko gogorrean bizi curriculuma, beraz,
ez memoria du eta ez RAM, baina zure disko gogorrean,
eta 456 at JPEG sketchy bizi da, eta zure Excel fitxategia 789 edo edozein lekutan bizi da.
Noiz fitxategiak ezabatu benetan trash edo recycle bin husteko,
Argazki hau ez da aldatuko. 0 s eta 1s zure disko gogorrean ez edonora joateko.
Baina, era askotako datu-base txiki honetan, taula honetan ez change.
Zure curriculuma ezabatu, nahiz eta fitxategia ezabatuko da nolabait da,
baina ordenagailua ez non gauza zure disko gogorrean bizi ahaztu da.
0 s eta 1s zure curriculuma osatzen duten edo beste edozein fitxategi oraindik ez dira oso-osorik.
>> Beraz, bada hau egin zenuen, ustekabean, oraindik ez da ez-zero probabilitatea
zure datuak berreskuratzeko Norton Utilities edo software komertziala batzuk erabiliz
horren helburua da bizitzan 0 s eta 1s dute sort dira umezurtz,
baina hemen ahaztuta utzi hemen, beraz, zure datuak eskuratu dezakezu berriro.
Edo polizia edo FBI ikertzaileen auzitegiko litzateke benetan disko gogorrean hartu
eta, benetan, 0 s eta 1s JPEGs itxura, Excel fitxategiak itxura ereduak bilatzeko,
berreskuratu ditu, era horretan, nahiz eta ordenagailu ahaztu egin die bertan.
Modu bakarra benetan datuak ezabatzeko, etorkizunean eztabaidatu dugu, beraz,
Fitxategi edo disko gogorrean edo sasiak garbiketa
Ezin duzu benetan 0 s eta 1s kentzeko
gigako disko gogorrean besterik litzaidake duzulako hasteko
eta amaitzeko sortu nahi duzun disko gogorrean megabyte bat etengabe zinen bada ezabatzen,
literalki, 0 s eta 1s.
Beraz, zer litzateke benetan nahi izanez gero zure ibilbideak estaltzeko
eta oinarrizko arazoa da ez dagoela oraindik 0 s eta diskoan 1s?
Norbait gailua fisikoki apurtu duzula gesticulating ikusten dut. Hori funtzionatuko du.
[Barreak] Baina hori garestia irtenbide mota bada, zer gehiago arrazoizkoa izango litzateke?
Bai. >> [Ikasleak] Gainidatzi ditu. >> Gainidatzi horiek zer duten? >> [Ikasleak] Beste datuak.
Beste datuak. Besterik ez dezakezu zure diskoan 0 s edo 1s edo 0 s guztiak, 1s guztiak gainidatzi.
>> Eta hori da, hain zuzen ere zer software batzuk ez.
Software erosi ahal izango duzu, edo are get free software,
eraiki da, eta, are gehiago, Mac OS egun hauetan, are gutxiago Windows,
seguruan ezabatzeko gaitasuna da.
Egia esan, run home guztiak nahi izanez gero, gaur egun Mac bat bada, eta hau egin,
duzun got bada zure trash stuff batzuk, Secure Hustu zakarrontzia egin dezakezu,
horrek ez du zehazki hori.
Baizik eta besterik ez ezabatze fitxategiak hemen baino, ez da ezabatuko 0 s eta 1s hemen,
baizik eta, besterik gabe, aldatzen ditu guztiak, adibidez, 0 s eta dot, dot, dot.
Beraz, zure psets etorkizuneko bat benetan egingo datuak nahita berreskuratzeko
pertsonak, lekuak, eta gauzak campus hartu ditudan argazkiak
kamera digital baten memoria txartela irudi auzitegi bat egin dugu,
zehatza ideia bera da, eta zalantzan jarri behar benetan aurkitu duzu
ordezkatzen dituzten ereduak JPEGs zure disko gogorrean,
antzinako askoz ikasleari horren email bezala, duela aste batzuk irakurri nuen
bere arreba argazkiak berreskuratzeko.
Zergatik ez 5 minutuko atsedenaldi bat hartuko dugu hemen, eta memoria gehiago bilduko dugu.
Hortaz, hona hemen non, gauzak pixka bat kontuan-flexiones, baina hau oso indartsua urrats bat da
hau gehiago ulertzeko norabidean.
Here pointers.c izeneko programa bat da.
Gaur egungo lagina kodea artean.
, Lehen lerro batzuk, 19 22 bidez, guztiak egiten ari garen antzeko zerbait da GetString
eta helbidea itzuliz, s gordetzeko.
, Pset nahiz eta 3 Hemendik aurrera nahi baduzu, baina pset 4 eta
non hasten zeure burua off gurpilak prestakuntza horiek hartu dezakezu,
ez dago arrazoirik kateak existitzen jada asmoa da.
Zalantzarik gabe, ongi hasi char * esaten.
>> Bat alde batera utzita, online erreferentzia eta liburu askotan dezakezu ikus star aldagaia ondoan.
Bi aldeetako inguruko guneak ere ikus dezakezu.
Horiek guztiak dira funtzionalki zuzena.
Oraingoz, baina, hurbilketa hau egingo dugu normalizatzeko super argi utzi
char * duten pertsonaia erakuslea esaten bezalakoa da.
Hori da datu mota da.
Eta gero, aldagaiaren izena s da, kasu honetan.
Beraz, ahaztuak dugu kate bat deitu dugu s.
Eta gero behera hemen konturatu naiz I benetan egiten trickery pixka bat.
Erakuslea aritmetikoak, super-simple sort deritzo.
Esan nahi du, besterik gabe, gehitu eta kendu zenbakiak erakusle.
Baina hau benetan lan egiten du.
Programa honek itxuraz katea s 1, besteak beste, azken emaitza Lerro bakoitzeko karaktere bistaratzen
Just beraz, honda non va ahal izango dugu, erakusleak egiteko, erakusleak exekutatu, utzi sartu urruntzeko me
Orain let me mota HELLO eta mota Sartu antzeko zerbait
eta 1 lerroko izaera inprimatzen ditu.
Up bigarren duela arte, egin nahiko genuke bracket karratu notazioa.
Begizta bat izan genuen eta ez s printf genuke [i], eta hori egin genuen behin eta berriz eta berriz
backslash bat lerro bakoitzaren amaieran n.
Baina programa hau desberdina da. Programa hori erabiliz, literalki, aritmetika.
Beraz, zer gertatzen da hemen?
Lehenik eta behin, begizta hau ere exekutatzen aurretik, zer, besterik gabe, argi eta garbi, s benetan?
S da? >> [Ikasleak] helbidea. >> Helbidea.
>> Eta helbidea, kaixo kasuan, hitz horren lehenengo pertsonaia, h da.
Beraz, s, adibide jakin honetan, h helbidea.
Beraz, zer ez da egin behar esan nahi du + i?
Beno, hasiko da 0 i honetan loop. Egin dugu asko aldiz.
Katearen luzera joan da, itxuraz dut.
Beraz, begizta honen lehenengo iterazio, jakina 0 i.
Beharrean, s +0--da, jakina, besterik ez s - Beraz, adierazpen hau da, s + i esanez.
Beraz, zer da * s hemen?
Orain izar pixka bat eta beste modu batean erabiltzen ari gara.
Dezagun aurrera nau eta t kendu egiten ari delako t eta s kopiak buruz hitz egiten.
Orain nahi dugu s inplikatuz istorio bat kontatzeko.
Eta, beraz, une honetan, mota katea ondoren, gure mundua itxura oso atsegin aurretik zuen
gordetzeko h helbidea besterik ez da, eta, oro har, kate kaixo seinalatuz.
* Bezalako lerro bat egin dut, gaur egun bada (s + i), utzi out hau probatu.
Beraz, * (+ i). Demagun hau errazteko me, hau da, 0 delako, eta, beraz, hau * (s +0).
Beno, itxaron minutu bat. Simplify gehiago. Hau * (s) da.
Beno, orain parentesi ergelak mota dira, eta, beraz, orain dezagun just do * s.
Beraz, begizta hau, lerro hori, eta nabarmenduta, 26 lehen iterazio
pretty askoz hau inprimatzeko baliokidea.
* S datu-mota da?
Testuinguru honetan, izan ere, izar gertatzen s bera ondoan izan,
baina zehatzago esanda, ari gara jada ez delako geratuko
ez, aldagai bat sortzen ari gara jada, ez dago aipamen line 26 char *
keyword katea aipamena ez da, besterik ari gara s izeneko aldagai bat erabiliz,
bihurtzen da izarra du apur bat ezberdina da, eta, admittedly, esanahia nahasgarria.
* S hemen esan nahi du s helbidea eta inprimatu edozein izanda ere hor dago.
Beraz, hemen da, s, * s - sort Chutes eta eskailerak bezala, jarraitu gezi - Hemen.
Beraz, * s da.
>> Beraz, zer lortzen line 26 begizta hori lehen iterazio inprimatutako?
Inprimatzen I% c, pertsonaia bat biltegian,
ondoren lerro berri bat \ n. * (+ I), non 0 besterik ez da hau da, i.
Beraz, zer char ez en jarri dut% c? H.
Ziurrenik ikus dezakezu non va - Begizta hurrengo iterazio
hurrengo iterazio i da, jakina, 1, eta, beraz, horrek esan nahi du s +1
eta, ondoren, gaur egun behar ez dut parentesi izar esan behar baitu.
memoria-helbide s +1 joan.
Zer da s? Dezagun roll denboran atzera eta esan gezi hau ez da benetan gurekin egiten mesederik edozein.
Dezagun zehatzago, esan kopurua 123 da hori gordetzeko
kate honen hasieran kaixo, horregatik helbidea 123 da, hau da, 124, eta abar.
Beraz, bigarren iterazio s +1 esaten dut, 123 +1 esaten bezala,
bestela 124 bezala ezagutzen da, beraz, zer lortzen char bigarren iterazio inprimatutako?
Memoria-helbide E 124 at.
Ondoren + berriz, 125, 126, 127, eta begizta hau zorionez gelditzen da lortuko dugu hemen aurretik
dut strlen delako ziur ez i ez zenbatzea oso handia egin behar izan du.
Beraz, gehiegi da.
Berriz ere, hau da egin genuen bezala, nahiz eta aste bat.
Let it idatzi beheko lerroan, nahiz eta ez dugu nahi Biak egin.
Berdin-berdina da, gaur egun hau.
>> Beraz, nahiz eta kate bat da s, dugu deituz aste bezala, benetan char * s.
Beraz, bada, super anal izan nahi dugu, benetan egokia da berariazko karaktere idazteko
kokapena Ith, horiek zenbakizko helbideak eta izar-operadorea hau erabiliz,
baina Egia, hau besterik ez hainbeste garbitzailea da. Beraz, hau da, ez da txarra.
Ez da arrazoirik line 27 egiten hemen gelditzeko, baina 26 funtzionalki bera da,
eta funtzionalki bera zehatz-mehatz izan ditudan arrazoiak direla eta, beraz, oso urrun eztabaidatzen.
Eta, azkenik, 29, praktika onak besterik ez da.
S free Deitzen esan nahi du orain atzera ari zaren memoria ematen GetString eman
berriro, bezala delako Astelehena aipatu dut, asteak GetString
bug bat izan da zure kodea sartuz.
Zure aste kodea memoria filtrazioak izan du
Horren bidez, izan duzun GetString eskatuz memoria baina inoiz ez duzun emanez back.
Eta hori guk aukeratu pedagogiko nahita
da besterik ez delako gehiegi hasieratik pentsatu.
Baina orain, simetria gehiago behar dugu.
Ordenagailua memoria eskatzen baduzu, GetString kasuan,
kasu itxuraz malloc
egin behar duzu orain pset 4 aurrerantzean ere, hala nola, memoria free edozein.
Oharra int n esaten da.
Ez duzu behar hau libre ez duzulako deitu GetString
eta zuk ez duzu deitu malloc.
>> Eta are izeneko GetInt dugu azkenean ikus,
GetInt ez duzu memoria esleitu gainditu ahal izango duzu benetan delako osoko zenbakien inguruan
eta karroza eta karakteretan bidea besterik ez dugu egiten asteak.
Strings, ordea, bereziak dira benetan Oraindik dutelako karakteretan bat baino gehiago lotuz.
Beraz, karakteretan eta karroza eta ints ezberdinak ari dira eta.
Baina itzuli gara baino lehen luzea.
Edozein galdera gero erakusleak hasieran hau? Bai.
[Inaudible ikasleak galdera]
Ah, oso ona galdera.
C benetan, zuretzat ez da gauza gutxi bat, eta gomendagarria da,
da zifrak zuretzat zer tamaina datu mota
eta, ondoren, zuretzat biderketak mota hori egiten da.
Hau da karakteretan kasuan garrantzirik ia beti char byte 1 delako,
beraz, hau, besterik gabe lan egiten du.
Baina, eztabaidak eztabaida, benetan bada osoko zenbakien inprimatzeko
eta zenbait inprimatu balioa s osokoa seinalatuz ziren saiatzen ari zaren,
litzateke, era berean, ez da beharrezkoa + 4 * delako i int bat egin 4 bytes.
Erakuslea aritmetika esan nahi du, C eta konpiladore egiten math hori guztia.
Guztiak zaindu behar duzu zenbaketa zentzu giza sailkatu da. Bai.
[Ikasleak] deklaratzeko kate baten barruan loop, ez geroago askatzea duzu?
Ona galdera.
>> Deklaratu barruan kate loop bat bada, ez da geroago askatzea behar duzu?
Memoria libratzeko soilik egin behar duzu GetString edo malloc duzula esleitu.
Beraz, bada zerbait esatea besterik ez duzu nahi - utzi kizkur giltza jarri me now kodea zerikusia, beraz.
Zerbait egin duzu, buggily bada ere, hau atsegin bada, char * t = s,
ez duzu free t t behar ez delako inplikatzeko malloc edo GetString edozein aipamen.
Kontrastea badu hau egin zenuen, GetString, eta gero bai, t free zenuke behar.
Eta, hain zuzen ere, horretarako zure aukera bakarra da gaur egun begizta honen barruan, esparrua bera gai
Nik iraganean eztabaidatu dugun.
Bestela esleitzean behar duzun memoria, memoria esleitzean, memoria esleitzean,
eta programaren amaieran begizta horren kanpo zauden delako,
t ez da existitzen, baina inoiz ez esan duzun sistema eragilearen
ez duzula behar memoria hori jada.
Eta luze baino lehen, 4 edo 5 pset emango dugu Valgrind izeneko programa bat,
espirituz GDB antzekoa da got arcane interfazearen zertxobait
baina bere bizitza helburua da laguntzeko.
Eta Valgrind programa bat egingo etorkizunean bilatu zure programak
memoria filtrazioen bila, GetString edo malloc ala ez,
zein gehiago guztiak erabiliz gelditu CS50 liburutegia erabiliz bezain hasten gara.
Gaur egun, azkenik dugu hiztegia eta teoria eredu mental sort sort
hautsitako programa hau konpontzeko.
>> Beraz,, hondatutako programa honetan, swap, swap barruan lan egiten du,
baina inoiz ez nagusian lan egin du x eta y, abisuaren gainditu delako,
eta horiek onartu ziren balioak, eta, beraz, hitz egiten.
Horien kopiak eman trukatzeko.
Swap amaieran By, a eta b trukatu zuen, hain zuzen ere,
baina, jakina, x eta y, astelehena eztabaidatu dugun bezala, ez zuen izan.
Beraz berdean proposatzen dut hemen, hau da, benetan konponbidea hemen.
Eta, benetan, nire ko mugitu me besterik ez koherentea izan
nahiz eta, berriro ere, funtzionalki hau ez du axola.
Etorkizuneko asteetan azaldu noiz eta zergatik Gaia ez dugu.
Beraz, berdea irtenbide bat da.
Egia, asko osoa Messier badirudi daukat ko horiek guztiak ere.
Seinalatu me gauza bat.
Goiko lerroan hemen non int * a eta int * b dio
funtsean, gauza bera egiten beti dauka.
2 argumentu edo parametro da deklaratzen trukatu,
lehen int erakusle bat deitu du,
bigarren izeneko b int erakusle bat da.
Izan ere, gauza bakarra da, puntu honetan ez dagoela izar bat dago.
>> Zer esan nahi du horrek? Int bat ez da, b ez da int.
A int baten helbidea eta b hainbat int helbidea da.
Down hemen, hau da, non C lortzen nahasgarria onartzen dut.
Orain izar bat ari gara erabiltzen, baina esanahi desberdinak ditu testuinguru honetan.
Ari gara ez delako erakusleak geratuko gara hemen,
Hemen gauzak ez dira dereferencing dugu.
Beraz, teknikoki, swap barruan lehenengo, bigarren eta hirugarren line testuinguru honetan star
dereference operadorea da, besterik gabe, esan nahi da Hara joan.
Beraz, nire hatz arrow h,
* Bide bat helbide horretara joan eta aurkitu me int hori ez dago.
* B bitartez helbidera joan eta ni pasa zer da bertan.
Hargatik marraztu irudi Astelehena fotograma pila bat erabiliz,
bat beheko nagusia izango da,
bat goiko swap izango da,
beraz, gure mundua itxura, astelehena bezala, hau atsegin dute.
Hona hemen nagusia zatia memoria hori erabili behar da.
>> Astelehenetik Gogoratu programa besterik ez 2 aldagai zituen,
bat izeneko x eta bat izeneko y, eta jarri nuen zenbakiak 1 eta 2 ez dago.
Orain swap bezala deitu egin nuen, astelehena, I,
aldez aurretik programa honen bertsio gorria erabili dut, honen itxura,
2 parametroak, eta b bat dut, eta zer egin hemen eta hemen idazten dugu?
Just 1 eta 2 x eta y, literalki kopiatzen.
Gaur egun aldatu dugu.
Gaur egun ints en ordez pasatzea eta b 2 helbideak pasatuko dugu.
Helbide horiek gertatuko ints seinalatu, baina helbide horiek ez dira bere burua ints.
Helbideak dira. Posta helbidea bezalakoa da horren ordez.
Beraz, gaur egun besterik ez eman nire burua pantailan xehetasun apur bat gehiago behar dugu.
Nire ordenagailuaren memoria da egun osoan.
Zenbakitze-eskema batzuk arbitrarioak behar dugu orain.
Hargatik, besterik gabe esan, besterik gabe, kasualitatez, hau da, memoria-helbide 123, 124.
Dezagun besterik ez diotenez, hau da, 125, 126 da, eta abar, baina hori erabat arbitrarioa da.
Nire memoria zenbakitze-eskema batzuk besterik ez dugu behar.
Beraz, x eta y benetan pasatzen dut, ez naiz x eta y gainditu du;
Posta helbidea igaroko da, nolabait esateko, x eta y noa
beraz, zer lortzen gordetzen hemen eta hemen ez da 1 eta 2,
baina nire testu txikiak ikusi ahal izan bada, zer lortzen hemen eta hemen pasatzen?
[Inaudible ikaslearen erantzuna] >> Zehazki. 123 lortzen jarri hemen, eta 124 hemen jarri denean.
>> Orain, erabiltzen dudalako izar hau line modu oso lehen sortu hemen goian,
nire programa besterik ez daki 123 eta 124, nahiz eta, jakina, Oraindik dute zenbaki osoen
giza dezakeen edozein nabarituko dute, helbideak, zenbakizko helbide gisa interpretatu behar dira.
Ez dira, eta beren burua ints, helbideak ari dira,
eta hori jarri dut esplizituki delako izarrak.
Beraz, gaur egun kodea benetako zer gertatzen den hemen nire lehen, bigarren eta hirugarren lerroan?
Marraztu dezagun irudian gainerako.
Aurkitu zuen asteleheneko bezalakoa da. Ezer ez tmp berezia.
Tokiko 32 bit bat besterik ez aldakorra da, eta barruan, itxuraz naiz * baten balioa gordetzeko.
Orain, besterik ez bada, esan nuen tmp = a, zer egingo zenuke hemen jarri dut? >> [Ikasleak] 123.
123. Baina hori ez da zer egiten ari naiz.
Tmp esaten dut = * a. Star bitartez joan.
Beraz, hemen da, 123. Nola joaten naiz? Itxura gezi bat bezala.
Beno, ez da, 1. Beraz, zer lortzen tmp gordetzen dira, itxuraz? Just 1.
Beraz, beste era batera esanda, tmp * a, * bide bat gaur egun helbidea joan da,
hau da, itxuraz 123.
>> Ados, hemen dira kokapena 123, 1 zenbakia ikusten dut,
beraz, 1 zenbakia jarri dut.
Orain zer egiten dut line 2, * a = * b?
Hau da, apur bat gehiago parte hartzen da gaur egun delako zer da? 123 da.
Beraz, * bat da, non? Eskuin non aurretik izan dut. Beraz, ez. Ongi da.
Orain, azkenik, eta, ondoren, azkenik zentzurik hasiko da, zorionez,
* B esan nahi du zer b? 124. Beraz, joan behar dut, hau da, 2.
Beraz, zer non jarri dut?
2 Hemen doa * b * batean doa delako. Beraz, hori egiten dut.
Eta dagoeneko egin ahal ikusiko duzu, agian, Oraindik dugu, beraz, askoz ere hurbilago
ergelak, simple arazoa konpontzeko lehenengo aldiz ondo
gaur egun oraindik dugulako zer x zen oroitzapena,
2 kopia dugu, admittedly, y,
baina linea 3 dio * b.
Beraz, hemen da b. * B bitartez joan. Beraz, non da kokapena 124?
Itxuraz da hemen. Beraz, zer jarri dut hemen? Jakina, tmp.
Beraz, gaur egun hau egiten dut. Beraz, 1 hemen eta 2 izan dut hemen.
Eta orain zer gertatzen da hori guztia, 123, 124, eta 1?
Laster bezala swap itzultzen gisa, memoria hori ez baita ona galdu
bezain laster, swap itzultzen, sistema eragilea delako
doakoa da memoria hori erabili etorkizunean berriro.
Nagusia bakarrik deiturikoak pila honen behealdeko memoria makilak inguruan.
>> Eta horrela izan dugu, azkenik, gaur egun lan-bertsio bat.
Swap.c sartu me, eta honako hauek nabarituko.
Programaren goialdean aldatu dut nire prototipoa int * a eta int * b.
Zein txarra zen, gorria, berdea, ona da aldatu dut gauza bakarra, beraz,
ko hauek gehitu dut gaur egun.
Baina orduan behera hemen swap bera kopiatu behar izan nuen, itsatsi besterik ez diapositiba izan zen.
Izar bat hemen daukat, star hemen hori prototipoa datorren
eta, ondoren, gauza horiek guztiak gaur egun ko tmp izan ezik
aldi baterako aldagaia erabilera delako, bertan ez da ezer berria.
Behar dut, behin-behineko biltegiratze int bat.
Beraz, ez dugu behar izar bat dago.
Izar besterik ez dugu behar, beraz, muga arbitrarioa sort hau zeharkatu ahal izango dugu
2 hauen artean nire ordenagailuaren memoria marko.
Baina azken gauza bat aldatu dute, eta glimpsed Agian dagoeneko.
Zer beste lerroa da, jakina, desberdina da orain? >> [Ikasleak] eta x.
>> Bai, eta, beraz, 25 kodea line azken hau aldatzeko lan egin behar dut.
Duela aste bat, eta nahiz eta astelehenetik on line 25 dirudi, swap x eta y,
eta hau besterik ez zuten hautsi baduzu esaten delako swap (x, y).
x eta y kopia swap emanez, eta ondoren, bere gauza egiten,
baina inoiz ez zaren benetan x eta y bera aldatzen ari dira.
Beraz, nahiz eta ez duzun pertsonaia hori ikusi kode ampersand aurretik,
Etxebizitza bat besterik ez hartu. Zer ampersand ez egin, itxuraz?
[Ikasleak] helbidea hartzea. >> Helbidea hartzea.
Beraz, ampersand eman me x helbidea esanez.
Nork daki non dagoen? 123 izan gertatzen da. Ez zait. Just eman dit x helbidea.
Eta esan nahi du y eman niri y helbidea.
Eta puntu horretan istorioa da irudian ezin hobeto koherentea duela une bat genuen.
>> Beraz, erakusleak onartzen dut, jakina, niretzat hasten honetan ikasteko,
ziren behin betiko my mind inguruan biltzeko gauza gogorrena bat.
Baina konturatzen, batez ere gauza mota hauekin jotzea mantendu dugu,
hautsi baduzu super simple horiek sort intelektualki arazoak uninteresting
besterik ez zenbakiak mugitzen inguruan, erantzuna nahasmena asko erakusleak batera
benetan horiek oso oinarrizko mekanika eratorritako daiteke.
Hona hemen helbide bat. Joan izarra.
Edo alderantziz, hemen ampersand bat da. Daki zer helbidea benetan.
Guztiak eskubidea.
Beraz, non dago memoria hau guztia datozen?
Marraztuko dugu irudi hau pare bat aldiz, eta etorkizun handiko mantentzen da itzuli gara,
baina hemen, zure ordenagailuaren memoria irudikapena da
apur bat gehiago etiketatu gure Edukien baino hemen da.
Goialdean segmentu testua adierazten du zer gertatzen da zure programa dagokionez?
[Inaudible ikaslearen erantzuna] >> Sentitzen dut? Esan berriro.
[Ikasleak] benetako programa. >> Benetako programa.
>> 0 s eta 1s C kodea idatzi ondoren konpilatu duzula, eta, ondoren, exekutatzen ari Clang Beraz
eta 0 s eta 1s muturretan sortzen sortu lortzean bilduta dago memoria
klik bikoitza ikono bat zure Mac edo PC delako
edo mario bezalako komando bat exekutatu zure gonbitean, zure diskotik 0 s eta 1s
memorian kargatu, beraz, ordenagailu horiek manipulatu ahal
eta exekutatu azkarrago.
Beraz, hasieratu datuak eta uninitialized datuak, ez egingo dugu hitz horiek buruz askoz
baina besterik ez global duten aldagaiak dira.
Hasieratu aldagai global eman balioak esan nahi du;
uninitialized aldagai global esan nahi du ez duzula oraindik eman balioak.
Ondoren, ingurune-aldagai hauen guztiz dut olatuen nire eskua,
baina ez dira azalera bezala gauzak zure erabiltzaile-izena eta
eta beste maila txikiagoa xehetasunak sort.
Baina zure memoria layout pieza juiciest pilaren eta zeure izeneko gauza hau da.
Pila, berriro ere, argi eta garbi izan behar du, memoria erabiltzen duten bakoitzean funtzioak deitzen dira,
bakoitzean daude tokian tokiko aldagai
eta betiere badaude parametro ari gainditu inguruan.
Hori guztia pila gertatzen da.
Zeure ez ditugu aipatu, baina hartzeko zeure erabiltzen duten etxebizitza bat.
Just zatia memoria desberdin bat.
Marraztuko da, hemen goialdean gertatzen da, baina hori piktoriko konbentzio arbitrario bat.
Nor ari da itxuraz memoria erabiliz, zeure, asteak?
Teknikoki da, baina zeharka. >> [Ikasleak] GetString.
GetString eta malloc. Beraz, hemen funtsezko desberdintasuna.
>> Azken aste gutxi ezagutzen duzu memoria behar duzu ez gero, aldagai bat besterik ez deklaratzeko.
Memoria asko behar duzu bada, array bat deklaratzeko eskubidea zure funtzioa barruan.
Baina arazoa mantenduko dugu begira aldarrika dezala aldagai lokalean barruan funtzio
ahalik eta funtzioak, memoria, eta aldagai horiek zer gertatzen da?
Just moduko jada zurea ez, ezta? Desagertzen kontzeptualki antzeko zerbait.
Oraindik fisikoki ez dago, jakina, baina ez da zure eskubidea erabiltzeko.
Hau da, jakina, problematikoa nahi duzun bizi funtzioak idatzi nahi izanez gero
benetan esleitu memoria eta ez eman berehala.
Puntuan Case: GetString bizitzako helburua da, aldez aurretik ideia ez dute
teklatua idatzi dut kate bat nola big,
baina lortu memoria esleitu David edo kaixo edukitzeko gai izan
edo osoa saiakera bat da, erabiltzaileak idatzi liteke sartu
Beraz GetString izan da malloc erabiliz.
Malloc, beraz, behar ez pila erabiliz;
gauza izeneko zeure ordez erabiliz.
Ez dago ezer memoria desberdin. Ez azkarragoa edo motelagoa da, edo horrelako ezer.
Besterik ez fisikoki da, beste leku batean.
>> Baina araua da zeure gainean banatzen dituen memoria
ez dira inoiz eraman duzu deitzen duzun arte - Etxebizitza bat hartu - free.
Por el contrario, memoria edozein galdetu pilaketan array bat besterik ez geratuko
edo aldagai bat deklaratzen dugu bezala egiten asteak,
lehenespenez da pilan.
Eta hori denboraren% 90 lan egiten du, baina rarer alditan horiek
non memoria esleitu eta gorde inguruan nahi baduzu,
malloc bezalako funtzio bat erabili behar duzu.
Edo erabili ditugu bezalako funtzio bat GetString, eta aldi berean erabiltzen malloc.
Ikus dezagun hau behera hondatu daiteke eta, ondoren, Binky begiratu bat hartu.
Etorkizunean itzuli gara.
Hona hemen programa super simple 2 lehen lerroak ez da?
Ingelesez, zer horiek kodea 2 lehen lerroak egin barruan nagusia?
[Inaudible ikaslearen erantzuna]
Dira. Ez du ematen dit x edo y helbidea.
[Ikasleak] Gives erakusleak ints. >> Good. Give me 2 erakusleak osoko zenbakien.
Beste era batera esanda, eman dit 2 memoria zatiak mantentzeko I marrazki gaur egun,
nahiz eta ezabatu dut, gaur egun, plaza gisa.
Emadazu 2 memoria zatiak, deitu x, y izeneko bat -
lehenago horiek s eta t deitzen dut, eta zer zatia memoria horren mota da?
Helbide bat gordetzeko.
Mota int * da.
>> Beraz, int baten helbidea joango x bizi dira,
int baten helbidea joango y bizi dira,
baina, hasieran, x eta y barruan? Nork daki? Garbage balio.
Ezer ez erakusleak zerikusia du.
Jarri dugu ez bada zerbait, auskalo zer da benetan?
Orain, x. Zer gertatzen da hemen? Hau da, egiaztatzeko x erakuslea delako. Int * bat da.
Beraz, horrek esan nahi du, x I zatia memoria batzuen helbidea jarri.
Zer esan nahi du malloc itzultzeko? Perfect, helbideak itzultzen du,
memoria osoa zatia lehenengo byte helbidea.
Zenbat byte da hau, itxuraz, esleitzean, adibidez, tresnak?
Zer da int baten tamaina? 4.
Behar dela uste duzu bada aste 1, ez da super garrantzitsua da beti gogoratu,
baina, kasu honetan, erabilgarria da, 4 byte ezagutzeko.
Beraz, hau da, 4 byte zeure on esleitzean
eta lehena helbidea itzuli me da arbitrarioki.
Orain, zer da x egiten?
A * x = 42 da zer egiten?
Bada x istorioa Puntu honetan, itxura hau zabor balio batzuk ditugu,
hau da, gaur egun y zabor balio batzuk, orain linea 3 4 byte esleitu dut.
Hau da, irudi honen itxura.
Edo zehatzago esanda, helbide honetan arbitrarioak 123 bada, hau da, zein den gure istorioa itxura.
* X = 42 esan nahi du zer? Horrek esan nahi du 123 helbide joan eta zenbakia jarri 42 dago.
Ez behar dut lerro hauen marrazteko ari gara ez delako kateak egiten.
>> Besterik ez dut idatzi behar atsegin dute hau, eta manifestazio-en mesedetan,
42 int mota bat bezala hartzen du espazio asko, 4 bytes.
Beraz, zer gertatu da, baina ez da arazo bat.
* Y = 13. Zer gertatuko da?
Arazoa * gure mundu erraztua y besterik ez da esan nahi du joan y helbidea.
Zer y? Zabor balio batzuk.
Hargatik arduratuko zabor balioa hori dela 5551212, horrelako zerbait crazy.
* Y bitartez joan 5551212 aurre egin ahal izateko.
Hori baino gehiago nahi da hemen. Ez da existitzen, esate baterako.
Beraz, * y 13 bitartekoak 13 marrazteko hemen ari naiz lortzen. Ez du existitzen.
Gainditu dut arbelean segmentuan. Zer egin behar dut?
Hori críptica mezua segmentaziuo hutsegitea naiz dudalako memorian jarri nahian
13 bezalako balioa existitzen ez den leku bat.
Programaren gainerako ados, baina agian hori ez da arte.
Hargatik saiatu istorio hau kontatzeko.
Itzuli dugu dugu hex buruz hitz egin zuen behin.
Dezagun itzuli eta izeneko gauza hau Binky Amaitzeko,
duen abisuaren etxean claymation jolasten eserita Stanford irakasle bat da,
bereko programa zehazki istorioa kontatzeko.
Besterik ez da, 3 minutu inguru luze. Hemen Binky dugu.
[Gizonezkoa bideo hizlari] Binky Hey, esnatu. Erakuslea fun denbora da.
[Binky] Zer da hori? Erakusleak buruz ikasi? Oh, GOODY!
[Isilean] Beno, hasteko, erakusleak pare bat behar dugu uste dut.
>> [Binky] Larreina. Kodea 2 erakusleak esleitzen ezin diren zenbaki osoen seinalatu.
[Isilean] Larreina. Beno, 2 erakusleak ikusten dut, baina ez dirudi ezer behar seinalatuz.
[Binky] Hori da. Hasieran, erakusleak ez ezer seinalatu.
Gauza seinalatzen dute pointees deitzen dira, eta horien ezarpena beste urrats bat da.
[Isilean] Oh, eskuinera, eskuinera. Banekien hori. Pointees dira bereizi.
Er, eta, beraz, nola ez pointee esleitu duzu?
[Binky] Larreina. Kode hau zenbaki oso pointee berri bat bideratzen, eta zati hau ezartzen du x puntu.
[Isilean] Hey, itxura hobea.
Beraz, zerbait egin da. >> [Binky] Larreina.
Dereference erakuslea x 42 zenbakia gordetzeko bere pointee dut.
Trikimailu hau nire dereferencing makila magikoa behar dut.
[Isilean] Zure dereferencing makila magikoa? Hori handia da.
[Binky] Hau da kodea itxura. Besterik ez dut ezarri zenbakia eta ... [Soinu leihoa]
[Isilean] Hey begiratu, ez doa.
Beraz, x dereference bat egiten jarraitzen arrow bere pointee sartzeko,
Kasu honetan 42 gordetzeko.
Hey, saiatu beste erakuslea, y 13 zenbakia gordetzeko.
[Binky] Larreina. Joan besterik ez dut hemen eta y 13 zenbakia sortu
eta, ondoren, hartu makila eta dereferencing besterik ez ... [Soinu buzzing] Tira!
[Isilean] Oh hey, ez du funtzionatzen.
>> Esan, Binky, ez dut uste y dereferencing ideia ona da
pointee konfiguratzeko beste urrats bat delako
eta ez dut uste egin dugu inoiz.
[Binky] Hmm, puntu ona.
[Isilean] Bai. Erakuslea y bideratu dugu, baina ez dugu nahi pointee bat seinalatu.
[Binky] Hmm, oso observant.
[Isilean] Hey, good ari zara bilatzen han, Binky.
Ezin konpondu, beraz, y x pointee berean puntu hori? >> [Binky] Sure.
Nire erakuslea esleitzeko makila magikoa erabili dut.
[Hiztuna] gizonezkoa dela aurretik bezala arazo bat izan?
[Binky] Ez, hau ez da ukitu pointees.
Aldatzen erakuslea bat beste gauza bera seinalatu. [Soinu leihoa]
[Isilean] Oh, ikusten dut. Orain y puntu x leku berean.
Beraz, itxaron. Orain y finkoa da. Pointee ditu.
Beraz, berriro dereferencing 13 baino gehiago bidaltzeko makila dastatu ahal izango dituzu.
[Binky] Uh, ados. Hemen doa. [Soinu leihoa]
[Isilean] Hey, hori begiratu. Orain lanak y dereferencing.
Eta erakusleak dira, bat pointee delako partekatzen biak, ikusi dute 13.
[Binky] Bai, partekatzea. Whatever.
>> Beraz, leku batetik bestera joateko gaur egun?
[Isilean] Oh itxura, denbora gara. >> [Binky] Baina -
[Isilean] Just gogoratu 3 erakuslea arauak.
Zenbakia 1, oinarrizko egitura duzula erakuslea, eta puntu pointee bat.
Baina erakuslea eta pointee bereizi dira, eta komun error erakuslea da
baina emateko pointee ahaztu.
Número 2, erakuslea dereferencing erakusleak hasten da, eta bere gezi honako hauek baino gehiago
bere pointee sartzeko.
Ezagutzen dugun bezala, hau soilik funtzionatzen pointee bada,
mota horretako lortzen multzoko 1 araua.
Kopurua 3, erakusle esleitzeko erakuslea bat hartzen du, eta aldatzen
erakuslea beste pointee bera seinalatu.
Beraz, esleipena ondoren, 2 erakusleak bera pointee seinalatu.
Batzuetan da izeneko partekatzea.
>> Eta hori ez da benetan. Bye-bye orain.
Binky da. Hau CS50 da. Ikusiko dugu datorren astean. [Txalo]
>> [CS50.TV]