[TÓNLIST spila] DAVID J. Malan: Þetta er eins og freshman málstofa í dag. OK. Svo mjög rigning út. Þetta hefur tilhneigingu til að gerast á miðvikudögum, en allt meira tækifæri fyrir spurningar í dag. Svo skulum byrja á í raun með myndinni í aðeins augnablik. En við munum byrja grandly eins og alltaf. Þetta er CS50, og þetta er endir 4. viku. Þannig að ef þú hefur einhvern tíma horft TV eða bíómynd þar það er sumir tölva sérfræðingar og lögreglu, eða FBI, eða einhver stofnun er að reyna að ná einhverjum Óvinur, vel, þú hefur líklega heyrt hugtakið "auka" þar sem tæknimaður einhvern veginn dularfullur dregur það inn óendanlega langt til að sjá glæpamenn sjálfsmynd eða leyfisveitandi diskur númer í jafnvel shimmer spegil eða Glint auga einhvers. Svo reyndar, við skulum taka a líta á nokkur slík atriði úr Hollywood. [Vídeó spilun] -OK, Nú skulum fá góða líta á þig. -Hold Það. Hlaupa að baka. -Bíddu aðeins. Fara rétt. -Það, Frysta það. -Full Skjár. -OK, Frysta það. -Tighten Upp á það, munt þú? -Vector Í á sem strákur að baka hjól. -Zoom Í hérna á þessum stað. -Með Réttum tækjum, myndin gæti verið stækkað og skerpt. -Hvað er þetta? -Það Er aukahlutur program. -Má Þú ljóst að upp eitthvað? -Ég veit það ekki. Skulum auka það. -Enhance Kafla A6. -Ég Auka smáatriði, and-- Ég held að það er nóg til að auka, gefa hana út skjánum mínum. -Ég Auka speglun í auga hennar. -Let Er keyrt þetta í gegnum vídeó aukahluti. -Edgar, Getur þú aukið þetta? -Bíddu. -Ég Verið að vinna á þessum íhugunar. Spegilmynd -Someone er. -Reflection. -Það Er spegilmynd af andliti mannsins. -The Spegilmynd. -Það Er spegilmynd. -Zoom Í á spegil. -Þú Getur séð spegilmynd. -Get Þú bæta ímynd hér? -Get Þú auka hann hérna? -Get Þú auka það? Hægt að auka það? -Get Við auka þetta? -Get Þú auka það? -Hold Á sekúndu, ég auka. -Zoom Í á dyrnar. -Times 10. -Zoom. -Flytja inn. -Meira. -Wait, Hætta. -Stop. -Pause Það. -Rotate Okkur 75 gráður um lóðrétta, vinsamlegast. -Stop. Fara aftur í hluta um dyrnar, aftur. -Got Til mynd eyki sem punktamynd? -Hey, Kannski við getum notað Pradeep Sen aðferð til að sjá inn um glugga. -Þetta Hugbúnaður er ástand af the list. -The Eigingildið sé slökkt. -Með Hægri Sambland af algorithm-- Tekið brotthvarf -Hann er reiknirit til næsta stig, og ég get notað þá til að auka þessa mynd. -Lock Á og stækka z-ásinn. -Enhance. -Enhance. -Enhance. -Freeze Og auka. [END spilun] DAVID J. Malan: Allt í lagi, svo Allir sem eru í raun orð. Þeir eru bara spenntur saman í leið sem er í raun ekki skynsamlegt. Og í raun, CS50 og námskeið like it hefur tilhneigingu til að eyðileggja mikið af sjónvarpi og kvikmyndum fyrir þig. Vegna þess að þegar þessir tölva sérfræðingur eru rattling burt skilmála og segja ímynda hluti eins eiginvigrar, og z-ás, og fjölda annarra reyndar meira tæknileg hugtök, þeir eru í raun bara stringing orð saman allt of oft. Er að einn af von okkar er að sem aukaverkun af námskeiðum eins og þetta, mun fleiri sem eru í heimurinn raunverulega vera fær til vega í og bara alltaf svo lítið haft áhrif á gæði og nákvæmni þessara kvikmynda? Í raun, við skulum taka a líta á veruleika. Svo er hér starfsfólk mynd af Mary, einn af félögum kennslu okkar. Og ætla að hún er grunur um eitthvað. Og enn, það er Glimmer sumir stykki af sönnunargagn í auga hennar, eða í spegilmynd af eyeglasses hennar. Jæja, ef við gerum nákvæmlega eins og kvikmyndir leggja, þar við zoom og "auka", þetta er hversu miklar upplýsingar er í andlit Maríu þegar þú tekur mynd með því upprunalegu upplausn. Og í raun er hægt að sjá þessar punkta. Og þetta er það sem er kallast punktar, P-I-X-E-L-S, sem er bara ferningur oftast það er punktur sem semur mynd. Og aftur í dag, og í raun jafnvel í dag með nokkrum af LED TVs dag eða LCD TVs, ef þú hefur fengið einn í herbergi eða heima, ef þú ferð upp frábær nálægt því, og sérstaklega ef það er nokkuð eldri TV, þú getur sennilega jafnvel sjá þessar punkta og það er það sem semja mynd. Og það er ekkert meira upplýsingar en þetta. Við gæti "auka", í þeim skilningi að jafna hlutina aftur og svoleiðis inferring konar, tegund af því litur ætti að vera við hliðina á auga Maríu þannig að það er í raun ekki svo Pixelated. En ef ég halda zooming í, þar er slæmur strákur í auga hennar. Svona er allt upplýsingar sem við höfum. Þú getur ekki búið til upplýsingar út af engu. Það er bara tímabundið fjölda bita þar. Svo í vanda sett 4, þar þú hefur tækifæri að spila með þessa tegund af heiminum. Í Heimadæmi 4, munt þú kanna heimur grafík og réttar, og í raun að skrifa kóðann að batna glataður myndir. Þú munt skrifa kóða sem vinnur núverandi myndir og að lokum skilja hvað er fara á undir hetta. Og það kemur í ljós, það er í raun ekki allt sem flókið. Til dæmis, ef við vildum tákna bros andlit hvar með þessum svörtu dílar, eða þessi svarta punkta, vel, gætum við einfaldlega tákna þá sem sannarlega punktamynd. Og ef þú hefðir einhvern tímann heyrt að tjáning punktamynd, kannski það byrjar nú að gera lítið meira vit í dag. Við vitum nú þegar hvað dálítið er. Það er 0 eða 1. Og kort er bara eitthvað eins og a stykki af pappír sem gefur þér leiðbeiningar og hefur kannski rist af x- og y-hnit. Svo hér er punktamynd. Það er kort af bitum þar a 1 er greinilega fara til að tákna hvítan pixla og 0 er að fara til að tákna svartan pixla. En við gátum vissulega Flip það í kring. Það skiptir ekki máli svo lengi sem við erum í samræmi. Og hér er hvernig, í binary-- inni af minni tölvu, eða jafnvel inni á skrá á harða þinn drive-- gastu geyma einföldustu broskalla andlit myndum. En hvað erum við, að sjálfsögðu, vantar í þessari mynd? Lit, ekki satt? Það er augljóst næsta skref eða aukahlutur til að bæta þetta með litinn. Svo því miður með bara einn bita, 0 eða 1, gætum við tákna litinn. Það gæti verið rauður eða blár, eða svartur eða hvítur eða grænn eða bleikur, eða einhverjar pör af litum. En fyrir sakir einfaldleika er, munum við bara ráð svart og hvítt. Svo hvað er rökrétt að gera við þurfum ef við langar að framkvæma lit í mynd? Hvað höfum við að gera? Eins og ef takmarkandi þáttur hér er að með einum bita getur þú aðeins tákna tvö ríki, 0 eða 1, hvítur eða svart, hvað viltu gera? Áhorfendur: Meira gögn. DAVID J. Malan: Fleiri bitar, já fleiri gögn, fleiri bitar. Og reyndar það er einmitt hvernig litmyndir eiga fulltrúa. Frekar en að nota einn hluti, a 0 eða 1 fyrir hvert punkta, hver punktur, þú notar bara margar. Kannski nota 8, kannski, fleiri almennt nota 24 og reyndar í vanda sett 4, verður þú að spila með skrá snið sem notar 24 bita yfirleitt. En flest ykkar eru sennilega þekki JPEG. Ef þú hefur einhvern tíma tekið mynd á símanum, eða hlaðið inn eða séð eitthvað á Facebook, eða Flickr, allir tala af ljósmynd-undirstaða websites, hefur þú sennilega séð JPEG mynd áður. Og það kemur í ljós, þetta er skrá snið við erum að fara að nota í pset 4, þar sem þú ert að fara að að batna myndir sem ég hef óvart eytt úr skemmd minniskort í myndavélinni, ef þú vilt. Og það kemur í ljós að jafnvel þótt JPEG er nokkuð sophisticated-- það er miklu flóknari en svarta og hvíta punkta við sáum áðan, vegna þess að það er reyndar ímynda reiknirit sem eru notuð til að þjappa a JPEG, svo að þú getur haft mjög gott, gæði mynd en með tiltölulega fáir bitar. Og við munum koma aftur til þjöppun fyrir löngu. Það kemur í ljós að fyrsta þrjú bæti JPEG image-- sama hvað þú hefur tekið mynd of-- eru gildi 255, 216, 255. Með öðrum orðum, ef þú bara sjá þessi mynstur bita, fulltrúa hér eins og þrír bytes, eða 24 bita samtals, með miklum líkum þú getur álykta að þú ert að horfa á það með þessum fyrstu þremur bytes á JPEG-sniði. Og þetta er það sem er þekkt sem áritun JPEG. A einhver fjöldi af skrá snið þarna tilhneigingu til að byrja með ákveðnum mynstrum 0s og 1s, þannig að Windows og Mac OS og IOS, og Android vita hvers konar skrá þau eru, til viðbótar við svokölluðu skrá eftirnafn að mikið af skrám hafa. Ef þú hefur .jpg, það er önnur vísbending við tölvuna. Svo skulum nú líta á þetta aðeins meira tæknilega. Við vitum við aukastaf Kerfið er 0 til 9. Við vitum tvöfaldur er 0 og 1. Og ef þú heldur aftur til pset 0, við höfðum þú glíma við, fyrir smá, eitthvað heitir sextánskur, þar sem þú þarft 16 tölustafir, í stað þess að 10 eða í stað 2. Og þeir tölunum, samkvæmt venju, eru 0 til 9 og síðan lítt, með f, þar sem f táknar það heiltala, bara eins og a fljótur geðheilbrigði athuga? Svo, 15. Og verður tákna 10, bara með því að eðli röðun sem ég hef gefið. Það er bara handahófskennt venju, en það er alveg staðlað. Þannig að ef við lítum á þetta mynstur þriggja bytes-- skulum bara byrja að horfa á það í samræmi við hvernig tölva vísindamenn almennt horfa á og hugsa um skrár. Þú getur vissulega hugsa um skrár í 0s og 1s, og aukastaf, en í raun, við hafa tilhneigingu til að nota tvöfaldur eða meira yfirleitt hexadecimal-- aftur frá pset 0. Svo láta mig leggja til að 255, 216, og 255 eru bara þessar mynstur 0s og 1s. Og þú getur athugað þetta ef þú langar að gera stærðfræði frá viku 0. En nú, bara ráð að þetta er örugglega rétt. Ég hef bara endurskrifa þremur aukastöfum númer sem þremur tvöfaldur gildum. Nú það sem ég ætla að gera er að bara bæta við nokkrum hvítt rúm, bara fyrir sakir sýnilegur er. Og takið eftir, ég ætla bara að fara að færa hlutina í sundur. Svo áður en, eftir, fyrir, eftir. Ég ætla að gera neitt áhugavert annað en bara að breiða það út svo að tilkynning hver hópur átta bitar er nú tvö sett af fjórum bitum. Þetta er gagnlegt vegna sextánskur er sérstaklega smart því að hver sextánskur stafa 0 gegnum F, eða nánar tiltekið 0 gegnum 15, hægt að koma fram með nákvæmlega fjórum bitum. Með öðrum orðum, í sextánskur ef þú langar til að tákna 0, það er bara 0000, fjögur núll. Og ef þú vilt að tákna 15, það er 1111, sem er fjórum bitum. Og ef þú gera stærðfræði, ef þetta er sjálfur stað, þetta er 16s staðurinn, það er að fara að gefa you-- frekar sem er að fara to-- miður, í tvöfaldur, það er að fara að gefa þér 15, sjálfur stað, twos Place, fjórum fótum og eights sæti. Svo láta mig leggja til að það setja af fjórum bitum til vinstri er það sem við erum að fara að hringja f. Það er stærsta númerið sem þú getur táknað með fjórum bitum. Og við vitum nú þegar frá sextánskur, f er stærsta stafa í sextánskur. Við höfum fengið annan f það, tvær þarna. Og nú, bara taka á trú sem ég hef gert stærðfræði rétt og að vinstri helminginn þessara bita, 1101, er það sama og d í sextánskur. Og hægri hönd, 1000, er bara 8. Og að sjá að einn er auðvelt, ekki satt? The 8 represents-- er rétt undir þeim Eights stað. Þannig að við höfum einn í Eights dálki og ekkert í fjórum fótum, twos eða sjálfur. Svo nú venjulega, hafa menn að skrifa sextánskur tölustafir eins og þetta, þú squish bara þá saman, og þá forskeytið þá með 0x. Það þýðir ekkert annað en sjón vísbending til human-- hér kemur sextánskur value-- því það gæti ekki annað verið augljós. Sem er að segja, að lokum, að mynstur núllum og sjálfur, eða mynstur sextánskur Tölunum equivalently að þú ert að fara að byrja að leita að í Heimadæmi 4 er this-- og Heimadæmi 4 sérstakur mun ganga þú í gegnum þetta í meiri detail-- en ljóst eins konar Arcane sem þetta gæti litið á fyrstu sýn, þú ert að fara að byrja að sjá þetta mikið. Og í raun, jafnvel í gdb er aflúsara við kynntum á mánudag og Dan kynnir í pset 3, er að fara að oft sýna þér sextánskur gildi bara vegna þess að þeir hafa tilhneigingu til að vera meira hefðbundin en aukastaf eða tvöfaldur í heiminum á tölvum. Nú skulum setja þetta í samhengi. Margir af þú might muna þetta mynd hér, sem kom frá hverju? Sýn, svo jafnvel fyrr en að Windows XP gerði þetta frumraun. Svo er þetta fallegt landslag. Og í raun, ef þú pota í kring online-- Ég held að það sé Wikipedia grein, þar sem að gekk mjög ótrúlega út fann þetta stað í heiminum að setja upp hans eða myndavél hennar í nákvæmlega rétta place-- og þetta í dag lítur like-- en það er nákvæmlega það sama stilling. Þessi mynd, þó, er í skrá snið heitir punktamynd, b-m-bls. Og við erum að fara að taka frábær fljótur litið á hvað það þýðir. En punktamynd er bara önnur leið að fulltrúar myndir enn að nota punkta í 0s og 1s, að lokum. En á því að kíkja, það hefur meira áhugavert undirskrift í upphafi skrárinnar. Það er ekki bara þrír bytes, heldur er það a heild búnt af mynstri bytes sem hafa fyrirfram ákveðið merkingu. Til dæmis, einhvers staðar í Fyrstu bytes punktamyndarhátt mynd er að fara að vera á stærð af the mynd, breidd myndarinnar, hæð myndinni, svo gagnlegur lýsigögn, ef þú vilt. Gagnlegar upplýsingar sem Photoshop eða einhver myndvinnsluforrit sem þú ert að nota gæti í raun sama um. Svo meira um þetta í Heimadæmi 4, en þetta er aðeins að segja að í lok dags allir skrá snið sem þú hefur verið að nota fyrir years-- Microsoft Word skrár, Tölur skrár, Excel skrá, allir tala af skrá snið sem gæti hafa sumir þekktur skrá eftirnafn eru bara 0s og 1s undir hetta. Og menn hafa ákveðið hvað samninga eru, hvað mynstur 0s og 1s tákna Word file móti Excel skrá, móti allir tala af öðrum skráarsniðum. Svo í pset 4, munt þú hafa óákveðinn greinir í ensku tækifæri til að spila með það. En hvað þýðir það að hafa strúktúr. Þetta er í raun gott segue nú í C, sem hefur aðeins nokkra af fleiri aðgerðir sem við höfum ekki litið á enn. Það er ansi lítið mál og einn af the ágætur lögun um C er struct. Til dæmis, ef þú vildi represent-- skulum segja að þú vildir hafa breytu sem táknar nemanda í eitthvað forrit. Kannski þú varst að skrifa námskeið skráning program, eða algerlega versla tól, eða eitthvað svoleiðis. Hvað eru stykki af gögnum sem tengjast að nemandi sem koma upp í hugann? Eins nemandi er fulltrúa með hvaða gildi? Já? Þú ert með nafn sem námsmanni. Hvað annað er a dæmigerður nemandi hafa? Áhorfendur: [inaudible] DAVID J. Malan: Svo, því miður. Áhorfendur: Age. DAVID J. Malan: An aldur eða afmæli equivalently, jebb. Hvað annað? Áhorfendur: kennitala? DAVID J. Malan: Svo er kennitala, kannski símanúmer, kannski dorm, eða hús, eða háskóli, eða eitthvað svoleiðis. Allir tala um stykki af gögnum sem þú gætir hafa á tengiliðalistanum þínum er það kannski skilgreina nemanda. Þannig að ef við vildum gera þetta, í kóða, við gætum gert eitthvað einfalt eins og þetta. Við gætum hafa a program svo sem hefur við skulum segja, int helstu (tóm). Og ef ég vil til að tákna nemandi Ég gæti hafa, til dæmis, a band heitir heiti fyrir þá nemendur, a band heitir dorm fyrir að nemandi, kannski int kallað skírteini fyrir þennan nemanda. Og vegna þess að ég er að nota band, ég þarf að fara til baka og setja upp cs50.h. Kannski er ég að fara að þurfa stdio.h. Svo láta mig gera preemptively þeim og ég er að fara að kalla þetta student.c nú og vista þetta. Og nú get ég gert eitthvað með þessum breytum. Og við erum bara að fara að skrifa að sem athugasemd í sauðakóda, vegna þess að það er ekki áhugavert það sem við gerum nú. OK, þannig að þetta er forrit sem einhvern veginn geymir nemanda. Hvað vil ég að gera ef ég vilt geyma tvo nemendur? Svo fyrst eðlishvöt mín er að fara að vera allt í lagi, bíddu í eina mínútu, ef ég hef annan nemanda af hverju ekki ég bara gera band nafn 2, string dorm 2, INT id2. Og við höfum gert farinn niður þennan veg áður og hvað var lausn okkar við því sem virðist að vera eins konar hackish Afrita Líma starf hér? Áhorfendur: An array. DAVID J. Malan: Já, við gætum notað fylki. Hægri þetta mjög fljótt verður ómeðfærilegur. Þú þarft að raða af geðþótta byrja nafngiftir öllum þessum breytum. Og þú, manna, að halda lag sem OK NAME2 samsvarar með dorm2 samsvarar id2. Það verður bara sóðaskapur. Svo það er mun auðveldara, muna frá fyrir nokkrum vikum síðan, bara að þurfa að kallast band nöfn og kannski gefa okkur þrjár af þeim. Og þá kannski við höfum band dorms og hafa þrír af þeim, eða saman við stöðugan, int ids og hafa þrjú þeirra. En jafnvel nú finnst þetta smá sloppy, ekki satt. Við erum að tala um nemendur og enn Ég er virkilega bústað á lágu stigi framkvæmd upplýsingar. Nemandinn er nafn og dorm og ID. Hvers vegna get ég ekki sagt bara breytu heitir nemandi og kalla það er. Og ef ég vil annan nemanda, hvers vegna get ég ekki kalla það bara ekki. Eða ef ég vil a heild búnt nemenda, hvers vegna ekki ég bara segja að ég hafa a heild flokk nemendur og það er þremur af þeim. Með öðrum orðum, af hverju get ég ekki komið upp með eigin gögn tegund mína, sem heitir Nemendur, inni sem er nafn, er ID, er dorm, er allir tala af öðrum sviðum. Og það kemur í ljós þig getur gert nákvæmlega það. Svo hefur C þessa eiginleika sem kallast struct. Það er tungumál eiginleiki sem gerir okkur kleift að gera einmitt þetta. Ég ætla að fara á undan og opna structs.h þar sem við erum að fara að sjá Eftirfarandi skilgreiningar á nemanda. Það kemur í ljós - og þetta er jafnvel einfaldara en einn sem felur í sér auðkenni í smá stund síðan. Ef þú vilt koma upp með heimabakað gögn tegund, og auk þess að int og viðarkol, og fljóta og allar þessar aðrir sem eru fyrir hendi, þú getur gert það með því að bókstaflega skrifa typedef strúktúr, þá sumir hrokkið axlabönd, inni sem þú listi breytur sem þú vilt tengja með þessum nýja sérsniðna gögnum skrifar eins og nafn og dorm, og þá eftir hrokkið axlabönd þú gefur upp nafn á nýja tegund gagna. Svo, til dæmis, nemandi. Og hvað er gott um þetta núna er að ef við skoðum sama kóða, venju, fyrsta af öllu, er að setja þetta í skrá sem kallast eitthvað punktur h, haus skrá, sem við höfum ekki byrjaði að nota okkur of mikið. En við erum að fara að byrja með töluvert núna. Og hvað við getum gert með það, lokum, í þessum fáu línum af kóða er lýsa nákvæmlega sem gögn gerð, nemandi. Og nú skulum við nota það. Ég ætla að nú fara í skrá sem heitir structs1.c. Og við skulum taka a líta á a Nokkrum einkenni hér. Svo er efni upp hér aðallega þekki, og við munum koma aftur til það er ekki þekki í bara smá stund. Þetta er auðvitað meðal mína eigin haus skrá, sem er ný og vel, nema pset 3 þar, muna, höfum við helpers.h. Svo þú might muna #include helpers.h. Hvers vegna þó ég noti þegar ég vitna í stað þess að horn sviga? Hvenær þarf ég að velja á milli þeirra? Næstum alltaf Ég virðist að nota horn sviga. Og þá, allt í einu á lína sex Ég er að nota gæsalappa. Hvers vegna gæti það verið? Já? Áhorfendur: [inaudible] DAVID J. Malan: Það er í raun, hvað? Áhorfendur: Það er í IDE þinn. DAVID J. Malan: Já, það er í raun IDE mínu. Og við skulum ekki búa á IDE, því það er bara tól sem ég nota. Það er í núverandi minn skrá, sérstaklega. Svo er structs.h eigin minn skrá ekki sett í IDE, í stýrikerfinu sjálfu, heldur er það í núverandi möppu mína. Svo samningur er ef þú vilt að fela eigin haus skrá, þú notar bara gæsalappa. Hvað gerum við köllum þetta í lína 8, almennt séð? Þetta er það? #define eitthvað. Þetta táknar fastar, ekki satt? Ef þú vilt hafa gildi í forritinu sem þú notar í heild fullt af tímum, það er gott venju að þáttur það út, lýsa því, með kjötkássa tákn skilgreina, þá samkvæmt venju, í öllum hástafi word-- þó það sé ekki nauðsynlegt, en það er mannlegt samningur að nýta Fastar svo að þeir stökkva út á þig visually-- pláss og þá gildi sem þú vilt vera jafngildir nafni þessi fasti er. Nei semíkommu, en þú einfaldlega fylgja því mynstri þar. Svo hvað er ég að gera í þessum raunverulegum kóða. Svo skulum taka a líta á the aðalæð program hér. Í línu 12 vegna þess að ég hafa ma structs.h, Ég hef nú dularfullur á minn förgun ný gögn gerð. Ég er ekki bara að hafa aðgang að int, og bleikju, og fljóta, og band, og blár og aðrir. Ég hef nú aðgang að nemandi gögn tegund. Svo í línu 12, ég er að sameina tvö ideas-- einn sérsniðin gögn gerð og tvö, að nota fylkingu. Og svo í þessari áætlun ef Ég vil í raun styðja þrjár mismunandi nemendur í áætlun mína, ég getum einfaldlega sagt gefa mér breytu kallast nemendur, sem hver um sig er gerð nemenda, sem er sérsniðin gögn tegund mína. Og, sérstaklega, gefa mér þrír af þeim í array minn. Svo nú hvað eigum við að gera í þessari áætlun? Hér er bara fyrir lykkja iterating frá 0 til 3, því það er hvaða gildi nemenda er. Ég ætla bara að vekur notandi gefa mér nafn nemandans. Og þá í línu 17, við hafa að mestu kunnugleg línu. Við höfum gamlan vin okkar Getstring á hægri. Og hvað stykki af setningafræði er greinilega ný, ef þú hefur aldrei forritað í C áður, og hafa aldrei notað structs? Já? Áhorfendur: The .name. DAVID J. Malan: The .name. En þetta er ekki of mikið af stökk, því nú nemendur krappi i gefur þér i-ta nemanda. Og ef þú vilt að kafa inni í því skipulagi, þú notar bara eitt tímabil og þá nafn breytu inni, eða eign inni sem þú vilt fá aðgang að. Á sama hátt þá, ef ég hvetja þá notandi, gefa mér dorm nemandans, þú getur álíka geymt sem band í dorm breytu inni þeirrar nemenda uppbyggingu. Og nú hlutirnir fá smá ímynda. Og þetta er að fara að horfa á kannski fullt alveg strax. En þú munt sjá þetta miklu meira í pset 4, svo við skulum bara litið á það núna. Það kemur í ljós að í línu 23 gegnum 38, hvað finnst þér ég kannski að gera? Ég hef eytt athugasemdir í dag, en þá útgáfu af kóða á netinu fyrir Vitnað hefur allar athugasemdir. Hvað á ég að virðast vera að gera? Áhorfendur: Saving skrá með öllum þær upplýsingar sem notandinn slær inn. DAVID J. Malan: Já, nákvæmlega, þetta er ný leið sem við erum að sjá tvo, Annar lögun af C, þar sem ég get búið til mínar eigin skrár. Svona langt, nánast hvert forrit þú hefur skrifað er án ríkisfangs. Um leið og það er gert í gangi, það er það. Það er ekkert minni eða recollection af því. Það er engin skrá vistuð. En ef þú vilt að vista inntak sem hefur gerðist, eins og í leik eða forrit svona, það kemur í ljós að við getum gert það. Og þú munt sjá þetta meira í pset 4 og í kafla. En þessi lína 23 í meginatriðum býr til skrá sem heitir students.csv. Og þú gætir hafa séð þetta áður. Jafnvel ef þú hefur aldrei rannsakað CS áður, CSV er comma aðskilin breytur. Það er eins og a mjög fátækur maður er útgáfa af Excel skrá, sem þýðir að það gæti verið opnuð í Excel og í Apple Numbers, og það hefur raðir og dálka. En það er ekki sér- snið eins og Microsoft eða Apple. Það er bara kommum að aðgreina gildi sem við munum sjá í smá stund. Og bara taka giska. Í samræmi 23, í mjög enda, annar rök mín að þessu nýja aðgerð sem kallast F opinn fyrir Opna skrá er m. Hvað gæti W tákna? Já? Áhorfendur: Það leyfir þér að skrifa í skrána? DAVID J. Malan: Það leyfir þú skrifar í skrá. Svo er það a par af afbrigði að við getum stinga hérna. En ef þú vilt bara að lesa skrá, sem er að líta á það og lesa það í minni, þér bara nota vitna unquote "r". Ef þú vilt skrifa til skrá, þú nota tilvitnun unquote "w". Það er líka auka við og a par af öðrum hlutum ef þú vilt breyta núverandi skrá. Nú erum við að fara að halda að sjá þetta hlutur, þá munum við koma aftur til að stilla 24. NULL, það kemur í ljós, er sérstakt gildi sem er hægt að skila með tilteknum aðgerðum ef eitthvað hefur farið wrong-- ef skráin er ekki til, ef þú hefur keyrt út af minni, eða fullt af öðrum villum. En nú, við skulum gera ráð fyrir bara að þetta er bara venjulegur villuprófun. Hér í línu 26, ég er að iterating frá 0 til 3 yfir alla nemendur mína. Og þetta er góður af eins konar nýs virka, fprintf, en bara taka giska. Ef printf er bara prenta a sniðinn band, hvað þýðir fprintf meina sennilega? Áhorfendur: Prenta í skrá. DAVID J. Malan: Prentaðu sniðinn band í skrá. Það er það sem viðbótar F leið er skrá. Og nýja fyrsta rifrildi er að vera breytan sem táknar skrá. Þá höfum við bara snið string bara eins printf. Og jafnvel þótt það setningafræði er nýtt, þetta er bara þýðir stinga í nafni nemanda, stinga í nemanda dorm, og þá með fclose, loka skrá. Og þá lastly-- þetta er nýtt og við munum koma aftur til þessa áður long-- ég losað nemandi ástæðum sem gerðist upp hér að ofan þar. En við munum koma aftur til að áður en long-- það er vegna þess hversu GetString er í raun að vinna undir hetta. Svo skulum taka a fljótur líta hér. Ef ég tegund LS í möppuna mína, eftir því að ég er ekki hafa skrá sem heitir students.csv, bara ekki þarna, er ekki til. Svo ef ég safna saman nú þetta forrit, gera structs-1,. / structs-1, og ég ætla að fara á undan og tegund í Andi, sem býr í Berkeley í Yale. Við erum að fara að hafa Rob sem býr í Thayer þessa dagana. Og við skulum koma upp með þar er, held ég, Maria er í Mather, ef ég hefi minnst á réttan hátt. Svo ekkert virðist gerast. En ef ég tegund LS nú, það er students.csv. Við skulum fara á undan og opna students.csv. Þetta er aftur mjög léttur skráarsnið. En ég hef einfaldlega samþykkti samninginn að ég hef tvær raðir og dálka hér. Fyrsti dálkurinn er Fyrstu mannanöfnum. Annar dálkurinn er nemandi er dorm, eða háskóli, eða hús, eða whatnot. Og nú hef ég vistað þetta varanlega í skrá. Svo það er ekki allt sem áhugavert. En þetta er bara stepping steinn nú að vera fær um að hverfa upplýsingar varanlega. Svo skulum nú sjá hvað meira getum við gera með þessum og öðrum aðgerðum. En fyrst, einhverjar spurningar? Það var mikið, og það var hratt. En þú munt sjá mikið meira í pset 4 svæðinu, jafnframt. Já? Áhorfendur: Er there a vegur til að halda áfram að bæta nöfnum við þessi skrá? DAVID J. Malan: Góð spurning. Er there a vegur til að halda áfram bæta nöfnum við þessi skrá? Já. Og í raun, ef þú endar upp með tilvísun til-að opna skrána, þú myndir nota tilvitnun unquote "a" fyrir auka, sem vildi bara bæta við nýrri línu, a Ný lína aftur og aftur, einmitt. Góð spurning. Aðrar spurningar? Já? Áhorfendur: Ef þú hleypur í program aftur núna, myndi það halda að bæta nöfnum á skrá eða myndi það opna nýja skrá? DAVID J. Malan: Ah, góð spurning. Ef þú hleypur forritið aftur rétt nú, kannski slegið í nýjum nöfnum, myndi það bæta við skrá eða skrifa yfir skrána? Síðarnefndu, því ég er ekki nota auka ham. Og vegna þess að ég er bara í blindni opna skrána til að skrifa, það er bara að fara að skrifa yfir skrána. Þannig að ég myndi örugglega þurfa að gera er bæta, ef ég vil í raun og veru hafa langtíma gagnagrunnur. Nú er CSV gagnlegt, hreinskilnislega, jafnvel fyrir eins og ef þú ert writing-- og við munum að lokum sjá þetta síðar í önn þegar við notum CSVs í öðrum tilgangi. Ef þú vilt geyma allt fólkið sem hafa skráð sig til að tiltekinn atburður eða skráð sig fyrir nemendur þína hópur, eða eitthvað svoleiðis, geyma gögn í þessari tegund af snið er frábær þægilegur. Því bókstaflega, ef ég voru að sækja þessa skrá. Ég gæti double-- og við skulum reyna raun þetta ef ég hef Excel eða Numbers hér. Ég ætla að hægrismella eða stjórn-smella skrá minn. Úpps. Hægri-smelltu eða stjórna smellur skrá minn. Koma á, mús minn er ekki í samstarfi. Download-- Ég ætla að sækja allar skrár hér svo bara svo ég geti grípa þetta einn. Og við skulum sjá hvort þetta virkar students.csv-- fyrsta skipti Ég hef virkur. Nú þeir vilja sjá tengiliði mína. Nú þarf ég að skrá sig. Sjá hversu auðvelt það er að nota CSVs? Já, halda það upp til dagsetning. OK, nú erum við tilbúin fyrir bekknum. OK, ó, hvað er nýtt? OK, nálægt. Það var töfrandi. OK, nú verðum við að uppfæra. Og nú, gleymdi það hvað skrá I upphaflega opnaði, en hvað a-- það sem við förum. OK, svo nú höfum við Excel skrá. Þakka þér fyrir. OK, svo það sem ég gerði var auðvelt að hluta. Auðvitað hefði ég getað fyrirfram uppsett Excel, eða Numbers, eða hvað program. En þetta er gott, vegna þess að nú get ég vinna gögn í stöðluðu sniði. Samhengi Svo nú skulum skipta yfir þar sem við var horfið síðasta sinn, sem var að byrja að taka burt þjálfun hjól. En fyrst, þú gerðir ekki sjá þetta fyrr hádegismat er aftur að gerast hér á eld og Ís í Cambridge, Sítar í New Haven. Skráðu þig á CS50s vefsvæði ASAP til að taka þátt CS50 nemendur og starfsfólk. Svo tókum þjálfun hjól burt á mánudaginn eins follows-- strengur hefur verið lýst í CS50s bókasafn í nokkurn tíma. Og það er gott, því það gerir okkur til að tala um breytur eins og að vera heill orð og setningar og fleira. En það kemur í ljós band er ekki til. Það er bara samheiti, eða alias, sem við höfum búið til fyrir eitthvað sem reyndar er svolítið meira tæknilega kallast bleikju *. Og reyndar, við sáum dæmi af áætlun á mánudag sem ekki hegða sér alveg eins og við bjuggumst við. Þetta var skrá, bera saman-0. Og muna að bera saman-0, ef Ég laun áætlun Mánudagur og hlaupa saman-0 og slá í mömmu í lágstafir, og mamma með lágstöfum aftur. The program krafðist I slá mismunandi hluti, jafnvel þótt mamma, allt í lágstafir, er eins sjónrænt. Svo það var stutt svar fyrir því hvers vegna tölvan hugsar þessir tveir strengir eru öðruvísi? Já? Áhorfendur: [inaudible] DAVID J. Malan: Hægri. Svo, mamma, í fyrsta sinn Ég slegið það inn í, er að vera geymdar einhvers staðar í tölvunni er mín minni en á öðrum stað en í annað sinn sem ég tegund í mömmu. Nú það vissulega gæti verið fullmótaðar. Tölvan gæti verið klár og gera sér grein fyrir þessum tveimur strengi, hey, þeir eru eins. Ég get ekki redundantly geyma það. En tölvur gera það ekki hagræðingu nema þú segir þeim að. Svo, við vanræksla, þeir bara að fara að enda í tveimur mismunandi stöðum í minni. Og svo til að vera skýrari, þegar við saman tvo strengi, Sú fyrsta var kallað s, annað var kallaður t, hvað sérstaklega var ég bera hér á línu 13? Já. Áhorfendur: Það er staður í minni að breyta vilja benda á. DAVID J. Malan: Einmitt, ég var bera saman stað í minni að þeir breytur bent til. Svo sérstaklega ef mamma var bæti númer 1, og 2, og 3, og 4-- vegna muna sviga 0 þarf að vera alla leið á endanum. Og hinn dæmi um mömmu, m-o-m, var á netfangið 10, 11, 12, og 13. Ég var að bera saman 1, sem heimilisfang, sem staðsetningu í minni, gegn 10, sem er augljóslega ekki það sama. 1 er ekki 10. Svo er þetta ágætur í því það er nokkuð augljóst. En það er erfitt að því leyti sem við getum ekki virðast til að bera saman strengi. Svo fundamentally-- og á þessum lágu stigi, ef þú vildir að innleiða forrit til að bera saman tvö aðskilin orð að notandinn hefur slegið í fyrir gæði, gera þeir stilla upp bleikju í bleikju, bara í almennum skilmálum, hvað þurfum við að gera, virðist? Það er ekki nóg bara að líta á þessum tveimur heimilisföng. Hvað þurfum við að gera? Já? Áhorfendur: Iterate gegnum band [inaudible]. DAVID J. Malan: Já, við skulum iterate gegnum streng. Notum fyrir lykkju, while lykkju, eða hvað sem þú ert þægilegur með. Og ef við höfum fengið tvo strengi einhvers staðar í minni, við skulum líta á hvert áratugnum Fyrsti stafurinn, þá er hvert annað eðli, þá þriðju og fjórðu, og fimmta, þar til við högg hvað sérstakt Sentinel gildi? Áhorfendur: [inaudible] DAVID J. Malan: Já, sviga núll, á hver benda annaðhvort band við getum ákveðið það er það. Höfum við samþykkt hvert einasta staf? Ef ekki, return false. Ef svo er, aftur satt. Og svo er það einmitt það sem þessi útgáfa áætlunarinnar bera-1.c gerir. Það er eins og það sem við horfði á mánudaginn nema að ég hef fengið losa af orðinu string-- þó sem hefur enga virkni impact-- allt Ég er að gera núna er að fjarlægja sumir sjón hjól þjálfun, en að sjá greinilega að s og t er viðtakandi. Og það er það sem stjarnan, Stjarnan, táknar er heimilisfang, annars þekkt meira tæknilega sem bendill. Svo þegar ég lýsi s á lína 9 og segja char * s, það þýðir ekki að gefa mér streng. Það þýðir að gefa mér breytu sem lét tilgangur í lífinu er að geyma ávarp. Vegna þess að ég er að fara að setja heimilisfang streng inn í það. Og reyndar, GetString, að vera ljóst, ekki aftur a band. Það hverfur ekki aftur mömmu sviga núll, í sjálfu sér. Hvað þýðir getstring sérstaklega og nákvæmlega aftur? Áhorfendur: [inaudible] DAVID J. Malan: An heimilisfang, heimilisfang fyrsta staf í sumum band það hefur fengið. Og svo nú erum við að sjá sérstakt leitarorð aftur. Og ég benti á þetta fyrr. Þetta er að fara að vera góður samningur að við munum sjá aftur og aftur nú. Ég stöðva til að tryggja að s er ekki null og t er ekki null. Vegna miðað Mitt raunverulega fljótur minnst fyrr, hvað gæti þýtt ef GetString skilar ekki verið heimilisfang en N-U-L-L, sem er aftur, sumir sérstakur gildi? Áhorfendur: Villa. DAVID J. Malan: Það er villa. Eitthvað fór úrskeiðis. Og hvað oftast gæti gerst, sérstaklega með strings-- sem gæti verið Óþekkt lengd í advance-- Kannski tölvur ' út af minni, kannski þú gafst í slíkum lengi orð eða setningu eða límt svo mikið ritgerð það er bara ekki nóg minni. Og svo GetString ekki aftur heimilisfangið af the heild hlutur, svo það skilar bara ekkert. Og það segir villu hefur gerst með því að endurgreiða sérstaka NULL gildi. Það er núll netfang, svo að segja. Nú kemur í ljós kemur C með fall sem gerir það endurtekning. Við þurfum ekki að framkvæma þetta með fyrir lykkju eða while lykkju sjálf. Við getum notað virka, heitir succinctly, hrærið samningur, eða band saman, sem Tilgangur lífsins er að gera einmitt það. Þú gefur það tvær ábendingum tvö heimilisföng, og það mun fara til þeirra heimilisföng og þá bera saman bréf til bréf fyrir bréf fyrir gæði, hætt þegar það er satt? Þegar innsæi ætti hrærið samningur hætta iterating, bara til að vera ljóst? Þegar það hits sviga 0 í annaðhvort band, á hver benda hann getur ákveðið hefur allt samþykkt, eða hefur það verið misræmi? Svo, ef við keyra þetta núna og reyna litla hástafi leikur okkar, svo gera saman-1, ./compare-1, og slá mömmu í lágstöfum í bæði skiptin. Nú er það sama. Og ef ég geri það aftur með lágstafir og þá kannski hástafir. Nú greinir það örugglega milli efri og lágstafir. Svo ekki allt sem erfitt eða töfrum, en það þýðir nú að útskýra hvað er að gerast undir hetta. Svo hvað meira getum við útdrátt af þessu tagi lexíu? Svo skulum taka a líta á þetta. Ég ætla að fara á undan og skrifa fljótur program hér kallað afrita 0. Og nú skulum fara á undan og í raun við skulum gera this-- með afrit-0, taka a líta á það sem ég hef fengið hér. Ég segi fyrst notanda, segja eitthvað. Þá fæ ég band og ég geyma það í s. Þá er ég að athuga hvort s jafngildir jafngildir NULL, bara skila 1. Svo er þetta bara staðall villuprófun. Ekkert áhugavert hefur gerst. Og í raun, ef við losna við villa stöðva, þetta lítur út eins viku 1 kóða í augnablikinu. En ég er farinn að fá lítið betur um það. Nú í samræmi 16, viku síðan, kannski jafnvel nokkra daga eða mínútur síðan, þú gætir sagt lína 16 er búa til breytu sem heitir t og afritun s inn í það. Og það er fullkomlega sanngjarnt takeaway. En vera nákvæmari núna. Hvað er að gerast í takt 16? Hvað er að fá afrituð frá hægri til vinstri? Já? Áhorfendur: Er ekki að fá veffang s? DAVID J. Malan: Einmitt, t er að fá veffang s. Svo til að vera ljóst núna, ef ég fer aftur til fyrri tíma td og ég draga út sem ég hef slegið inn. Og það sem ég hef slegið in-- hér er s, og hér er það sem ég hef slegið í somewhere í minni, mamma og þá sviga 0 sem er bætt við fyrir mig. Það sem ég geymt hér, muna, þetta er á stað 1, 2, 3, 4, þetta er það sem er efst á baugi í s. Svo ef á línu 16, segi ég gefa mér annar breytu sem heitir T og geyma í á verðmæti s, hvað fær geymd hér mun ekki mamma heldur bara númer 1. Þannig að ef við horfum fram í þessari áætlun nú, hvað er að fara að gerast? Svo eftir að það er þessi aðgerð þú gætir hef notað þetta fyrir nokkru fyrir keisaranum, eða Vigenère, eða kannski ekki. Ég kröfu með printf minn, ég er að fara að nýta afrita t. Fyrst í línu 19, fljótur geðheilsu athuga, strlen athugunum lengd t. Vegna þess að ég vil ekki að reyna að nýta eitthvað ef það er engin band þar. Ef notandinn lenti bara inn, það er ekkert að nýta. Svo ég vil ekki að gera línu 21. Svo lína 21 er hagnast sem bréf, virðist, í t? Áhorfendur: m? DAVID J. Malan: Það lítur eins og það er afritun hver einn? Áhorfendur: m. DAVID J. Malan: Uh, m. OK, þannig að fyrsta m, vegna fyrirvara sem ég er brottför til toupper, sem ef þú hefur aldrei séð það að það er bara aðgerð til nýta sem inntak hennar. T krappi núll þýðir að gefa mér núll eðli t. Og svo er hvernig þetta mynd breyting, að vera ljóst? Hvað þarf til að endurskrifa eða breytt með tilliti til s og t og mamma sviga núll. Áhorfendur: [inaudible] DAVID J. Malan: Já, svo þetta hér einfaldlega þarf að fá breytt to-- festa this-- þarf að fá breytt í höfuðborg m. En nú líta síðar í program, ef ég prenta út s og t eins og ég hreinsa hér horfa á það sem er að fara að gerast að prenta út s og t. Svo gera afrita 0, ./copy-0. Leyfðu mér að fara á undan og sláðu í mömmu í öllum lágstöfum. Takið bæði frumleg og afrit hafa verið eignfærðar. Hvers vegna? Jæja, s og t eru bæði bendir til, ef þú vilt, sama klumpur af minni. Og hreinskilnislega, þetta er að fá virkilega uninteresting-- því sem við erum að nota netfangalistann núll hér. Ég meina, ég er ekki alveg sama þar sem efni er í minni. Sorry ég er að hreinsa aðeins of mikið. En ég er ekki alveg sama þar sem hlutirnir eru í minni. Og svo, örugglega það forritari hafa tilhneigingu til að hugsa um er að þegar þú talar um heimilisfang, eða bendi, Hverjum er ekki sama hvar það er í minni. Mér er alveg sama hvort það er á bæti einum eða einn milljarð. Ég hugsa bara að þetta breyta er í raun benda á þeim klumpur af minni. Og svo, héðan í frá, frekar en quibble yfir handahófskennt heimilisföng minni, við skulum bara byrja að teikna ábendingum eins ábendingum, sem örvar. Svo hvað s og t eru í raun, samkvæmt þessari áætlun, vegna þess hvernig ég búin t, það er bara tvö aðskilin breytur benda á sama klumpur af minni. Og við gerum ekki sama hvar þeir eru. Þannig að við getum ágrip burtu að smáatriðum. Svo hvernig laga ég þetta? Ef ég vil skrifa útgáfu af afrita forrit sem raunverulega eintök strenginn og capitalizes aðeins afrita, bara innsæi, hvað er got að vera efni til að lausn okkar? Áhorfendur: [inaudible] DAVID J. Malan: Við þurfum a hvað? Áhorfendur: klumpur af minni. DAVID J. Malan: Við þurfum annar klumpur af minni, ekki satt? Við vitum ekki hvernig á að gera það enn, endilega. En ég þarf svona að þetta gerist svo að upprunalega mamma með lágstöfum endar í því að auka klumpur af minni. Og svo þegar ég breyti afrit, ég vil ekki að breyta þessum eintak hér. Ég vil í staðinn að breyta aðeins þetta Afrita þannig að upprunalega er óbreytt. Svo, við skulum sjá hvernig við getum gert þetta. In afrita 1, sem hefur nú þegar verið sviptur athugasemd, en er athugasemd netinu. Við gerum í staðinn following-- þetta línur eru eins, fá mér band og kalla það er. En nú skulum líta á einn af okkar flókið en síðasta flókið um hríð, lína 16 er einmitt þetta. Svo ef notalega þinn með mynd við drew-- bara gefa mér nýja klumpur af minni, afrita allt í það, við skulum sjá hvernig við þýða það að kóða. Svo línu 16, á vinstri hönd hlið, char * T gefur mér þennan reit hérna. Það er allt það gerir. Á hægri hönd hlið, m Alloc eða malloc, er minni úthlutun, frábær ímynda sér, a dulinn leið bara að segja gefa mér klumpur af minni. Hversu mikið minni þurfum við? Jæja, er góður af a stór tjáningu. En við skulum sjá hvað það segir hér. Þannig að þetta er auðvitað, er að gefa mér band lengd s. Svo, mamma það ætti að vera það? Svo bara þrír, ekki satt? mamma er þrír stafir. Þú telja ekki sviga núll þegar þér tala um lengd streng það er reyndar manna sýnileg bréf. Svo mamma, svo gefur þetta mér 3. En bíddu í eina mínútu, ég er nú að bæta 1. Af hverju vil ég í raun að úthluta 4 bæti og ekki bara 3? Já? Áhorfendur: Fyrir Sentinel gildi? DAVID J. Malan: Einmitt, fyrir þessi Sentinel gildi. Fyrir sviga núll, Ég þarf 4 bytes samtals. Þannig að ég þarf lengd strengsins plús 1. Og þá bara fyrir gott measure-- jafnvel þó á þessu kerfi, það er alltaf að fara að vera 1-- ég er að segja margfalda þetta með stærð bleikju. Skrúfjárn út sizeof er rekstraraðili í C sem bara segir þér að fjölda bytes sem er þarf í ákveðinn gögn tegund. Það virkar ekki fyrir fylki, oftast, stundum er það. En í almennu máli, nr. En það verður að segja mér hversu margir bæti a bleikju er, sem kemur í ljós er alltaf 1. Svo er þetta eins og að margfalda með 1. Svo frábær dulinn leita lína af kóða. En allt það gerir er gefur mér klumpur af minni. En þýðir það virðist vera afritun nokkuð inn í þessi minni? Ekki enn. Og svo hvað ég á línu 22, og 23, 24, 25, vel, ég einfaldlega þetta. Og þetta er tegund af gamla skólanum efni núna. Þetta er eins og pset 2, þar þú ert bara að færa það um í minni, eða öllu heldur í strengi. Þannig að ég ætla iterating frá 0 til lengd band s. Og ég er að afrita i-ta staf í s í i-ta staf í t. Og vegna þess að ég er forritari, gerði viss um að úthluta nákvæmlega eins mörg bæti og ég þarf, það er fullkominn einn-á-mann tengsl. Og ég afrita mömmu í lágstafir til the nýr einn. Og þá loks, ég þessa línu. Og svo er áhrif aðeins að nýta þessa t hér. Svo mikið til að gleypa, en ef þú telur bara hvað er raunverulega að gerast á undir hetta er bara að færa þetta bæti í kring, allt sem er þörf til að leysa þetta vandamál er bara til að gefa okkur þetta klumpur af minni. Nú á hættu á yfirþyrmandi, láttu mig sýna eitt annað dæmi sem er nánast eins nema þessi lína af kóða. Svo er þetta tölvusnápur útgáfa þessarar áætlunar, ef þú vilt. En við skulum drjúpa bara það í hvað er að gerast. Línu 24 er notað til að vera þetta ekki krappi ég fær s krappi i. Nú er ég að breyta þessu til miklu meira dulinn stjörnu T plús 1 er stjarna s auk 1. Svo hvað er að gerast og hvers vegna höfum við stjörnuleik karakter? Við höfum séð stjörnuna áður, og það er verið að nota á annan hátt hér. Við sáum áður char *, nú er ég að sjá A Star í upphafi, og það er allt í lagi. Vegna þess að það kemur í ljós vér getur konar álykta bara frá þeim fyrst meginreglur hvað er að gerast. Svo bara að vera skýr, það er s? Síðustu viku, var það band. Það dugar ekki lengur. Hvað er S, sérstaklega? Áhorfendur: [inaudible] DAVID J. Malan: Það er bendi. Það er heimilisfangið af Fyrsti stafurinn við slegið í. OK, hvað er t? Áhorfendur: [inaudible] DAVID J. Malan: The heimilisfang fyrsta bæti í t, að klumpur af minni endurúthlutað. Svo kemur í ljós að þegar við iterate frá 0 á allt að streng length-- fyrst af öllu, ég byrjar á 0, vegna af þessu gamla skóla fyrir lykkja hlutur. Svo bara fyrir einfaldleika, við skulum gera ráð fyrir að fyrstu línu af kóða er í raun bara þetta, ekki satt. Ef ég er núll, bæta núll eitthvað væntanlega er ekki að fara að hafa áhrif. Svo er það þetta orðatiltæki? Það kemur í ljós að stjörnunni rekstraraðila í þessu samhengi er dereference rekstraraðila, sem er bara fínt leið til að segja að fara á eftirfarandi heimilisfang. Svo ef s er heimilisfang fyrsta karakter í þessu klumpur af minni, * S þýðir að fara þangað. Og vegna þess að við höfum dregið myndin á þennan hátt, þú getur samþykkja Eftirfarandi andlega fyrirmynd. Ef þetta er s, og þú segir * s, * s svona eins og Chutes og stigar, ef þú manst leikinn frá barnæsku, er eins fylgja því örina og fara á netfangið. * t er sama. Svo byrja hér, fara til klumpur þess. Ég get ekki bara draga á þessi skjár þannig. * T þýðir að fara hér. Og þá, er til hliðar er bara sagði að færa þennan staf hér, færa þessa persónu hér, færa þetta staf hér. En hvernig á ég að gera það incrementation? Ég þarf að losa það sem ég eyddi bara. Þetta er það sem er almennt kallað bendillinn tölur, sem þýðir stærðfræði með heimilisföng. Ef, í þetta fyrir lykkju, Ég að halda áfram incrementing i, og s er heimilisfang og t er heil netfang, ef ég halda bara að bæta 1, það bara þýðir að halda áfram, og áfram, og áfram í minni. Það er eins og Oxford Street, götu að CS bygging er á. CS byggingar er 33 Oxford Street. Þannig að ef þú varst að gera 33 Oxford Street plús 1, sem færir þér 34 Oxford Street, þá 35 Oxford Street, þá 36 Oxford Street, hvað þá byggingar eru í raun - ef þeir eru fyrir hendi. Og svo, það er allt sem við erum að gera hér með músina tölur. Svo það er frábær yfirnáttúrulegt leið tjá okkur. En allt sem er að gerast undir hetta er bara eftir þessar tölur eins og eftirfarandi kort, ef þú vilt, eða eftir örvarnar eins við höfum dregið á skjánum. OK, mikið að melta. Einhverjar spurningar um setningafræði, hugtök, ábendingum, malloc, eða þess háttar. Já, hérna fyrst. Áhorfendur: Svo þar sem segir * T jafngildir toupper * t, er að fara að nýta allir stafir eða just-- DAVID J. Malan: Ah, mjög góð spurning. Svo í þessari línu hér, 31, er þetta að fara að nýta fyrsti stafurinn eða allar stafina. Svo skulum svara því með því að fara aftur til fyrstu meginreglum. Og fyrstu meginreglum hér ég meina bara fara til helstu skilgreiningar um hvað er að ræða. Svo er toupper fall sem capitalizes char. Það er allt og sumt. * T þýðir að fara til first-- fara á heimilisfang í t. Svo, í myndinni, ef þetta er klumpur minni við úthlutað með malloc, og þetta er t, * T þýðir að fara hér. Á sama tíma, þú ert liggur að verðmæti, lágstafir m að toupper, ætlar þú að fá til baka höfuðborg M, hvar ert þú að setja það? Þú ert að setja það í sama stað. Og svo eftir að rökfræði þeirra helstu skilgreiningar það er bara hagnast fyrsta stafinn nema þú iterate með I eða fyrir lykkju eða while lykkju, það er ekki að fara að gera neitt meira en að spyrja hana. Góð spurning. Já? Áhorfendur: Hvers vegna gerðir þú að nota dereference aðferð frekar en array? DAVID J. Malan: Ah, góð spurning. Hvers vegna vildi þú nota dereference aðferð í stað array aðferð? Engin sérstök ástæða til að vera heiðarlegur. Og í raun, fyrir þetta konar dæmis, rétt, Ég ætla bara að rífast gera program flóknara, fleiri augu eru glerjun yfir, fólk er að skoða vegna þess að þetta lítur frábær yfirnáttúrulegt, en jafnvel þó að það er að gera það sama. Og svo, hreinskilnislega, þetta er óþarflega sjónrænt flókin lausn á því vandamáli. Það er samt góð hönnun, fimm af fimm fyrir hönnun, hvort sem það er í krappi ritháttur eða bendillinn tákn. But-- sérstaklega þegar við fáum síðar í námskeiðinu í pset 5 þegar við framkvæma þessi orðabók sem Ég hef getið nokkra times-- við munum í raun sama um lágt minni heimilisföng að við skiljum í raun hvað er í gangi. En nú, kemur í ljós að þetta lína af kóða hornklofum í raun ekki til. Þeir eru það sem er kallað nokkur dæmi um setningarleg sykur, sem er bara furðulegur flott leið til að segja að þýðanda breytir hornklofum til að vera sem Stærðfræðiframsetningin. Svo það er mannlegt samningur að vera fær um að bara að skrifa þessir mjög notandi-vingjarnlegur sviga. En hvað þýðandinn, Clang, er í raun að gera hvenær þú skrifar hvað er lögð áhersla á línu 24, undir hetta það er í raun umbreyta það til þessa. Það er bara meira ánægjulegri sem mönnum að lesa og skrifa kóðann eins línu 24. En á endanum þeir þjálfun hjól líka koma út þegar eigin þægindi fær sterkari. Allt í lagi, svo muna þá að þetta var eins konar stærsta vandamálið við hljóp inn. Og það er það sem vakið þetta allt fjandinn samtal um ábendingum, og heimilisföng, og afritun hluti. Það var vegna þess að við skemmtiferðamaður yfir þetta heimskur, heimskur mál, þar Ég framkvæmda logically-- Lauren upp hér á kynningu og appelsínusafa í milk-- fullkomlega algorithmically rétt virka til að skipta tvær breytur ' gildi, en fjandinn hlutur ekki hafa allir viðvarandi eða varanleg, áhrif á númerið mitt. Og hvers vegna var það? Í hnotskurn, hvers vegna er þetta framkvæmd skipti rökrétt, en hefur engin áhrif um breytur sem eru liðin við það, eins x og y fyrir main? Hvað var GIST málið? Já? Áhorfendur: Vegna breyta gert afrit af breytunni í skarðið gegnum virka. DAVID J. Malan: Einmitt, þegar þú fara breytur í aðgerð, eða rök í aðgerð, þá eru þeir samþykkt af afrit, sem þýðir að þú færð eins leita Mynstur bita fyrir bæði X og Y, kallast hér a og b. Og þú getur gert neitt þú vilt með þeim eintökum, en þeir eru að fara að hafa ekki áhrif á starf virka. Og í raun, dró við að mynd á skjánum, muna síðasta sinn, þar ef þig virkilega að hugsa um hvað er fara á undir hood-- ef þetta er minni tölvunnar, og hérna er klumpur af minni sem notuð fyrir helstu, þetta er klumpur af minni sem notuð fyrir skipti, og svo jafnvel ef helstu hefur tvær breytur, X og Y, skipti gæti hafa nákvæmlega leita gildi, sem báðar eru 1 og 2, en þeir eru alveg mismunandi klumpur af minni. Þannig að við þurfum lausn á þessu. Og hreinskilnislega, það vildi virðast að við nú hafa lausn á þessu vandamáli, ekki satt. Ef við höfum nú getu til að vinna hlutina með því að viðtakandi og, eins konar Chutes og stigar stíl, fylgja örvanna og fara hvert sem við viljum í minni, gat ekki við leysa þetta vandamál með því að liggur frá helsta að skipta ekki þeim gildum sem við viljum skipti, en bara innsæi hvað getum við fara að skipta í staðinn? [Interposing raddir] DAVID J. Malan: Hvers vegna er það ekki bara gefa það heimilisföng, ekki satt? Hvers vegna eigum við ekki að gefa skipta á fjársjóður kortinu, ef þú vilt, sem leiðir það til raunveruleg gildi x og y. Skipti skulum, í raun breyta þessir upprunalegu bita, frekar en bara komið afrit af bits. Og svo, í raun, það er það sem er að fara að vera lausnin. Þessi útgáfa er hér greinilega slæmur og gölluð. Og nú, við fyrstu sýn, það lítur bara eins og við bætt við fullt af stjörnum handahófi og yfir fingurna að það myndi þýða. En, það myndi nú saman. En við skulum sjá hvað þetta á að þýða. Og því miður, höfundar C hefði getað valið annað tákn að gera þetta svolítið skýrari, en stjarna rekstraraðila hefur mismunandi merkingu í tvær mismunandi samhengi. Og við höfum séð bæði, en við skulum greina. Svo upp á toppinn þar, þegar ég hef breytt a og b frá því að vera int í slæmt útgáfu til að int stjörnur, A og B, Áður voru heiltölur. Hvað eru a og b nú í gott, grænn útgáfa? Þeir eru heimilisföng. Heimilisföng hvað, að vera ljóst? Heimilisföng heiltölur. Svo fyrir þá staðreynd að ég er segja INT stjörnu leið þetta er heimilisfang heiltala, sérstaklega. Svo nú taka í línum af kóða, eitthvað annað hefur breyst líka. tmp dvöl the sami, því það er bara tímabundið heiltala, ekkert minni galdur þar. En þarf nú stjörnu. Og í raun, hvert annað minnst á a og b, eftir því að allt sem er breytast úr rauðu í grænt er að ég er forskeytið þá breytum með stjörnum. Vegna þess að ég vil ekki að afrita og b. Vegna þess að ef ég afrita bara og b og skipti a og b, hvað er ég að skipta í raun? Bara heimilisföng, ég vil skipta hvað er á þeim heimilisföng. Ég vil fara þangað. Og svo stjarnan rekstraraðila inni virka minn, ekki inni breytu lista, þýðir að þú ferð til þeirra heimilisföng og í raun breyta þessum gildum. Svo er það mynd nú líta eins í staðinn. Jæja, ef í stað ég er liggur í fyrir a og b ekki 1 og 2-- Ég þarf reyndar að bæta við annar skilgreining hér. Svo ætla að þetta klumpur af minni er á stað 10. Þetta er á stað 11, en þetta er a hluti af a einföldun, Ég hef nú tveir kostir ég fara x og y eða ekki ég fara heimilisföng þeirra? Ef ég fara heimilisföng þeirra eins og þetta, ég bara nú þarf að innleiða skipti á græna kóða þannig að þegar það sér að og þegar það lítur b, það er ekki bara að afrita a og b og færa mjólk og appelsínusafa. Mjólk og appelsínusafa samlíking brýtur nú niður, vegna þess að þeir eru bollar fljótandi og ekki kort. Við þurfum í staðinn að fara til að takast á 10 og vér þarf að fara að takast á 11, og þá framkvæma þessi Makaskipti rökfræði. Svo er röksemdafærsla það sama, en við þurfum aðeins öðruvísi leið að fá aðgang þá breytum. Og svo að lokum, hvað Áætlunin verður að líta út eins og þetta er. Í swap.c bókstaflega afrita og límt græna útgáfa. En ég þarf að gera eina breytingu. Það er ekki nóg að breyta skipti. Hvaða önnur lína af kóða þarf ég að breyta? Já? Áhorfendur: Þar sem það tekur rök. DAVID J. Malan: Hvar það tekur rök hennar. Þannig að ef ég fletta upp main, ég getur ekki bara fara í x og y, og ég lofa, síðasta stykki af nýju setningafræði dag. Ég þarf að fara í ekki x og Y en heimilisfang x og y. Og það kemur í ljós, tákn að höfundar C valdi er ef þú notar merkið hér, ekki til að rugla saman við Bita merkið, ef þú notar merkið hér og merkið hér, þetta tölur út fyrir þig, hvað er heimilisfangið x, kannski er það 10, hvað er heimilisfang y, kannski er það 11, og fer þá í staðinn. Svo mikið til að gleypa allt í einu. En við skulum sjá nú fljótt í okkar eftir fjórar mínútur þar sem það getur farið skakkur. Og eins og til hliðar, reyndar Ég tók þessa mynd, TF tók þessa mynd fyrir ári eða tveimur síðan. Þannig að þetta er aftur horn af Eliot matsal. Ábendingum kannski erfiðasta málefni sem við ná í CS50. Svo ef þú hafa the tegund af halla er eins og kannski er það meira af íshokkí stafur eins og þetta, gera sér grein fyrir við erum konar nálgast hámarki í Skilmálar huglægu flókið. Og ég koma upp á þessu mynd, vegna þess að ég sver til guðs, í haust 1996, þegar ég tók CS50 með kennslu náungi minn, Nishat Mehta, settist hann mig niður í horni Eliot D. Hall yfir hádegi, eða kvöldmat, eða eitthvað til að reyna til að hjálpa mér að skilja ábendingum. Og þetta er þar sem ég var vikum eftir það var kynnt í fyrirlestri hvenær Ég skildi loksins ábendingum. Og ég er vongóður um að þetta verður að smella langt fyrr fyrir þig. En átta sig á þessu algerlega meðal The flóknari efni Við höfum litið á. En það er meðal öflugustu. Og þegar þú færð það, það er í raun allt bara að fara að lokum koma saman. Svo viss er það ekki þarf að öllum vaskur í dag. Svo hér er síðasta program við erum að fara að horfa á. Og við erum að fara að enda með Flýtileiðir þrjár mínútur af claymation gert með vini okkar, Nick Parlante. Hér er forrit, sem á tveimur efstu línur lýsir breyta x og y. Sem báðar eru heimilisföng heiltalna, AKA ábendingum. Við úthluta þá nóg minni til að geyma int og geyma heimilisfangið sem minni í x. Svo, það er jafnvel einfaldara en í dæmi áður. Gefðu mér fjögur bæti af minni, það er á stærð við int, og setja þetta netfang í x. Þessi lína hér þýðir fara á heimilisfang í x og setja merkingu líf, fjölda 42 þar. En þessi lína áhyggjur mig. Stjörnu Y þýðir að fara á heimilisfang í y, og setja óheppinn númer 13 þar. Hvers vegna er það hættulegt, á þessum tímapunkti í story-- vísu hratt sagði í minnkandi mínútur okkar here-- hvers vegna er það slæmt fyrir mig að segja, fara í heimilisfang í Y? Áhorfendur: Þú hefur ekki [inaudible]. DAVID J. Malan: Ég hef ekki setja neitt í y. Svo er það gildi y, á þessum tímapunkti í sögunni? Við höfum ekki hugmynd. Það er einhver sorp gildi og né Binky vita. Ef við gætum enda á þessum nótum. [Vídeó spilun] -Hey, Binky, vakna. Það er kominn tími til bendillinn gaman. -Hvað er þetta? Lærðu um ábendingum? Oh, Goody. -Ja, Til að byrja, ég held að við erum að fara að þurfa nokkra punkta. -OK. Þetta númer úthlutar tveimur ábendingum sem getur bent til heiltölur. -OK, Vel ég sé tveir ábendingum, en þeir virðast ekki vera að benda á neitt. -Það er rétt. Upphaflega ábendingum benda ekki til neitt. Það sem þeir benda á eru kallað pointees og setja þá upp er sérstakt skref. -OH, Hægri, hægri. Ég vissi það. The pointees eru aðskilin. Svo hvernig gera þú úthluta pointee? -OK, Vel þetta númer úthlutar ný heiltala pointee, og þessi hluti setur x til að benda á það. -Hey, Sem lítur betur. Svo láta það gera eitthvað. -OK, Ég dereference bendilinn x til geyma fjölda 42 í pointee hennar. Fyrir þetta bragð, ég þarf minn töfrasprota af dereferencing. -Your Töfrasprota af dereferencing? Uh, það, það er frábært. -Þetta Er það kóðinn lítur út. Ég ætla bara að setja upp fjölda and-- [POP SOUND] -Hey, Leita þar sem hún fer. Svo, gera dereference á X fylgir örin til að fá aðgang pointee þess. Í þessu tilviki, til að geyma 42 í það. Hey, prófaðu að nota það til að geyma fjölda 13 í gegnum aðra músina, y. -OK. Ég ætla bara að fara hérna að y, og fá númer 13 sett upp. Og þá taka sprotann af dereferencing og just-- [Buzzer SOUND] -Ég Hey það virkaði ekki. Segja, uh, Binky, ég ekki held dereferencing Y er góð hugmynd, vegna þess að setja upp pointee er sérstakt skref. Og ég held ekki að við alltaf gerði það. -Hmm, Góður punktur. -Já, Úthlutað við músina, y, en við aldrei setja það til að benda á pointee. -Hmm, Mjög athugull. -Hey, Þú ert að leita vel þar, Binky. Getur þú festa það þannig að y stig við sama pointee og x. -Sure Nota ég töfrasprota minn af músina verkefni. -er Að fara til vera a Vandamálið, eins og áður? -Nei, Þetta er ekki snerta pointees. Það breytir bara einn músina til að benda á það sama thing-- [Pabbi SOUND] --as annað. -Ó ég skil. Nú y stig til sama stað og x. Svo, bíddu, nú y er fastur. Það hefur pointee. Svo er hægt að reyna vendi af dereferencing aftur til að senda 13 yfir. -OH, OK, hér fer. -Hey, Líta á það. Nú dereferencing verk á y. Og vegna þess að ábendingum deilir sem eitt pointee, bæði þeir sjá 13. -Já, Hlutdeild, uh, hvað sem er. Svo erum við að fara að skipta stöðum núna? -Ég Líta við erum út á tíma. -But-- -Bara Muna þrjú Pointer reglur. Númer 1, þá er einfaldasta uppbygging er að þú ert með músina, og það bendir á að pointee. En músina og pointee eru aðskilin. Og algeng villa er að setja upp músina en að gleyma að gefa það a pointee. Númer 2, músina dereferencing byrjar á músina og segir örina sína yfir til að fá aðgang pointee þess. Eins og við allur vita, þetta virkar aðeins ef það er pointee, sem eins konar fær aftur að Regla númer 1. Númer 3, músina verkefni tekur einn músina og breytir það að benda til Sama pointee sem annað músina. Svo eftir verkefni, tveir ábendingum mun benda til sömu pointee, stundum það er kallað hlutdeild. Og það er allt það er til það, virkilega. Bless-bless núna. [END spilun] DAVID J. Malan: Það er það fyrir CS50. Þökk sé prófessor Nick Parlante. Við munum sjá þig í næstu viku. [Raftónlist spila]