[00:00:00] [MUZIKO Ludante] [00:00:11] DAVIN: Bone, knaboj. Do tio estas la revizion por la unua kvizo. Estas ĉiuj preta por la kvizon en merkredo? Allison: Woo! Student: Woo! DAVIN: Yeah. Allison: Yeah! DAVIN: Tiu ulo estas preta. Tiu ulo, du manojn, agrabla. Do kvizo revizio hodiaŭ, ĝi okazas proksimume horo kaj duono. Ni tuj iras super ĉiuj gravaj konceptoj vi devus scii por la kvizo. Ni tuj iras super iu kodigo per mano ekzemploj, kiuj estas cxe cxiu kvizo. Kaj se vi havas demandojn, bonvolu levi vian manon kaj ĉiu tiel. Nu, loĝistiko pri la kvizo estas rete. Do ni tuj disigis homoj supren en malsamaj ĉambroj. Ĝi estas bazita sur ilia nomo. Do se vi havas demandojn pri tio, kien iri aŭ pri kio materialo estas, kiel, La oficiala vorto sur kio okazas esti sur la kvizo, kontrolu rete. Kaj jen ĉio estas ĝisdata. Do se ne estas demandoj komenci, ni tuj komencos. Kaj jen Allison. [00:00:56] [Claps] [00:00:57] Allison: Bone, dankon, Rob. Estimi ĝin. Davin devus esti spegulita al tiu. Tiu estas la ne-ĝisfunda listo temojn, kiel cxiam, tiel Davin simple diris. Konsultu la dokumentaron Enreta pri kvizo nulo. Sed tio estas bela much-- Ĝi estas sur la Syllabus Estas ĉio ni trapasis tiom. Ĉio ĉi tie estas bela ludo, tiel kiel io alia Eble ja estis menciita en prelego. [00:01:21] Mia sekcio, tie estas nur multajn recenzo. Estas paro ekzercoj ke vi uloj povus labori plu. Sed plejparte ni vere volas atingi Davin kun tiuj kodo mane ekzercoj. [00:01:31] Do mi tuj flugi tra tiu. Se vi havas ajnajn demandojn, haltigi min. Levu la manojn. Mi promesas Mi verŝajne vidos. Se ne, simple skuu gxin ĉirkaŭe. Mi iras por paroli rapide. Mi esperas ke ĉiuj estas bone kun tio. [00:01:43] OK, specialan vorton, Davin evidente forgesis klaki tra tiuj diapozitivoj. [Rie] Vi estas en mizero, viro. Do konsiloj por kvizo nulo, ekzerci kodigo surpapere. Vi ĉiuj estas tuj akiri iom ekzerci kun tiu nun kun Davin, tial vi ne estos tute sola. Mi pensas ke ni vere irante tra tiuj du funkcioj. Do vi devos esti bone preparis tie. [00:02:04] Estu familiara kun via problemo aroj. Tie estis demandoj sur antaŭaj kvizojn kiu vin demandas, ekzemple, kodigi ĝis iu tre simila al Mario. Do estas tre familiara kun via problemo aroj, tiel kiel la demandojn ni petas vin en la komenco de la formo ke vi plenumas, volo servas bone. [00:02:20] Ĉu antaŭa kvizo sub tempo limigoj. Tiuj kvizojn estas longaj. La tempo pasas vere rapida. Kaj ofte, vi ne konscias kiom rapida iras ĝis vi efektive meti vin sub tiuj limigoj. Do se vi povas simple skulpti el vi scias, 75 minutoj, aŭ ĉinokte aŭ morgaŭ preni unu el tiuj kvizojn sub ke vi estos en pli bona formo. [00:02:41] Kaj ankaŭ, kreante via referenco folio. Memoru, vi ricevas unu paĝo fronto kaj dorso kiel referencon por via kvizo merkrede. Krei ke estas granda vojo por studi. Anything ke vi havas problemojn vi volas inkludi en tie. Anything ke via TFS estis, kiel, tio estas vere grava. Vi devus scii tion, estas eble tion vi havas sur tie Se vi ne havas ilin parkere. Eĉ se vi ne konas ilin vere bone, kelkfoje havi ĝin tie estas ĝuste speco de komforto por vi, kiun mi konas kvizojn estas turmenta. Do ia konsolo vi ricevas povas helpi. Bone, ankaŭ, iru dormi kaj manĝi kaj ŝatas la normalajn aferojn ke ni rakontos al vi por kvizojn. [00:03:16] Tiel dividante facila, datumtipoj kaj grandecoj. Kiel mi diris, ĉi tio estas nur tuj esti min ĵetante multajn aĵojn ĝis ĉi tie ke vi devus scii. Do ni havos niajn signojn ke estas unu bajtoj, ints ke estas kvar bajtoj, longe longa, kiu estas ok bajtoj. Esence, nur vi deziras teni grandan entjeroj. Kaleŝegoj, kiu estas kvar, duobloj, kiu estas ok. Denove, nur donas vin pli spaco por via flosoj. Kaj poste tajpu stelo, tiel ajnan montrilo sur 32-bita maŝino, kiuj estas ĉiuj vi infanoj bezonas scii, estas kvar bajtoj. [00:03:44] Do ĉio vi devas scias, eble tion Vi volas havi sur via referenco folio. OK, duuma konvertiĝo al duuma, konvertiĝo al deksesuma, tien kaj reen, ĉio vi devas scii. Tial de binara al dekuma. Vi uloj volas preni rapidan minuto kaj provi elkompreni ĉiu el tiuj kaj diru al mi kio estas? [00:04:06] Mi ankaŭ havas frandaĵon en mia sako, do iu kiu respondos ricevas dolĉaĵoj, la vojo. Kaj mi havas multajn ĝin. Lasu min ekpreni ĉi. Mi tuj donos tion al Gabe. Do vi povas disdoni frandaĵon al kiu estas bela kaj kunlabora. [00:04:21] OK, mi vidis mano en la dorso. [00:04:26] Student: Yeah, la unua estas 42. [00:04:28] Allison: Jes, unue estas 42, korekta. Student: [inaudible]. [Ridado] Allison: Dua unu, tien reen en flava? Student: 110010. Allison: korekta kaj ĉi lasta, ĉi tie sur fundo? Ankaŭ, yeah, sciu volas? Nur ĵeti ekstere dolĉaĵoj. Kion pri dolĉaĵoj por ĉiuj? [00:04:46] Student: [inaudible] kiam ni faris. [00:04:47] Allison: Shh. Kaj tiam la lasta. Kiu volas respondi? Dekstre. [00:04:52] Student: 11100. [00:04:54] Allison: 11100, rigardu tion. Gratulon, granda laboro, ĉiuj. OK, ĉiu speco de kompreni La procezo por fari tion? Vi, irante de binara al dekuma tiel mi emas fari tion, skribas el la potencoj de 2. Do mi diras, OK, 0 fojojn 2 al 0, tiel tio estas 0, 1 fojoj 2 al la unua, Estas 2 irante antaŭen tiun vojon. Ĉu iu volas ke mi eksplicite iri tra ekzemplo de binara? OK, malvarmeta. [00:05:28] Dekuma al binara estas tre similaj. Mi emas skribi el la potencoj de 2. Starti kun kiu estas la pli granda, sed ne iras preter la dekuma ke vi serĉas. Kaj poste ia laboras vian vojon malantaŭen aldoni aĵojn kiel necesa. [00:05:42] Kaj tiam kun aldono, estas nur kiel normala aldono. Se vi iam havas la kazon kie vi estas aldonante du _1s_, ĝi evidente igas 2. 2 en duuma nun 1 0 tial vi bezonas porti vian 1 en la venonta kolumno. Malvarmeta. [00:05:59] Deksesuma, tiu povus esti io kiu estas iomete malpli konata. Do kiel Rob ĵus rakontis al mi antemano, sian trukon por tiu estas simple fendis ĝin en kvar bajtoj pecoj, OK? Bitoj, pardonon. Vidas? Danke Rob. Tio estas kial vi estas ĉi tie. [NOISE] OK, do ni nur rompi ĝin en kvar bitoj pecoj. Do kun binaraj al deksesuma, ni rigardas la unuaj 4, kio se ni havas kvar _1s_ en vico, kiu nombro ĝi kiuj simbolas? [00:06:25] Student: F. [00:06:26] Allison: Do tiukaze kio estas 11111111 or-- jes? Student: ff. Allison: Perfekta, ff. Tiel granda, dolĉa por vi. Nun, por kiel deksesuma al duuma, ni nur pensi ĝin ia en reverso. Por ĉiu nombro aŭ litero kiu ni havas en niaj deksesuma, nur konverti ĝin al liaj kvar bitoj [Rie] al liaj kvar bitoj konvertiĝo. Do 5, en tiu kazo, kio estas 5 se ni reprezenti ĝin per kvar bitoj? [00:06:58] Student: 010? Hmm. Kaj tiam A, kio estas fakte 10, estus? 1010. Do ni havas tion, ĉi tie. Do konverto inter deksesuma kaj binara reale ne estas tiel malbona. Se vi rigardas en kvar bitoj pecoj, tuj estos ora. Everyone-- jes? [00:07:19] ROB: Tiu estas stulta, sed mi ĉiam memoros A, ekde la supozita esti 10. Kaj binara estas nur 10 10, so-- [00:07:26] Allison: Ha, tie ni iras. [00:07:27] ROB: Hej. [00:07:28] Allison: Hej, dolĉaĵoj por Rob. Estas ne-ĉokolado stuff tien. Do vi povas havi kelkajn. Do ASCII math. Konduti. Do ASCII math, kiel vi infanoj verŝajne bone memoras p starigis 2 kun Visioneer kaj Cezaro, vi faris multajn ĉi. Memoru, la rolantoj fundamente nur nombrojn. Do ni povas fari math kun ili, ĝuste kiel ni fari math kun ints. [00:07:54] Do ni devas iomete simpla afero tie. Ni havas en A tio inicializado al 65. Kaj B egalas al la ASCII valoro de A plus 1, char C egala al D minus 1 kaj char D egala al 68. Do tiam ni tuj print ĉiuj ili, kiel ni vidas ĉi tie. Kaj vi povas paroli sciigu min kia presos? Student: [inaudible]. Allison: Ekzakte, do unu aferon rimarki estas ke ni presi ekstere karakteroj ĉiu tempo, tie. Ni designar kvankam A kaj B estas ints kiam ni deklaras ilin supre. Ni presi ilin kiel karakteroj la procento C kaj nia printf deklaro, do ili ĉiuj presi kiel gravuloj. Kaj kompreneble, la ASCII valoro 65 volo presi kiel A. La ASCII valoro de A plus 1 estus 66, kiu volis fieras B. Do fakte, ni Akiru B C D. Cxiu bona tie? Demandojn? Awesome. [00:08:52] OK, medio. Do medio estas evidente tre gravas kompreni, tie. Multaj el vi, se vi havi kompilita eraroj, kaj ĝi diras ke ne havas aliro al kelkaj variabloj, ĝi estas probable ĉar vi difinis ene loop kaj tiam provis aliri el tio, aŭ vizo inverse. [00:09:12] Do atingo ĉe ĝia kerno, ĝi simple determinas kie Ni diru variablo ekzistas, kie ni povas ŝanĝi ĝin, kie ni povas aliri ĝin. Estas nur ia jene tiuj estas la solaj lokoj kie vi havas aliron al tiu variablo. [00:09:26] Do la du medioj kiujn ni parolas pri dum klaso estas tutmondaj kaj lokaj. Do tutmonda variabloj ni parolas pri kiam vi difinas ilin supre ĉefa. Tio signifas, ke via tuta programo havas aliron ŝin, kaj ekzistas tiel longe kiel la programo kuras, OK? Loka signifas ke ĝi estas pli limigitaj al regiono. Do kiam ajn vi havas specifajn funkciojn kiel swap, ni ĉiam parolas pri. Ni ĉiam parolas pri interŝanĝo kun A kaj B. A kaj B ekzisti ene de tiu funkcio. Ne ekzistas aliloke. [00:09:56] Tiel, kiam vi havas se deklaroj aux bukloj. Kiam ajn ni havas, ekzemple, en a por buklo ni havas int mi egalas 0. Ni havas kelkajn kondiĉo kaj ni ĝisdatigi ĝin. Mi nur ekzistas en la streĉaj de tiu por buklo. Se vi provas aliri gxin aliloke, via tradukilo estus krias al vi. Estus kiel, kion vi celas fari? Ĉi tio ne ekzistas. Do tio estas la du malsamaj tipoj de atingo. Ĉu tio havas sencon por ĉiuj? [00:10:23] Tiel ekzemple ĉi tie, ĉi Estas nur kelkaj simplaj programo. Kion vi uloj pensas estas okazos je ĉiu punkto ke ni provas presi? Do ĉi tie, kio okazos? Student: ĝi presos tri. Allison: Ĝuste. Ĝi devos presi tri. Kio pri cxi tie? Student: Ĝi ne funkcios. Allison: Tio ne funkcios. Vi estas ekster atingo, ĉu ne? Loka variablo ne ekzistas ekster tiuj krampoj, bone? Kaj tiam kio pri ĉi tien? [00:10:56] Student: [inaudible]. [00:10:57] Allison: Kio? Rob, iru. [00:10:59] ROB: Mi ĵus diris. Tutmondaj variabloj devus esti tutmonda substreko variablo. [00:11:04] Allison: Ha, jes, pardonon. Dankon, Rob. Rob estas kiel nia loĝanta tradukilo. Li devos nur krias al ni, kiam ni bezonas. [Rie] Jes, tio devus esti tutmonda substreko variablo. Do supozante ke tio estis tutmonda substreko variablo, kio okazos tie? Student: Tio funkcios. Allison: ĝi devos labori. Do ĝi devos presi, do nur tre simpla ekzemplo. OK, prototipoj. Do evidente, ni vere elstari por vi uloj fari funkciojn se sencon en viaj programoj. Sed kompreneble, kiam vi faru vian propran funkcioj, tipe vi difinas ilin post ĉefa. Kaj vi provos nomi ilin en ĉefa. Kaj se vi ne uzas prototipo, via tradukilo krias al vi. [00:11:46] Prototipo estas esence simple diri vian tradukilo ke mi havas tiun funkcion sube ĉefa. Mi tuj vokos lin antaŭ mi ĝin difinas. Nur rezisti. Mi promesas ke ĝi estas difinita, kaj vi havos ĉiu kion vi bezonas. [00:12:00] Do kiel ni faras estas nur via reveno tipo, via funkcio nomo, via enigo lerta. Ĝi estas esence la unua linio de via funkcio deklaro. Estas vere ĉiuj estas. Sed tio estas nur ĝenerala klaso de formato. [00:12:14] Do en nia ekzemplo tie, kiun vi uloj devus vidis en sekcio en iu momento, ni havas kelkaj int kubo ke Necesas iom int de eniro. Kaj ni havas nian ĉefan funkcio, kiu nomas kubo. Kaj kubo estas difinita post la fakto. [00:12:28] Do se ni ne havas int kubo enigo ĉe la supro, ni nomas kubo ene ĉefa, nia tradukilo akirus frenezan ĉe ni. Estus kiel, kio vi parolas? Kubo ne ekzistas. Mi ne scias, kion vi petas. Kaj mi simple iras haltejo. [00:12:43] Sed ĉar ni faris nian prototipo ĉe la supro, ni diras, Vi scias, kiam vi vidos kubo, ne maltrankviliĝu pri tio. Mi promesas ĝi estas difinita poste. Kaj lasos vin fari kion vi volas. Do se vi iam havas funkcion kiu deklaris post vi nomas ĝin por la unua fojo, vi devas havas prototyped ĉe la supro. [00:13:01] Jes? [00:13:02] ROB: Ĝi estas kvadrato, ne cubing. [00:13:04] Allison: Ho mia Dio. Mi ne have-- Gabe, mi pensis vi estis nia proofreader. Nu kamaradoj, toleru min tie. Mi esperas ĉiuj Fariĝas la ideo. OK, do tiu devas havi estis kvadrato, ne cubed. Sed la ideo restas la sama. Ajna funkcio kiu ni vokas post la fakto devus havi prototipo. CXiu bona kun tio? Ajna alia tajperaroj? OK. Ajna tajperarojn tie antaŭ ni komencu, Rob? [Rie] Bone, do structs. Esence, structs permesas krei vian propran datumtipo. Tiel kiel int aŭ char aŭ float, estas nur alia tipo. Mi ŝatas pensi pri tio kiel, kiel, krei vian propran datumtipo. Do ĝi permesas fari tion. Kaj tio validas diversaj tipoj de datumoj. [00:13:56] Do se vi memoras, en tabelo, ni povas nur teni aferojn de simila tipo. Structs nin permesas teni multnombraj aferojn de malsamaj tipoj. Do en tiu kazo tie, ni havas struct nomita Studento, nomata tie malsupre. Kaj ni havas kelkajn int identigilo kaj iu kordo nomo. Do tio estas nur alia datumtipo. Ni nun havas datumtipo nomata Studenta. [00:14:20] Do ĉar ni povas pensi kiel nur alia datumtipo, ni povas deklari variablojn kiel ni farus ĉiu alia. Do anstataŭ simple havanta, kiel, kiel int studento, ni nur devas studento, studento 1. Ho, rigardu. Estas Rob. Do jen ni deklarante al struct aŭ variablon nomita studento 1 de tipo studento. Do ĝi tuj devos identigilo kaj nomo asociita kun ĝi. [00:14:45] Kaj la vojon ni aliri tiujn elementoj ene nia struct Estas kun la skalara operatoro, tie. Do en ĉi tiu kazo, ni deklaris kelkaj studentaj 1. Ni atribuis la ID esti 1. Kaj ni atribuas la nomon al esti Rob. OK, ĉiuj bone kun tiu? Uzi ĝin ĝuste like-- jes? [00:15:06] Student: Yeah, typedef-- kiam do ni bezonas uzi typedef? [00:15:09] Allison: Do typedef simple diras that-- Rob, vi povas korekti min se mi estas wrong-- sed typedef estas simple efektive deklarante kiel tipo kiun vi povas uzi, ĉu ne? [00:15:19] ROB: Yeah, estas esence, Do estas ĝuste krei alias, aŭ kromnomo por tipo. Do vi povas tajpi ke [inaudible]. Do [inaudible] Ekzistas, Nun ni nur devas [Inaudible] rimedoj precize la saman aferon. Kaj ankaŭ ĉi tie, ni tajpita, mi pensas, iuj struct tipo 2 [inaudible]. Do estas nur kromnomo por donita tipo. [00:15:40] Student: String [inaudible] biblioteko estis tajpita supren kiel char stelo. [00:15:51] Allison: Por niaj celoj tie, se vi deklari struct, nur faru typedef struct. OK, do antemano, tiu estas nur normala variablo tie. Ni konsentas kun punkto. se ni havas montrilon al al struct, ni povas reale uzi sago, kiu estas sufiĉe freŝa. [00:16:10] Do en ĉi tiu kazo, ni havas montrilon al studento 1 kiu estas de tipo studento. Memoru, kun via montrilo konstruo, Vi volas ajn tajpu vian montrilon notas al esti komence. Do ni havas iun studenton 1, ĉi tie. Kaj ekde tiu studenta 1 nun estas pinta, ni povas efektive iros studento 1 sago nomon anstataŭ punkto, ĉar estas puntero, kaj asigni Rob. Kaj nun se ni volas ŝanĝi Rob por Davin, tiu estas nur montranta vin malsama maniero fari ĝin. [00:16:43] Do anstataŭ uzi la sago, vi povas also-- mi finos tiun kaj poste oferportos question-- vi povus ankaux fari referenco studento 1. Tio dirante ŝatas iri al kio estas studento 1, kiu estus nia studenta struct. Aliri per punkto kaj la elemento ke vi volas, kaj tiam religi ĝin. Estis demando. Student: Jes, do kial vi havas uzi [inaudible] kiam vi estas faranta studento stelon sen [Inaudible] studento? Allison: Pro tio kreas montrilo. ROB: Ni iras paroli pri ĝi. Allison: Ni iras paroli pri kiu poste en la recenzo. Do ĝuste teni sur tiu penso. Se ankoraŭ ĝenas vin je la Fine, venas paroli al unu el ni. [00:17:20] Do tiuj faras precize la saman aferon. Ni nur montri al vi du malsamaj manieroj fari ĝin. Studenta 1 nun estas puntero, do Vi povas aliri la Nomo elemento ene la struct kun sago. Aŭ vi povas dereference vian montrilon kaj tiam aliri ĝin kiel vi kutime farus. Ĉu tio havas sencon por cxiuj? Se la tuta montrilo aferoj estas iom konfuza, Gabe reparolos pri tio, kaj do eble tiu faros pli sentita. Jes? [00:17:46] Student: Jes, kaj kiamaniere tio diferencas de la? Allison: La antaŭa? Do la studento 1 en tiu kazo ne puntero. Estas nur via reala struct. [00:17:54] Student: OK. [00:17:55] Allison: Dum ĉi tiu estas puntero al struct. [00:17:58] Student: OK, sed faras specon de finas laborante la saman [inaudible]. [00:18:02] Allison: ĝi efike funkcias same. Via sintakso estas nur malsama. Student: OK. [00:18:05] Allison: Yeah, Ili estas efektive la samaj. Estas nur depende de kunteksto, vi eble volas unu super la alia. Jes? [00:18:11] Student: Kiam vi faras referencoj al la 1-- Allison: Hmm? Student: Kial vi havi la parentezoj? Allison: Ĉar lernanto 1 estas la montrilo. Do vi bezonas por certigi ke vi estas nur dereferencing la montrilo. [00:18:22] Student: OK. [00:18:23] Allison: Do en tiu kazo tie, la parentezoj ĉirkaŭ ĝi signifas vi dereferencing studento 1. Do vi iras al kie studento 1 punktoj, kiuj estas via struct. Do nun vi povas pensi de ĝi kiel tiu struct, do ni povas uzi nian normalan dot operacio. Aliajn demandojn? Cool, awesome. [00:18:48] Do lastan aferon, mi opinias Estas mia lasta diapozitivo, woo! OK, do glitpunktaj imprecision. Ni parolis mallonge pri tiu dum prelego. Esence, ni havas malfinie multaj reelaj nombroj. Kaj se iu el vi infanoj amas matematikon, ekzistas ĉiaj malvarmeta stuff kun ni. [00:19:05] Sed estas malfinie multaj reelaj nombroj. Sed ili estas nur finia multaj bitoj kiujn ni havas. Do vi ĉiam tuj havi imprecision, estas ĉio. Kaj tio estas, ke estas nur speco de kiel io vi devas scii. Ke kiel ni povas demandi vin kial faras glitpunktaj imprecision ekzistas? Do nur io, kion vi devas scii. Kaj kun tio, mi turniĝadas ĝi transiru al Pointers. [00:19:27] Binky: Saluton, knaboj. Mia nomo Binky. Mi iras paroli pri punteros. Yeah, do punteros estas reale Miaj preferataj parton en tiu kurso. Do nur por klarigi kio Allison parolis pri ĉi tie, do la kialo why-- la sola diferenco tie, la granda diferenco estis la vojon ni anoncas verajxon. Do studento stelo signifas tio estas puntero al studento. Dum la glito antaŭe, studento estas fakta struct, kiel reala studento, enhavas neniun el tiuj aferoj. [00:19:54] Kaj la kialo kial ni deziras to-- jes, Davin? [00:19:57] DAVIN: Kion signifas la sagon signifas? [00:19:58] Binky: La sago rimedoj ĝuste la sama kiel tiu. Do vi ne vere bezonas la sago. Kiel, se vi estas nur programo en C, vi povas simple uzi tiun. Pardonu, mi ne faras kio tio estas. Vi povas simple uzi tiun sintakson. [00:20:14] Sed iuj personoj, kiam ili desegni C ili kalkulis, ke homoj uzis tiun sintakson tiel, ke ili ŝatos nur venu kun sintaksa strukturo por ĝi. Kaj tio okazis en la formo de ĉi tiu sago. Kaj estas vere bela, ĉar simbolas ion kiel ni fakte jenajn ĉi sago, ĉi puntero, al iu spaco en memoro. Kiam ni atingos tien, ni volas rigardu la nomon de tiu fakulo, se tio havas sencon. OK? [00:20:43] Do tiu estas precize la sama. Tio estas ekzakte la sama afero kiel ĉi. Ili get kompilita ekzakte la sama, OK? Kaj la kialo tie kial ni malloc io, ĉar tiukaze nia variablo estas reale nur montrilo variablo. Do ni nur havas iun spacon en memoro kiu estas tenante puntero. Ni ne vere havas neniun spacon kiu tenas la realan struct. [00:21:06] Do tiu devas esti farita en du paŝoj. Ni devas krei la memoro jxetadi struct en. Kaj ni devas krei la memoro jxetadi puntero en. Do ili estas esence du malsamaj variabloj, ĉi tie. Unu el ili estas de tipo studento, se gxi vere ne havas nomon. Kaj la alia unu estas de tipo studento stelo. Kaj tiam studento 1 punktoj tie, se tio havas sencon. OK? [00:21:28] Do la kialo kial ni uzas punteros estas ĉar ĉiu en komputilo, ĉiu variablo en komputilo havas du aferoj. Ĝi havas sian valoron. Kaj ĝi havas lian adreson. Kaj bona maniero koncepti tio ekzistas multajn problemojn kiam provu uzi funkciojn. Kaj ni provos rigardi en unu el tiuj. Nome, ke tuj pensi memoro kiel skatoloj. [00:21:50] Vi ĉiam pensis pri variabloj kiam vi diras na egalas 5. Vi pensas en meti 5 en skatolo. Do kio se vi volas pasi ke int en funkcio? Vi nur pass-- mi ne know-- x en funkcio. Sed kio okazas estas kutime kiel homoj, vi pensus ion kiel mi Ol la skatolo al persono. Kaj li ne vere okazi en komputiloj. Kio okazas estas vi kopias la valoron de la skatolo al la persono skatolo. [00:22:17] Do kion mi provas diri estas ke se vi havas function-- sorry-- tie, se ni havas funkcion kiel kvin ĝis tie, se vi provas pasi variablo, Estas nur tuj kopii. Se pravalorizi nx egalas 3, tio okazas kopii tiun valoron ĝis la variablo estas tie supre. OK, kaj ĉi tiu estas speco de la motivon kial ni deziras uzi punteros. Ĉar anstataŭ doni nur la valoron, anstataŭ simple pasante ĵus la valoro de funkcio, ni volas pasi por referenco. Kion ni nomas preterirantoj referenco bonfaras doni la skatolon al la funkcio, tiel ke la funkcio povas ankaŭ ŝanĝi la valorojn ene de tiu skatolo. [00:22:53] OK, do nur kelkaj bazaj montrilon stuff estas krei punteros, vi nur sciigu tipo, kaj vi metas stelon dekstra post tio. Kaj la tipo estas nur kion vi indikas. Do se temas pri int stelo, vi montras je int. Se ĝi estas char stelo, vi fingromontrante abako. Kaj se estas studento stelo, vi fingromontrante studento. OK? [00:23:08] Kaj ili estas ĉiuj 4 bajtojn longa. Pro tiu variablo ĝi ne reale bezonas okupi char, de int aŭ studento. Ĝi nur bezonas teni adreson. Tial ili estas ĉiuj 4 bajtoj longe en normala 32-bita maŝino. OK? Do tie, x estas variablo kiu notas al int. y notas al Char. z punktoj por kaleŝego. Demandojn tie? Malvarmeta. Kaj estas du malsamaj simboloj ili havas teni en menso kiam venante al la puntero. Do referenco kaj dereferencing estas la grandaj. Do la ampersand de la variablo nomo donas al vi la? Student: Adreso. Binky: Adreso. Do se vi rakontos int oni egalas 5, tiam ampersand de tuj donos al vi la adreson. Kaj vi povas reale provi presi tion kaj vidi kio adreson en memoron via variablo havas. Kaj tiam dereferencing-- tiel ke ĝi faras referencon, akirante la address-- dereferencing estas la ĝusta malo. OK, samkiel tempoj estas la malo de divido, astro estas la malo de ampersand. Do dereferencing rimedoj iras tien. Do se vi donos star-- mi Ne know-- 50, tio estas provos iri al la adreso de numero 50 ene de via komputilo. OK, kaj kial do ni vidu ke ili estas maloj? Ĉar kio okazas se vi faras io simila stelo ampersand oni? Nu, ampersand oni donas al vi la adreson de variablo, la adreson de. Sed stelo signifas iri tien. [00:24:35] Do kio okazas se vi iru al la adreso de? Vi nur akiri al, dekstra? Do tuj la adreso de a estas la sama afero kiel. Tial ili estas kutime aludis la same-- ĉi kaj ĉi estas raportita kiel malon operatoroj. OK? Tiel malvarmeta. [00:24:53] Sub la kastris, ekzemple, se ni deklari int x egalas 5 ni havas ŝanĝiĝeman. Kaj memoru, ke mi diris ĉiujn variable-- kaj tio estas bona afero teni en mind-- havas du malsamaj aferoj asociita kun. Ĝi havas adresita kaj valoro. OK? [00:25:07] Do la valoro en ĉi tiu kazo estas 5. Kaj la adreso is-- diru, mi estas farante ion up-- estas 0x04. Kaj la sola kialo kial ni kutime reprezenti adresoj en deksesuma estas unu, ĉar ĝi estas kiel bone. Ĝi iras bone binara. Estas facile konverti al kaj de binara. Kaj ne tro granda se vi havos tre grandan nombron. Do ni ŝatas uzi deksesuman en pres-adresoj. Sed mi povus reprezenti tion kiel entjero. Ĝi estas bone. [00:25:32] Kaj tial ĝi havas adreson 4 kaj valoro de 5. Kaj tiam mi diris int stelo montrilo. Do ĉi tiu estas malsama tipo, avizo. Int stelo montrilo egalas La adreso de x. Do kio tuj estos la valoro de PTR? Ĝi tuj estos la adreso de x, ĉi tie. OK, do la valoro tuj esti la sama kiel la adreson. Tio estas la tasko operan mi faras. Kaj tiam PTR tuj havos lia propra adreso, kio rezultas: en tiu kazo, la 8, OK? [00:26:03] Kaj tiam mi kreos novan entjero kopion. Kaj mi diras int kopion egalas iras tien. Do iru al kio PTR notas al. Nu, kio estas tiu PTR havas? PTR havas 0x04. Kio okazas se mi provas iri tien? Mi trovos la tipo kiu havas adreso x kaj kiuj havas adreson 4. Kaj kiu havas alparoli kvar estas x. Ĉu tio havas sencon? Jes? [00:26:28] Student: En tiu kazo, estas la puntero en stako? [00:26:32] Binky: En ĉi tiu kazo, it's-- bona demando. Mi ne vere pensas pri tio Kiam farante tiujn adresojn. Sed se tiu estas, kiel, ĉiuj tiuj estas lokaj variabloj, tiam x tuj vivos in-- ĉio iras vivi en la stako. Do ĉio iros esti indikante pilo. Vi nur atingos la amaso kiam vi komencas uzi malloc, dekstra? [00:26:52] Do se vi memoras stako estas ĉiufoje vi nomas funkcio en via programo, kiel, ĉefa ekzemple, aŭ ajnan alia funkcio, kiel printf. Ĉiuj lokaj variabloj estas tuj get meti en stako. Kaj ili tuj akiri kiel apilados en la stako. Tio estas kion nomas stako. Kaj ĉiuj tiuj lokaj variabloj tuj estos tie. Kaj la heap-- kaj ni iras paroli pli pri tio later-- la amaso estas kie ĉiuj dinamike asignitaj memoro vivojn. Cool? [00:27:20] Ni iru al ĉi glito. Jes? [00:27:22] Student: Kial ne int kopio reveni 0x04? [00:27:27] Binky: Kial ne int kopio reveni 0x04? [00:27:30] Student: Kial ne estas tiu [inaudible]? [00:27:32] Binky: Pro kio estas valoro de PTR? [00:27:37] Student: 0x04. [00:27:38] Binky: 0x04. Kio okazas se vi iros al 0x04? Kion vi ricevis? [00:27:41] Student: Oh, OK. Binky: vi vidas? Student: Jes. Binky: Do vi akiras 5. Do kopio tuj havos 5, se tio havas sencon. Jes? [00:27:49] Lernanto: Ĉu ni alvenas 5 en la valoro skatolon [inaudible] se ni metas int kopii [inaudible]. [00:27:55] Binky: Int-- ni volus, jes. Tio estus farinta preskaux la samo. Sed tiu maniero, ni povas pasi alparoli al funkcioj. Kaj tio estas la malvarmeta afero ni faros nun. [00:28:06] Do tiu tipo de ekzerco ĉiam venas on-- tre kutime venas sur kvizojn. Do ĝi estas vere bona por klopodi fari tian aferon mem. Do provu konservi trako de kio la adreso estas kaj volas ke la valoroj de la variabloj estas je ĉiu punkto. Do tiu estas ĝuste kion ni faros. Tie, ni havas ŝtupojn, unu, du, tri, kvar, kvin. Unu, du, tri, kvar, kvin. Kaj ni iras al konservi trako de la valoroj de x kaj. [00:28:34] Do kio estas tiu faras, se ĉi tio estas kalesxo kodo, ni provas fari al kvin. Do ni provas akiri en ŝanĝiĝema kaj ŝanĝi lian valoron al 5. Kaj memoru mian analogion havi Skatolo kaj transdoninte la skatolo al iu? Tiel ĉefa havas tiu skatolo nomata x. Kaj ĝi enhavas la valoron 3. Kaj mi klopodas transdoni tiu skatolo al kvin. [00:28:58] Kaj mi volas kvin ŝanĝi La valoro de ĉi tiu skatolo por 5. Kaj tiam mi simple printi la valoro de x. Jen kion mi function-- jen kion mi klopodas fari. Mi nur provas ĝisdatigi la valoro de x 5. Estas certe kion la funkcio faras? [00:29:16] OK, do kio tuj estos la valoroj de x kaj dekstra tie, la unua linio, ĵus antaŭ la unua line-- mi say-- de la programo? [00:29:27] Student: Probable rubo. [00:29:28] Binky: Just rubo ajxoj. Do mi nur metas N / A. Tiel Ni ne vere scias. Kiel, oni eĉ ne ekzistas ankoraŭ, ĉar ni ne nomis al kvin. Int oni ne deklaris. Kaj x tuj ekzistos tie, sed ni ne havas vere atribuita ajnan valoron al ĝi, do OK? [00:29:46] Kaj poste, kio tuj estos la valoroj de x kaj en numero du? [00:29:54] Student: [inaudible]. [00:29:55] Binky: Tiel x estas tuj estos 3. Tio estas facila, ĉar ni asignanta 3 al ĝi. Kaj ankoraŭ ne ekzistas ĉar simple vivas en kvin. Do mi tuj havos 3 kaj nenio. aŭ kiel rubon, sendepende, ne vere difinita. Kaj nun, tiu estas la grava linio. Tie, ni tuj fakte vokas al kvin. Kaj memoru, kion mi diris. Neniam ni Iam en la skatolo. Ni simple kopiu la valoro de la skatolo al alia skatolo. Jen ĉio komputiloj, kopiu aferojn de unu loko al alia. [00:30:27] Do por kvin, kio efektive faras Estas ĝi kopias la valoro de x al. Do kio tuj estos tie? La valoroj de x kaj. 3 kaj 3, ni simple kopiu ĝi transprenis de x al. Malvarmeta. [00:30:45] Nun ni estas tie ĉi. Kaj nun ni iras ĝisdatigi egalas 5. Kio okazos en linio kvar? [00:30:55] Student: [inaudible]. [00:30:56] Binky: oni prenas ĝisdatigita, sed x ne get ĝisdatigita. Ĉar x ankoraŭ vivas en la ĉefa, estas tute malsama bloko de memoro. Estas malsamaj variabloj. a estas alia variablo. Ili hazarde havas la saman valoron ĉar mi kopiitaj super la valoro de x al. Sed nun, kiam mi faros egalas 5, ne vere efektiviĝo x iamaniere. Tiu estas la trickier parto. Ĉu havas sencon por ĉiuj? Jes? Student: Unu plia demando, vi havas 3. Kial oni already-- Ho, ne, ĝi estas 3. Pardonu, ne gravas. Mi legis 5. [00:31:29] Binky: Yeah, 3, 3. [00:31:30] Student: [inaudible], jes. Binky: Kaj poste ni atribuos 5 al, sed ne vere ŝanĝas x. Bona? Student: Jes. Binky: Jes? Ĉu vi povas klarigi denove kiom oni prenas kopiitaj [inaudible]? [00:31:42] Binky: Bone, do kiam vi vokos al kvin de x, do ĉi tiu linio de kodo tie. al kvin de x, kio estas x? x estas nur 3, je ĉi tiu punkto, dekstra? Tiel vi povus simple pensi metante 3 tien kaj forgesante pri x. Simple konstrui 3 tie. Kiel ni iras kopii super la valoro de x por la int estas tio tie supre. OK? [00:32:13] Do la valoro de x estas 3. Ni tuj kopiu 3 super al. Kaj ĉiu tiu alia bloko de memoro, tiu alia variablo nomata havos 3, tiel. Ĉu tio havas sencon? Jes? [00:32:25] Student: Se vi donas al kvin ŝatas havi ĝin kiel entjero x anstataŭ, estus ke ripari ĉion? [00:32:32] Binky: Se ĝi estas integer-- ne, kiu ne ripari ĉion. Do tio estas tre bona demando. Ne vere gravas kion vi nomas tiujn variablojn. Denove, tio estos afero de atingo, ĉar ili ne estas la sama x. Ili estas tute malsamaj spacoj en memoro. Student: [inaudible]. Binky: Do ne vere gravas kion vi nomas ilin. Tio ne ripari tion, OK? Pliaj demandoj? Jes? [00:32:55] Student: Kiamaniere reen al numeron kvin [inaudible]? Binky: Bone, ni ne faris tion ankoraŭ. Ni iru al la numero kvin, do. [00:33:03] Student: [inaudible]? [00:33:04] Binky: Kio? [00:33:05] Lernanto: Ĉu vi havas revenos? Binky: Ni ne havas reveno, ne de ĉefa. Sed ĉefa redonas 0 aŭtomate se vi ne redonos nenion. Jes? [00:33:15] Lernanto: Ĉu vi faros main-- aŭ vi povus fari al kvin ŝanĝo? [00:33:24] Binky: ni povus havi kvin resendas, jes. Sed tiam ni devus atribui x egalas la reveno valoro de kvin, kiuj estus iomete malsama programo. Laborus. Sed kion ni volas fari estas kion estas nomita ŝanĝo io en loko. Do ni volas reale ŝanĝi tion skatolo kaj ne maltrankviliĝu pri devi reveni valoroj aŭ nenion. OK? [00:33:46] Tiu estas ĝuste kiel la interŝanĝan funkcio David montris en prelego, escepte mi estas nur pritraktas unu variablo. Li uzis du, do int a kaj b kaj tiam provizora variablo kaj whatnot. OK? Do kio estas la lasta linio? Post kvin revenoj, estas simple oni tuj foriros. Ni ne havas plu, kaj nur x vivadas. [00:34:10] Kaj divenu kion? x ne ŝanĝis lian valoron, finfine, ĉar ni estas nur ŝanĝi la valoro de. Tial x estis 3 partoj. OK? Bonan. Do tiu programo ne atingi kion ni deziris. Nun ni riparos ĝin. [00:34:24] Kaj la embaraso programo uzanta punteros. Kion ni faras estas ni havas tri linioj kiuj estas malsamaj. La unuaj estas ni ne pasi x. Ni pasas la adreso de x. Do anstataŭ kopii super la valoro de la skatolo, Mi ankoraŭ tuj kopii super io. Sed mi kopiante super La adreso de la skatolo. [00:34:45] Do se mi pasas la adreso de la boksi por kvin, tiam kvin povos trovi ke en memoro kaj ŝanĝi ĝian valoron. [00:34:53] Tiel kaj tiam tie supre, mi havas ke ne estas int anymore. a estas int stelo. Ĝi estas puntero al entjero. Kaj tiam, ĉar mi pasis la alparoli tie, kaj tiam kion mi faras estas ne egalas 5, ĉar oni tenas adreson. Do, kion mi volas fari estas iri tie kaj ĝisdatigi la enhavon de ĉi tiu adreso kun 5. [00:35:18] OK, do ni iru tra ĉiuj linioj por oni. Do kiam mi komencas tie, mi ankoraŭ havas N / A, N / A, N / A cxar cxio en la unua linio, ĉar mi ne vere deklaris stuff ankoraŭ. Kaj tiam vicigi du, mi havas x egalas 3. A int stelo oni ne ekzistas, samo kiel antaŭe. [00:35:39] Nun metas interesa. Do mi tuj pasos. Kaj ni supozas ke la adreso de x estas 12 en deksesuma. Ni simple supozi tion. Mi faris ĝin. Do kion mi pasante tie estas kvin. Mi pasante 12. [00:35:56] Do kio valoro faras havi? [00:36:04] Student: [inaudible]. [00:36:06] Binky: Pardonu? [00:36:06] Student: [inaudible]. Binky: Yeah, kiel, por ni supozi, ke ni estas ĉi tie, nun. Mi petas. [00:36:12] Student: [inaudible]. [00:36:13] Binky: Ĝi estis komencita. [00:36:14] Student: [inaudible]. Binky: Ĉar ni preteriris ion por la funkcio. Jes? [00:36:19] Student: Adreso de x. Binky: Iĝos havas la adreson de x. Kaj la adreso de x estas 12, bona. Do x tuj estos 3, ĉar ni ne vere ŝanĝis x ankoraŭ. Kaj tiam tuj estos 0x12, do La adreso de x, ĉar tio kion ni pasis al kvin. [00:36:38] Kaj do kio okazas se ni provu iri tien? Kion ni trovos? Do se vi provas presi star a, Ni tuj sekvos ĉi adreso kaj akiri la valoron ene. Kaj la valoro estas nur la saman valoron kiu x havas ĉar tiu estas la adreso de x, kiu estos 3. Ĉu ni bonon? [00:36:56] OK, kaj tiam nun, ni vere iras tien. Kaj ni ĝisdatigas ajn Estas en ĉi tiu adreso 12. Ni faras 5. Do nun ambaŭ x kaj stelo a estas 5. [00:37:13] Kial estas tio? Ĉar la adreso de x estas 12. Kaj havas ankaux 12 kiel ĝia valoro. Do se ni sekvu 12, ni estas nur tuj trovos x. Do, kion ni faru kun stelo de okazos al x, ĉar enhavas La adreso de x. OK? [00:37:34] Kaj ĉi tio estas kiel la quid de la embaraso. Do nun ni estas kapablaj, el kvin, reale aliro memoro kiu vivis en ĉefa. Do tiu memoro ne vivas por kvin, kiel antaŭe, tiu adreso 12. Kaj ni povis iri tien kaj ŝanĝi lian valoron al 5. [00:37:50] Kaj tiam, kiam ni revenos, Ni forgesu pri. Ni forgesu pri stelon al. Kaj x estas ankoraŭ kvin. Do se vi volas implementar swap funkcio, vi nur faru la ĝustan saman aferon krom vi bezonas int steloj tie, kaj tiel plu kaj tiel plu. OK? Ĉu ni bonon? Malvarmeta. [00:38:10] Do Pointer aritmetiko. Tio estas iomete malfacila temo. Do rezultas ke punteros estas nur entjeroj. Vi povas pensi pri ili kiel entjeroj. Ĉar en la memoro, vi ŝatas memoro adreso nulo, unu, du, tri, kvar, kvin. Do ni povas sumigi memoro adresoj. [00:38:23] Kaj tio estas kutime kio vi faras kiam vi estas en kaj tabelo, ekzemple. Tabelo estas kiel apudaj bloko de memoro, de multaj signojn, ekzemple, multaj ints. Do se vi volas iri al la dua int aŭ la tria int, Vi povas simple resumi ion por la unua adreso, kaj vi tuj alvenos tien. Do tio estas vere utila por tio. [00:38:39] Kaj la afero teni en menso, tamen, estas ke ĝi ne estas nur ŝatas normala aritmetiko en la senco ke se vi estas kontraktanta kun, diru, de int stelo, kaj oni aldonas 1 al ĝi, tiam vi ne iros aldoni 1 al la adreso, vi tuj aldonos 4 al la adreso. Ĉar int estas 4 bitokoj. [00:38:57] Do tio estas nur kiel irante sur tabelo. Se ni havas aron da multaj ints kaj do ni provas iri al la dua, ĝi estas esence nur sumante la adreso de la unua unu plus 1. Sed tio ne be-- simple diru ke la adreso de la unua estas 4. Ĉi tie, en ĉi tiu kazo. Kaj se ni elprenu tiel ĉi Estas kio okazas. Ni havas int. Int x egalas 5. X havas valoron 5. Kaj ni pravalorizi ĉi puntero, int y int stelo y egalas la adreso de x. [00:39:31] Supozu la adreso de x estas 4. Kio okazos Nun, se mi SUM aldoni 1 al y? Iĝos reale sumo 4 anstataŭ nur 1. Do mi aldonu 1, sed reale aldonis 4, ĉar komputilo inteligenta. Do tuj efektive aldoni per i epokoj La grandeco de la tipo de la montrilo. OK? [00:39:58] Do se tio estis char, ekzemple, se tiu estis char stelo y, kaj se ni adicias 1 tiam ĉi tio esti 5, ĉar char estas 1 bajtoj longa. Bona? [00:40:10] Kaj fine, ni alvenis al punteros kaj arrays. Ĝi rezultas ke ĉiufoje vi kontraktanta kun tabelo, vi fakte kontraktanta kun puntero. La tre bela koncepta motivon jen tio arrays estas tre granda. Do memoru, ke mi diris, ke ĉiufoje sekvinberoj stuff ĉirkaŭe, vi kopias ĉion. Do se vi havas tabelo ke estas vere, vere granda, vi ne vere volas kopii ĉiun ĉiufoje sekvinberoj ĝin ĉirkaŭ alian funkcio, ĉar tio estas nur amasajn kvantojn de laboro. Do kion vi faros estas ĝuste pasinteco La adreso de la unua bajto. Kaj tiam la funkcion havos aliron por ĉiuj elementoj en tiu tabelo. Do vi pasis la tabelo por lia direkto, do la adreso de la unua bajto. [00:40:48] Do se ni deklari int tabelo 3, tie, ni scias kiel aliri la unua elemento uzanta la krampo skribmaniero. Se vi memoras la krampo skribmaniero, tabelo krampo 0 egalas 1. Nu, tio estus precize sama kiel simple iri tien kaj metis 1. OK, estas precize la sama afero. Do la krampo skribmaniero tien estos la sama kiel tiu linio. [00:41:13] Kaj diveni kion la krampo skribmaniero por tabelo krampo 1 estos? Ĝi simple estus la sama afero kiel ĉi. Do aldoni al tabelo. Movi kune en memoro. Iru tien kaj metis 2. OK? Kaj tiu linio estas la sama aĵo. Ni volas iri al la tria skatolo, tiel tabelo plus 2. Iru tien kaj metis 3. Do en memoro, kio estas okazos estas ni tuj havos 1, 2, kaj 3 kiel la tri elementoj de tiu tabelo. [00:41:44] Ni povis esti farita ĉi uzante nia familiara krampo skribmaniero. Mi nur volas ke vi infanoj scii ke ili estas la samo. OK, demandoj pri tio? Agrabla. Nun, mi iras al mano ĝi transiru al HXana, [00:41:59] Hannah: Yay, Yee-ha. [00:42:00] Binky: Parolante pri memoro kaj artikolo ajxoj. [Aplaŭdo] [00:42:06] Hannah: Hi, malvarmeta, tial ni estas tuj parolos iom pli pri memoro, kiun ni ĵus adresita uzante punteros. Do estas du ĉefaj partoj de memoro kiun ni estas koncernita kun. Ni havas la pilo, kiu kreskas en la fundo, kaj monteto, kiu iras malsupren de la supro. Kaj la stako tuj tenos ĉiuj niaj petskribon variabloj. Do ĉiu vokas al funkcio ricevas sia propra framo sur la stako. Do kiel Gabe menciis antaŭe, se ni vokas la funkcion denove kaj denove, ni iras al pilo aferojn sur la stako. [00:42:35] Kaj simile, la havaĵo, kiu startas je la supro tuj teni ĉiuj la memoro ke ni dinamike malŝparas. Do kiel ni dinamike atribui memoron, ĉi malsupreniros al la fundo. Paro aferojn konscii kiam ni uzas la pilo kaj la muro, kun la pilo, se ni havos tro many-- ni say-- rekursiaj alvokoj, kaj ni vokas funkcio denove, kaj ree, kaj ree, kaj ree, kaj ĝin Stacking supren, staka vido ĝis, staka vido ĝis. Kaj tuj kolizii kontraŭ la muro. Ni tuj kuras el la memoro. Tio tuj provokos problemo por la komputilo. Kaj tio nomiĝas la stack overflow. Tiel ke definitive ion vin devus esti konscia de kaj provu eviti. Kaj la muro, devas memori Ne hazarde filtri memoro. Ajna tempo vi uzas malloc, ne faru forgesu liberigi tiu memoro. Alie, ĝi estos nur esti sur la havaĵon malŝparis, kaj la komputilo ne scias ke Ĝi estas libera por uzi tiun memoron. Do tiuj estas kelkaj aferoj esti tre zorgema kun kiam vi kontraktanta kun la pilo kaj la ruino. Demandojn per tio? Awesome. [00:43:31] OK, malvarmeta. Do tiu tipo de havas la saman ideon kiel stako overflow, kie ni iras preter la limojn de kio memoro Estas ni supozis povi uzi. Do prenu, ekzemple, buffer, aŭ vi povis nur pensi pri tio kiel tabelo. Tial ni diris: Bone, ni iros al krei ĉi belan tabelo. Ĝi tuj estos ŝnuro. Aŭ ĝi tuj stoki gravuloj. Kaj gxuste intencis diri saluton. Kaj ĝi estas argumento. Nur tio. [00:43:53] Sed se mi estus iu malica kaj volis fari ion malbonan kun tiu tabelo, kio Mi povus fari estas provi skribi preter la fino de la kordo. Kaj kiam vi vidos, se Mi skribas nun sufiĉe, Mi vere tuŝas la reveno adreso. Kaj se mi komencas tuŝi la reveno adreson, Mi tuŝas kiel la programo efektive funkcias. Kaj anstataŭ reveni, vi scias, feliĉan kordo kiel saluton, mi povus fari ion malbonan, kiel iri al aliloke en via komputilo, ankoraŭ memoro, ŝanĝi ĝin, kion mi volas fari. Do jen kion tiu devus aspekti Estas kvazaŭ mi ĵus speco de plenigajxo ion kun hazarda rubo valoro, en tiu kazo, nur. Kaj tiam, kiam mi fakte alvenis al la memoro adreso: Mi komencis plenigi ĝin per io kiuj agis kion mi volis fari. Demandojn kun buffer overflow? Imponega, flugante dekstra tra ĉi stuff. [00:44:40] OK, do ni parolis multe de pri puntero kun Gabe. Kiel ni reale preni puntero? Kiel ni preni adreson en memoron? Nu, ni povas uzi tiun belan funkcio alvoko malloc, kiu tuj ricevos peceton da memoro, specife en la amaso, kiel ni diskutis, kaj gxi tuj donos al vi redonas Pointer tiun adreson en memoron. Kaj la argumento, ke ni devas doni al malloc Estas des spaco en memoro ni volas. [00:45:04] Do vi povas vidi la grandeco en bajtoj. Diru, ekzemple, aŭ efektive, en tiu ekzemplo, Ni malŝparas sufiĉe spaco por 10 entjeroj. Do verŝajne ni tuj volas meti tie estas tabelo de 10 entjeroj. Do ni donu gxin grandeco de ints, kiu ni lernis estis kiom bajtoj? Student: 4. Hannah: 4, belega, kaj ni deziras 10 el tiuj en vico, tiel ke ni havas sufiĉan spacon por stoki ĉiuj 10 entjerojn, en ĉi tiu kazo. Io super grava, ajna tempo vi nomas malloc, Vi devas kontroli nula. Se vi ne kontroli nula, nu, malloc se ĝi kuras el spaco kaj ne plu donos al vi ajnan pli memoro, ĝi revenos nula. Do se ci ne markas, malloc revenu nula. Kaj tiam se ni provas dereference nula puntero, ni iras por ricevi segmentación kulpo, kiun ni reparolos pri aktuale. Awesome. [00:45:56] OK, demandoj kun malloc? Jes? [00:46:00] Lernanto: Ĉu kontrolanta nula [Inaudible] ne fari ĝin sur la kvizo? [00:46:05] Hannah: Certe, la demando estis faras ĝi matter-- la kvizo vi atingos punktoj ekstere se Ne kontroli nula? Jes, vi akiros punktojn ekstere Se vi ne kontroli nula. Ajna tempo vi nomas malloc, ambaŭ sur la kvizo kaj via psets kaj en vera vivo, Vi devas kontroli nula. Bona demando. [00:46:18] Gabe: Kio se mi ne liberas? Hannah: Gabe volas scii kio se ni ne libera. Do ni havos memoro liko en nia muro. Aliajn demandojn? Jes? [00:46:27] Lernanto: Ĉu you-- transiru buffer overflow reala rapida denove? [00:46:30] Hannah: Certe. La demando estis ni povas iri trans buffer overflow vere rapida. Ni reiru al tiuj diapozitivoj. Do buffer, vi povas simple pensi pri tio kiel tabelo, dekstra? Vi havas iun spacon en memoro. Kiam ni unue krei niajn vicojn, Ni scias arrays esti fiksita grandeco, aŭ nia bufro havas fiksan grandecon. [00:46:45] Do ni diru en ĉi tiu kazo, ni havas nur sufiĉa spaco por skribi la kordo saluton. Se ni iras pasinteco ke baro, se ni iros pasinteco kio nia tabelo ni diris povus teni, ni povus efektive komenci skribi en la memoro ke la komputilo ne deziras nin skribi en. Kaj specife, se ni batis io kiel la reveno Adreso de la funkcio, kiu, kiel ajna alia peco de memoro, Estas ĝuste ie en via komputilon, vi povas reale ŝanĝi tion kaj komenci fari malbonaĵojn. Respondi vian demandon? Imponega, io alia? Jes? [00:47:17] Student: Do pilo [inaudible], vi diris iri de malsupre supren. Ene stako rangon, faras la memoro iri de, kiel, supro malsupren apartenantaj al ĉiu paŭzo? [00:47:28] Hannah: Kiel you-- cedu al Rob sur ĉi tiu. [00:47:35] ROB: ĝi kreskos en la sama direkto kiel la stako kreskas. Hannah: OK. ROB: Do mi akiras konfuzita. Ĉi tuj estos abstraktaĵo. Hannah: OK. ROB: Tiu estas korekta. Do se la stako kreskas Vi do generally-- ĝi Ne devas esti tiel. sed vi povas deklari int x. Tiam vi deklaros int y. Tiam int x ĝenerale estos malsupra sur la stakon da int y. Sed tio estas nur fakto. Tio ne kiel grava semo afero. [00:48:02] ROB: Do la demando denove estis nur kio okazas ĉiun kadron edifas. Do ĉiu funkcio ricevas peceton de la stako. Kaj dum vi iros, ene de tiu peceton, ene de tiu kadro, Ni diros ke variabloj ene de tiu kadro ankaŭ movi supren. Demando? [00:48:17] ROB: Nur por esti sur mic. Hannah: Ho, jes. ROB: Mi parolos al vi. Hannah: Ho, jes, OK. ROB: La escepto estas por arrays kaj structs, kie arrays, suba indekso en la tabelo, kaj structs ĉe altaj kampo structs estas garantiita al esti je malsupra adresoj ol poste valoro en la tabelo. Do tiuj estas garantiitaj. Sed neniu aparta variabloj ene, kiel int x kaj int y ene de funkcio, ne estas necesa rilato inter iliaj adresoj. Hannah: Alia demando tien? Student: Do en bufro fluo, nur buffer overflow nur okazis kiam esti, same kiel, atribuita kvanto de tabelo kiu tiam estas pli granda? Kiel, se vi povas? Do se vi petante ion de la user-- [00:49:05] Hannah: Hmm. Lernanto: Ĉu oni perforte doni al vi ion reen tio estas pli granda ol kio ajn vi destinis por ili? Hannah: Certe, tiel la demando estis esence, povas la uzanto donas vin pli ol vi petas? Student: Yeah. Hannah: Bone, vi povus malhelpi la uzanton por fari tion. Vi povus specife diras ne al mi pli ol x nombro de bitokoj Mi nur donis al vi ĉambron por x nombro de bajtoj, x nombro de karakteroj. Por ke io vi volas malhelpi. Jes? Kio estas la diferenco inter pilo overflow kaj buffer overflow? [00:49:30] Hannah: OK, do la pilo overflow-- ho kia estas la diferenco inter la pilo overflow kaj buffer overflow? Do ni volas pensi stack overflow okazas kiam estas reale staka vido ĝis tiuj funkcio alvokoj. Imagu ke vi havas rekursie funkcio, ĉar ni scias ke ĉiu tempo vi nomas funkcio, estas ricevas lia propra framo sur la stako. [00:49:45] Do ni pilo tro alta, kaj tiam ni komencas superflui. Kaj ni uzas tro da memoro, Kaj ni ne havas ie marŝis. Ni havas tiun eraron. [00:49:51] Buffer overflow estas ene de programo. Ni volas eble ne nepre havas kuru el la memoro de la sama maniero ke ni se ni Stacking ĝis tiom da funkcio alvokoj, sed ni skribi preter la memoro ke ni scias ke ni povas uzi. Kaj kiu nin permesas fari malbonaĵojn. Yeah? [00:50:08] ROB: Jes, eble vi volas por simple ripeti tion, sed vi povas ankaŭ pensi de stako overflow kiel kiel specifa tipo de buffer overflow. Aŭ vi nur pensas pri via pilo kiel vere granda skusorbilo. Do kiam vi dronigos vin pilo, ĝi estas speco de kiel buffer overflow. Sed stako overflow estas nur specifa termino uzita kiam la pilo mem superfluas. [00:50:24] Hannah: Dekstra, tiel ripeti por la video, ĝi povas pensi stack overflow kiel specifa tipo de buffer overflow. Cool? Plu demandoj antaŭ ni iru? Awesome. [00:50:37] OK, cool, do ni parolu pri iuj komunaj erarmesaĝojn. Ĉi tio estas iu kiu havas montrita sur multnombraj kvizojn, tial iu kiu valoras preni duan rigardu. Mi certas ke vi renkontis almenaŭ kelkaj el tiuj kiel vi faras vian problemon aroj. Tiel certigi vi povas paroli pri ili en la kvizo. [00:50:50] Do la unua estas oni segmentación kulpo. Kaj tio estas iu fojo nin provu aliri memoro ke ni ne rajtas aliri. Do vi migh vidis tion, ekzemple, en Breakout. Se detekti kolizio reveni nula, kaj tiam vi provis fari ion kun tiu nula valoro, la komputilo donus vi segmentación kulpo. Do, grava afero faru por provi eviti ĉi estas ĉiam kontroli nula. [00:51:13] Vi eble vidis ankaŭ implica deklaro de funkcio. Do tio estas kio okazas kiam Allison montris vin kiel ni faras prototipo, dekstra? Tiel diru ni havas kelkajn funkcio kiun ni difini. Diru kubo. Kaj kiu iras ĉe la malsupro de nia funkcio, sub ĉefa. [00:51:27] Se ni forgesas diri al la komputilo pri kubo, kiam ĉefa provas voki kubo, la komputilo estos, kiel, ho mia Gosh. Mi havas neniun ideon, kion ĝi signifas. Mi ne scias kion fari, tie. Do la prototipo diras ne maltrankviliĝu. Mi tuj rakontos al vi. [00:51:42] Ĝi venos. Ne krias al mi. Ne donu al mi implica deklaro de funkcio. Do, se vi havas tian eraron, unu afero vi tuj volas fari estas certigi vi havas vian prototipo. OK? [00:51:53] Kaj laste, sed ne malpleje, nedeklarita ensalutilo Estas esence kiam vi provas uzi variablo kiun ne deklaris. Tiel subite oni komencas dirante kiel n plus plus. Kaj la komputilo diras kio estas n? Vi neniam informis min n estis io. [00:52:06] Do unu aferon vi devas fari certe vin faris estas al la komputilo n. Tiel ekzemple, n povas esti entjero. Kaj tiam vi estos eviti tiun eraron. Demandojn sur komunaj eraroj? Jes? [00:52:17] Student: Por la implica deklaro de funkcio, povus ankaŭ esti, ke vi preterlasis unu de la bibliotekoj vi supozitan inkludi, prefere ol la prototipo? [00:52:24] Hannah: Ĝuste, do la demando estis, vi povis ankaŭ atingi ĉi eraro se vi forgesis inkludi biblioteko. [00:52:28] Student: Jes. [00:52:29] Hannah: Absolute, ĉar en la sama vojo ke ni volas enmeti niajn prototipoj antaŭ la ĉefa funkcio, se ni havas bibliotekon, tiuj iras esence inkluzivas la prototipoj, inkluzivas la difinoj de la funkcioj. Granda demando. [00:52:40] Student: Por segmentación kulpo, estus ke ankaŭ okazus se ni, kiel, provis aliri variablo, kiel, en malsama [inaudible] ol ĝi deklaris en? Hannah: Certe, tiel farus nin akiri segmentación kulpo se ni provis konsenti variablo ekster atingo? Estis tiu demando? Student: Jes. Hannah: Bela. Do probable, vi tuj ricevas nedeklarita ensalutilo eraro anstataŭe. Do ĝi estas nur intencis diri Mi ne scias kio estas tio. Cool, io alia? Jes, bone, bela. [00:53:10] Ĉiuj righty, do rekursio. Do mi menciis paro tempoj ke ni eble reatingas stako overflow ĉar ni nomas nian rikura funkcio tantas fojoj. Ni nun estas ĉiuj tiuj pilo kadrojn, bla, bla, bla. Kio eĉ estas rekursia funkcio? Nu, rekursia funkcio estas ajna funkcio kiu nomas sin. [00:53:26] Iuj aĵoj esti konscia de kiam estas implementando rekursia funkcio, Ne forgesu inkluzivi bazon kazo. Bazo kazo estas la punkto je kiu ni finos. Do, ekzemple, se ni kodigo, Diru, Fibonacci rekursie, Ni volas certigi ke kiam ni atingos al 0 aŭ la unua Fibonacci numeron, tiuj du nombroj havas tiujn kazojn, ĉar tiuj ne dependas sur aĵoj kiuj venis antaŭe. Tiuj havas siajn proprajn valorojn. [00:53:51] Iuj avantaĝoj por rekursio, kio estas demando ni jam vidis en pasintaj kvizojn. Ili povas konduki al pli konciza, eleganta kodo. Kaj tre de funkcioj, Multaj malsamaj algoritmoj, fakte pruntas al rekursio. Ilia difino povus esti Rekursia en kaj de sin. Do Fibonacci estas unu. Faktorialo estas unu. Kunfandi varo one-- ĉiuj aĵoj kiujn vi povas rigardi. OK, demandojn? Jes? [00:54:15] Lernanto: Ĉu angulo kazo simila al bazo kazo? Aŭ estas kiu por iu alia speco de [inaudible]? [00:54:22] Hannah: Certe, tial angulo kazo estas any-- tiel Estas angulo kazo egala bazo kazo? Angulo kazo estas io ke via kodo povus konduti iom malsame. Baza kazo estas tipo de rilataj, en ke ili estas kiel apartaj kazoj ke vi volas rigardi. Sed la ideo de baza kazo estas ke Vi volas vian rekursia funkcio halti je iu punkto. Ĝi ne povas gardi nomante mem eterne. Ĝi bezonas halti je iu punkto. [00:54:49] ROB: Jes, ofte, via bazo kazoj povus esti ekzemploj de angulo bazoj. [00:54:53] Hannah: Dekstra, malvarmeta, ion? [00:54:55] Lernanto: Ĉu vi povas klarigi bazas iomete pli? Mi ne tute komprenas [Inaudible] bazo kazoj. [00:55:01] Hannah: De bazo kazoj? [00:55:02] Student: Bazo kazoj, jes. [00:55:03] Hannah: Oh yeah, sekura. Ni vidu. Ĉu ni kreto tien? Jes, ni faru. OK, do vere rapide, tuj provu skribi sufiĉe granda tial vi povas vidi sur la ekrano. Tuj parolos, vere rapide, Fibonacci. Do mi donos al vi la Fibonaĉi sinsekvo. Vi povas serĉi la difino. [00:55:17] Esence, ĉiu nombro en la vico estas la sumo de la du antaŭaj ciferoj. OK, do la vojo, kiun Mi ĝuste priskribi Fibonacci, Vi povus aŭdi la rikuro, dekstra? Kiam mi diras ĉiu nombro estas la sumo de la du antaŭaj numeroj, ni povus diri OK. Nu, la n-a fibonaĉi number-- do ni ke ni havas tiun funkcion nomita fib-- fib de n tuj estos egala al FIB de n minus 1 plus-- bedaŭras, ni devos iri al la sekva linio super here-- fib n minus 2. [00:55:52] OK, do tio funkcias tre bone, se vi estas rigardante, ekzemple, la nulo, oni, du, tri, kvar, kvina Fibonacci numeron, kie vi povas diri, ke 5 estas egala al 2 plus 3. Sed kion se vi estas ĉe la komenco? Kio se vi simple trafi tiuj unuaj du valoroj? [00:56:08] Por akiri ĉi 1, vi ne povas diru aldonu la du antaŭaj, ĉar tio nulo kaj- Mi ne scias. Do, en iu momento, ni devas halti. En iu punkto, ni devas diri ke tiuj du apenaŭ havas siajn proprajn difinojn. La 0 Fibonacci nombro estas 0. Kaj la unua Fibonacci nombro estas 1. [00:56:26] Do tiel mi povus programi tion, mi dirus se n estas malpli ol du, tiam nur reveni n. Kaj tio estus mia baza kazo. Tiel estas kiel mi scios halti per rekursia funkcio. Estas tiu klara? Awesome. Ion alian pri rekursia? Belega. [00:56:45] Ni rapide paroli pri serĉo kaj varo kuras tempojn. Kaj poste mi donos Davin iuj tempon por paroli pri kodigo ekzemploj. Do jen estas la ĉefaj serĉo kaj varoj kiujn vi devus scii pri. Guarantee-- mi ne povas garantii, ĉar mi ne vidis la quiz-- sed tio venas supren kvizo post kvizo post forlasi. Do certe uzos ĉi grafikaĵo. Kiel, prenu ĉi grafikaĵo. Metu gxin sur viajn Gvidfolio. Vi estos feliĉa persono. [00:57:09] Tiu diras nin la tempoj de ekzekuto de ĉiu de tiuj tipo kaj serĉo algoritmoj. Do lineara serĉo, vi povas vidi run tempo, kaj sama kun duuma serĉo. Transiru kion tiuj algoritmoj do, la ĝenerala ideo. Rigardu kelkajn _pseudocode_, se ne kodo. [00:57:25] Vi vidos ke bobelo speco havas suprajn tenataj en la plej malbona kazo de n kvadratoj. Do se nia tabelo estis tute malantaŭen antaŭ ni volis ordigi ĝin, ni dirus ke tio estas tuj prenos n kvadratoj paŝoj. Sed en la plej bona kazo, do la suba baro por la plej bona kazo tuj estos se estas jam perfekte ordo. Tiam ĉiuj ni devas fari estas kontrolu ke ĝi estas ordigitaj. Ĉu estas demando pli tie? [00:57:47] Student: Kiam farus vi volas uzi specon? La varo. Mi estas nur kurioza. [00:57:52] Hannah: Kiam vi deziras uzi selektado speco? Ĉi tiu? Kiu estas n akorditaj en ambaŭ kazoj? [00:57:55] Student: [inaudible]. [00:57:56] Hannah: Do ĝi estas tre malsama. Se vi havas specifajn kondiĉoj por via programo, aferojn kiel se ni nur diris implementar search-- sorry-- implementar varon, vi verŝajne volas iri unu el la aĵoj kiuj havas bonan kazon de n, aŭ suba baro de la pli bona kazo de n. Sed povus esti iujn aferojn kiel, ekzemple, interŝanĝojn estas vere multekosta ial. Tiam vi volus fari bobelo speco, ĉar vi devas fari tiom da interŝanĝojn, aĵoj tiel. Ajna alia lando jes? [00:58:23] Lernanto: Ĉu estus [inaudible] diri ke [inaudible]? Hannah: Tio estas unu afero kiu diras al vi Se vi rigardas al la efektivigo. La maniero mi farus reale pensi kial estas n kvadrato estas ke ni devas funkcii per nia tabelo de longo n, ĉiu tempo farante maksimume, n interŝanĝojn. Kaj ni devas fari ĉi procezo n fojojn. [00:58:46] Do kiam vi devos fari maksimume n interŝanĝojn kaj por n kuras tra la vicojn, tie tuj estos n kvadratoj. Sed jes, tio estos malkaŝita tra ĉi tiu duobla por buklo, kiel la demando asked-- aŭ neston por buklo, mi dirus. OK? [00:59:00] Kaj poste kunfandi speco, kiu estas la plej rapida speco ni nun, aŭ ke ni kovris en CS50, scias ke la ĉefa algoritmo estas ĉi tiu ideo de rompi en ordo pecoj kaj tiam kunfandi kune tiuj ordo bitoj. Kaj foriros ni log n log n. Demandojn sur serĉoj specoj antaŭ mi fordoni ilin? Ni vidu. [00:59:21] Ho, ligitaj lertaj. Pardonu, mi havas pli temon. OK, awesome, ligitaj lertaj. Problemo kun la arrays, ili havas fiksan grandecon. Do se vi ne scias kiom granda via enigo tuj estos, vi ne volas krei tabelo. Ĉar se ni kreas tabelo, kiu estas tro malgranda, ni povus kolizii buffer overflow. [00:59:35] Do anstataŭe ni povus fari ion kun ligitaj listoj, kiuj permesas havi al ni dinamike sized datumstrukturo ke ni permesos stoki pli fleksebla kvanto de datumoj. Do ene de ĉiu nodo en nia ligillisto, ni havas du pecojn. Ni havas la realan valoron kiu stokas. Do tio estas nur la afero vi farus vidi en la tabelo, ekzemple. Kaj tiam ni ankaŭ konservi trako de montrilon al la sekva afero en memoro. [01:00:04] Kontraste arrays, kiu Ni scias ĉiuj irante al be-- tabelo elementoj estas ĉiuj unu post alia en memory-- ligitaj listoj povus esti ie en la memoro. Ili estas arbitraj lokoj. Do se ni devis efektive iros trovi ilin, ni bezonas konservi trako de la sekva afero en nia listo. [01:00:19] Kaj poste por scii kie tiu lerta kiel tuto estas, ĉiuj ni devas konservi trako de estas tre unua ero en nia ligillisto. Kaj tio faros nin permesas sekvi tra. [01:00:31] Do jen kiel vi povus difini modo. Tiu estas granda ŝanco utiligi structs. Ĉar vi havas tiun ideon, nu, por donita vertico, mi havas du pecojn. Mi havas la realan valoron mem. Kaj tiam mi havas puntero al la sekva elemento en la ligitaj listo. Do vi vidas, ni havas entjero n, kiu iras al la reala valoro, kaj tiam puntero al nodo, nomata flanko. Tiel ke tuj estos la sekva elemento en nia ligillisto. Student: Jes? Ĉu vi devas specifi ke la steloj estas kiel struct? [01:01:01] Hannah: Jes, do ekde tiu Estas preskaŭ kiel ia, ŝajnas kiel rekursia difino en ni bezonas scii kion nodo estas enen por trovi nodon. Ĉar ĝi ne reale scias kion nodo estas tute ĝis ni atingos la finon de this-- kaj post tio ni povas simple nomas ĝin oni node-- ene de ĉi tiu difino, ni bezonas nomi ĝin struct nodo. Granda demando. Ion alian? Jes? [01:01:26] Student: Kial ni devas diri nodo dufoje? Ĉar kiam ni estis en [inaudible] Ni ĵus devis fari ĝin en punktokomo, sed nun ni devas trovi ke struct nodo? [Inaudible]. Hannah: Do mi kredas en la lasta ekzemplo, ni simple krei anytime vi volis uzi studento post tio, vi devis uzi struct node-- Mi sorry-- struct studento. Tiu permesis al ni, post la fakto, simple uzo nodo aldoni novan tipon, esence. Tio havas sencon? Do ni devus reiri kaj rigardi la kodon antaŭe. Sed mi supozas ke ni ne uzis typedef. Kaj ni demandis, kial ni bezonas uzi typedef? Typedef permesas nin eviti la vorto struct en la komenco. Jes? Student: Kia demandojn supreniru en terminoj en terminoj de nodoj kaj ligitaj listoj? [01:02:10] Hannah: Do unu afero ni povus diri kiom eble vi serĉas tra ligillisto? OK, ĉar ĝi estas iom pli komplika ol se ni serĉado tra tabelo. Ni povas nur rigardi elemento nulo, elemento unu, elemento du, bla, bla, bla. Se ni volas serĉi tra ligillisto, ni volas vere sekvi tiu malgranda labirinto de punteros. Do ni efektive iros tra ĉi tiu vere rapide. Kion ni povus fari en ordigi to-- diru ni volas nur persisti tra nia tute ligitaj listo. Ni komencos je la kapo. Kaj tiam la celo movi al la sekva ero, anstataŭ simple pliigante de unu kiel ni povus en iranta tra tabelo, ni fakte tuj sekvi la sekva puntero, tial ni povas trovi kie en memoro la sekva elemento estas. Do mi scias, ke tio ne sufiĉas preni ĉion tion en momento, sed vi havos tiujn diapozitivoj. Do vi povas iri tra tio iom pli malrapide. Sed esence, kion ni volas fari estas sekvi tiuj punteros tra la tutaĵo de la ligitaj listo. Do tio estas demando vi eble demandos. [01:03:01] Io rimarki per inserción, ni diru Ni volis meti nova elemento ĉe la fronto de niaj ligitaj listo. Ni devas esti tre zorgema pri la ordo en kiu ni reasignado la punteros. Ĉar ni diru simple diris OK. Faru kapo punkton al ĉi tiu nova elemento. Simple fari ĝin punkto por 1 Tiam, ni esence perdis la reston de nia listo, ĉar mi ne memoras kie 2 vivojn. [01:03:25] Do ni devas fari en tre specifa celo. Unue, ni faru la nova elemento punkto al la kapo. Kaj do ni faru la kapo indikas la novan elementon. Do ni vidu kion tio aspektas kiel kun arrows-- ĝuste tiel. Do vi unue havas la novan elemento punkto al la malnova kapo. Kaj nun ni havas la kapon fingromontras la nova unua elemento. Demandojn per tio? [01:03:49] OK tie estas iu kodo denove, io rigardi iomete poste. Kaj nun mi remetos ĝin sur al Davin por GDB kaj iom da praktiko kodigo surpapere. Belega. [01:04:01] ROB: Kaj Rob. [01:04:01] Hannah: Ho, Davin kaj Rob. Mi bedaŭras. [01:04:03] Student: Woo! [01:04:08] ROB: Dankon. [01:04:09] DAVIN: Ĉu vi volas diri ĉiu reala rapide? ROB: Yeah, yeah. DAVIN: Iam mi supren. OK, dum Rob metas la mikrofono sur, do kio estas GDB? Ĉiuj devus esti vidita GDB en klaso kaj ankaŭ en oficejo horoj. Kaj vi devus esti uzante ĝin. Do kio estas GDB? Iun ajn? [01:04:28] Student: Estas sencimigilon. [01:04:29] DAVIN: Estas sencimigilon. Kaj kion faras ĝi permesas vin fari? Kiel, kial ni ŝatas GDB? Student: malrapidigi malsupren la programo. DAVIN: Ĝuste, do vi povas marŝi tra ĝi plaĉas homa ritmo. Do kio estas iuj ordonoj kiujn vi povas fari? Nu, paŭzo estas probable via preferata komando. Ĉar tio permesas rompi la programo kaj reale marŝi tra ĝi linio por linio. [01:04:44] Run permesas kuri ĝin. Venonta, kiel tretante tra. Kio estas inter proksima kaj paŝo? Atendu, diri ke laŭte. Ĝi estis ĝusta. [01:04:54] Student: [inaudible]. [01:04:55] DAVIN: Jes, awesome. Tiel kiel, sekva kaj paŝo, se you're-- Imagu ke vi havas funkcion vin difini. Diru iujn en via ĉefa funkcio, kaj vi simple bati proksima, proksima, sekva. Vi fakte tuj ekzekuti tiu funkcio, sed vi tuj transsalti ĝin. Se vi batis paŝo, aŭ s aŭ kion ajn, vi estas tuj efektive saltas en tiu funkcio, kaj tiam vi povas kolizii apud por vidi la malsamajn alvokoj ene ol aparta funkcio. Yeah? [01:05:16] Lernanto: Ĉu ekzistas maniero salti, kiel, apogi ekstere? DAVIN: Finish, jes, fini kun salti vin. Do tuj finos tion funkcio, kaj tiam vi tuj revenos en ĉefa, ekzemple. Print presos ĝin iam. Io Mi ĉiam uzas estas montriĝo. Vidigu presos ĝin senĉese tra la tuto de via programo. [01:05:32] Ekzemple, se vi estas en a por buklo, kaj vi volas vidi kiel io ŝanĝiĝas, kaj vi ne volas, kiel, senĉese esti faranta kiel print, print, print, aperigi montros, ke variablo senĉese, ĉiufoje kiam vi batis Next. Kaj daŭrigi. Do GBD, jen GDB. [01:05:47] Student: Kio estas la kie [inaudible]? DAVIN: Kio gxi estas? [01:05:52] Student: Kio the-- la lokaj variabloj. ROB: Estas io reale kiel lokanoj aux io. Mi can't-- [01:05:58] DAVIN: Povus esti io simila, jes. [01:05:59] Hannah: En la lokanoj? [01:06:00] DAVIN: Estas tio. Tio estas la unu. ROB: Bela. [01:06:03] DAVIN: Yeah. [01:06:04] Student: Kion daŭrigi fari? [01:06:06] DAVIN: Ĝi continues-- do ĝi estas nur tuj daŭrigos viajn programojn. Do se vi rompas kaj batis daŭrigi, ĝi okazas por simple kuri ke programo ĝis Ĝi batas ke rompo denove. Tiel ekzemple, se vi rompis en funkcio, kaj vi tuj imitu por maŝo aŭ iel simile, kaj vi batas daŭros, tuj daŭrigi kaj reiri al tiu rompo. Aŭ ne estas paŭzo, ĝi tuj daŭrigi kaj fini la programon. [01:06:22] ROB: Do simple ŝatas kuri haltoj je la unua Haltpunkto Vi trafis, se vi tiam hit daŭrigi, ĝi malebligos ke irante ĝis ĝi estas la sekva Haltpunkto. Kaj tiam daŭrigi iros al la sekva Haltpunkto. DAVIN: Ajna aliaj demandoj en GDB? Do mi pensas en la pasinteco, ni demandis vin, kion GDB estas kaj doni ekzemplo de iuj aĵoj vi povu fari kun GDB, do reala simplaj, sed jes. Tie vi iru. Kaj nodoj? [01:06:43] ROB: Jes, do kiu direkto ĝi estis? Student: Tiu estis ĝi. DAVIN: Atendu. ROB: Tiu ulo? DAVIN: Tiu. ROB: Tiu ulo, ho, mi ne rimarkis. Do ni ne klare pri kio the-- mi ne scias, kiu ŝi was-- sed la demando. Ni ne scias ekzakte kion vi demandis pri ĝi, do nur klarigi ion. Do unue, kiel mi diris antaŭe, typedef vi ĉiam uzas nur Krei kromnomon por tipo. Do ĉi tie la alnomo ni kreado estas por tiu tipo struct nodo. [01:07:13] Do unue, ignorante ĉi nodon en la typedef, do ĉi struct nodo krispa prepari malsupren al proksima krispa krampoj estas la struct nodo tipo. Kaj ni bezonas ke nodo tie supre, ĉar ni bezonas referenci nodo tien. Do per tiu speco de rekursiaj struct, vi bezonas doni ĉi struct nomon, alie vi ne povis diru struct nodo tien. Dum antaŭe kun studenta kiam ni estis tajpita, mi pensas, ni ne devas diri studento tie, ĉar ni ne devis diri struct studento ene la struct mem. Do estas la rekursiaj ke devigas nin diri nodo tie. [01:07:43] Ĉi tiu nodo estas nur la nomo ni donante nodo por la typedef. Por ke nodo ne estas la sama kiel tiu nodo. Sed ĉi struct nodo estas sama kiel tiu struct nodo. DAVIN: Do kiam vi vokos, kiel, nodo en via ĉefa funkcio, vi ne tuj devas diri struct nodo. Vi povas simple diri nodo, ĉar nodo estas different-- estas esence vi diras, OK. Anstataŭ havi alvoki struct nodo en mia kodo, Mi nur volas renomi gxin kiel nodo plifaciligi. [01:08:04] ROB: Se vi ĉiam uzi typedef, tiam ĉi estas la sola loko kie vi tuj havos deklari variablon kun struct nodo star, jes. [01:08:14] DAVIN: OK, do la lasta parto Malfacilas instrui because-- ROB: Kio? [01:08:24] DAVIN: Ĉar ĝi estas kodigo surpapere. Do ĉiu jaro ni havas kodo surpapere demandoj. Do mi opinias, pasintjare, 12 el 80 punktoj estis kodo sur papero. Jaro antaŭ tio, 10 el 80, jaro antaŭ ke 20 el 100, tial ne malmultaj el tiuj. Do vi tuj devos esti kapabla kodigi tiujn funkciojn mane. [01:08:40] Do mi deduktis ni povu iri tra paro de ili kaj vidi kiel homoj faras, ia trairu ili malrapide kun homoj. Do ĝenerale, strlen kaj atoi estis tre populara. Lasta jaro, mi opinias, ke ni GetPositiveInt kaj RandomInt. Sed POW, do povo, ankaŭ pozitiva tro. Ni simple iru tra eble unu aŭ du el tiuj kune. Kion homoj volas vidi? [01:09:05] Student: Atoi. Student: Yeah. DAVIN: Atoi? Student: [inaudible]. DAVIN: Bone, mi iros fari ĝin sur la tabulon. Ĉu vi havas preferon se mi faras ĉi tie aŭ tie? Tie, Gabe diras tie. [01:09:16] ROB: Jen estas ĝenerala pensoj pri tiuj kodigo demandoj. Provu skribi ion. Ne lasu malplenan. [01:09:22] DAVIN: Jes. ROB: Se vi povos atingi la reveni tipo ĝentila, aŭ eble ni povus doni ĝin al vi, sed se vi povas, kiel, skribi la ĝenerala funkcio signumo, Se vi povos atingi la bazon kazoj ĝentila, aŭ angulo kazoj, aŭ memorante ĉeko nula, Tiel longe kiel vi havas iun aĵoj, tiam eble ni povas doni al vi paro atentigas la problemon. Ne nur lasi ĝin malplena. [01:09:36] DAVIN: Jes, kaj se vi estas nur tute difuminada ĉe kiel fakte igi kodon. Se vi skribas _pseudocode_, kiuj estas sufiĉe bona ankaŭ. Tiel estas kiel, estas ses punkto demando, kaj vi skribas la korektan _pseudocode_, vi ricevos almenaŭ du punktoj. Do, ne nur lasi ilin malplenaj. Provu meti ion. [01:09:50] ROB: Ĝi devas esti la korekta _pseudocode_, kvankam. [01:09:51] DAVIN: Jes. ROB: Do ni estas ĝenerale malpli mildaj kun cimoj en _pseudocode_. DAVIN: Bone, do vi uloj volis vidi atoi. OK, do nur really-- do kion vi volas fari Estas vi tuj estos donita ia nombro. Sed tiu nombro ne estas tuj estos int, dekstra? Kio ĝi iĝos? [01:10:08] Student: [inaudible]. [01:10:09] DAVIN: Ĝi tuj estos ŝnuro, ĉu ne? Do se vi estus donita oni string-- ni say-- [01:10:13] ROB: Ĉu mi elsxiros redaktanto? Mi povas tiri up-- [01:10:16] DAVIN: Ho, ke vi volas fari ĝin on-- [01:10:16] ROB: Ĉu vi preferas la tabulo? [01:10:17] DAVIN: Kion vi volas fari? Mi volas diri, kion vi volas fari ĝin mane? Aŭ ĉu vi volas fari ĝin per komputilo? [01:10:21] ROB: Do ĝi mane. [01:10:22] DAVIN: [rie] ROB: Do ĝi mane. [01:10:23] DAVIN: Bone, do ĝi tuj estos atoi. Do kio estas it-- Mi volas diri, ni verŝajne donos al vi tion. Sed kio gxi tuj revenos? [01:10:29] Student: Int. [01:10:29] DAVIN: Ĝi tuj revenos int, dekstra? So-- Mi ne volas fari ĝin tie. Mi faros ĝin tie. [01:10:34] ROB: Vi povas tiri ĝin malsupren kaj tiam puŝi sur gxi. [01:10:38] DAVIN: jes. [Rie] Game ŝanĝon. OK, do tuj estos int atoi, kaj kion ŝi tuj prenos? A char stelo, do nur kordo, stelo s, tiel. [01:10:57] ROB: Nice stelo, bela. DAVIN: Tiu eble ne estos tie, OK. ROB: Yeah. DAVIN: OK, do la unua afero vi volas do-- mi Ne scias se iu rigardis en la praktiko solutions-- sed kion vi iras voli fari estas vi tuj volas havi banto, ĉar vi estas tuj volos reale paŝo tra tiu ĉeno. Do helpful-- do ni diru ni iras al por buklo, kaj ni iras al paŝo tra ĉiu elemento de la kordo. Kiom longa estas tiu? Multfoje ni iras persisti en tiu por buklo? Student: Sterln? DAVIN: Sterln, jes. Tiel diru int longeco egalas sterln s. Kaj ĝuste scivolema, kial ĉiam atenta de bona fari tion ekster maŝojn? Kiel, kial estas pli bone nomi tiu funkcio ekster loop? Nur rapidan prudento kontroli? Yeah? Student: Do vi ne devas subteni kontrolanta ĝin. Vi povas nur [inaudible]. [01:11:59] DAVIN: Ekzakte, do jes, ĝuste kion ŝi diris. Do ni ne devas subteni kontrolanta ĝin. Tiel ekzemple, se mi vokas tiu funkcio ene de buklo, tiam Mi iros subteni nomante tiu funkcio multnombraj fojoj. Kaj tio tuj malpliigi la efikecon de via programo. Do ĝi estas ĉiam utila deklari ŝin eksteren. [01:12:12] ROB: Tio diris pri neniu el tiuj problemoj preskaŭ tiel longe kiel vi preni laborante solvo, vi ricevas plenajn kredito. Do ne maltrankviliĝu se via dezajno Estas absolute hororaj. Eble nin tedas legante via kodo. Sed tiel longe, kiel ĝi funkcias, Vi ricevos la punktoj. [01:12:28] DAVIN: Jes. OK, do tiam mi tuj deklari iu variablo. Ĝi simple iras voki int sumo. Kaj mi tuj povas tion egala al nulo, tiel. Kaj tiu nur irante esti lokokupilon. Tiel ke tuj estos kion Mi tuj revenos. Do mi tuj eventuale reveni sumo el tiu programo. Do mi havas ĉi tiujn du variabloj. Mi havas longitudon. Mi havas sumo. Kaj nun ni saltu al nia kordoj. [01:12:48] Do lasas niaj por buklo. Do kvar int mi egalas 0 w, dum Mi estas malpli ol longo Mi plus plus. Kaj now-- ROB: Nice. DAVIN: Bone, kaj nun tie venas la karno de nia kodo. Do vi povas reale fari ĉi esence en unu linio. Do ne iu havas ideon kion ni faros poste? OK, do tio estas bone. Do ni faras por diri sum equals-- lasu min scoot ĉi over-- sum egalas sum fojojn 10 plus-- ni tuj prenos s mi minus unu citaĵo 0 unu citaĵo agis, tiel. ROB: Tre intuicia. [01:13:56] DAVIN: Premita ĝin. OK, do someone-- mi atingis ĝin, mi havas ĝin. OK, do tio klare suprenirantaj. Kion tio signifas? Do ne iu scias kion tio signifas? Povas ĉiuj vidu ĉi? Ne, neniu povas vidi ĉi tion, OK. Mi iras to-- [01:14:18] ROB: Mi iras por skribi la formulo ĝuste ĉi tie. DAVIN: OK, Rob tuj faros sur la komputilo, kiun estas amuza. ROB: Ho mia Dio. Aŭ mi ne volas. DAVIN: Iru. Lernanto: Mi havas demandon. DAVIN: Yeah, sekura. Student: [inaudible]? DAVIN: Bone, do ĝi reale, kiel, ĝuste ĝenerale, Se vi estus meti, kiel, en tiu deklaro int Mi egalas 0 komo longo egalas sterln, that-- [01:14:59] Student: [inaudible]. [01:15:01] DAVIN: Tio estas bona, ĉar that-- Student: Kial vi eĉ bezonas uzi longo? Kial ni ne povis simple [inaudible] sterln s, same kiel la tuta tempo [inaudible]? [01:15:08] DAVIN: Vi signifi ĉi tie? [01:15:09] Student: Jes. DAVIN: Ĉar ĉiu tempo ĉi por buklo kuras, ĝi tuj taksi ĉi kondiĉon. Student: Rajto. DAVIN: Se vi havas sterln tie, tiam ĝi estas tuj devos fakte vokas domadministranto ĉiun solan fojon. Do anstataŭ simple komparante ĝin al int, vi tuj estos nomante funkcio kaj tiam kompari ĝin al la reveno valoro. Jes, tiel gxuste, jes. [01:15:28] Bela, bone, tiel nun ĉiuj povas vidi gxin. Kio does-- ĉi estas kiel, tio estas ĝi. Tiu estas la marmelado, ĝuste ĉi tie. Kion tio signifas? Kion mi faris? Yeah, ideo? Yeah? [01:15:43] Student: Nu, do kiam vi eniri tabelo, Vi tuj iros de maldekstre al dekstre, tiel vi tuj iros en dekuma de sube la [inaudible]. DAVIN: Ekzakte. Student: Tial ĉiu Vi devas multobligi kion vi vidis kiel la valoro de la int per la tempo vi atingos ŝovu tiun unu. [01:15:59] DAVIN: Perfekta, perfekta, tiel ekzemple, ni diru donis you-- min tuj skribos ĉi tien. Ne, mi ne. Mi tuj skribos ĉi tien. Diru vin donis 76, dekstra? Diru min doni al vi 76. Tio estas ŝnuro por komenci kun, OK? [01:16:15] Do longo estas kio? 2, dekstra? Sumo estas 0. Tiam ni saltas en nia por buklo. OK, la unua ripeto de tiu, kio ĝi tuj estos? Ĝi tuj estos sumo estas 0. Do elprenu fojojn 10 0. Tio estas sensignifa. Do kion signifas ĉi fari? Student: [inaudible]. [01:16:33] DAVIN: Iĝos igi tiun karaktero en entjero, dekstra? Ĝi estas speco de kiel via problemo set-- ĉi light-- ĝi estas speco de kiel kun problemo starigis al Visioneer. Vi kontraktanta kun ASCII valoroj. Do se mi donas al vi, kiel, oni sep, sed estas karaktero, kaj vi volas scii, OK, kio cifero estas tiu? Jes, vi povis, yeah. Do kio cifero estas tiu? Vi povus subtrahi 0 de gxi, sed vi devas subtrahi 0, la karaktero. [01:16:59] Kaj kie iuj homoj get stumblis supren, ili estas kiel, nu bone, bone, do mi devas scii la ASCII valoroj por tiu kvizo? Ne, vi certe ne bezonas scii la ASCII valoroj de, kiel, minuskle a, majuskla A, nulo. [01:17:09] ROB: Ne estas kialo por ĉiam meti tion en la Gvidfolio. [01:17:12] DAVIN: Certe ne malŝpari vian spacon kun ĉi tiu. Vi povas literally-- nur anstataŭ diri 48, kiel dekstra supren tie, kiu estas ekvivalenta al dirante, unu apostrofon, tiel, ĝuste la sama. [01:17:27] ROB: Vi povus preskaŭ kredi de ĝi kiel if-- Dio, mi bezonas mian, oops-- vi povus preskaŭ kredi ĝin kvazaŭ ni havas ion kiel tiu hash difini 0 kiel 48. Tio ne funkcios. Sed pensas pri ĝi kiel sola citaĵo 0 sola citaĵo, kaj por ĉiuj karakteroj. Pensu pri ĝi kiel konstanta kiu reprezentas tiun ASCII valoro. [01:17:47] DAVIN: Jes. OK, do la unua fojo tra, tiel kun 76-- tiel la unua fojo tra, tiu estas nur la karakteron 7 minus la karakteron 0, kaj tiuj estas sep integers-- bone, tiujn Estas sep spacoj for de ĉiu alia en la ASCII abako aŭ kion ajn. Tiel ke tuj revenos al int de 7. Do nun, sumo egalas 7. [01:18:08] OK, nu, ni saltas en ĉi por buklo denove. OK, nun ĝi estas sumo fojojn 10. Do vi estas efektive movante la 7 al la maldekstra. Ĉu tio havas sencon? Vi estas efike movante ĝin al la maldekstra. [01:18:19] Kaj tiam vi add-- ĉi tuj estos 6 minus 0. Tio estas 6. Do tuj estos 70 plus 6. 76, kiuj estas via nombro. Do sendistinge de kion nombro Mi donis al vi, ĝi estas malrapide simple tuj ŝanĝos la grandaj valoroj maldekstren, 1 faktoro de 10 ĉiu tempo en la buklo, kaj poste aldoni la tiel necesa. [01:18:37] En la dorson? Student: Ni ne devas fari ajna kontrolanta en la programo? [01:18:41] ROB: Do ĝis kontrolanta iras por la programo, ni dirus al vi bela tre kio vi bezonos por kontroli. Se ni ne rakontos al vi io, tiam ĝenerale supozi vi devos kontroli la plej aferoj. Kiel vi eble, nur por esti sekura, vi probable devus kontroli hey, Estas s nula? Do mi ne havas ideon kion reveni. Sed ni informos vin ĉi tia afero. 0, mi ne scias. [01:18:59] DAVIN: Kaj kial vi volas por rekontroli se s egalas nula? Student: [inaudible]. DAVIN: Pro char stelo. Ĝi estas montrilo. Tiel perfekte akceptebla deklaro, mi povis diri, nu bone, s egalas nula, ĉar povus esti montrilo por nula. Do kiam ajn vi havas punteros en via vojo en kiel ĉi, vi probable devus kontroli. Ĉar se vi ne kontrolu kaj tiam vi irus en via por buklo, kaj vi doing-- scoot suben. Scoot suben. [01:19:22] ROB: Pardonu, jen ĝi. [01:19:23] DAVIN: Do, kiel, se estas nula, kaj tiam vi tion, kion eraro vi intencas akiri? Student: Vi tuj ricevos aron kulpo. DAVIN: Vi tuj starigis kulpo, dekstra, ĉar vi estas provante indekson en nula. Do vi tuj provi indekso en memoro ke vi ne posedas. Tiel ĉi, se tiu estas nula, kaj vi faros tion, vi devos ciklo. [01:19:39] ROB: Mi ankaŭ pensas pri la ekzameno en kiu ni demandis tiu demando, ni diras vin ke vi povas nur supozi ĝi estas pozitiva nombro. Ĉar atoi atendas ankaŭ manipuli negativaj nombroj, tial vi devus speciala kazo. Hej, estas la unua karaktero strekon, tiaokaze, OK, nun ĝi estas negativa entjero. Ni diros al vi tiajn aferojn. Ni diros al vi, kion vi devas manipuli. DAVIN: Jes. Do mi certas iuj homoj povus have-- Se vi komencis rigardi malnovajn ekzamenoj Vi vidis sterln. Tio estas populara. Kaj mi kredas en sterln, vi devis fari ĉi ĉeko nula, la reveno 0 aŭ io simila. Kiel, vi devis kontroli nula. Kaj se vi ne faris, ke Estis punkto ekstere sur la kvizo. Do ĉiuokaze, ĉu ĉiuj sentas bone kun atoi? Ĉu iu volas transiru partoj denove? ROB: Oh yeah, Mi opinias ni ankaŭ diros al vi povas supozi ke ĉiu is-- ke ili estas reale eniri numeron, ke vi ne devas maltrankviligi, kiel, leteroj estante en la kordo, tiel. DAVIN: Yeah. Jes? Lernanto: Ĉu vi povas iri super pli tempo vi uzas citilon kaj sola citaĵo? [01:20:37] DAVIN: Certe, tiel citiloj, tre simple, estas citiloj estas kordoj. Do se vi citilon io, tio estas ĉeno. Do, kiel, se mi havus tiun 0 tien, kaj mi faradis tion, tio estas ĉeno. Tio ne plu estas karaktero. Do mi ne povas trovi tiun valoron en miaj ASCII letero, ĉar ĝi estas ĉeno, jes. [01:20:57] OK, aliajn demandojn? Jes? [01:21:00] Student: Do vi havas jam respondis tion, sed kiel, kiam ni efektive skribi tion en la kvizo ĉu vi volas, ke ni skribas per slashes nuloj [inaudible]? DAVIN: No. La demando estis Devus vin metis oblikvo tra la nuloj indiki se ili estas nuloj? Ne, ni devos kalkuli ĝin ekstere. Jes, dankon, ili estas bonaj. OK, io alia? Ĉu iu volas to-- tiel mi pensas ni kuras iomete super tempo. Ĉu vi volas vidi alian, aŭ? Student: RandomInt. [01:21:29] DAVIN: RandomInt, OK, ekzakte. Do ni faru RandomInt. Mi tion faros super tie. Do RandomInt estas fakte multe pli simpla. Mi kredas atoi estas probable la plej malfacila unu ke ni petis en la antaŭaj jaroj. Student: [inaudible]. [01:21:46] DAVIN: Kio? ROB: Mi vidas, se estas ia de videbla de super tie. DAVIN: Ĉu? ROB: Mi ne kredas ke estas going-- Furaĝo ĝi tuj kuros ekstere dekstre. DAVIN: Bone, do mi faros ĉi tiu. Kaj tiam vi nur metu ĝin sur la ekrano. [01:21:56] ROB: Bone. [01:21:57] DAVIN: vi volas esti mia skribisto? [01:21:58] ROB: Yeah. [01:21:58] DAVIN: Nice. OK, mi povas forviŝi ĉi? [01:22:02] Student: Yeah. [01:22:04] DAVIN: Tio estas tiel forta. (Kantisto) Vi faras kion vi faras. Kaj fari kion vi ne faras. Bone. [01:22:19] OK, se mi memoras ĝuste, en la kvizo la RandomInt estis kiel, OK, Mi tuj donos al vi du nombroj, kiel a kaj b. Mi volas ke vi donu al mi RandomInt inter tiuj nombroj. Do RandomInt tuj preni du numbers-- tiel RandomInt-- kaj estas tuj revenos al int. [01:22:41] Do kio estas la reveno valoro? Mi ĵus diris al vi. Int, dekstra? Kiel tiu, kaj tiam estas tuj prenos du ints. Do tuj prenos int a kaj int b, tiel. Do kio RandomInt estas tuj fari estas tio okazas reveni iu hazarda valoro en inter tiuj du valoroj. Do tuj estos granda ol, malpli ol b. Do mi kredas ke vi povas verŝajne supozas, ke a estas la pli malgranda de la du valoroj. Do se ni pritraktas hazardo, kia funkcio ni vidis, ke donas al ni hazarda aferojn? Student: Drand. DAVIN: Drand, ekzakte. Do vi tuj probable deziras uzi vian drand. Do vi povas diri int hazardo, kaj ni nur diru ĝi egalas 0 nun. Kaj ili estas ni tuj diru, OK, hazarda egaluloj drand 48. Kaj kion signifas ĉi reveni? Kion signifas ĉi tiu funkcio al vi? [01:23:43] Student: inter 0 kaj 1. [01:23:45] DAVIN: Yeah, inter 0 kaj 1. Do tuj be-- [01:23:48] ROB: Kaj ĉi is-- Furaĝo ni dirus al vi ĉi. Kiel vi povas uzi drand 48. Vi povas kontroli tion en la estinteco ekzameno. Sed ni volonte probable diros vin povas uzi drand 48, kiu resendas kaleŝego inter 0 kaj 1. [01:23:58] DAVIN: Jes, jes, mi estas sufiĉe sekura en la ekzameno diras vin probable deziras uzi drand, jes. Do tuj revenos iu valoro inter 0 kaj 1. Kaj tiam kia vi estas tuj volas fari? Nu, vi volas multobligi by-- atendu, mi pensas, ke estas tiel, bedaŭras. Mi apenaŭ faras tion. Mi ne scias. [01:24:19] Do b minus unu. Do kial b minus unu? Tiel diru drand donas reen oni int-- OK, mi nur faros la reston, tiom pli. Do kio does-- y estas b minus unu. Do diru ke drand donas reen La maksimuma valoro ĝi povus eble doni vin. Kio tiu tuj estos? Student: 1. [01:24:43] DAVIN: 1, dekstra? Do se tio estas 1, kaj vi multipliki ĝin per b minus unu, Nu, tio estas nur la diferenco inter minus A. Kaj se vi poste aldoni ke reven je a, kio estas kio? Ĝi estas esence b. Ĉu tio havas sencon? [01:24:57] Student: Jes. [01:24:59] DAVIN: Do se tiu estas la maksimuma taksas ĝi eble povus esti, ĝi tuj esti 1. Kaj tiam ĉi tiu estas nur la diferenco inter la du. Aldoni sur, do tiu estas tuj revenos hazarda. Kaj en la angulo kazo ke drand donas reen 1 hazardo simple esti efike b. Sed tio estas la maksimumo povas esti. Do se tio okazas al esti malpli ol ke, do ni diru ke lia kiel 0,9, tiel do 0,9 fojoj b minus oni tuj estos malpli ol la diferenco inter b minus unu. [01:25:33] Kaj tiam se vi aldonas ke sur a, tiam tio valoro estas tuj estos pli granda ol, ĉar vi aldonas ion sur gxi, sed tuj estos malpli ol b. Do vi tuj ricevos hazarda nombro, ĉar vi vokas drand. Kaj ke rand, ke hazarda nombro estas tuj estos ie en inter kaj b. Ĉu tio havas sencon? [01:25:50] ROB: Nur por meti ĝin en konkretajn numerojn, do Supozu ke ni volas pluki hazarda nombro inter 7 kaj 10. Do b minus unu estas nia atingo. Do tie estas gamo de tri numerojn ni volas elekti. Kaj tiam multipliki ke inter 0 kaj 1 1 se kiu tiam donas ni some-- Diru ke donas al ni 1,5. [01:26:07] Tiam 1.5, ni volas iri de 7 al 10. Do 1,5 plus 7 nin reen en niaj 7 al 10 gamo. Kaj tiam ni stokante ĝin interne entjero, do ĝi detranĉas sur 8. Kaj tiam ni simple reveni tion. Do b minus unu estas nia atingo. oni ŝanĝas ĝin al la nombroj ke ni volas ene de tiu gamo. Do inter 7 kaj 10, kaj poste ni povas reveni kion ni finos kun. [01:26:30] DAVIN: Yeah, agrabla. [01:26:32] ROB: Dankon. [01:26:34] DAVIN: Yeah, kio estas supre? [01:26:35] Lernanto: Ĉu ni ruli ĝin al ia ASCII eraroj kiam we're-- se drand estas reveninte kaleŝego [inaudible]. [01:26:42] ROB: Do ĝuste kiel Rob diris, pro hazardo ne estas int, tiel drand estos kaleŝego. Tiel kaj tiam multiplikas eksteren. Kaj vi eble akiri iom ia kaleŝego nombroj. Kaj tiam tuj detranĉi. [01:26:51] Student: OK. DAVIN: Yeah. ROB: Se la tradukilo estis averti vi pri, kiel, perdo de precizeco, nur ĵetis al int en tie kaj tiam ĝi estas bona. DAVIN: Jes? [01:27:02] Lernanto: Ĉu havas la sama probablo de prenanta, kiel, b aŭ [inaudible]? [01:27:08] ROB: Do is-- Mi reale wondering-- estas RandomInt supozis esti nombro de malpli ol b? Kiel, se estas inter 7 kaj 10, kiuj estas la eblojn? 7, 8 kaj 9, aŭ 7, 8, 9, 10? DAVIN: Mi forgesos. Sur la problemo set-- [01:27:19] ROB: Mi pensas, ke estas 7, 8, 9. [01:27:20] DAVIN: Ĝi specife diras onia inkluziva kaj ies ekskluziva. [01:27:22] ROB: Yeah. [01:27:23] DAVIN: Sed mi don't-- Mi not-- [01:27:23] ROB: Do mi opinias tiuj estas ne inkludita, en kiu kazo, tie estas egala probablo de 7, 8 kaj 9. Ne estas probablo de 10. DAVIN: Jes? Lernanto: Mi havas demandon. Ni volas difini funkcio Revenas ne unu valoro, sed tabelo. Do kio estus la sintakso post reveni? [01:27:41] DAVIN: OK, do tiam vi would-- post reveno? Do diru al vi klariginte tabelo ie tie supre. Tiam vi simple reveni la nomo de la tabelo. [01:27:49] Student: Bone, dankon. Tiam nur reveni kun a-- DAVIN: Ho atendos, tiom pardonpetas. La demando estis kiel vi revenos tabelo. [01:27:54] ROB: Kvankam ĝi ne povis esti tabelo deklaris sur la stako aŭ io simila. Ĝi devus esti io malloced, ĉar malloc Estas kiel vi ĉirkaŭiri aŭtomata memoro atribuo. [01:28:01] DAVIN: Jes. ROB: Kiel vi akiris ĉirkaŭ regiona medio. [01:28:09] DAVIN: Sed vi farus nur reveni lian name-- [01:28:11] Student: [inaudible] ĝi ne estas unu valoro, ekzemple, du nombroj, do [Inaudible]. [01:28:18] DAVIN: Vi ne povas reveni multnombraj nombro. Vi ne povas, kiel, return-- [01:28:20] Lernanto: Mi parolis pri redonado tabelo aŭ io simila. [01:28:23] DAVIN: Yeah, do la demando estas mi povas reveni multnombraj valoroj. Vi ne povas reveni multnombraj valoroj. Vi ne povas, kiel, resendas tiam reveni b aŭ io simila. Ĉar post via reveno, vi revenos el la funkcio. Kaj tiam la funkcio estas farita, kaj kiel Rob diris, estas sur la stako. [01:28:35] Do ĉiuj kiuj memoro nur ricevas revenis al la komputilo. Ĉio prenas forgesis, esence. Do se vi volas reveni multnombraj valoroj, vi devas reveni tabelo, Kaj la vojon vi faros tion, kio mallocing. Kaj tiam vi revenus x tiel. Esence, vi nur redonas la nomon. Kaj kiam vi revenos io tiamaniere, ke vi estas fakte ne redonante la valoro. [01:28:53] Do diru al vi stokitaj la valoroj en tabelo. Vi ne vere redoni tiujn valorojn. Kiel, se mi reiris al int, mi estas vere reveni kopiojn de la valoroj. Sed se mi revenos io tiamaniere, Mi revenos referenco al tiuj valoroj. Do mi revenis, esence, memoro adreso por la valoroj. Ĉu tio havas sencon? Student: Jes. DAVIN: Nice. Jes? [01:29:13] Student: Kiam vi estas uzante drand tien, vi devas meti srand antaŭ tio? [01:29:17] DAVIN: Ne, ne, mi ne opinias tiel. [01:29:20] ROB: Yeah, do vi devos diri ion pri srand? La defaŭlta vi neniam dirante srand ĉe ĉiuj estas nur faru srand de nulaj. Do drand sur lia propra volo laboro. Kaj ĝi aŭtomate idaro kun la nuna tempo, estas kio ĝi utilas. DAVIN: Jes? Lernanto: Ĉu vi [inaudible] kun la numeroj? DAVIN: Jes, vi povas. Student: Tiel vi povus diru, kiel, 4 fojoj 2. La afero estas, vi ne povas supozi tiam int estas kvar bajtoj. La only-- [01:29:51] DAVIN: mi volas diri, por la kvizo vi povas. [Rie] [01:29:54] ROB: Mm, ne. DAVIN: Jes, jes vi povas. Se oni demandas al vi, kiel granda estas int estas, Vi ne povas esti, same kiel kvar aŭ ok. ROB: Ho, do se la demando estas specife, kiel, se ĝi estas kodigo problemo, Vi devus diri grandeco de int. Se ĝi estas tabulo, aŭ diras kiom da bajtoj, vi ne devas plenigi en grandeco de ints. [01:30:08] Lernantoj: [rie] [01:30:18] DAVIN: Ĝuste, do kial estas grandeco de int grava tie? Tiel kiel, se ni iras al 32 bitoj Procesoro aŭ iel simile, tiam tuj estos kvar bajtoj. Sed sur kelkaj el la pli novaj ŝtofo, ĝi povus esti kio? Povus esti ok, dekstra? Do this-- se vi nur malfacile kodo kvar, tiam iuj maŝinoj, ĝi funkcios. Iuj maŝinoj, tio ne funkcios. Sed se sur la kvizon ni kiel kiom granda estas int? Metis kvar. ROB: Ĝuste. DAVIN: Yeah? Student: Do ĉar ni deklarante [Inaudible] ene de funkcio, ni metu 3 ene ol funkcio? Aŭ ni povas uzi ĝin ekstere? DAVIN: Vi povas uzi ĝin ekster tiu funkcio. Do li demandis senpage. [01:30:49] Student: Lose aŭtoveturejo de kie [inaudible]. [01:30:51] ROB: Oh, la libera ne happen-- tio estas parto de la magio de malloc estas ke vi ne limigita al loka amplekso. Vi havas plenan kontrolon super kiom longe via variabloj vivi. Do ni nomas malloc tie, ĝi povus esti tute sendependaj funkcio. Ĝi povus esti 10 horoj poste ke ni fine nomas libera. [01:31:08] DAVIN: Do ekzemple, kiel, paro semajnoj ekde nun, kiam vi finfine faru vian vortaro Speller psets, vi tuj havi iom funkcio kiu kreas tunoj de nodoj. Do vi mallocing tunoj de nodoj en tiu funkcio. Kaj poste en apartan funkcion, vi estas tuj volas liberigi ĉiujn tiujn nodojn. Do vi povas laŭvorte nur pasas al liberigi puntero, do memoro adreso por kio vi malloced. Kaj tio estos bone. Vi ne devas liberigi, kiel, en la sama funkcio. Jes? [01:31:30] Student: Do malloc variablo [inaudible] ekstere? Ĉu tio kion vi diras? DAVIN: Atendu, diras tion? Pardonu. [01:31:38] Student: Se malloc variablo povas esti libera ie en la kodo, tiam ili povas esti alirita ie en la kodo? Ĉu vi povas konservi ilin loka? [01:31:45] DAVIN: Ho, sxi demandis, kiel, la variablo, like-- [01:31:51] ROB: Do vi ankoraŭ bezonas havas ian aludon al malloc kantaroj de memoro. Do jen, ni revenis x. Student: Oh. ROB: Se ni ne revenis x tie, kaj tio estis nur malplena, tiam ni ne havus aliron al la puntero kiu malloced, kaj ĝin filtris memoro. [01:32:05] Student: OK. [01:32:06] DAVIN: Do kiel, diru vi havi tion, kiel, ĝuste ĉi tie. ROB: No. DAVIN: En mia ĉefa funkcio, mi ne povas simple nomas x kaj estu, kiel, nu bone, en tiu funkcio, mi faris tion. [01:32:14] ROB: Ĝuste. [01:32:14] DAVIN: Do mi tuj vokos x, kiel, ĉefa aŭ io simila. Vi ne povas fari tion. Vi tuj revenos ion. Sed kion vi intencas reveni? Vi tuj revenos memoro adreso. Kaj ĉar vi revenos memoro adreso, kiun povas aliri aliloke. Plu demandoj? Jes? [01:32:28] Lernanto: Ĉu la funkcio super esti ĉeko [inaudible]? [01:32:33] DAVIN: Kial mi ne bezonas fari tion? Student: [inaudible]. DAVIN: Ĉar vi estas Ne mallocing nenion. Do ĝi estas not-- yeah, estas ne kiel ĉenon s. Ĝi estas puntero ie. Ĉi tiuj estas nur valorojn. Student: OK. DAVIN: Yeah. Ion alian? ROB: Jes? Student: Sed kiam vi [inaudible]? [01:32:55] ROB: Do, por liveri al la memoro, ni dirus tie. Tiel x estas nia montrilon al la bloko de memoro. Ni liberigi ke puntero. Sed ni ne nepre faru ĝin tie. Ni povas fari ĝin ie. Sed vi nur nomas senpagaj iu kiu malloc revenas. Do malloc, tie, revenis kio estas stokita en x. Do ni povas nomi libera sur x. Ajna lastaj demandoj? [01:33:20] DAVIN: Ajna lastaj demandoj? Yeah? [01:33:22] Student: Pardonu, ĉu vi povas re-klarigi kial vi liberigus tien? Kial [inaudible]? [01:33:26] DAVIN: CXar cxi tie? [01:33:27] Student: Yeah, kiel dekstra post. DAVIN: Vi probable ne volas liberan tie. ROB: Vi probable ne. DAVIN: Yeah, tio ĉi farus nenion. Ĉi tio, kiel, krei memoro, fari aĵoj en ĝi, kaj tiam tuj forgesu pri tio, jes. [01:33:37] ROB: Sed ni agu, kiel, tien ial. Ni povus diri int stelo Y egalas reveno tabelo. Ĉu iuj aĵoj kun y, eble presi la enhavon. Kaj poste, fine, ni faris. Ni povas liberigi y. Student: [inaudible]. DAVIN: Ĉu mi rulumu malsupren? Dankon. ROB: Nice. [01:34:02] DAVIN: Bone, tio estas ĝi. ROB: Bone, vi bona. Bonŝancon. [01:34:05] DAVIN: Se vi havas demandojn, retposxtu nin. Bonŝancon.