>> DAVID MALAN: Hei, ja tervetuloa takaisin CS50.
Joten tämä on viikon lopussa neljä.
Vain yksi ilmoitus ensin.
Joten niin sanottu viides maanantai on tulossa ensi maanantaina.
Tämä on tilaisuus vaihtaa SAT / UNSAT kirjeen luokalla, tai
kirjainarvosanan SAT / UNSAT.
Ärsyttävän, että prosessi ei edellytä allekirjoitus, koska sinun täytyy täyttää
ulos yksi niistä vaaleanpunainen add / drop muotoja.
>> Koska teknisesti, SAT / UNSAT versio ja kirjainarvosanan versio
ovat eri luettelo numeroita.
Mutta no big deal.
Tule luokseni tai ryöstää tai Lauren missään vaiheessa.
Tai lähetä meille sähköpostia, jos sinulla ei ole sellaista paperityötä tarvitset tänään, ja me
varmasti auttaa sinua ottamaan huolta, että ennen maanantaita.
>> Okei, joten tänään -
Oikeastaan ​​on olemassa vähän kaikua.
Voimmeko sävy minua hieman?
OK.
Joten tänään, esittelemme aihe tunnetaan viitteitä.
Ja minä myönnän, että tämä on yksi monimutkaisempia aiheita, että meillä on taipumus
kattaa tässä luokassa, tai oikeastaan ​​mitään alkeiskurssi, joka käyttää C.
>> Mutta ota minun sana se, erityisesti Jos mielesi tuntuu hieman vääntynyt
tänään ja tulevina viikkoina.
Se ei ole edustava Saatko mitään pahempaa tässä se tarkoittaa vain sitä, että
se on erityisen kehittyneitä aihe että lupaan, muutaman viikon
siten, tuntuvat aivan liian silmiinpistävän suoraviivainen jälkikäteen.
>> Muistan vielä tänäkin päivänä.
Istuin Elliott Dining Hall, istuu vieressä minun TF Nishat Mehta,
joka asui Elliott talon.
Ja jostain syystä, tämä aihe vain napsauttaa.
Joka on sanoa, että minäkin kamppaillut sen kanssa jo jonkin aikaa, mutta en
teen parhaani auttaa välttämään tällaista kamppailevat aihe, joka lopulta
on melko voimakas.
>> Itse asiassa, yksi aiheista kerromme mielellämme vuonna lähiviikkoina on, että
turvallisuuden, ja miten voit itse hyödyntää koneiden tavoin
joita ei ole tarkoitettu.
Ja ne exploitations ovat tyypillisesti tulos vikoja, virheitä, että me
ihmiset tekevät olemalla ymmärtämisen perustana olevien täytäntöönpanon
tiedot, jonka kautta ohjelmia tehdään.
>> Nyt, jotta tämä näyttää sitäkin käyttäjä ystävällinen, ajattelin pelata 10
sekunnin näytteen hieman claymation hahmo nimeltä Binky joka tuotiin
elämän ystävämme Stanfordin, professori Nick Parlante.
Joten haluan antaa sinulle tämän teaser Binky täällä.
>> [VIDEOTOISTOSTA]
>> -Hei, Binky.
Herää.
On aika osoitin hauskaa.
>> -Mikä tuo on?
Lisätietoja viitteitä?
Voi goodie.
>> [END VIDEOTOISTOSTA]
>> DAVID MALAN: Se on Stanford tietojenkäsittelytiede.
Joten siitä lisää tulemaan.
>> [APPLAUSE]
>> DAVID MALAN: Anteeksi, Nick.
>> Joten muistaa, että viimeinen kerta päättyi tämä todella jännittävä jännitysnäytelmä
jolloin tämä toiminto ei vain toiminut.
Ainakin intuitiivisesti, se tuntui kuin sen pitäisi toimia.
Yksinkertaisesti vaihtamalla arvot Kahden kokonaislukuja.
Mutta muistaa, että kun me tulostetaan alkuperäiset arvot main, yksi ja
kaksi, he olivat vielä yhtä ja kaksi eikä kaksi ja yksi.
>> Joten haluan todella vaihtaa yli laitteen.
Ja minä kirjoitin ylös hieman luuston koodi etukäteen täällä, jos väitän, että x
on 1, y on 2.
Sitten tulostaa sekä niiden arvot print f.
>> Sitten väittävät täällä, että aiomme vaihtaa niitä.
Jätin tyhjä paikka tässä meille täyttää tänään vain hetken.
Sitten aion vaatia, että kaksi muuttujaa ovat vaihtuneet.
Sitten aion tulostaa ne sitten ulos.
Ja niin toivottavasti minun pitäisi nähdä 1, 2.
2, 1.
Se on erittäin yksinkertainen Tavoitteena juuri nyt.
>> Miten siis edetä vaihtava kaksi muuttujaa?
No jos ehdotan tässä, että nämä kupit voisi edustaa muisti ja tietokone.
Tämä on muutaman puree, tämä on toinen muutaman puree.
Voisiko olemme vapaaehtoisena tulla ylös ja Sekoita meille juotavaa, jos tutulta?
Tule ylös.
Mikä sinun nimesi on?
>> JESS: Jess.
>> DAVID MALAN: Jess?
Tule ylös, Jess.
Jos sinulla ei ole mielessä, meidän täytyy laittaa Google Glass teitä, jotta voimme
ikuistaa tätä.
OK, lasi.
Tallentaa videon.
Ja OK, olemme hyvä mennä Jess täällä.
Selvä.
Hauska tavata.
>> Joten mitä haluaisin teet täällä - jos voisit, melko nopeasti -
vain kaataa meidät puoli lasia oranssi mehu ja puoli lasia maitoa,
edustaa tehokkaasti numerot 1 yhden kupin ja 2 muuta cup.
>> Tämä tulee olemaan hyvä kuvamateriaalia.
>> JESS: Anteeksi.
>> DAVID MALAN: Ei, ei.
Se on OK.
Nice.
Okei, joten meillä on neljä tavua arvoinen appelsiinimehua.
Me kutsui sitä arvoa 1.
Nyt vielä neljä tavua arvoinen maitoa.
Kutsumme sitä arvostavat 2.
Niin x ja y, vastaavasti.
>> Okei, joten nyt jos käsillä olevaan tehtävään - sinulle, Jess, edessä kaikki
luokkatoverit -
on vaihtaa arvoista x ja y, että haluamme appelsiinimehua
muut kuppi ja maitoa tässä turnauksessa, miten voisit - ennen kuin itse tehdä
se - edetä näin?
>> OK, viisas päätös.
Joten tarvitset hieman enemmän muistia.
Joten myöntää väliaikaisen cup, jos haluatte.
Ja nyt edetä vaihtaa x ja y.
>> Erinomainen.
Joten hyvin tehty.
Kiitos paljon, Jess.
Ole hyvä.
Pikku matkamuisto.
>> OK, joten ilmeisesti, super yksinkertainen idea.
Täysin intuitiivinen, että tarvitsemme hieman enemmän tallennustilaa - tässä muodossa,
cup - jos me todella haluamme vaihtaa nämä kaksi muuttujaa.
Joten tehdä juuri näin.
Täällä välillä, jossa väitän minä olen aiotaan tehdä joitakin vaihtamalla, minä
mennä eteenpäin ja julistaa temp.
Ja minä asettaa sen yhtä vaikkapa x.
>> Sitten aion muuttaa arvoa x kuten Jess teki täällä
maitoa ja appelsiinimehua on yhtä suuri kuin y.
Ja aion vaihtaa y on yhtä suuri olemaan x, koska nyt meillä olisi
jumissa ympyrä, vaan Temp.
Where I tilapäisesti - tai jos Jess tilapäisesti laittaa appelsiinimehua
ennen clobbering että kuppi maitoa.
>> Joten anna minun mennä eteenpäin nyt ja tässä.
Sitä kutsutaan noswap.c.
Ja nyt haluan ajaa ei swap.
Ja todellakin näen, jos olen laajentaa ikkuna vähän, että
x on 1, y on 2.
Ja sitten x on 2, y on 1.
>> Mutta muistuttaa, että maanantaina teimme asioita hieman eri tavalla, jossa I
sen sijaan toteutetaan auttajafunktio, jos haluatte, että oli todella mitätön.
Kutsuin sitä vaihtaa.
Annoin sen kaksi parametrit, ja kutsuin heille ja pyysin heitä b.
>> Suoraan sanottuna, voisin soittaa heille x ja y.
Ei ole mitään pysäyttäminen minua tekemästä sitä.
Väittäisin kuitenkin, se on sitten hieman epäselvä.
Koska muistamista maanantaina, että me väitti, että nämä parametrit olivat
kopioita arvojen kulunut sisään
Niin se vain sotkee ​​kanssa mielessä, luulen, jos käytät
täsmälleen samoja muuttujia.
>> Niin minä sen sijaan soittaa heille ja b, vain selvyyden vuoksi.
Mutta voisimme kutsua heitä eniten mitä haluamme.
Ja aion kopioida ja liittää tehokkaasti tämä koodi sinne
alas täällä.
Koska olen juuri nähnyt, että se toimii.
Niin, että hyvässä kunnossa.
Ja minä vaihdan x, minun x to, minun y b ja minun y b.
>> Eli toisin sanoen, täsmälleen samaa logiikkaa.
Täsmälleen sama asia, että Jess teki.
Ja sitten yksi asia minun täytyy tehdä ylös tässä on tietenkin, on nyt käyttää tätä
toiminto tai soita tätä toimintoa.
Joten aion kutsua tätä toimintoa kahdella tulot, x ja y, ja paina Tallenna.
>> Okei, niin perusteellisesti sama asia.
Itse olen varmaan tehnyt ohjelman tarpeettoman monimutkainen
kirjallisesti toiminto, joka on vain ottamalla noin kuusi riviä koodia taas I
aiemmin oli toteutettu Tässä vain kolme.
>> Joten anna minun mennä eteenpäin nyt ja remake Tämän ei tehdä swap.
Okei, minä mokasin täällä.
Tämä olisi virhe, että saatat nähdä yhä yleisesti kuin
ohjelmia saada monimutkaisempi.
Mutta on helppo korjata.
Saanen vierittää takaisin tänne.
>> Ja mikä on ensimmäinen virhe näen?
Implisiittinen ilmoitus.
Mitä tämä merkitsee tavallisesti?
Ai niin, unohdin prototyyppi.
Unohdin opettaa kääntäjälle, että swap tulee olla olemassa, vaikka hän
ei ole olemassa alusta ohjelman.
Joten olen juuri menossa sanoa mitätön, swap, int, int b, puolipiste.
>> Joten en aio reimplement sitä.
Mutta nyt se vastaa mitä täällä alhaalla.
Ja ilmoitus, ettei puolipiste täällä, joka ei ole välttämätön, kun
täytäntöönpanosta.
>> Joten anna minun remake tämän, tee mitään swap.
Paremmassa kunnossa.
Suorita mitään swap.
Ja hitto vieköön.
Nyt olemme takaisin missä olimme maanantaina jos asia ei vaihda.
>> Ja mikä on intuitiivinen selitys miksi näin on?
Niin?
>> Opiskelija: [kuultavissa].
>> DAVID MALAN: Aivan.
Niin a ja b ovat kopioita x ja y.
Ja itse asiassa, milloin olet ollut vaatii toimia näin pitkälle, että
kulkee muuttujia kuin ints -
aivan kuten swap odottaa täällä -
te on ohimennen kopioita.
>> Nyt se tarkoittaa, että se vie vähän ajan, sekunnin murto varten
tietokone kopioida bittejä yhdestä muuttujan bittiä toiseen.
Mutta se ei ole niin iso juttu.
Mutta he kuitenkin kopio.
>> Ja nyt, yhteydessä swap, Olen itse asiassa onnistuneesti
muuttumassa ja b.
Itse asiassa, nyt tehdä nopeasti järki tarkistaa.
Tulosta f on% i, uusi rivi.
Ja antaa plug in.
Nyt tee sama juttu b.
Ja nyt tehdä saman täällä.
>> Ja nyt haluan kopioida nämä samat linjat jälleen alareunassa funktion
kun minun kolme riviä mielenkiintoisia voinut suorittaa, ja
tulostaa ja b jälleen.
Joten nyt tehkäämme tähän, tee mitään swap.
Haluan tehdä pääteikkunaan vähän pitempi, jotta voimme nähdä
enemmän sitä kerralla.
>> Ja suorita mitään swap.
x on 1, y on 2. on 1, b on 2.
Ja sitten, on 2, b on 1.
Niin se toimii, aivan kuten Jess teki täällä sisällä swap.
Mutta tietenkin se, jolla ei ole vaikutusta muuttujia pää.
>> Joten näimme temppu jossa me voisi korjata tämän, eikö?
Kun olet kohtaavat tämän rajauksen ongelma, voit vain punnan ja tehdä x
ja y millaisia ​​muuttujia sijaan?
>> Voisit tehdä niistä maailmanlaajuisia.
Laita ne aivan tiedoston alkuun kuten teimme, vaikka peli 15.
Käytämme globaali muuttuja.
Mutta yhteydessä pelin 15, on järkevää olla maailmanlaajuinen
muuttujaan edustavat hallituksen, koska kokonaisuudessaan 15.c ei
noin täytäntöönpanossa että peli.
Sitähän tiedosto on olemassa tehdä.
>> Mutta tässä tapauksessa täällä, olen vaatii toimia swap.
Haluan vaihtaa kaksi muuttujaa.
Ja se pitäisi alkaa tuntea vain huolimaton jos ratkaisu kaikille
ongelmia, kun me törmätä soveltamisala kysymyksiä on tehdä maailmanlaajuisia.
Koska hyvin nopeasti meidän ohjelma on tulossa melkoinen sotku.
Ja me teimme, että hyvin säästeliäästi mikä johtuu 15.c.
>> Mutta näyttää siltä, ​​siellä parempi tapa kokonaan.
Saanen itse mennä takaisin ja poistaa Tulosta f: n, vain yksinkertaistaa tätä koodia.
Ja haluaisin ehdottaa, että Tämä todellakin on huono.
Mutta jos sen sijaan lisätä joissakin tähdellä ja tähdet, voin sen sijaan kääntää tämän
funktion, joka on itse toiminnassa.
>> Joten anna minun mennä takaisin ja myöntää sanomalla tähdellä on aina vaikeaa,
niin minä sanon tähteä.
Otan vain fess jopa, että yksi.
Selvä.
Ja nyt, mitä aion tehdä sen sijaan?
>> Joten ensinnäkin, aion määritellä että sen sijaan kulkee int:
swap-toiminto, olen sen sijaan menossa sanoa int tähden.
Nyt, mitä tähti osoittaa?
Tämä on se, että käsite osoitin, että Binky, claymation hahmo oli
viitataan hetki sitten.
>> Joten jos sanomme int tähden, merkitys tämä nyt on, että ei tule olemaan
hyväksyttiin sen arvon.
Se ei tule kopioida sisään
Pikemminkin, osoite on aiotaan siirtää sisään
>> Joten muistaa, että tietokoneesi sisälle on koko joukko muistia, muuten
tunnetaan RAM.
Ja että RAM on vain koko joukko tavua.
Joten jos Macin tai PC: ssä on kaksi gigatavua, sinulla on 2
miljardia tavua muistia.
>> Nyt vain olettaa, että vain pitää asiat mukava ja hallittu, me
määrittää osoite -
numero -
jokaisen tavun RAM-muistia tietokoneessa.
Aivan ensimmäinen tavu ne 2 miljardia on numero nolla.
Seuraava on tavu numero yksi, numero kaksi, koko matkan ylös, dot dot
dot, on noin 2 miljardia euroa.
>> Joten voit määrä tavuja muistin tietokoneen.
Joten Oletetaan, että niinhän me tarkoitamme osoite.
Joten kun näen int tähden, mitä tapahtuu välittämisen swap nyt
osoite.
Ei sen arvo, mutta mitä sen postin osoite on, niin sanoakseni -
sen sijainti RAM.
>> Ja vastaavasti b, aion sanoa samaa.
Int, tähti, b.
Sivuhuomautuksena, teknisesti tähti voisi mennä muualla.
Mutta me standardisoida tähti on aivan tietotyyppi.
>> Joten vaihtaa allekirjoitus tarkoittaa nyt, anna minulle osoite int, ja puhelun
että osoite.
Ja antaa minulle toisen osoitteen int ja soittaa, että osoite b.
>> Mutta nyt minun koodi täällä on muututtava.
Koska jos Vakuutan int temp -
joka on edelleen tyyppiä int -
mutta tallentaa sen, millainen arvo?
Olla selkeä, olen laskemisesta kanssa koodi kirjoitettu juuri nyt?
>> Laitan paikalla.
Mutta en välitä paikalla nyt, eikö?
Lämpötila on olemassa vain Jess kolmannen cup olemassa, mihin tarkoitukseen?
Arvo tallennetaan.
Maitoa tai appelsiinimehua.
Ei todella tallentaa osoite joko niistä asioista, joka tuntuu
vähän järjetöntä tässä todellinen maailman yhteydessä muutenkin.
>> Siis todella, mitä haluan laittaa temp ei-osoite, mutta
sisällön.
Joten, jos on useita, kuten 123, tämä on 123. tavu muistia vain
sattuu olemaan miehittää, että arvo vuonna sattuu olemaan miehittää.
>> Jos haluan mennä kyseiseen osoitteeseen, Minun täytyy sanoa tähden.
Vastaavasti, jos olisin muuttaa mitä osoitteessa, muutan
tämä alkaa.
Jos haluan tallentaa mitä on sijainti mitä on paikassa
klo b, tähti b tähden.
>> Joten lyhyt, vaikka tämä ei ole aivan uppoamassa vielä - ja En odota
että se olisi niin nopeasti -
ymmärtää, että kaikki mitä teen on prefixing nämä tähdet minun muuttujia,
sanonta ei tartu arvoja.
Älä muuta arvoja.
Vaan, mene osoitteet ja saada arvon.
Siirry kyseiseen osoitteeseen ja muutos arvo siellä.
>> Joten nyt haluan siirtyä takaisin ylös, vain korjata tätä linjaa täällä,
muuttaa prototyyppi vastaamaan.
Mutta nyt täytyy tehdä jokin muu asia.
Intuitiivisesti, jos olen muuttanut tyypit argumentteja, että swap odottaa,
mitä muuta tarvitsen muuttaa minun koodi?
>> Kun minä vuorottelu.
Koska juuri nyt, mitä olen Olen ohimennen vaihtaa vielä?
Arvo x ja y: n arvo, tai maitoa ja appelsiinimehua.
Mutta en halua tehdä sitä.
Minä sen sijaan haluat kulkea mitä?
Sijainnin x-ja sijainti y.
Mitkä ovat niiden postiosoitteet, niin sanoakseni.
>> Niin tehdä, että siellä on ampersand.
Ampersand sellainen kuulostaa osoite.
niin n, et-merkki, osoite x, ja osoite y.
Joten se on tahallista, että käytämme et-funktiokutsussa,
ja tähdet julistaessaan ja kun toteuttamisessa toiminto.
>> Ja ajatelkaa käytä merkintää osoite toimija, ja tähti
sinne toimija -
tai oikeammin, dereference operaattori.
Niin, että paljon sanoja vain sanoa, että nyt, toivottavasti, swap on menossa
oikeiksi.
>> Anna minun mennä eteenpäin ja tehdä -
nyt todella nimetä tiedoston, ettei Tämän ohjelman edelleen kutsua ei swap.
Väitän, että me kutsumme sitä swap.c nyt.
Joten tee, vaihtaa.
Dot, slash, vaihtaa.
>> Ja nyt todellakin, x on 1, y on 2.
Ja sitten, x on 2, y on yksi.
No katsotaanpa jos emme voi tehdä tätä vähän eri lailla kuin mitä on
täällä.
Ensinnäkin haluan zoomata meidän piirustusnäytön täällä.
Ja haluaisin ehdottaa hetki - ja kun piirrän tässä peilataan
siellä nyt - haluaisin ehdottaa, että tässä on koko joukko muistiin tai
RAM, sisällä minun tietokone.
>> Ja tämä on purra numero, sanokaamme, 1.
Tämä on tavua numero 2.
Ja minä teen koko joukko enemmän, ja sitten nippu dot dot pisteitä
osoittavat, että siellä on 2 miljardia näistä asioista.
4, 5, ja niin edelleen.
>> Joten on viisi ensimmäistä tavua minun tietokoneen muistiin.
Kaikki hyvin?
Hyvin harvat pois 2000000000.
Mutta nyt aion ehdottaa seuraavat.
Aion ehdottaa, että x on menossa tallentaa numero 1, ja y on menossa
tallentaa numero 2.
Ja anna minun mennä eteenpäin nyt ja edustaa nämä arvot seuraavasti.
>> Tehdään tämä seuraavasti.
Anna minulle vain yksi sekunti.
Yksi toinen.
OK.
Haluan tehdä tätä vähän -
Tehdään tämä taas.
Muuten aion ja käyttämällä samat numerot, tahattomasti,
useita kertoja.
>> Joten niin meillä on eri määrä puhua, kutsukaamme tätä tavu
numero 123, 124, 125, 126, ja piste piste piste.
Ja haluaisin väittää nyt, että aion laittaa arvo 1 täällä, ja arvo 2
täällä, joka tunnetaan myös x-ja y.
Niin se vain niin, että tämä on x, tämä on y.
>> Ja vain noin sattumaa, tietokone, käyttöjärjestelmä,
tapahtui laittaa x paikassa numero 123.
Ja y päätyi sijainti 124 -
hitto vieköön.
Minun olisi pitänyt vahvistaa tämän.
Voi mies, voin todella haluat tehdä tämän?
Kyllä, haluan korjata ja b asianmukainen tästä tänään.
Anteeksi, uusi tässä.
>> 127, 131, ja en halua olla tämän monimutkainen, mutta miksi muutan
numerot siellä?
Koska haluan ints on todella on neljä tavua.
Joten olkaamme Super anaali tästä.
Niin, että jos 1 sattuu käsiteltävä 123, 2 tulee olemaan osoitteessa
127, koska se on vain 4 byes päässä.
Siinä kaikki.
Ja me unohtaa kaikki muita osoitteita maailmassa.
>> Joten x on paikalla 123, y on paikalla 127.
Ja nyt, mitä olen itse haluat tehdä?
Kun soitan swap nyt mitä todella tapahtuu?
No, kun vuorottelu, olen ohimennen osoite x ja osoite y.
Joten esimerkiksi jos nämä kaksi kappaletta Paperin osuus on nyt kaksi
argumentteja ja b vaihtaa, mikä minä olen menossa kirjoittaa Ensimmäinen näistä,
jonka aion soittaa nimitystä?
>> Täsmälleen, 123.
Joten tämä Väitän on.
Tämä on parametri.
Laitan osoitteen x siellä.
>> Mikä tuo on?
>> Ei, ei.
Ei se mitään.
Edelleen hyvä, silti hyvä.
Joten tämä on.
Ja nyt toisen palan paperia, tämä tulee olemaan b, ja mikä minä olen
aiotaan kirjallisesti tämä paperi?
127.
>> Joten ainoa asia, joka on muuttunut edellisessä kertominen tämän tarinan on,
eikä kirjaimellisesti 1 ja 2, minä olen menossa ohi 123 ja 127.
Ja minä lähden nyt laittaa nämä sisällä tämän laatikon, okei?
Niin, että musta laatikko edustaa nyt swap-toiminto.
>> Samaan aikaan, nyt on nyt joku toteuttaa swap-toiminto.
Olisiko joku täällä haluavat tehdä vapaaehtoistyötä?
Tule ylös.
Mikä sinun nimesi on?
Charlie.
Selvä, Charlie.
Tule ylös.
>> Joten Charlie on menossa pelaamaan rooli meidän musta laatikko.
Ja Charlie, mitä haluaisin sinun tekevän Nyt on toteuttaa swap siten,
että koska nämä kaksi osoitetta, olit todella menossa
muuttaa arvoja.
Ja minä kuiskata korvaan kuinka ajaa TV täällä.
>> Joten mene eteenpäin, ja olet musta laatikko.
Reach siellä.
Mitä arvoja näette, ja mitä arvoja näette b?
>> CHARLIE: on 123 ja b on 127.
>> DAVID MALAN: OK, tarkalleen.
Nyt tauko siellä vain hetken.
Ensimmäinen asia aiot tehdä nyt, mukaan koodi - joka
Minä nyt vetää ruudulla -
tulee olemaan jakaa hieman vähän muistia kutsutaan temp.
Joten aion mennä eteenpäin ja antaa teille, että muisti.
>> Joten tämä tulee olemaan kolmas muuttuja että sinulla on saatavilla
soitit temp.
Ja mitä aiot kirjoittaa Temp-paperille?
>> CHARLIE: Osoittimet, eikö?
>> DAVID MALAN: OK, no ei välttämättä viitteitä.
Joten koodiriviä, että olen korostettuna oikealla puolella,
Aloitetaan siellä.
Se kertoo tähden.
Joten tällä hetkellä tallentaa numerossa 123.
Ja vain intuitiivisesti, mitä ei tähti 123 tarkoittaa?
>> Mutta erityisesti, jos on 123, tähti tarkoittaa mitä?
Arvo.
Tai enemmän rennosti, mene sinne.
Joten haluaisin ehdottaa, että tilalla on kätesi, mennä eteenpäin ja käsitellä kyseistä
kuin se on kartta.
Ja kävellä itsesi yli tietokoneen muisti, ja löytää meille, mikä on
paikassa 123.
Täsmälleen.
>> Joten näemme sijainti 123 on mitä, ilmeisesti?
OK, niin mitä arvoa nyt olet aikoo panna temp?
Täsmälleen.
Joten mene eteenpäin ja tehdä sitä.
Ja kirjoita numero 1 pala paperia, joka on tällä hetkellä nimeltään temp.
>> Ja nyt seuraava askel, että aiot toteuttaa
tulee olemaan mitä.
No, oikealla puolella seuraavan rivin koodia on tähti b. b, ja
Tietenkin tallentaa osoite.
Se käsittelee 127.
Star b tarkoittaa mitä, rennosti puhumalla?
>> Siirry kyseiseen paikkaan.
Joten mene eteenpäin ja löytää meidät mitä paikassa 127.
OK.
Tietenkin paikassa 127, on edelleen arvo 2.
Joten mitä aiot nyt myymälässä mitä on paikalla?
Joten tähden keinoin mennä paikkaan.
Mikä on sijainti?
>> Täsmälleen.
Joten nyt, jos haluat muuttaa mitä kyseisessä paikassa -
Menen eteenpäin ja ajaa pyyhekumi tässä.
Ja nyt laita se takaisin harjalla.
Mikä numero aiot kirjoittaa että tyhjä laatikko nyt?
>> Täsmälleen.
Joten tämä rivi koodia, on selvää - let minulle tauko mitä Charlien tekemässä ja
Huomautan, mitä hän juuri tehnyt on kirjoittaa tuohon laatikkoon sijainti 123
arvo, joka oli aiemmin klo b.
Ja niin olemme nyt toteutettu todellakin Tämän toisen rivin koodia.
>> Nyt valitettavasti siellä vielä yksi rivi jäljellä.
Nyt mitä on temp, kirjaimellisesti?
Se on tietysti numero yksi.
Se ei ole osoite.
Se on vain numero, eräänlainen muuttujan viikolla yksi.
>> Ja nyt kun sanot tähden b, joka tarkoittaa Siirry osoitteeseen b, joka on
Tietenkin täällä.
Joten kun olet päässyt sinne -
Menen eteenpäin ja poistaa mitä oikeastaan siellä - ja mitä olet
aikoo kirjoittaa nyt paikalla 127?
>> CHARLIE: Lämpötila, joka on yksi.
>> DAVID MALAN: Lämpötila, joka on yksi.
Ja mitä tapahtuu temp lopulta?
No, emme oikeastaan ​​tiedä.
Emme välitä.
Aina olemme toteutettu toiminto Toistaiseksi kaikki paikalliset muuttujat olet
ovat todellakin paikallisia.
Ja ne vain katoavat.
He talteen jonka käyttöjärjestelmä järjestelmä lopulta.
>> Niin, että lämpötila on edelleen arvo 1 on tavallaan pohjimmiltaan
mielenkiinnoton meille.
Okei, joten aplodit jos voisimme Charlie.
Hyvin tehty.
>> Okei, joten mitä enemmän tekee tämä tarkoittaa voimme tehdä?
Joten käy ilmi, että olemme olleet kertoo muutaman White Lies
jo jonkin aikaa.
Itse asiassa näyttää siltä, ​​että merkkijono, kaikki tällä kertaa, ei oikeastaan
merkkijono sinänsä.
Se sellainen on, että intuitiivisesti.
>> Mutta teknisesti ottaen merkkijono on tietotyyppi, että me julisti sisällä
CS50 kirjasto yksinkertaistaa maailmassa muutaman ensimmäisen viikon luokkaa.
Mikä merkkijono todella on osoite hahmo, jossain RAM.
Merkkijono on todella useita, kuten 123 tai 127, joka tapahtuu rajata
jos merkkijono alkaa tietokoneen muistiin.
>> Mutta se ei edusta string sinänsä itse.
Ja me voimme nähdä tämän seuraavasti.
Anna minun mennä eteenpäin ja avata koodia, joka on muun
Nykypäivän lähdekoodi esimerkkejä.
Ja aion mennä eteenpäin ja avata up, sanotaanko, vertaa-0.c.
Tämä on buginen ohjelma, joka on menossa pantava täytäntöön seuraavasti.
>> First.
Aion sanoa jotain.
Sitten aion mennä eteenpäin ja saada merkkijonon käyttäjä
että seuraavalla rivillä.
Sitten aion sanoa sen taas.
Sitten aion saada toinen merkkijonon käyttäjä.
>> Ja ilmoitus, näytän yksi jousille muuttuja nimeltä s, ja
toinen näistä jouset muuttujaan nimeltä t.
Ja nyt aion vaatia, hyvin kohtuudella, että jos s vastaa yhtä t,
jouset ovat samat.
Kirjoitat sama asia.
Else, jouset ovat ei ole sama asia.
>> Loppujen lopuksi, jos input kaksi ints kaksi merkkiä, kaksi kellukkeet, kaksi tuplaa, jokin
tietotyypit olemme puhuneet toistaiseksi vertailla niitä -
Muistan teimme hyvin selväksi aikaa sitten että et tee tätä, koska
yksi yhtäläisyysmerkki on tietenkin sijoitusoperaattori.
Niin, että olisi virhe.
>> Käytämme yhtä yhtäläisyysmerkki, joka todellakin vertaa
asioita todellista tasa-arvoa.
Mutta Väitän tämä on buginen.
Jos menen eteenpäin ja tehdä vertailla nolla, ja tee piste slash vertailla nolla.
Ja kirjoitan, sanokaamme, hei.
Ja sitten sanotaan Hei taas.
Kirjaimellisesti sama asia, tietokone väittämistä kirjoitetaan eri asioita.
>> Nyt ehkä olen vain väärin kirjoitettu jotain.
Minä kirjoittaa nimeni tällä kertaa.
Tarkoitan, hei.
Hei.
Se on erilainen joka kerta.
>> No, miksi?
Mitä todella tapahtuu alla huppu?
No, mitä todella tapahtuu alla huppu on merkkijono sitten
Olen kirjoittanut, että ensimmäistä kertaa esimerkiksi on sana hei, tietenkin.
Mutta jos me edustamme tämän alla huppu, muistaa, että
merkkijono on jono.
Ja olemme sanoneet aiemmin.
>> Joten jos piirrän että array näin, olen menossa edustamaan jotain aivan
samanlainen kuin mitä teimme hetki sitten.
Ja siellä on todella jotain erityistä täälläkin.
Mitä päätämme on osoitteessa lopussa jokaisen merkkijonon?
Niin, tämä kenoviivan nolla, joka on vain tapa esittää,
kirjaimellisesti, 00000000.
Kahdeksan 0 bittiä peräkkäin.
>> En tiedä, rehellisesti, mitä tämän jälkeen.
Se on vain joukko enemmän RAM sisällä minun tietokone.
Mutta tämä on jono.
Puhuimme paneelit ennen.
Ja me yleensä puhua taulukot olevan paikalla nolla,
sitten yksi, sitten kaksi.
Mutta se on vain mukavuussyistä.
Ja se on täysin suhteellinen.
>> Kun olet todella saada muisti tietokoneen, se on tietenkin tahansa
2000000000 jostain kumman tavua, mahdollisesti.
Siis todella alla huppu, koko tämän ajan, kyllä.
Tämä saattaa hyvinkin olla kiinnike nolla.
Mutta jos kaivaa vielä syvemmälle alla huppu, joka on todella
osoitenumeron 123.
Tämä on osoite 124.
Tämä on osoite 125.
>> Enkä tyriä tällä kertaa.
Nämä ovat nyt yhtä tavua toisistaan ​​mistä syystä?
Kuinka suuri on char?
Char on vain yksi tavu.
Int on tyypillisesti neljä tavua.
Joten siksi tein sen 123, 127, 131 ja niin edelleen.
Nyt voin pitää matematiikka yksinkertaisempi ja vain tehdä plus 1.
Ja tämä on nyt, mitä todella tapahtuu on alla huppu.
>> Joten kun ilmoittaa jotain tällaista, string s, tämä on todella -
se kääntyy pois -
char tähden.
Star, tarkoittaa tietenkin osoite, eli osoitin.
Joten se osoite jotain.
Mikä on se osoite?
>> No -
Olen ainoa, joka näkee hyvin tärkeä asia Teen tai epäilet
Teen.
Joten string -
Surullista on minulla monitori tuolla missä minä
voinut nähdä, että.
>> Okei, joten merkkijono s on mitä I julisti aiemmin.
Mutta näyttää siltä, ​​kiitos hieman taikaa CS50 kirjasto, kaikki tämä
aika merkkijono on kirjaimellisesti ollut char tähden.
Tähti tarkoittaa jälleen osoitin tai osoite.
Se, että se on reunustavat sana char tarkoittaa että se
osoite luonnetta.
>> Joten jos saat merkkijono kutsutaan, ja kirjoitan H-E-L-L-O, ehdottaa nyt, mitä on saada
string kirjaimellisesti palaamassa kaikki tällä kertaa, vaikka olemme pikemminkin
yksinkertaistettu maailma?
Mitä saat string todella palauttaa sen paluuarvon?
>> 123 Tässä tapauksessa esimerkiksi.
Olemme aiemmin sanonut, että saat merkkijono yksinkertaisesti palauttaa merkkijonon, jono
merkkiä.
Mutta se on hieman valkoinen valhe.
Tapa saada merkkijono todella toimii alla huppu on se saa
merkkijonon käyttäjä.
Se vaappuu merkkejä hän tyyppejä muistiin.
Siinä kenoviiva nolla lopussa Näiden merkkijonoa.
>> Mutta mitä sitten ei saa string kirjaimellisesti palaa?
Se kirjaimellisesti palauttaa osoitteen ensimmäinen tavua RAM, että
sitä käytetään, että voimaa.
Ja käy ilmi, että vain palauttamalla yksi osoite
ensimmäisen merkin merkkijono, joka on riittää löytää kokonaisuudessaan
merkkijono.
>> Toisin sanoen saada string ei ole palata 123 ja 124 ja 125.
Sen ei tarvitse antaa minulle pitkä luettelo kaikista tavujen
minun merkkijono käyttää.
Koska yksi, he kaikki takaisin takaisin.
Ja kaksi, jotka perustuvat ensimmäinen osoite, I voi selvittää, missä merkkijono päättyy.
Miten?
>> Erityistä null merkki, Kenoviiva nolla lopussa.
Eli toisin sanoen, jos ohitat ympäri -
sisällä muuttujat -
osoite char, ja sinun oletetaan että lopussa mikä tahansa merkkijono, kaikki
merkkijono meidän ihmisten ajatella jouset, jos oletetaan, että
lopussa tällaisten string siellä kenoviiva nolla, olet kultainen.
Koska voit aina löytää loppuun merkkijono.
>> Nyt mitä todella niin menee on tässä ohjelmassa?
Miksi tämä ohjelma, vertaa-0.c, buginen?
Mikä on todella verrataan?
Niin?
>> Opiskelija: [kuultavissa].
>> DAVID MALAN: Aivan.
Se vertaamalla sijainnit merkkijonojen.
Joten jos käyttäjä on kirjoittanut hei kerran, kuten tein, muisti saattaa päätyä
tämännäköistä.
Jos käyttäjä sitten tyypit Hei taas, mutta soittamalla saat merkkijono uudelleen, c on
ole erityisen taitava ellet opettaa se olla fiksu kirjoittamalla koodia.
>> C -
ja tietokoneet yleisemmin -
Jos kirjoitat sanan Hei taas, tiedät mitä aiot saada.
Olet juuri menossa toinen array muistin että kyllä, sattuu olemaan
tallentamiseen H-E-L-L-O ja niin edelleen.
>> Se tulee samannäköisiä meille ihmisille, mutta tähän osoitteeseen
ehkä ole 123.
Se voi vain niin käydä, että käyttöjärjestelmä on joitakin käytettävissä
tilaa esimerkiksi paikassa -
sanotaanko jotain mielivaltaista, näin on paikalla 200.
Ja tämä on paikka 201.
Ja tämä on paikka 202.
Meillä ei ole aavistustakaan, missä se on olemaan muistiin.
>> Mutta mitä tämä tarkoittaa, että mitä on aiotaan varastoida lopulta s?
Numero 123.
Mitä aiotaan varastoida t, Tässä mielivaltainen esimerkki?
Numero 200.
Ja kaikki tämä tarkoittaa sitten on tietenkin, 123 ei ole sama 200.
Ja niin tämä jos ehto ei tosi.
Koska get string käyttää erilaisia paloina muisti joka kerta.
>> Nyt voimme nähdä tämän uudelleen toisessa esimerkissä.
Anna minun mennä eteenpäin ja avata copy-0.c.
Väitän, että tämä esimerkki on menossa kokeilla - mutta ei - kopioida kaksi merkkijonoa
seuraavasti.
>> Aion sanoa jotain käyttäjälle.
Olen sitten menossa merkkijono ja kutsua sitä s.
Ja nyt, minä teen tämän valintaruudun täällä.
Olemme maininneet tämän taas takaisin.
Mutta kun saattaa saada merkkijono return, toinen erikoismerkki tai erityistä
symboli sanotaanko.
Jos se on pois muistista.
>> Esimerkiksi, jos käyttäjä on todella on vaikeaa ja tyypit hirvittävät
merkkien määrä on näppäimistö ja osumia Enter.
Jos tämä määrä merkkejä vain voi sopii RAM jostain hullu
syystä myös saada string saattaa hyvin palata null.
>> Tai jos ohjelma itse tekee paljon muita asioita ja siellä on vain
Muisti ei riitä get string menestyä, se saattaa lopettaa
jopa palaamassa null.
Mutta katsotaanpa tarkemmin siitä, mitä tämä on.
Mikä on s tietotyyppi todella?
Char tähden.
>> Joten se kääntyy pois nyt voimme kuoria takaisin kerros null.
Osoittautuu, null on - kyllä, tietysti erikoissymboli.
Mutta mikä on se todella?
Oikeasti, null on vain symboli, että ihmiset käyttävät edustaa nolla samoin.
>> Niin laatijat C ja tietokoneet yleisemmin päätti vuosi sitten
että tiedät mitä.
Miksi emme varmistettava, ettei käyttäjä data on koskaan, koskaan, koskaan
varastoidaan bye nolla?
Itse asiassa jopa minun mielivaltaisen esimerkiksi ennen, en aloita numerointi
tavua nolla.
Aloitin yhden.
Koska tiesin, että ihmiset maailmassa ovat päättäneet varata nolla
tavu kenenkään RAM jotain erityistä.
>> Syynä on, milloin haluat merkki siitä, että jotain on mennyt pieleen
osalta osoitteita, voit palauttaa null - joka tunnetaan myös nolla -
ja koska tiedät, että ei ole legit tiedot osoitteessa nolla, selvästi
se tarkoittaa, että virhe.
Ja siksi me, sopimuksen mukaan, tarkista for null ja palata jotain
kuin yksi näissä asioissa.
>> Jos siis selaa nyt, tämä on vain sitten jotkut virheentarkistukset, kaiken varalta
jotain meni pieleen [? bail?]
kokonaan ja lopettaa ohjelman palauttamalla alussa.
Tämä linja nyt voisi kirjoittaa uudelleen kuin tämä, mikä tarkoittaa sitä, mitä?
Vasemmalla puolella, anna minulle toinen osoitin merkin, ja kutsua sitä t.
Mitä minä tallentamiseen sisällä t, joka perustuu tässä yksi rivi koodia?
>> Olen tallentaa sijainnin.
Erityisesti sijainti joka oli s.
Joten jos käyttäjä on kirjoitettu hello, ja että ensimmäinen hei sattuu päätyä
täällä, niin numero 123 on aikoo tulla takaisin saada
merkkijono ja varastoitava -
kuten sanoimme aiemmin -
S.
>> Kun nyt julistaa toisen osoitin nieriää ja kutsua sitä t, mikä määrä on
kirjaimellisesti menossa päätyä t mukaan tarina?
Joten 123.
>> Joten teknisesti nyt molemmat s ja t osoittavat täsmälleen
Sama paloina muistia.
Joten huomaa, mitä aion tehdä nyt todistaa, että tämä ohjelma on buginen.
>> Ensinnäkin aion vaatia, kanssa Tulosta f hyödyntäminen
kopio merkkijono.
Sitten aion tehdä vähän Virheentarkistus.
Aion varmistaa.
Katsotaanpa varmista, että merkkijono t on ainakin nollaa suurempi pituus,
joten siellä on jokin merkki on todella hyödyntää.
>> Ja sitten saatatte muistaa tämän Aikaisemmissa.
2 ylä - joka on ctype.h tiedosto.
T kiinnike nolla antaa minulle nolla luonne merkkijono t.
Ja 2 ylä saman arvon, ja Tietenkin, muuntaa se isoiksi.
>> Joten intuitiivisesti, tämä korostettuna koodia on isoa ensimmäinen
kirjain t.
Mutta se ei ole pääomia, intuitiivisesti, ensimmäinen kirjain s.
Mutta jos olet ajatellut eteenpäin, mikä minä olen tulleet kun ajaa ohjelman
ja tulostaa sekä alkuperäinen, s, ja niin sanottu kopio, t?
>> He todella olemaan sama.
Ja miksi he tulevat olemaan samat?
He molemmat osoittaen täsmälleen sama asia.
Joten tehdään tämä.
>> Tehdä kopio nolla.
Se kokoaa OK.
Saanen ajaa kopio nolla.
Saanen kirjoittaa jotain Hello in kaikki pienet paina sitten Enter.
Ja se väittää, että sekä alkuperäisen s ja kopiointi ovat todellakin samat.
>> Joten mitä todella tapahtui?
Saanen piirtää tätä kuvaa vain kertoa tarina
hieman eri tavalla.
Mitä todella tapahtuu alla huppu kun julistaa jotain
char start s tai merkkijono s, Saan osoitin -
joka sattuu olemaan neljä tavua vuonna CS50 laitteen
ja paljon tietokoneita.
Ja aion kutsua tätä s.
Ja tämä on tällä hetkellä Jostain arvoa.
>> Kun julistaa muuttuja, ellet itse laittaa arvoa siellä, jotka
tietää, mitä siellä.
Se voisi olla joitakin satunnaisia ​​jono bittiä edellisellä kerralla.
Joten kun, minun rivi koodia ei saada merkkijono, ja sitten tallentaa paluuta
arvo s saada string jotenkin -
ja me lopulta kuori takaisin miten saada string teoksia, jotenkin jakaa
array, joka luultavasti näyttää vähän kuin tämä.
H-E-L-L-O, kenoviivan nolla.
>> Oletetaan, että tämä on osoite 123 vain ensimmäisen johdonmukaisuutta.
Joten merkkijono kotiinpaluuta Korostettuna siellä, se palaa
numero sanoimme, 123.
Joten mitä todella menee sisälle on täällä?
>> No, mitä todella menee sisällä s on 123.
Mutta rehellisesti, olen tulossa hieman hämmentynyt kaikki nämä osoitteet,
kaikki nämä mielivaltaisen numeroita.
123, 124, 127.
Joten todella yksinkertaistaa maailman hieman.
>> Kun puhumme osoittimia, rehellisesti, jotta meille ihmisille, jotka helkutti välittää missä
asiat ovat muistissa?
Se on täysin mielivaltaista.
Se tulee riippuu siitä, kuinka paljon muistia käyttäjä on.
Se tulee riippuvaisia, kun päivä käynnistät ohjelman, ehkä, ja
mitä tulo käyttäjä antaa sinulle.
Olemme asunnon merkityksettömiä yksityiskohtia.
>> Joten abstrakti pois ja sanoa, että kun suoritat koodiriviä näin,
char tähden s saa tuottoa arvo get merkkijono.
Miksi emme sen sijaan vain vetää mitä pitää soittaa osoitin kuin se on
osoittaa jotain?
Joten Väitän nyt, että s asti on osoitin -
alla huppu se osoite.
Mutta se vain osoittaa ensimmäinen tavu
merkkijono, joka on palautettu.
>> Jos minä nyt palata koodi tähän, mitä tapahtuu tällä rivillä?
No, tässä korostettuna nyt Olen julistaa ilmeisesti toinen
muuttuja nimeltä t.
Mutta se on myös osoitin, joten aion tehdä sitä, teoriassa, tarkka
samankokoinen laatikko.
Ja aion kutsua sitä t.
>> Ja nyt jos palaamme koodi uudelleen kun tallentaa sisälläni t,
mitä olen teknisesti laskemisesta sisällä t?
No teknisesti, tämä oli numero 123..
Joten oikeastaan ​​minun pitäisi kirjoittaa numero 123 on.
Mutta ottakaamme se korkeammalle tasolle.
t, jos se on vain osoitin, intuitiivisesti, on juuri sitä.
Se on kaikki, mitä on tallennetaan siellä.
>> Joten nyt viime mielenkiintoinen linjat koodia, kun olen itse mennä
hyödyntäminen nollamerkki t, mitä on tekeillä?
No, t kiinnike nolla osoittaa nyt mitä hahmo, oletettavasti?
>> Se osoittaa h..
Koska t kiinnike nolla -
Muistaakseni tämä on vanha syntaksin. t kiinnike nolla tarkoittaa vain, jos t on merkkijono, t
kiinnike nolla tarkoittaa saada nolla merkki, että vahvuus.
Joten mitä se todella tarkoittaa on mennä tähän array -
ja kyllä, tämä voisi olla 123, tämä voisi olla 124.
Mutta se kaikki on suhteellista, muistan.
Aina puhutaan array, meillä on etu puhu
suhteellinen indeksit.
>> Ja nyt voimme vain olettaa, että t kiinnike nolla on h.
Joten jos pyydän 2 ylä sitä, mitä se on todella tekee on isoa
pieniä h isoiksi H. Mutta tietenkin, mikä on s?
Se osoittaa samalla hiton merkkijono.
>> Joten tämä on kaikki, mitä on tapahtunut Tämän koodin toistaiseksi.
Niin mitä sitten implisiittisesti?
Miten voimme korjata nämä kaksi ongelmaa?
Miten voimme verrata todellisia jouset?
>> No intuitiivisesti, miten mennä noin vertaamalla kahta
jousille todellista tasa-arvoa?
>> Mitä se tarkoittaa, jos kaksi kielet ovat tasa-arvoisia?
Selvästikään ole, että niiden osoitteet ovat yhtä muistiin, koska se on pieni
tason täytäntöönpanon yksityiskohtia.
Kaikki merkit ovat samat.
Joten haluan ehdottaa, ja haluan esitellä versiossa yksi compare.c
täällä, joten vertaa-1.c.
>> Saanen ehdottaa, että me vielä saada osoitin kutsutaan s, ja säilytä se
palauttaa arvo get merkkijono.
Tehdään sama juttu t.
Joten mikään koodi on erilainen.
Aion lisätä hieman lisää virheentarkistusta nyt.
Joten nyt olemme tavallaan kuorinta takaisin Tämän kerrokset CS50, mitä merkkijono
todella on, meidän on oltava enemmän anaali kyse siitä, että meillä ei ole väärin
virheellinen arvo kuin nolla.
>> Joten olen juuri menossa tarkistaa.
Jos s ei ole sama kuin nolla ja t ei yhtä null, se tarkoittaa, että olemme OK.
Hanki merkkijono ei tyriä saada jompikumpi näistä jouset.
Ja voit ehkä arvata nyt, mitä ei STR CMP oletettavasti tehdä?
String vertailla.
>> Joten jos olet ohjelman java ennen, tämä on kuin yhtä menetelmää
merkkijonon luokan.
Mutta niille, jotka eivät ole ohjelmoitu ennen,
tämä on vain c-toiminto.
Se sattuu tulemaan sisään tiedosto nimeltä string.h.
Se kun se on julistettu.
>> Ja string vertaa -
Olen itse unohtaa sen käyttö, mutta mitä siitä.
Muista, että voimme tehdä mies, sekoita vertailla.
Ja tämä tulee esiin Linux-ohjelmoijat käsin.
Ja se on rehellisesti sanottuna hieman arvoituksellinen.
Mutta näen tässä, että juu.
Olen myös string.h.
>> Ja tässä sanotaan alla kuvaus " string vertailussa vertaa
kaksi merkkijonoa S1 ja S2. "Ja S1 ja S2 ovat ilmeisesti kaksi
argumenttien sisään
En oikeastaan ​​muista mitä const on, mutta nyt huomaa -
ja olet ehkä nähnyt tämän jo, kun olet käyttää man-sivut, jos
on se kaikki -
että char tähti on vain synonyymi narulla.
>> Joten se vertaa kaksi merkkijonoa, S1 ja S2, ja se palauttaa kokonaisluku vähemmän
kuin tai yhtä suuri tai suurempi kuin nolla Jos S1 on todettu, vastaavasti, olla
alle, tai vastaavat, tai olla suurempi kuin S2.
Se on vain hyvin monimutkainen tapa sanoa merkkijonon vertailla palaa
nolla, jos kaksi merkkijonoa ovat intuitiivisesti identtisiä, merkin
merkin merkki.
>> Se palauttaa negatiivinen luku, jos s, aakkosjärjestyksessä, on tarkoitus
tulla ennen t.
Tai palauttaa positiivinen luku, jos s on tarkoitus tulla jälkeen t
aakkosjärjestyksessä.
Joten tämä yksinkertainen tehtävä, voisi voit esimerkiksi lajitella
koko joukko sanoja?
>> Joten tässä uudessa versiossa, aion mennä eteenpäin ja tehdä compare1.
Dot slash vertailla yhden.
Tulen kirjoittamaan Hei kaikki pienillä kirjaimilla.
Aion kirjoittaa hei kaikissa pieniä uudelleen.
Ja onneksi nyt se tajuaa Olen kirjoittanut sama asia.
>> Samaan aikaan, jos kirjoitan hei alemman tapauksessa ja HELLO isoilla ja
vertailla niitä, olen kirjoittanut eri asioita.
Koska ei vain ovat osoitteita erilaisia, mutta olemme vertaamalla
eri merkkiä uudestaan ​​ja uudestaan.
>> No mennään ja korjata yksi Toinen ongelma nyt.
Saanen avata version yksi kopio, joka nyt käsitellään
tämän ongelman seuraavasti.
Ja tämä tulee näyttämään hieman monimutkaisempi.
Mutta jos ajattelee mitä ongelma meillä täytyy ratkaista, toivottavasti tämä on
tyhjentää vain hetki nyt.
>> Joten tämä ensimmäinen rivi, merkki alku t, vuonna Maallikon termein voisi joku ehdottaa
mitä tämä linja tarkoittaa tässä?
Char tähden t, mitä se tekee?
>> Hyvä.
Luo osoitin joitakin paikka muistiin.
Ja haluan tarkentaa hieman.
Julistaa muuttuja, joka tallentaa osoite joitakin char muistiin vain
olla hieman enemmän oikea.
>> OK, joten nyt oikealla puolella, olen koskaan nähnyt näitä toimintoja
ennen, malloc.
Mutta mitä se mahtaa tarkoittaa?
Jakaminen muistia.
Muistin jakamista.
>> Joten se kääntyy pois, tähän asti olemme ole oikeastaan ​​ollut tehokas tapa
kysyy käyttöjärjestelmä, antaa minulle muistia.
Pikemminkin meillä on nyt toiminto nimeltään malloc, että juuri näin.
Vaikka tämä on hieman häiriötekijä nyt huomaa, että
kahden Suluissa on vain olemaan numero.
Missä olen kirjoittanut kyseisen merkit voi olla useita.
>> Ja että numero tarkoittaa, anna minulle 10 tavua.
Anna minulle 20 tavua.
Anna minulle 100 tavua.
Ja malloc tekee parhaansa kysy käyttöjärjestelmä -
Linux, tässä tapauksessa -
hei, ovat niiden 100 tavua muistia käytettävissä?
Jos näin on, palautettava bytes minulle Palauttamalla osoite, joka on
ne tavua, kenties?
Ensimmäinen.
>> Niin täälläkin - ja tämä on vallitseva C, milloin olet
käsittelevät osoitteet?
Olet melkein aina tekemisissä Ensimmäinen osoite, ei väliä kuinka suuri
kimpale muisti ollaan luovutettu takaisin, niin sanoakseni.
>> Joten sukeltaa täällä.
Yritän jakaa miten monta tavua, tarkalleen?
No.
String pituus s - Katsotaanpa tehdä konkreettinen esimerkki.
Jos s on hello, H-E-L-L-O, mitä merkkijonon pituus s, ilmeisesti?
Joten se on viisi.
Mutta mulla plus 1, että miksi?
Miksi haluan kuusi tavua viiden sijasta?
Null merkki.
>> En halua lähteä pois tästä erityistä null merkki.
Koska jos teen kopion Hei ja tee H-E-L-L-O, mutta en laita
että erityistä luonnetta, tietokone ei ehkä ole, sattumalta, kenoviiva
nolla siellä minua.
Joten jos yritän selvittää kopion pituus, voisin ajatella, että
se on 20 merkkiä pitkä, tai miljoona merkkiä, jos en juuri koskaan tapahdu
lyödä kenoviiva nolla.
>> Joten meidän kuusi tavua tallentaa H-E-L-L-O, kenoviivan nolla.
Ja sitten tämä on vain olla super anaali.
Oletetaan, että unohdan mitä koko char on.
Meidän pitää sanoa se on yksi tavu.
Ja se yleensä on.
Teoriassa se voisi olla jotain erilaisia, on eri Mac tai
eri PC.
>> Joten se kääntyy pois on tämä toimija nimeltään sizeof että jos ohitat sen
nimi tietotyyppi - kuten char tai int tai float -
se kertoo, dynaamisesti, kuinka monta tavua char vie tästä
tiettyyn tietokoneeseen.
>> Joten tämä on käytännössä vain kuten sanonta kertaa 1 tai
kertaa mitään.
Mutta teen sen vain olla super anaali, että vain siinä tapauksessa char eroaa
tietokoneen vs. minun, näin matematiikka on aina menossa tarkistaa.
>> Lopuksi, täällä minä tarkistaa null, mikä on aina hyvä käytäntö - jälleen
tahansa olemme tekemisissä viitteitä.
Jos malloc ei kyennyt antamaan minulle kuusi byes - joka on
epätodennäköistä, mutta vain siinä tapauksessa -
palauttaa yhden heti.
Ja nyt, mennä eteenpäin ja kopioida merkkijono seuraavasti.
Ja tämä on tuttua syntaksia, vaikkakin eri rooli.
>> Aion mennä eteenpäin ja saada merkkijono pituus s ja säilytä n.
Olen sitten menossa kerrata alkaen i vastaa nollaan enintään n,
on suurempi tai yhtä suuri kuin.
Niin että jokaisen iteraation, laitoin nteen luonnetta s i.
luonnetta t.
>> Joten mitä todella tapahtuu alla huppu täällä?
No jos näin, esimerkiksi, on s -
ja olen kirjoittanut sanan H-E-L-L-O ja siellä on kenoviiva nolla.
Ja vielä, tämä on s osoittaa täällä.
Ja tässä nyt on t.
>> Ja tämä osoittaa nyt kopio muistia, eikö?
Malloc on antanut minulle koko murikka muistia.
En tiedä aluksi mitä missä tahansa näistä paikoista.
Joten aion ajatella näitä kuten koko joukko kysymysmerkkejä.
>> Mutta heti kun alkaa silmukoiden nollasta ylös pituuden läpi s, t
kiinnike nolla ja t kiinnike 1 -
ja laitan tähän nyt riippukuljettimella -
t kiinnike nolla ja s kiinnike nollakeskiarvoinen että aion olla kopiointi
iteratiivisesti h täällä, E-L-L-O. Plus, koska tein plus
1, kenoviivan nolla.
>> Joten nyt jos vertaa-1.c, lopulta, jos olen tulostaa
arvo t, meidän pitäisi nähdä, että s on ennallaan.
Anna minun mennä eteenpäin nyt ja tehdä tämän.
Joten tee COPY1.
Dot slash COPY1.
Aion kirjoittaa Hei, Anna.
Ja nyt huomaa, vain kopio on aktivoitu.
Koska olen todella on kaksi paloina muistia.
>> Valitettavasti et voi tehdä joitakin melko huono ja melko vaarallisia asioita täällä.
Saanen vetää esimerkki tästä nyt , joka antaa meille esimerkin muutaman
eri linjaa.
Joten intuitiivisesti täällä, ensimmäinen rivi koodia, int tähti x, on julistaa
muuttuja nimeltä x.
Ja mikä tietotyyppi Tämän muuttujan?
Mikä tietotyyppi muuttujan?
Se ei ollut jännitysnäytelmä.
>> Tietotyyppi on int tähden.
Joten mitä se tarkoittaa? X säilytä osoite int.
Yksinkertaista.
Y on menossa tallentaa osoite int.
Mikä on kolmas rivi koodia tekee siellä?
Se jaettaessa, kuinka monta tavua, todennäköisesti?
Neljä.
Koska koko int on yleensä neljä, malloc neljä antaa
Me Back osoite kimpale muistin, joka on ensimmäinen, jonka tavua on
tallennetaan nyt x.
>> Nyt olemme siirtymässä hieman nopeasti.
Star x tarkoittaa mitä?
Se tarkoittaa, mene tähän osoitteeseen ja laittaa kuinka monta siellä?
Laita numero 42 siellä.
Star y tarkoittaa mennä mitä on y ja laittaa numero 13 siellä.
>> Mutta hetkinen.
Mikä on y tällä hetkellä?
Mikä osoite on y tallentamiseen?
Emme tiedä, eikö?
Emme ole koskaan kerran käyttää tehtävän operaattori, joihin y.
Joten y ilmoitetuista toisella rivillä koodi on vain joitakin roskat arvo, iso
kysymysmerkki niin sanotusti.
Sitä voitaisiin osoittaa satunnaisesti mitään muistiin, joka
on yleensä huono.
>> Joten kun osuimme että linja siellä, tähden y vastaa 13, jotain pahaa,
jotain hyvin pahaa on noin tapahtua Binky.
Katsotaan mitä tulee päätyä tapahtuu Binky täällä hetken
tai niin näyttävät.
>> [VIDEOTOISTOSTA]
>> -Hei, Binky.
Herää.
On aika osoitin hauskaa.
>> -Mikä tuo on?
Lisätietoja viitteitä?
Voi goodie.
>> -No, päästä alkuun, taidamme menossa on pari viitteitä.
>> -OK.
Tämä koodi myönnetään kaksi viitteitä joka voi viitata kokonaislukuja.
>> -OK, hyvin, näen kaksi osoitinta.
Mutta ne eivät näytä olevan osoittaa mitään.
>> -Aivan oikein.
Aluksi osoittimet eivät viitannut mihinkään.
Asioita he viittaavat kutsutaan pointees, ja asettamalla niille on
erillisessä vaiheessa.
>> -Ai niin, aivan.
Tiesin, että.
Pointees ovat erillisiä.
Joten miten jakaa pointee?
>> -OK.
No, tämä koodi myöntää uuden kokonaislukuja pointee, ja tämä osa asettaa x
osoittamaan sitä.
>> -Hei, että näyttää paremmalta.
Joten tee se tehdä jotain.
>> -OK.
Minä dereference osoitin x tallentaa numero 42 osaksi pointee.
Tämän temppu, minä tarvitsen taikaa sauva dereferencing.
>> -Sinun taikasauvaa ja dereferencing?
Uh, se on hienoa.
>> -Tämä on mitä koodi näyttää.
Tulen juuri perustanut numero, ja -
>> -Hei, katso.
Sieltä se menee.
Näin dereference on x seuraa nuolta käyttää sen pointee.
Tässä tapauksessa tallentaa 42 siellä.
Hei, kokeile sitä tallentaa numeron 13 kautta muiden osoitin, y.
>> -OK.
Menen tänne y ja saada numero 13 perustettu.
Ja sitten ottaa taikasauva dereferencing ja vain -
Vau!
>> -Ai, hei.
Se ei toiminut.
Sano, Binky, en usko dereferencing y on hyvä idea,
koska perustamalla pointee on erillinen askel.
Ja en usko meidän koskaan tehnyt sitä.
>> -Hmm.
Hyvä pointti.
>> -Joo, me jaetaan osoittimen y.
Mutta emme koskaan aseta se viittaavat pointee.
>> -Hmm.
Erittäin tarkkaavainen.
>> -Hei, etsit hyvä siellä, Binky.
Voitteko korjata sen niin, että y pistettä samaan pointee kuin x?
>> -Toki.
Minä käytän taikasauvaa ja osoitin tehtävän.
>> -Onko se tulee olemaan ongelma kuin ennen?
>> -Ei.
Tämä ei koske pointees.
Se vain muuttaa yhtä osoittimen kohtaan on sama asia kuin toinen.
>> -Ahaa.
Nyt y pistettä samaan paikkaan kuin x.
Joten odota.
Nyt y on kiinteä.
Se on pointee.
Joten voit kokeilla sauva of dereferencing jälleen
lähettää 13 yli.
>> -OK.
Tässä menee.
>> -Hei, katsokaa tuota.
Nyt dereferencing toimii y.
Ja koska viitteitä jakavat että yksi pointee, ne
sekä nähdä 13.
>> -Joo.
Jakaminen.
Whatever.
Joten olemme menossa kytkin paikkoja nyt?
>> -Oi, katso.
Olemme myöhässä.
>> -Mutta -
>> -Muista kolme osoitin sääntöjä.
Numero yksi, perusrakenne on, että sinulla on osoitin.
Ja se osoittaa yli pointee.
Mutta osoitin ja pointee ovat erillisiä.
Ja yleinen virhe on perustaa osoitin, mutta
unohda antanut pointee.
>> Numero kaksi, osoitin dereferencing alkaa osoittimen ja seuraa sen
arrow ympäri päästäksesi käsiksi sen pointee.
Kuten me kaikki tiedämme, tämä toimii vain, jos on pointee, jonka saa takaisin
Sääntö numero yksi.
>> Numero kolme, osoitin toimeksianto kestää yksi osoitin ja muutoksia sen osoittamaan
sama pointee kuin toinen osoitin.
Niin sen jälkeen tehtävän, kaksi osoittimet
osoittaa samaan pointee.
Joskus sitä kutsutaan jakaminen.
Ja se kaikki on sitä, todella.
Bye bye nyt.
>> [END VIDEOTOISTOSTA]
>> DAVID MALAN: Joten enemmän viitteitä, enemmän Binky ensi viikolla.
Nähdään maanantaina.