DAVID MALAN: Ongi da, ongi etorria itzuli. Hau CS50 da. Aste honetan zazpi hasiera da. Beraz, pixka bat izan da, eta, beraz genuke pentsatu nuen hartuko dugu, non bira zurrunbilo bat utzi off non eta orain dugu. Gauza hori hemen, beraz, izan liteke eragindako larrimina batzuk lehen. Baina, zorionez, zaren hasten zer hau adierazten du hemen acclimate - Izar erakuslea, hau da, ordezkari zer gehiago layman en dagokionez? Beraz, helbide bat da. Beraz, helbide da memorian zerbait. Eta hasi berriro zuritu geruzak dugu aste pare bat lehenago, gauzak gustatzen GetString eta beste hainbat funtzio denbora honetan guztian izan dira itzuli memorian gauza helbideak, bezalako pertsonaia lehen helbide sekuentzia batzuk. Beraz, sartu valgrind ere egiten dugu, eta horrek hasteko arazo hau erabili beharko duzu ezartzeko eta, bereziki, hurrena Arazo ezarri baita. Eta valgrind du guretzat? Memoria filtrazioen egiaztatzen da, eta hura Era berean, memoria gehiegikeria begiratzen du. , Ezin da probabilitate batzuk, detektatzen bada Zure kodea da memoria ukitzeko joan besterik ez da behar ez. Beraz, ez isuri bat izan behar, baina bada batzuetan mugak haratago joan array, eta exekutatu benetan Valgrind bultzatu eta portaera duten bitartean valgrind da zure programa da exekutatzen horren barruan exekutatzen, izango duzu Halako mezuak - "baliogabea idatzi tamaina 4, "hori, gogoratzen bikote baten duela esan nahi izan nuen nahi gabe ko int gustatzen urrunegi array bat mugetatik haratago. Eta, beraz, tamaina 4 esan nahi hemen tamaina jakin int. Beraz, hartu reassurance Izan ere, hori valgrind irteera da, formatua, atrocious besterik ez da. Benetan zaila da nahastea bidez ikusi interesgarria den informazioa. Beraz, zer egin dugu hemen laburpena besterik ez da gehiago pare batzuk interesgarri lerroak. Baina konturatzen 80 valgrind en duen% irteera bat pixka bat izango distrazio. Just horrelako ereduak bila - baliogabea eskubidea, baliogabea irakurri, 40 byte eta bloke kopuru batzuk dira, zalantzarik gabe, galduko duten bezala, gako-hitzak. Eta zer espero ikusiko dituzu batzuk zer funtzioaren aztarna mota akatsa da benetan sartu Kasu honetan, hemen, zer lerro batean nire kodea error zen itxuraz? Izeneko fitxategia memory.c, hau da, 26 Esate batera egon ginen jolasten garai hartan. Beraz, seguruenik ez malloc batean. Ziurrenik zen nire kodearen ordez. Beraz, honetan ikusiko dugu berriro eta berriro luze baino lehen. Scanf Horrela sortu zen batean forma, beraz, orain arte pare. Sscanf ikusi dugu labur-labur. Zerbait zenbaki bat izan zen sartu atean sartu duzu zure egiteko galdetegiaren prestakinak. Eta scanf da benetan zer CS50 liburutegia izan da azpian erabiliz ahalik eta denbora luzez kanpaia sarrera lortzeko erabiltzaileari. Esate baterako, mugitu ditut bada CS50 tresnaren hemen, let me ireki bat Adibidez, gaur egun deitzen scanf-0.c Eta super erraza da. Besterik ez da kode lerro batzuk. Baina benetan erakusten du nola getInt izan da denbora honetan guztian lanean. Programa honetan, hemen, 16 lerro batean Oharrean adierazten dugu dut int bat. Erakusleak ez, beraz, ez da ezer magikoa ez dago, besterik gabe, int bat. Ondoren, linea 17, galdetuko dut zenbaki bat erabiltzaile, mesedez. Ondoren, 18 urtearen amaieran, scanf erabili dut hemen. Eta nik zehaztu, mota printf bezala, dut aurrekontua espero unquote ehuneko i. Berea izan dut, beraz, noski, int bat adierazten du. Baina zer nabarituko bigarren scanf argumentua behar da. Nola litzateke bigarren deskribatzeko duzu koma ondoren argumentua? Zer da hori? X helbidea da. Beraz, hau da, erabilgarria delako eskainiz x-en helbide scanf, zer ez indarra ematen dutela funtzio hori egin? Ez bakarrik joaten, baina, halaber, zer egin? Egin nahi du aldaketa bat. Ez duzu joan ahal izango delako, Ordena da memoriaren kokaleku bat, mapa batean bezala. Eta hainbeste denbora ematen duzu scanf bezala, edo mapa bat, besteak beste, duten funtzio funtzioa ez joan ahal izango da, eta ez bakarrik balioa begiratu, baina, halaber, ahal aldatzeko balio du, hau da, erabilgarria bada scanf bizitzaren helburua da eskaneatu input erabiltzaileari, zehazki teklatuaren bidez. Eta f adierazten formatuko bezala printf, f adierazten formatuko bat katea nahi duzun inprimatzeko. Beraz, azken finean, 18 lerro hau, besterik gabe, esaten du, saiatu Erabiltzaile batetik int bat irakurtzeko teklatua eta gorde x barruan, at edozein dela ere x helbidea gertatzen bizi da. Eta gero, azkenik, linea 19 besterik ez dio, for int esker, kasu honetan. Beraz, aurrera eta niri hau egiteko. Beraz, scanf 0. Dezagun aurrera me eta zoom sartu Joan naiz eta hau exekutatu dituzten Puntuak barra scanf 0. Zenbakia, mesedez? 50. 50 Eskerrik asko. Beraz, oso erraza da. Orain zer egiten ari da, ezta? Ez da osoa sorta bat egiten ari error egiaztatzea. Esate baterako, ez badut lankidetzan aritzea, eta ez dut zenbaki bat idatzi, baina ordez bezala "kaixo", zerbait idazten dut Hori besterik bitxi mota. Eta, beraz, gauza da CS50 bat liburutegia izan da guretzat batzuk egiten denbora reprompting dela eta reprompting. Berriro saiatzeko Esaldi abisuaren cs50.c izan zen, eta hori da arrazoia getInt hori da CS50 liburutegia da benetan, oro har, lerro sorta, Oraindik dugulako horrelako zerbait ergelak egiaztapena. Ba, erabiltzaileak ez du ematen digu, hain zuzen ere, int bat? Ba berak ematen digu zerbait alfabetikoa gutun bezala? Horrela bada, antzemateko nahi dugu eta hori, horietan, yell. Baina gauzak gehiago interesgarria Adibidez, hurrengo hau ere. To scanf-1.c dut joan bada, zer da Gauza hori, funtsean, aldatu in Adibidez, hurrengo hau? Char * erabiltzen ari naiz, jakina, ordez int. Beraz, hau da, interesgarria, char * delako, gogoratzen, benetan besterik kate bat bezala, gauza bera. Beraz, agian atsegin hau da super bat sentitzen da GetString ezartzea erraza da. Baina zuritu dut atzera geruza CS50 liburutegia, naiz eta, beraz, char * honetan deituz orain. Beraz, ikus dezagun non, edonon bada, gaizki joan gara. Line 17 - Esan nuen, berriro ere, mesedez, eman dit zerbait, Kasu honetan, katea. Eta, ondoren, hurrengo lerroan, scanf deitu dut, berriro ere, emanez formatuan kode bat, baina hau denbora ehuneko s. Eta, ondoren, garai honetan, nago buffer emanez. Orain konturatu, ez dut erabiltzen & ikurrak dira. Baina zergatik da hori, seguruenik, OK hemen? Zer buffer delako dagoeneko? Dagoeneko da erakuslea. Dagoeneko ez da helbide bat. Eta dezagun hitz hau "nahastea", let me deitu besterik ez da, adibidez, for sinpletasuna. Baina deitzen dut bufferrerako delako Oro har, programazioan, zuk bada memoria zatia, eta horrek kate bat benetan besterik ez da, deitu bufferrean dezakezu. Leku bat, informazioa gordetzeko da. To YouTube, denean bezala, antzeko gauzak , moteltzeko ari dira nolabait esateko, hori besterik esan nahi bit da deskargatzea Internet eta horiek gordetzeko batean tokiko array, memoria zatia, beraz, tokiko dela ikusi ahal izango duzu, geroago gabe saltatzea edo bertan zintzilik atzera jotzen ari diren bitartean. Beraz, ez da arazo bat dago hemen, nahiz eta, dut scanf delako kontatzea, espero Erabiltzaile kate. Hemen helbide da memoria zatia da. Jarri katea dagoela. Zergatik lotu ematen , arazoak izan arren gurekin? Zer da hori? AM sartzeko onartzen dut memoria zati hori? Badakizu, ez dakit. Buffer izan da hasieratu delako ezer? Ez da benetan. Eta, beraz, zer egin dugu deituz da bat zabor-balioa, eta horrek ez da hitz formal bat. Esan nahi du, besterik gabe, ideia ez dago zer bit dugu barruan lau byte horren Buffer jo dut egotzitako. Ez dut deitu malloc. Nik, zalantzarik gabe, ez da deitzen GetString. Beraz, nork daki zer den benetan buffer barruan? Eta oraindik scanf kontatzea blindly, joaten jarri eta edozein dela ere, erabiltzaileak idatzitako. Beraz, zer da seguru asko sor gure kodea exekutatzeko badugu? Beharbada segfault. Agian ez, baina beharbada segfault. Eta esan dut, agian, ez delako, batzuetan, , egiten duzu, batzuetan, ez duzu get segfault. Batzuetan, lortu besterik ez duzu zortea, baina hala ere, da izango gure programaren akats bat. Hargatik aurrera dit eta hori biltzeko. Da eskola zaharra bidea egin behar dut. Clang etenaren 0 scanf-1, beraz, scanf-1.c, Sartu. Ene, zaharregia eskola. Ikus dezagun. Nora jo behar dut? Oh, char * bufferra. Oh, eskerrik asko - Gorde, OK - Oso zaharrak eskola. Guztiak eskubidea, nik, berriz, bat izan da. Beraz, ez dut gorde fitxategia ondoren Aldi baterako egiten duten aldatzeko unea dela. Eta orain, konpilatu dut eskuz Clang batera. Eta orain aurrera noa eta exekutatu scanf-1, Sartu. Katea mesedez. Urtean idatzi dut "kaixo". Eta orain, hemen, non da, sinceramente, printf ahal izango da, apur bat gogaikarriak. Ez da benetan joan kasu honetan segfault. Printf da apur bat berezia duelako beraz, super da gehien erabiltzen duten funtsean printf egiten ari da alde bat gaitu, eta konturatu, hori ez da baliozko erakuslea. Let eraman ninduen neure burua besterik gainean inprimatu Parentesi null kanpo, nahiz da, baina ez nahitaez, zer espero dugu gure burua. Beraz, ezin dugu benetan erraz bat bultzatu segfault honekin, baina argi eta garbi honetan ez da portaera nahi nuen. Beraz, zer irtenbide sinplea da? Beno, scanf-2n, let me proposatzen ordez, benetan besterik esleitzean char *, utzi pixka bat azkarragoa izan niri buruz honetan, eta utzi bufferra esleitu me 16 karaktere-sekuentzia bat. Beraz, hori egin ahal izango dut modu pare bat. Erabat ezin dut erabili malloc. Baina joan naiz, astean bi denean Beharrezko dut osoa sorta baten karaktereak. Hori besterik array bat. Hargatik birdefinitu ordez me buffer 16 karaktere array bat izango da. Eta orain, buffer pasatzen dut - Eta hori ez dugu hitz aste bi - baina array gisa tratatzeko dezakezu da helbide bat ere. Teknikoki, ikusi dugun bezala, dute Oraindik pixka bat desberdina da. Scanf, baina ez du axola pasatzen baduzu array bat du izena, izan ere, zer Clang da guretzat, funtsean, eman egingo tratatzen du array horren izen gisa 16 byte zatia helbidea. Beraz, hau da, hobeto. Horrek esan nahi du orain, espero dut hori egin honako hau. Let me zooma une batez eta do egin scanf-2, konpilatu Ados. Orain lortu ez dit barra scanf-2. Katea mesedez. "Kaixo". Eta hura zirudien, une honetan lan egiteko. Baina norbaitek proposatzen eszenatoki bat horretan, agian ez da oraindik lan? Bai? Zerbait 16 karaktere baino luzeagoa. Eta egia esan, izan dezakegu pixka bat zehatzago. Jada, ondoren, 15 karaktere zerbait, benetan kontuan hartu behar dugulako behar dugun hori backslash zero inplizituki katearen amaieran, hau da, alde batera scanf bat normalean hartu Gurekin zaintzen. Beraz, zerbait egin zidan - batzuetan besterik ezin dugu utzi duten bezala. OK, beraz, gaur egun dugun eragindako gure segmentaziuo hutsegitea. Zergatik? Baino gehiago 15 dut ondo idatzi delako pertsonaiak, eta, beraz, benetan dugu ukitu memoria dut benetan ez dute. Beraz, zer da benetan konponbidea hemen? Beno, zer egin behar dugu, jada kate bat bada? Beno, agian egin dugu 32 byte. Beno, hori ez da nahikoa luzea bada? Nola 64 byte buruz? Zer ez da hori nahikoa luzea bada? Nola 128 edo 200 byte? Benetan konponbidea hemen dago kasu orokorra, ez badugu ezagutzen aurrera zer erabiltzailearen idazten da? Besterik atzetik ematen mina handi bat mota da, zintzoa izan behar du, eta horregatik CS50 liburutegia du pare bat dozena lerro kodea duten kolektiboki ezartzea Katea GetString modu bat ez ditugun in dute aldez aurretik zein Erabiltzaileak idatzi du. Bereziki, begiratu baduzu atzera cs50.c duela bi aste batetik, ikusiko duzu GetString benetan egiten Ez erabili scanf modu honetan. Baizik eta, karaktere bat irakurtzen du aldi berean. Bat buruz gauza polita delako karaktere bat irakurtzen ahal da bermatzeko geure burua beti gutxienez karaktere. Besterik ezin dut deklaratzeko karaktere bat, eta gero hartu besterik urrats horiek benetan haurra irakurri karaktere bat batean hasi teklatua denbora. Eta gero, zer GetString ikusiko duzu ez du denbora behin jotzea da, esan, 16 memoria byte, erabiltzen malloc, edo haren lehengusu bat, esleitu memoria gehiago, zaharrak kopiatzen berria, eta ondoren arakatzeko sartu memoria batera, pertsonaia bat lortzean, garai hartan, eta orduan exekutatzen da horren memoria zatia, botatzen da, urruti, ase memoria zatia handiagoa da, kopiatzen zaharrak berriak eta errepikatzen da. Eta benetan da mina benetan ezartzeko zerbait bezain sinplea Erabiltzaile bat sarrera lortzeko. Beraz scanf erabili ahal izango dituzu. Antzeko beste funtzioak erabili ahal izango duzu. Eta testuliburu asko eta online adibideak, baina guztiak dira horrela, arazo aurrean. Eta, azken finean, ohitu bat segfault da nolako gogaikarriak dira. Ez da erabiltzailea ona. Baina txarrena gero, zer funtsean, jarri zure arriskua at kodea? Zenbait eraso mota, potentzialki. Hitz egin zuen, besteak beste, eraso bat gara - pila gainezka. Baina, oro har, zu bada onartzen gainezkatzea buffer bat, bezala dugu aste pare duela, besterik gabe, idazten dituzten gehiago "kaixo" baino pilan, duzu daitezke, hain zuzen ere, hartu baino gehiago, seguru asko, bat ordenagailua, edo, gutxienez, datuak at lortu ez du zurea. Beraz, azken batean, hau da, zergatik dugu prestakuntza gurpilak ere. Baina orain, eraman off hasiko gara, gure programak jada ez da behar bezala, nahitaez, erabiltzailearen sarrera. Baina arazoa kasuan ezar sei, Zure sarrera egingo erraldoi bat etorriko hiztegi 150 fitxategi batzuk bakoitiak mila hitz. Beraz, ez duzu kezkatu erabiltzailearen arbitrarioak sarrera. Ematen dizugu hipotesi batzuk fitxategi hori buruz. Erakusleak edo scanf buruzko edozein galdera Erabiltzaile edo, oro har, sarrera? Ondo da, beraz, azkar bat, gero, itxura batean Gai amaierako duela bi aste batetik. Eta hori egitura baten nozioa izan da. Ez dagoela - a nozioa egitura, hain zuzen, eta zer? Zer egitura Gurekin egin nahi duzu? Define - sentitzen? Define aldagai mota bat. Beraz ordenatzeko. Benetan ari gara bi gai konbinatuz. Beraz typedef batera, gogora ekarri dugun deklaratzeko geure mota bat, bezalako sinonimo, * karaktere kate bezala. Baina typedef eta struct erabiliz, dugu sortu benetan gure datuen egiturak. Esate baterako, joan nintzen atzera gedit sartu Hemen, besterik gabe, une batez, eta aurrera joaten naiz eta zerbait bezala, let me gorde honen ondorioz, esan dezagun, structs.c aldi baterako, besterik ez naiz aurrera eta, besteak beste, standardio.h, int hutsune nagusia. Eta gero, hemen, eman dezagun nahi dut programa bat gordetzen duten idazteko hainbat ikasle anitz etxeak, adibidez. Hain da registrarial bezala Nolabaiteko datu-basea. Hala bada, izena, ikasle batek behar dut zerbait egin liteke * char izena bezala, eta zerbait egin dut bezala - benetan, dezagun erabili CS50 liburutegian besterik gabe, une honetan bat egin pixka bat errazagoa da, beraz, maileguan hartu ahal izango dugu kode lerro dozenaka horiek. Eta dezagun, besterik gabe, gorde simple. Gorde katea dugu, eta orain GetString. Beraz, orain aldarrikatzen dut ditudan gordetako izena ikaslearen batzuk, eta etxe baten ikaslearen batzuk, besterik gabe, aldagai erabiliz genuen bezala, eta aste batean. Baina demagun orain nahi dut onartzen anitz ikasleak. Guztiak eskubidea, beraz, nire senak dira egin katea izena2, GetString, katea lortzen house2 lortzen GetString. Eta gero, gure hirugarren ikaslea, dezagun NAME3 GetString. Ondo da, beraz, hau da, espero deigarria ergel mota duzun bezala, Prozesu hau da, benetan, inoiz ez delako Amaierara joan dira, eta besterik ez da joan nire kodea itxura okerragoa eta okerragoa eta okerragoa. Baina hau konpondu dugu gehiegi astean bitan. Zein izan da gure nahiko garbi konponbidea denean aldagai bat baino gehiago izan genuen berean datu-mota guztiak daudela lotuta, baina ez dugu nahi atrocious nahaspila honetan aldagai antzera izendatzen? Zer egin ordez egiten dugu? Beraz, toki gutxi entzun dudala uste dut. Array bat izan genuen. Nahi duzun instantzia bat baino gehiago baldin zerbait, zergatik ez hau guztia garbitu dugu sortu, eta besterik esan, ematen dit array izeneko izenak? Eta orain, goazen gogor kodea 3. Eta, ondoren, ematen dit beste array izeneko etxeak, eta niri eman dezagun orain gogor kodea 3. Eta masiboki Nik garbitu du mezurik besterik ez dut sortu. Orain, oraindik ez dut gogor kodetuta 3, baina are 3 izan dinamikoki datoz Erabiltzaileak, edo argv, edo antzekoak. Beraz, hau da, dagoeneko garbitzailea. Baina zer da hau buruzko gogaikarriak da orain, nahiz eta izen hori nolabait funtsean, lotuta Ikasle baten etxea - Ikasle bat dut benetan nahi irudikatzeko - Gaur egun bi multzo direla paraleloan Zentzu ari dira parte tamaina bera, eta izen-tarte 0 ustez etxe tarte 0 mapak, eta izenak parentesi 1 mapak etxe tarte 1. Bestela esanda, ikasleari bizitza etxea, eta beste ikasleari duten beste etxe bizitza. Baina ziur aski hori izan egin, are gehiago garbi. Beno, izan daiteke, hain zuzen ere. Eta utzi aurrera me eta ireki structs.h, eta ikusiko duzu ikusteko ideia hori hemen. Iragarki ditudan typedef erabiltzen da, zure une bat aipatu duela deklaratzen gure datu-mota egin. Baina, halaber, naiz beste hitz hori erabiliz izeneko egitura ematen dit berri bat Datuen egitura. Eta datu-egitura dut erreklamazioa joan bi gauza izan behar du barruan it - izeneko izen kate bat, eta izeneko etxea katea. Eta izena joan naiz emateko Datuen egitura hori joan deitu behar da ikaslea. Deitu dut, ezin dut ezer nahi, baina hori semantikoki egin me susma nire gogoan. Beraz, orain, ireki nuen hobe bertsio bat Programaren idazten hasi nintzen ez, utzi mugitzeko goiko me. Eta ez da gehiago kode lerro hemen, baina utzi niri fokua eman batean une. Deklaratu dut etengabe izenekoa ikasleak eta gogor kodetuta 3 oraingoz. Baina orain, nabarituko nola garbi nire kodea hasten lortzeko. Linea 22, deklaratzen dut ikasleek array. Eta nabarituko ikaslea, hau da, itxuraz Gaur egun, datu-mota bat. Fitxategi honen goialdean, nabarituko delako Barne Nik goiburu-fitxategia hori bota nuen une bat besterik ez duela. Eta goiburu fitxategi hori nahiko besterik gabe, izan Ikasle bat definizio hau. Beraz, orain, sortu dut nire Ohiko datuak C motako urte egileek duten Duela ez zuten aldez aurretik pentsatzea. Baina ez dago arazorik. Egin ahal izango dut neure burua. Beraz izeneko ikasle array bat da, zeinen kide bakoitzak ikaslea egitura bat da. Eta horietako hiru nahi dut array. Eta orain, zer gainerako du Programa hau egiteko? Zerbait apur bat arbitrarioa behar nuen. Beraz, 24 online-tik aurrera, Batetik bestera joateko 0 eta 3 dut. Galdetu nuen, gero, erabiltzaileak ikaslearen izena. Eta, ondoren, lehen bezala erabiltzen dut GetString. Ondoren, eskatu ikasleari etxea dut, aurretik eta GetString gisa erabiltzen dut. Baina abisua - zertxobait berria sintaxia pieza - Oraindik ere, i-garren ikaslearen indize dezaket, baina nola lortu berariazko datuak dut Eremu egitura baten barruan? Beno, zer da itxuraz berriak sintaxia pieza? Besterik ez dot operadorea. Ez dugu benetan ikusi aurretik. Ikusten duzun da pset bost dudan baduzu atean sartu da dagoeneko fitxategiak bit-ekin. Baina besterik ez dot honen barruan esan nahi du egitura edo hainbat eremu, eman dot izena, edo ematen dit dot etxea. Horrek esan nahi du joan barruan egitura duen eta, bereziki, arlo horietan. Zein da programa hau gainerako ez du egin? Ez da sexy duten guztiak. Iragarki 0 eta 3 dudala batetik bestera joateko, berriz ere, sortu eta, besterik gabe, I ingeles bat beraz, eta, beraz bezala, besteak beste, eta esaldi batean dago Etxe bat, besteak beste, izena, puntu batetik pasatzen i-garren ikaslea eta bere etxea baita. Eta, ondoren, azkenik, orain hasi lortu dugu honi buruz anal, gaur egun dugun Oraindik zer malloc eta ezagutzen bestelako funtzioak izan dira denbora hori guztia egiten. Zergatik izen biak askatu behar dut eta etxea, nahiz eta I ez zuen deitu malloc? GetString egin. Eta hori gutxi zikin sekretu bat izan da aste batzuk, baina GetString du dira guztien gainetik memoria leaking jarri seihilekoa guztiak, beraz, oso urrun. Eta azkenean valgrand honek agerian uzten digu. Baina ez da big aurre, jakin dut ahal izango dut, besterik gabe askatzeko izena eta etxea, nahiz eta teknikoki, nahi izan super, super seguru, izan behar dut Errore batzuk egiten hemen egiaztapena. Zeintzuk dira zure instincts diozu? Zer egin behar dut egiaztapena askatu dut zer den lehenago katea, aka horrek char * bat? Benetan behar dut ikasle egiaztatzen bada tarte i dot izena ez berdinak null. Ondoren, OK egingo aurrera eta libre joan erakuslea, eta bera edo beste bat baita. Ikasle tarte i dot etxea ez bada to null berdin, hau egingo babesteko izkinan kasuan aurka eta bertan GetString null antzeko zerbait itzultzen. Eta une bat duela ikusi dugu, printf borondatea babesten gaituzte, besterik gabe, hemen esaten nulua da, eta arraro begiratzen du. Baina, gutxienez, ez da segfault, ikusi dugun bezala. Beno, goazen beste gauza bat egin zidan hemen. structs-0 ergelak zein programa da idatzi dut, datu horiek guztiak ere, eta, ondoren, nik galdu programa behin amaitu da. Baina aurrera zidan eta hori egin. Dezagun terminal egin dit leihoa pixka bat handiagoa da. Let structs-1 egin dit, eta horrek honen bertsio berri bat da. Pixka bat hasi dut urrutiratzeko. Eta orain, utzi dot exekutatu me barra structs-1. Ikaslearen izena - David Mather, dezagun Rob Kirkland, dezagun Lauren Leverett. Zer da interesgarria da, orain oharra - eta Nik bakarrik dakit hau delako Programa idatzi nuen - fitxategia ez da orain nire egungo direktorioa izeneko students.csv. Batzuk ikus zezakeen Mundu errealean horiek. Zer CSV fitxategi bat da? Komaz bereizitako balioak. Ordena da gizon ahula en bezala Excel fitxategi baten bertsioa. Errenkada eta zutabe taula bat da hori Excel bezalako programa bat irekitzeko, edo Mac batean zenbakiak. Eta ireki dut fitxategi hau gedit bada, hemen ere, abisua - eta zenbakiak ez dira. Hori besterik gedit kontatzea me lerro-zenbakiak. Honen lehen lerroan nabarituko fitxategia David eta Mather da. Hurrengo lerroan Rob koma Kirkland da. Eta hirugarren lerroan Lauren da koma Leverett. Beraz, zer egin dut sortu? Nik orain, idatzizko C programa bat eraginkortasunez kalkulu orriak sor ditzake bat ireki daiteke Excel bezalako programa. Ez dela sinesgarria datu multzo bat, baina duzu, askoz handiagoa Saiakera bada datuak benetan zuk nahi manipulatzeko eta grafikoak eta egin bezala, hau da, agian, Modu datuak sortzeko. Gainera, CSVs dira benetan super komuna besterik simple datuak gordetzeko - Yahoo Ogasun, adibidez, lortu baduzu stock beren deiturikoaren bidez komatxorik API, doako zerbitzua ematen dizuna get egungo up-to-the-data stock enpresen kotizazio dute, ematen diren datuak atzera super simple CSV formatuan. Beraz, nola egiten dugu? Beno nabarituko, programa honen gehienak ia berdina da. Baina konturatu behera hemen, eta ez inprimatu ikasleak dira, on line 35 aurrerantzean, dut gordetzea aldarrikatzen dut diskoan ikasleek, beraz, fitxategi batean gorde. Beraz, nabarituko * fitxategi batean geratuko naiz - orain, hau C. anormaltasun baten antzeko zerbait da Edozein arrazoi dela eta, fitxategi txanoak guztiak, eta hori ez da gehien datuak beste mota bezala C. Baina hau da, eraiki- datu-mota, fitxategia *. Eta erakuslea naiz geratuko fitxategi batean, nola dela pentsa dezakezu. fopen irekitako fitxategi esan nahi du. Zer zer fitxategi ireki nahi duzu? Fitxategi bat ireki nahi dut izango dela inori deitu students.csv. Ezer I deitu nahi izan dut. Hartu eta, ondoren, etxebizitza bat. Zer da bigarren argumentua du to fopen ziurrenik esan nahi du? Eskuin, idatzi w, ezin irakurketarako r izango da. Ez da bat erantsi baduzu lerro eta nahi ez gehitzeko gainidatzi gauza osoa. Baina nahi dut fitxategi hau sortzeko behin, beraz, aurrekontua unquote w erabili dut. Eta hori bakarrik ezagutzen dut habiendo irakurri dokumentazioa, edo gizon orria. Fitxategia ez bada nulua - beste era batera esanda, ez da ezer oker joan ez bada - utzi batetik bestera joateko zehar me 0-tik 3 ikasle. Eta orain konturatzen ez da zerbait inoiz, beraz, apur bat ezberdina 41 lerro buruz hemen. Ez da printf. Fprintf da fitxategia printf da. Beraz, fitxategi batean idatzi behar da joan. Zein fitxategia? Ko horren erakuslea duzu zehaztu lehenengo argumentu gisa. Ondoren, kate-formatu bat zehaztu dugu. Orduan, zer kate nahi dugun zehaztu dugu berea duen lehen s plug, eta ondoren, beste aldagai bat edo bigarren ehuneko s. Ondoren, fclose fitxategia itxi dugu. Askatu baino memoria aurretik, nahiz Atzera joan behar dut, eta gehitu null egiaztatzen batzuk. Eta kito. fopen, fprintf, fclose ematen dit gaitasuna, testu fitxategiak sortzeko. Orain, arazo multzo bost ikusiko dituzu, hots, irudiak, erabiltzen ari zara fitxategi bitarrak ordez. Baina, funtsean, ideia bera da, nahiz eta funtzioak izango dituzu ikusten dira apur bat desberdina da. Zurrunbilo tour, beraz, baina izango duzu fitxategi guztiak ere ezagutzen I/O-- sarrera eta irteera - pset bost. Eta buruzko edozein galdera Hasierako oinarriak hemen? Bai? Zer saiatu duzu null balio bat askatzeko bada? Uste dut, aske ahaztuak izan ez bada behintzat bat little more user-friendly, dezakezu potentzialki segfault. It null pasatzen da txarra ez dudalako uste free molesta zuk begiratu, litzateke potentzialki delako alferrik izan denbora bera egin behar da aldeko munduko guztiontzat. Galdera ona da, baina. Guztiak eskubidea, mota honetako lortzen du, beraz, digu gaia interesgarri bat. Arazo multzo gaia bost auzitegi da. Gutxienez, hori zati batean arazo multzo. Kernet, oro har, aipatzen du Informazio dezaketela edo berreskuratzeko agian ez ezabatu dira nahita. Eta, beraz, eman nahi nizuke azkar pentsatu nuen zer gustu benetan guzia azpian denbora honetan Zure ordenagailuaren kanpaia. Adibidez, zuk barruan gertatzen bada, zure ordenagailu eramangarria edo zure mahaigaineko ordenagailu baten disko gogorra, bai da mekaniko bat gailu benetan biraka - ez da zirkularra izeneko platters gauzak Itxura nahiko gustuko dudana besterik ez da izan sortu pantailan hemen, nahiz hau gero eta eskola zaharra da. Hau da, hiru eta erdi hazbeteko da disko gogorra. Eta hiru eta erdi hazbeteko aipatzen gauza denean instalatu dituzten ordenagailu batean. Asko zure ordenagailu eramangarriak mutilak orain dute solido-egoera, gailuak, edo SSDs, ez duten piezak mugituz. RAM bezala, gero eta gutxiago bezalako ari dira mekaniko gailu horiek. Baina ideia oraindik ere bera da, zalantzarik gabe erlazionatzen dira arazo ezarri bost. Eta uste duzu buruz bada, orain disko gogor bat zirkulu bat adierazten du, eta horrek baloia Horrela marraztu dut hemen. Noiz zure ordenagailuko fitxategi bat sortzen duzunean, da ala ez da SSD bat, edo, Kasu honetan, adineko eskola disko gogorra, Biltzen duten fitxategi anitz bit. Demagun dela hau, 0 eta 1, 0 s eta 1s sorta oso bat. Beraz, nire disko gogorra da. Hau da, antza denez, nahiko handia fitxategi bat. Eta sortu da erabiliz 0 s eta 1s hartan fisiko platter zatia. Beno, zer fisiko zati hori? Beno, bihurtzen da bat disko gogorrean, mota hau, gutxienez, ez da horiek txiki-txiki txiki partikula magnetikoak. Eta izan dira, funtsean, Iparraldeko eta hego polo horiek, beraz, zuk buelta horiek partikula magnetiko bat Horrela, esan hori izan dezakezu 1 ordezkari. Da, eta goitik behera hegoaldean bada iparraldean, esan hori izan dezakezu 0 ordezkari. Beraz fisiko mundu errealean, hori nola zerbait izan liteke duzu bitarra 0 egoera eta 1. Beraz, hori da fitxategi bat da. Ez dago magnetiko sorta oso bat da partikulak dira beren modu honetan edo Modu honetan, sortzen ereduak 0 s eta 1s du. Baina bihurtzen da fitxategi bat gordetzen duzunean, zenbait informazio gordetzen da bereizita. Beraz, txiki honetan taula bat da, direktorioa bat da, nolabait esateko. Eta zutabe-izen hori deitzen dut, eta Zutabe hau kokapena deitu dut. Eta, beraz, suposatzen dut hau nire curriculuma. Nire resume.doc da gorde kokapena, esan dezagun 123. Zenbaki hori beti dut joan. Baina nahikoa da, besterik gabe esan nahi RAM batean, disko gogor bat hartu ahal izango duzu duten gigako edo 200 gigabyte bat edo terabyte bat, eta ahal duzun zenbakia byte guztiak. 8 bit zatiak guztiak zenbakia dezakezu. Beraz, hori esaten dugu kokapena 123 da. Nire eragilearen barruan direktorioa honetan, beraz, sistema gogoratzen nire curriculuma kokapena 123 da. Baina interesgarria lortzen denean fitxategi bat ezabatu. Adibidez, beraz - eta zorionez, munduko gehienak ditu hau kalera harrapatu - Zer gertatzen da fitxategi bat arrastatzen baduzu, zure Mac OS Trash edo zure Windows Recycle Bin? Zer egiten duten helburua da? Jakina da fitxategia kentzeko, baina zer arrastatze ekintza egiten du eta Zure Trash edo sartu zure jaregiten Recycle Bin ordenagailu batean egin? Deus, benetan. Besterik karpeta bat bezalakoa da. Karpeta berezi bat da, ziur izan. Baina ez da benetan ezabatu fitxategia? Beno, ez da, izan ere, ziurrenik batzuk izan dira, adibidez, ai, madarikatua, ez zenuen esan nahi egin. Beraz, egin klik bikoitza duzu Trash edo birziklatu Bin. Poked dituzun inguruan, eta berreskuratu dituzun besterik arrastatuz, fitxategia ez daudelarik. Beraz, argi eta garbi, eta ez da, nahitaez, ezabatzen. Ados, smarter baino zaren. Ezagutzen duzun, besterik gabe, arrastatu sartu dela Trash edo birziklatu Bin ez du esan nahi zakarrontzi ari bazara hustea. Beraz, joan menuan duzu, eta esan duzu Empty Trash Hustu edo birziklatu Bin. Orduan, zer gertatzen da? Bai, beraz, ezabatu egingo da, are gehiago. Baina, hori gertatzen da hori. Ordenagailua ahazten non resume.doc zen. Baina zer gertatzen da, ez da aldatu, itxuraz irudian? Bit da, eta 0 s 1s erreklamazioa dut alderdi batzuk fisiko baten gunean hardwarea. Oraindik ez dute. Besterik ordenagailuak egiten da ahaztuta zer diren. Beraz, funtsean libratuko fitxategia en eta horrela bit dira berriz erabili ahal izango da. Baina ez duzu gehiago sortu fitxategiak arte, eta fitxategi gehiago, eta gehiago fitxategiak probabilistically ere, 0 s eta 1s, partikula magnetiko horiek, get berrerabili goitik edo eskuineko aldean sortu da, beste fitxategiak, 0 s eta 1s. Beraz, denbora-leiho hau duzu. Eta ez da aurreikusteko du luzera, benetan. Araberakoa izango da zure disko tamainaren da unitatean, eta zenbat fitxategiak eta duzu nola azkar berriak egiten dituzu. Baina ez dago denbora leihoaren zehar duen fitxategi hori da, oraindik ere, ezin hobeto berreskuratu. Hala bada, erabili al duzu inoiz McAfee bezalako programak edo Norton suspertzen saiatu datuak, guztiak egiten ari dira saiatzen ari da berreskuratzeko honek deiturikoak direktorioa irudikatu non zure koadernoan zen. Eta, batzuetan, Norton eta esango dute, fitxategia da% 93 berreskuratu. Beno, zer esan nahi du? Dagoela esan nahi du, besterik gabe, beste fitxategi batzuk, coincidentally azkenean erabiliz, esan, Zure fitxategia jatorrizko out bit horiek. Beraz, zer da benetan inplikatuta datuak berreskuratzeko? Beno, ez baduzu zerbait bezala Norton zure ordenagailuan pre-instalatutako, onena batzuetan egin dezakezu da begiratu osoa disko gogorrean bila at bit ereduak. Eta arazo multzo gai bat bost izango duzu bilatu disko gogor bat baliokidea, auzitegi bat bat bateko compact flash txartela irudi kamera digitala, 0 s bila 1s eta normalean hori, handiko probabilitatea, adierazten JPEG irudi bat hasteko. Eta zuk guys irudi horiek berreskuratu ahal izateko , suposatuz ikusten dut patroi hau bada on auzitegi irudi bit-ekin handiko probabilitatea, markatzen duten JPEG baten hasiera. Eta ikusi nuen bera patroi bada, berriz ere, ziurrenik hasiera markatzen JPEG beste bat, eta beste bat JPEG, eta JPEG beste. Eta hau da, normalean, nola datuak berreskuratzeko lan egingo du. Zer da JPEGs buruzko polita da, nahiz eta fitxategi-formatu bera zertxobait konplexua da, eta, besteak beste, bakoitzaren hasieran fitxategia da benetan nahiko identifikagarri eta erraza da, ikusten duzun bezala, dut ez baduzu dagoeneko. Hargatik hartu hurbilago begirada azpian zehazki zer bezala kanpaia gertatzen da, eta hauek 0 s eta 1s dira, emateko, pixka bat gehiago zehatz honetan erronka testuingurua. [Bideo-erreprodukzioa] -Non dago zure PC gordetzen gehien bere datuak iraunkorra. Horretarako, datuak RAM from bidaiatzen software seinale dela esango batera disko gogorra nola diren datuak gordetzeko. Disko gogorra zirkuitu itzuli Tentsio sartu seinale horiek gorabeherak. Hauek, aldi berean, kontrolatu disko gogorrean en higikorrak, gutxi batzuk mugitzen utzi piezak moderno ordenagailuan. Seinale batzuek motor bat horrek biraka metal-ekin estalitako platters. Zure datuak benetan gordetzen platters horien gainean. Beste seinale mugitu irakurri / idazteko buruak irakurri edo idatzi platters buruzko datuak. Makineria honetan, beraz, zehatzak, pertsona batek ile ezin baita artean buruak eta spinning platters. Hala ere, abiadura emanaldirik guztietan funtzionatzen du. [END bideo-erreprodukzioa] DAVID MALAN: apur bat handiagotu sakonago orain zer at platters horiek benetan. [Bideo-erreprodukzioa] -Ikus dezagun zer den begiratu besterik ez dugu at motion motela ikusi. Noiz elektrizitate pultsu labur bat da irakurtzeko / idazteko burua bidaliko da, flips bada elektromagnetikoak txiki buruzko segundo baten frakzio bat. Iman eremuan, eta horrek sortzen aldaketa bat, txiki-txiki txiki polaritate du metal partikula zati den armarria platter azalera bakoitzeko. Txiki-txiki horien serie A eredua, kobratuko-up on diskoaren arlo bakar bat bit adierazten du bitarra kopurua datuak ordenagailuak sistema erabiliko dute. Orain, korrontea bidaltzeko modu bat bidez irakurtzeko / idazteko burua, inguruko da, norabide batean polarized. Korrontea bada bidaliko kontrako norabidean, eta polarizazio alderantziz. Nola disko gogorrean off datuak lortu duzu? Just alderantzizko prozesua. Beraz, diskoan partikula da hori lortzeko, gaur egungo en irakurri / idazteko burua mugitzen. Bildu horiek milioika magnetized segmentu eta baduzu fitxategi bat. Orain, fitxategi bakar bat pieza may izango guztiak disko baten sakabanatuta platters, mota bezala nahastea zure mahai gainean paper. Beraz berezi bat aparteko fitxategia gordetzen du pista non dena da. Ez duzu izan nahi baduzu horrelako zerbait? [END bideo-erreprodukzioa] DAVID MALAN: OK, seguruenik ez. Beraz, nola asko guys hazi hauekin? Ados, eta, beraz, gutxiago dira eta gutxiago da eskuak urtero. Baina pozik, gutxienez Oraindik duzun ezagutzen dut haiekin, hau delako eta gure book demo, zoritxarrez, oso bat hiltzen motela heriotza hemen ezagutzen du. Baina hau zer da, gutxienez, berriro handiko eskola, erabiltzen backups erabiltzeko. Eta harrigarria izan zen, duzulako 1.4 megabyte gorde zitekeen an bereziki, disko hau. Eta hau dentsitate handiko bertsioa izan zen, gisa HD ditu bidez adierazten gaur egungo HD bideoak aurretik zentzua. Standard dentsitatea 800 Kilobyte zen. Eta hori baino lehenago, ez ziren 400 kilobyte diskoak. Eta hori baino lehenago, ez ziren 5 eta 1/4 hazbeteko diskoak, izan ziren benetan diskete, eta pixka bat zabalagoa eta taller Gauza horiek hemen baino. Baina benetan ikus dezakezu deiturikoak disko hauetako alderdi diskete. Eta funtzionalki, benetan ari dira politak egiteko at disko gogorretan antzeko Gutxienez mota hau. Berriz ere, ordenagailuak berriago batean SSDs lan pixka bat ezberdinean. Baina mugitzen dela gutxi metal fitxa bada, benetan ikus dezakezu cookie apur bat, edo platter. Ez da hau metal bat bezala. Bat, hau da, benetan merkeago batzuk plastikozko material. Eta wiggle da mota dezakezu. Eta trully duzun besterik wiped off batzuk bit edo magnetikoak partikula kopurua disko honetan. Beraz, zorionez, ez da horren gainean ezer. Gauza modu batean bada - eta estaltzeko zure begiak eta zure bizilaguna horiek - dezakezu, besterik gabe, tira mota hau sheath osoan horrelako off. Baina gutxi udaberri bat da, beraz, Zure begiak dela jakitun. Beraz, orain benetan diskete bat duzu. Eta zer da hau buruzko nabarmenak hau da, ahalik eta hau da bat txiki-eskala handiago baten irudikapena disko gogorra, gauza horiek dira, super, super simple. Tira duzun hondoan bada ere, orain dela metal gauza da itzali, eta azala ireki, guztiak ez dago bi pieza da sentitu eta deiturikoak diskete bat metal pieza barruan ere. Eta han erdi doan nire disko edukia. Ez dago erdiak bestera doa. Baina hori guztia ez zela barruan spinning da Zure antaƱo en ordenagailuan. Eta berriro ere, hau ikuspegi egokian jartzen, nola big da zure gehienetan disko gogorrak egun hauetan? 500 gigabyte, terabyte bat, agian hasi bat ordenagailuan, terabytes 2, 3 terabytes, 4 terabytes, ezta? Horrek megabyte da, eman edo hartu, ezin nahiz kabitzen tipikoak MP3 bat gehiago egun hauetan, edo zenbait antzeko musika-fitxategia. Beraz, zuretzat oroigarri txiki bat, gaur egun, eta Horrez gain, testuinguruan zer laguntzeko daiteke emandako hartzen dugu Orain, arazo girotuta bost. Beraz, zurea mantendu dira. Beraz, egin iezadazue trantsizioa non izango den hurrengo pset gastu baita. Beraz, gaur egun dugun ezarri orrialde honetan - Oh, iragarkiak azkar pare bat. Ostiral honetan, nahi baduzu bada batu CS50 bazkaltzeko, ohiko leku joateko, cs50.net/rsvp. Eta azken proiektua - beraz, ikasketa planaren arabera, argitaratua dugu azken proiektuaren zehaztapen dagoeneko. Konturatzen, horrek ez du esan nahi ondorioz da, batez ere, laster. Honez argitaratua, benetan, soilik lortu you guys da pentsatzen. Eta, hain zuzen, super esanguratsu bat duzun ehunekoa izango aurre egingo material proiektuak azken dugun ez dute baita ahaztuak klasean, baina baita hurrengo aste hasieran bezala. Oharra, nahiz eta, zehaztapen hori eskatzen bat hainbat gutxi osagaiak azken proiektua. Lehena, aste gutxitan, bat pre-proposamena, mezu elektroniko polit bat aldi baterako Zure TF esan edo zer zaren pentsatzen Zure proiektua da, konpromisoa ez. Zure proposamena izango da konpromisoa, esaten, hemen, hau da, zer Nire proiektua egin nahi dut. Zer deritzozu? Handiegia? Txikiegia? Da kudeatu? Eta zehaztapenak ikusten duzu xehetasun gehiagorako. Aste pare ondoren egoera txostena, eta hori da, era berean, casual zure TF email nola esan urrun atzean dira zure azken duzun proiektuaren inplementazioa, eta ondoren CS50 Hackathon zein guztiontzat da gonbidatu, eta horrek ekitaldi bat izango da, batetik 8:00 ko 7:00 ak arte arratsaldean PM AM hurrengo goizean. Pizza, astean dudan bezala, agian, aipatutako zero, wil izango da 9:00 etan zerbitzatua, 1:00 etan janari txinatar AM. Eta Oraindik bada esna 5:00 etan, eramango dizugu gosaltzeko IHOP. Beraz Hackathon gehiago bat da klase esperientzia gogoangarria. Ondoren, abian jartzea aurreikusten da, eta ondoren, climactic CS50 azoka. Gehiago horiek guztiak buruzko xehetasunak asteetan etorri. Baina goazen itzuli zerbait eskola zaharra - berriro ere, array bat. Beraz, array bat izan zen, polita, konpontzen delako dugun bezala, arazoak ikusi besterik ez Une duela ikaslearen egitura kontrol txiki bat lortu dugu nahi, ikasle bat, bi ikaslea izatea, ikaslea hiru, ikaslea dot dot dot, ikasle kopurua funtsik. Array Beraz, aste batzuk lehenago, swooped en eta gure arazoak konpondu ez guztiak aldez aurretik jakitea zenbat gauza mota batzuk nahi genuke. Eta ikusi dugu structs duten lagun diezaguke gehiago antolatu gure kodea eta mantendu kontzeptualki antzeko aldagai bat bezala izena eta etxe batean, elkarrekin, beraz, dugu tratatzen daiteke erakunde, barruan horietatik daude txikiagoa zuzenak. Baina multzo dute desabantaila batzuk. Zer dira desabantailak batzuk bat aurkitu dugu multzo batera, beraz, orain arte? Zer da hori? Tamaina finkoa - beraz, nahiz eta agian, nahiz eta bat egin ahal izango da memoria esleitu array, behin badakizu zenbat ikasle duzu, zenbat karaktere duzu erabiltzaileari, behin egotzitako dituzun array, mota duzun margotutako izkinan zeure burua. Ezin delako sartu elementu berriak array baten erdian sartu. Ezin duzu elementu gehiago sartu array baten amaieran. Benetan, behar bat sortzeko erabili behar duzu berri oso array, nik eztabaidatu dugun bezala, zaharrak kopiatzen berria sartu. Eta, berriro ere, eta buruko mina dela Jorratzen GetString zuretzat ere. Baina, berriro ere, ezin duzu ere sartu array erdian sartu zerbait tasa bada, ez da erabat bete. Esate baterako, array hau bada hemen tamaina sei baino ez ditu bost gauza da, eta, Beno, besterik gabe, ezin duzu Tack amaiera aldera zerbait. Baina, zer nahi duzu zerbait sartu nahi izanez gero, erdian sartu array, nahiz eta izan zitekeen bost sei bertan gauzak? Beno, zer denek izan genuen egiten dugu gure boluntarioek giza eszenatokian hasi aste iragan? Nahi izanez gero, norbaitek jarri dugu hemen, bai pertsona horiek nola mugitu modu, edo pertsona horiek nola mugitu era, eta hori izan zen, garestia. Eta pertsona baten barrutik ikusita array azkenean batuketak eta balio Gurekin denbora, beraz, asko gure karratu n aldiz exekutatzen txertatzeko ordenatu bezala, for Adibidez, txarrena kasuan. Beraz, multzo handiak dira, baina behar duzu aldez aurretik jakin nola big nahi duzun. Beraz, OK, hemen irtenbide bat da. Ez badut, aldez aurretik jakin zenbat ikasle izan naiz, agian, eta behin jakin behar dut Erabaki dut, hala ere, nago horrekin trabatuta ikasle askok, zergatik ez dut beti esleitu birritan askoz espazio agian uste dut jo behar dut? Hori ez da zentzuzko irtenbide bat? Errealistan, ez dut uste Oraindik dugu 50 baino gehiago behar slots joan ertain-tamaina-klase bat array batean, Hargatik, besterik gabe, biribildu du. 100 slots egin dut nire array, besterik ahal izateko, zalantzarik gabe lortu du ikasleek espero dut kopurua ertain klaseko batzuk egongo dira. Beraz, zergatik ez bakarrik biribildu sortu eta esleitu memoria gehiago, normalean, array bat egiteko zuk uste baino are gehiago, agian behar duzu? Zer simple pushback hau ideia hori? Ari zaren memoria alferrik galtzen. Literalki, programa bakoitzean, ondoren, idatzi da, agian, birritan askoz memoria erabiliz benetan behar duzu. Eta hori besterik ez du sentitzen bereziki dotorea konponbidea. Gainera, gutxitzen besterik ez da Arazo bat probabilitatea. Gertatuko herri-ikastaro bat izan nahi baduzu seihileko bat eta ez duzu 101 ikasle, zure programa da oraindik funtsean berean, gaia aurrez aurre. Beraz, zorionez, ez dago irtenbide bat da iragarki honetan gure inprimakia arazo guztiak Datu egiturak dira gehiago baino konplexu ikusi dugu, beraz, oso urrun. Hori, nire erreklamatzeko, lotutako zerrenda bat da. Honek zenbakien zerrenda bat da - 9, 17, 22, 26, eta 34 - izan dira elkarrekin lotuta modu zer geziak jo dut marraztuko. Beste era batera esanda, nahi izanez gero, adierazten dut array bat, egin nezakeen honen antzeko zerbait. Eta hau jarri dut goiburu on besterik gabe, une batean. Egin nezakeen - kaixo, guztiak eskuinera. Stand by. Ordenagailu berri hemen, argi - eskubidea. Beraz, zenbaki horiek daukat array bada - 9, 17, 22, 26, 24 - ez eskalatuko derrigorrez. Guztiak eskubidea, beraz, hemen nire array da - Oh my God. Guztiak eskubidea, beraz, hemen nire array da. Oh my God. [Barreak] DAVID MALAN: itxurak. Gehiegi ahalegina atzera joan da konpondu, eta, beraz, ez dago - 26. Beraz, array honen dugu 9, 17, 22, 26, eta 34. Dituzun horiek ikusi ahal lotsa akatsa egin dut, Hor dago. Beraz, hori da aldarrikatzen dut Oso irtenbide eraginkorra. Ints askotan jo dut egotzitako Behar dut - Bat, bi, hiru, lau, bost edo sei - eta, ondoren, ez dut gordetako zenbakiak array honen barruan. Baina demagun, eta, ondoren, sartu nahi dut kopurua 8 atsegin balio bat? Beno, non ez da joan? Demagun sartu nahi dut 20 bezalako zenbaki bat. Beno, non ez da joan? Nonbait erdi-erdian dago, edo kopurua 35 ditu joan nonbait amaieran. Baina espazioaren out nago. Eta, beraz, hau funtsezko erronka bat da multzo hori ez dira konponbidea. Une duela aldarrikatu nuen, GetString Arazo hau konpontzen. Nahi duzun seigarren zenbaki bat sartu nahi izanez gero, array honetan sartu, zer bat, gutxienez, da irtenbide erori atzera dezakezu ziur an, GetString besterik ez dugu egin nahi duzu? Zer da hori? Beno, egin ezazu handiagoa da errazagoa said egin baino. Ezin dugu nahitaez egin array handiagoa da, baina zer egin dezakegu? Berri bat array hori handiagoa da, tamaina 6, edo agian, tamaina 10, nahi badugu aurretik gauzak lortzeko, eta gero, kopiatzeko berriak sartu array zaharrak, eta, ondoren, askatzeko zaharrak array. Baina zer exekutatzen denbora da Gaur egun, prozesu hori? Big n O da, kopiatzea duelako da zuk kostua unitate batzuen joan denbora, eta, beraz, ez da hain aproposa bada behar dugu esleitu array berri bat, hau da, joan bi aldiz, askoz kontsumitzen memoria aldi baterako. Kopiatzeko berriak zaharrak - Esan nahi dut, besterik gabe, buruko mina, baina horrek da, berriz ere, horregatik idatzi zuen Zuretzat GetString. Beraz, zer egin dezake ordez egiten dugu? Beno, bada, gure datu-egitura benetan ditu hutsuneak? Demagun erlaxatu nire izatearen helburua Alboko memoria zatiak, non 9 eskubidea da eta 17, hau da, hurrengo eskubidea ondoan, 22, eta abar. Eta demagun 9 hori baino gehiago izan daitezke hemen RAM, eta 17 daitezke hemen RAM-en, eta 22 daitezke hemen RAM batean. Bestela esanda, ez dut behar, horiek are gehiago atzera itzultzeko. Izan dut nolabait haria orratz zenbakiak horietako bakoitza, edo bakoitzaren bidez nodo horiek, hala deitzen dugu laukizuzenak Nik dudan bezala marrazten ditu, nahi gogoratzen nola joan a lortzeko lehen nodoa, hala nola. Beraz, zer da programazio eraikitzeko ikusi dugu berriki nahiko duten I haria ezartzen daiteke, edo Hemen marrazten da, eta I can ezartzeko geziak horiek? Beraz, erakusleak, ezta? Esleitu dut, besterik ez bada, beti int, baina nodo bat - eta nodoa, esan nahi dut, edukiontzi. Eta ikusmen, laukizuzen bat esan nahi dut. Nodo bat behar du, beraz, itxuraz, bi balioak eduki behar - int bera, eta orduan, inplizituki arabera Laukizuzenaren erdi beheko aldean, int bat espazio nahikoa. Beraz, aurretik pentsatzen hemen, nola big nodo hau da, hau Galdera edukiontzi? Zenbat for int du byte? Ustezko 4, ez bada ohiko berdina. Eta gero, zenbat byte erakuslea da? 4. Beraz, edukiontzi hori edo nodo hau da, 8 byte-egitura bat izango da. Oh, eta hori pozik kasualitatea dela sartu besterik ez dugu nozio hau egitura bat, edo C egitura bat. Beraz, nahi dut urrats bat aldarrikatzen dut hau sofistikatuagoa norabidean zenbakien zerrendan, bat ezartzeko lotuta zenbakien zerrendan, egin behar dut pixka bat gehiago aurrean gora pentsamendu eta deklaratzen ez bakarrik int, baina egitura bat egingo dudala deitu ohi Hemen, nodoak. Deitu dugu, ezin dugu ezer egin nahi, baina nodoa da gaikako izateko asko joan gauza orain begira hasten gara. Nodo horren barruan int n da. Eta gero, sintaxia hau, apur bat Lehen begiratuan bitxi - egitura nodo * ondoan. Pictorially Beno, zer da hori? Duten beheko erdia da Laukizuzenaren ikusi dugun une bat besterik ez duela. Baina zergatik nago esaten egitura nodo I * gisa soilik nodo * aurka? Erakuslea hori apuntatzen bada delako nodo beste batean, besterik ez da Nodo baten helbidea. Horixe dugu koherentea erakusleak buruz eztabaidatuko da, beraz, oso urrun. Baina zergatik, erreklamatzeko badut egitura hau da, izeneko nodoa, ez egitura esan behar dut Hemen barruan nodo? Zehazki. C. ergelak errealitate bat sort da Typedef da, nolabait esateko, ez du gertatu oraindik. C Super literalean. Zure kodea goian irakurtzen behean, ezkerretik eskuinera. Eta hits arte koma hori buruzko beheko lerroa, asmatzeko zer ez datu-mota bat bezala existitzen? Nodoa, aurrekontua unquote nodoa. Baina gehiago xeheak adierazpena egin zuen lehenengo lerroan I - typedef struct nodo - ziren lehenengo delako, aurretik kizkur giltza, hori sort bezala pre-heziketarako Clang hori, zuk ez dakit zer, ematen dit egitura bat izeneko egitura nodo. Egia, ez zait gustatzen gauza deituz egitura nodoa, egitura nodo guztiak nire kodea zehar. Baina besterik ez dut erabili eta gero, besterik gabe, barruan, beraz, eraginkortasunez dut sortu erreferentzia zirkularra moduko bat, ez bat neure erakuslea berez, baina bestera erakuslea berdin-mota. Beraz bihurtzen da datu-egitura baten gainean horrela, ez da gutxi batzuen eragiketa hori izan liteke gurekin interesgarriak. Txertatu nahi dugu, agian honelako zerrenda batean. Ezabatu nahi dugu, agian hau bezalako zerrenda batetik. Nahi zerrendan bilaketak egin genezake balioa, edo, oro har, traverse. Eta besterik traverse bat Fancy bidea da Irteeran esaten ezkerrean, eta guztiak mugitu eskuinera bidea. Oharra eta, nahiz eta pixka bat gehiago honekin sofistikatua datuak egitura, utzi batzuen dugun maileguan hartu ahal proposatu zidan du azken bi astetan ideia eta ezartzeko funtzioa izeneko hau bezalako bilaketa. Egia itzuliko da edo joan faltsuak, adieraziz, bai edo no, n zerrendan dagoela. Bere bigarren argumentua erakuslea da zerrendan bera, beraz, nodo bat erakuslea. Guztiak, eta, ondoren, egin dut da deklaratzen aldi baterako aldagai bat. Deitu beharko dugu ptr konbentzio arabera, erakuslea da. Eta berdin da esleitu dut zerrendaren hasiera-hasieratik. Eta orain, berriz, nabarituko begizta. Hain luze erakuslea gisa ez da berdina to NULL, egiaztatu dut. Erakuslea gezi-n berdina da n izan zen pasa den? Eta minutu bat itxaron - berriak sintaxia pieza. Zer da gezi Bat-batean? Bai? Zehazki. Beraz, minutu batzuk, berriz, duela erabiltzen dugu izan dot idazkera zerbait sartzeko duen egitura baten barruan, aldagai bada da zuk ez du egitura bera, baina egitura bat erakuslea, zorionez, sintaxia pieza bat azkenik intuitiboa zentzurik. Gezi esan erakuslea jarraitu, gure geziak normalean, esan bezala, pictorially, eta joan at datuak Eremu barruan. Beraz, gezi dot gauza bera da, baina erabiltzen duzun, erakuslea duzu. Beraz, besterik gabe, ondoren laburpena da, n eremuan egitura barruan izeneko erakuslea berdin berdin n, bueltatu da egia. Bestela, lerro hau hemen - erakuslea berdinen erakuslea hurrengo. Beraz, zer egiten ari da, abisua da, badut nago gaur egun egitura seinalatuz 9, eta 9 duten ez da zenbakia Bila nabil - demagun bila nabil n berdin 50 - Nire aldi baterako erakuslea eguneratu dut ez nodo horretan seinalatzen jada, baina erakuslea gezian, eta horrek ni jarri sortu hemen. Orain, zurrunbilo handi bat da, konturatu nintzen Sarrera. Asteazkena, benetan dugu egin gizakiak batzuekin eta gehiago batzuekin erritmo motelagoa at kodea. Baina konturatzen, orain ari gara gure datuak hartzeko egitura konplexuagoa da, beraz, gure algoritmoak eraginkorragoa lor daiteke, eta horrek da ezinbestekoa izango da joan pset sei, noiz hasi kargatu dugu, berriro ere, 150.000 hitz, baina behar hori egiteko eraginkortasunez, eta haien, sortu programa hori gure erabiltzaileek ez egiteko exekutatzen lineala, ez karratu n, baina etengabeko denbora, ezin hobea da. Ikusiko dugu asteazkenean. Hizlaria: CS50 ondoan, David At bere oinarri kasu ahazten. DAVID MALAN: Eta hori nola bidal Testu mezu C. Zer - [HAINBAT testu mezu JAKINARAZTEA SOUNDS]