>> [Musiikkia]
DAVID J. MALAN: Tämä on kuin fuksi seminaarin tänään.
OK.
Niin hyvin sateinen ulos.
Tämä yleensä tapahtuu keskiviikkoisin, mutta sitäkin tilaisuus
kysymyksiä tänään.
Joten alkaa todella kanssa elokuvan vain hetken.
Mutta aloitamme grandly kuten aina.
>> Tämä on CS50, ja tämä on viikon lopussa 4.
Joten jos olet koskaan katsonut Televisiota tai elokuvaa, jossa
siellä on tietokone asiantuntijat ja poliisi, tai FBI, tai jotkut virasto
yrittää saada kiinni joitakin vastustaja, hyvin, olet
luultavasti kuulleet sanonnan "parantaa" jolloin se teknikko jotenkin
maagisesti zoomaa äärettömän paljon nähdä rikollisia
identiteetin tai rekisterinumero parillisina hohto peilin
tai kimaltaa jonkun silmään.
Joten todellakin, nyt katsomaan muutamia tällaisia ​​kohtauksia Hollywood.
[VIDEOTOISTOSTA]
-OK, Nyt Mennään hyvä katsoa sinua.
>> -Pidä sitä.
Ajelu että takaisin.
>> -Hetkinen.
Käänny oikealle.
>> -On, Jäädyttää että.
-Koko näyttö.
-OK, Jäädyttää että.
Tiukentaa ylös, että aiotte?
-Vector Kauppaa näillä kaveri takapyörä.
-Zoom Sisään täällä tällä paikalla.
-Kun Oikea laitteet, kuva voitaisiin laajentaa ja teroittaa.
-Mikä tuo on?
-Se Tehostamisohjelma.
Voitko selvää, että mihin tahansa?
-Minä en tiedä.
Katsotaanpa parantaa sitä.
>> -Paranna Kohta A6.
>> -En Parannettu yksityiskohta, and-- Mielestäni on olemassa
tarpeeksi parantaa, vapauta se minun näytön.
-En Parannettu heijastus hänen silmässä.
>> -Anna Run tätä kautta kuvanmuokkausteknologia.
-Edgar, Voit parantaa tämän?
>> -Odota.
>> -I've Työskennellyt tämän pohdintaa.
>> -Someone Heijastus.
-Reflection.
-On On heijastus miehen kasvot.
-The Heijastus.
-On On heijastus.
-Zoom Sisään peiliin.
-Voit Nähdä heijastus.
Voitko parantaa kuvan tästä?
Voitko parantaa hänet täällä?
Voitko parantaa sitä?
>> -Voi Parannamme tätä?
>> Voitko parantaa sitä?
-Hold Toisella, minä parantaa.
-Zoom Vuonna oveen.
-Times 10.
-Zoom.
-Muuttaa.
-Lisää.
-Wait, Lopeta.
-Stop.
-Pause Se.
-Rotate Meille 75 astetta ympäri pystysuoran, kiitos.
-Stop.
Mene takaisin osan noin ovi, jälleen.
>> -Got Kuva tehostajana, joka voi Bitmap?
>> Hei, ehkä voimme käyttää Pradeep Sen menetelmä kurkistaa ikkunoita.
-tämä Ohjelmisto on uusinta.
>> -The Ominaisarvo on pois päältä.
>> -Kun Oikea yhdistelmä algorithm--
>> -Hän Ottanut poistaminen algoritmit seuraavalle tasolle,
ja voin käyttää niitä parantaa tämän valokuvan.
>> -Lock Päälle ja suurentaa z-akselin.
>> -Paranna.
-Freeze Ja parantaa.
>> [Lopeta toisto]
>> DAVID J. MALAN: Selvä, joten kaikki nämä ovat todella sanoja.
He vain kireä yhdessä että ei ole oikeastaan ​​järkevää.
Ja itse asiassa, CS50 ja kursseja kuten se taipumus pilata paljon televisiota ja elokuvia
sinua varten.
Koska kun ne tietokone asiantuntijat ravistelevat pois ehdot ja sanomalla
fancy asioita, kuten ominaisvektoria, ja z-akselin,
ja useita muita oikeastaan ​​enemmän teknisiä termejä,
he todella vain nauhassa sanat yhdessä aivan liian usein.
Onko se yksi toiveemme on, että kuten haittavaikutus kursseja
näin, tulee enemmän ihmisiä maailma todella voi punnita
ja juuri koskaan niin hieman vaikuttaa laatu ja tarkkuus näistä elokuvista?
>> Itse asiassa, nyt katsomaan todellisuutta.
Joten tässä on henkilöstön kuva Maria, yksi opetuksen Fellows.
Ja kai hän on epäillään jotain.
Ja silti, siellä on pilkahdus jotkut todiste hänen silmässä,
tai heijastus hänen silmälasit.
No, jos teemme juuri niin kuin elokuvien ehdottaa, jolloin me zoomata ja "parantaa",
tämä on kuinka paljon tietoa on Marian kasvot
kun kuvattaessa kanssa, että alkuperäinen resoluutio.
>> Ja itse asiassa, voit nähdä nämä pisteet.
Ja nämä ovat mitä ovat kutsutaan pikseliä, P-I-X-E-L-S,
joka on vain neliö tyypillisesti joka on piste, joka muodostaa kuvan.
Ja takaisin seuraavana päivänä, ja itse asiassa jopa tänään jotkut nykypäivän LED-televisiot
tai LCD-televisiot, jos sinulla yksi oman huoneen tai kotona,
jos menet ylös Super lähellä sitä, ja varsinkin jos se on hieman vanhempi TV,
voit todennäköisesti jopa nähdä nämä pisteet ja sitähän säveltää kuvan.
>> Ja ei ole enää tiedot kuin tämä.
Voisimme "parantaa", siinä mielessä tasoitus asioita yli ja tavallaan
päättelemällä sellainen, tavallaan mitä väri pitäisi olla vieressä Marian silmä
niin että se ei ole oikeastaan ​​niin pixelated.
Mutta jos pidän zoomaus, siellä on paha kaveri hänen silmässä.
Kuin että on kaikki tiedot meillä on.
Et voi luoda tiedot tyhjästä.
On vain rajallinen bittien määrä siellä.
>> Joten Harjoitus 4, jossa sinulla on mahdollisuus
pelata tällaista maailman.
Vuonna Harjoitus 4, voit tutkia maailmaan grafiikka, ja Forensics,
ja todella kirjoittaa koodia joka toipuu menetetty kuvia.
Sinun kirjoittaa koodia, joka manipuloi olevien kuvien
ja lopulta ymmärtää, mitä on meneillään alla huppu.
>> Ja se kääntyy pois, se on todella ole kovin monimutkainen.
Esimerkiksi, jos halusimme edustavat hymiö kasvot jossa
mustilla pikseliä, tai näitä mustia pisteitä,
hyvin, voisimme yksinkertaisesti edustaa ne todella bittikartta.
Ja jos koskaan kuullut, että ilmaisu bittikartta, ehkä
nyt alkaa tehdä vähän enemmän järkeä tänään.
>> Tiedämme jo mitä vähän on.
Se on 0 tai 1.
Ja kartta on vain jotain kuten paperille
joka antaa sinulle ohjeita ja on ehkä verkkoon x- ja y-koordinaatit.
Joten tässä on bittikartta.
Se on kartta bittejä jolloin 1 on ilmeisesti
menossa edustaa valkoinen pikseli, ja 0 on menossa edustamaan musta pikseli.
Mutta voisimme varmasti käännä se ympäri.
Se ei ole oikeastaan ​​väliä niin kunhan olemme johdonmukaisesti.
Ja tässä miten, vuonna binary-- sisällä tietokoneen muistiin, tai jopa sisällä
tiedoston kiintolevyn drive-- voi tallentaa
yksinkertaisin hymiö kasvot kuvia.
Mutta mitä me, tietenkin, puuttuu tämän kuvan?
Väri, eikö?
Se on selvää, että seuraava askel tai lisälaite parantaa tätä väriä.
Joten valitettavasti vain yhdellä bittinen, 0 tai 1, voisimme esittää väri.
Se voisi olla punainen tai sininen, tai musta tai valkoinen, tai vihreä, tai vaaleanpunainen,
tai paria värejä.
Mutta yksinkertaisuuden vuoksi, olemme will vain olettaa musta ja valkoinen.
>> Joten mitä loogisesti me tarvitsemme, jos haluamme halua toteuttaa kuvan värin?
Mitä meidän on tehtävä?
Kuten jos rajoittava tekijä tässä on se, että yhden bitin voit vain
edustavat kahta valtiota, 0 tai 1, valkoinen tai musta, mitä haluat tehdä?
Yleisö: Lisää tietoja.
DAVID J. MALAN: enemmän bittejä, joo enemmän tietoa, enemmän bittejä.
Ja todellakin, juuri niin värikuvia ovat edustettuina.
Sen sijaan käyttää yhden bitin, 0 tai 1 kunkin pikselin, jokainen piste,
käytät vain useita.
Ehkä käyttää 8, ehkä, yleisemmin käyttää 24, ja todellakin, vuonna Harjoitus
4, tulee pelaat tiedosto muodossa, joka käyttää 24 bittiä tyypillisesti.
>> Mutta useimmat teistä ovat luultavasti perehtynyt JPEG.
Jos olet koskaan ottanut kuva puhelimeen,
tai ladata tai nähnyt jotain Facebook, tai Flickr, mikä tahansa numero
valokuva-pohjaisia ​​web-sivustoja, olet luultavasti nähnyt JPEG ennen.
Ja se kääntyy pois, tämä on tiedosto muodossa aiomme käyttää PSET 4,
jolloin aiot täytyy palauttaa kuvia
että olen vahingossa poistettu vioittunut muistikortti kamerassa,
jos haluatte.
>> Ja käy ilmi, että vaikka JPEG on melko sophisticated--
se on paljon kehittyneempi kuin musta ja valkoisia pisteitä
näimme hetki sitten, koska siellä todella fancy algoritmeja
käytetään pakata JPEG, joten että voit olla todella mukava,
kuvanlaatu mutta käyttämällä suhteellisen vähän bittiä.
Ja me palaamme puristus ennen pitkää.
On käynyt ilmi, että ensimmäinen kolme tavua JPEG image--
mitä olet ottanut valokuvan of-- ovat arvot 255, 216, 255.
>> Toisin sanoen, jos vain nähdä, että malli bittien,
täällä edustettuina kolme tavua, tai 24 bittiä yhteensä,
suurella todennäköisyydellä voit päätellä, että etsit sitä tällä kolmen ensimmäisen
tavua JPEG.
Ja tämä on mitä kutsutaan koska allekirjoitus JPEG.
Paljon tiedostomuotoja siellä yleensä alkaa
tiettyjä malleja 0s ja 1s, niin että Windows ja Mac OS, ja IOS,
ja Android tietää minkälainen tiedosto he ovat lisäksi niin kutsutun tiedoston
laajennus paljon tiedostoja on.
Jos olet .jpg, se toinen vihje tietokoneeseen.
>> Joten nyt tarkastelemme tätä hieman teknisesti.
Tiedämme desimaalin järjestelmä on 0 kautta 9.
Tiedämme binary on 0 ja 1.
Ja jos luulet takaisin PSET 0, meillä oli sinä painia,
varten hieman, jotain nimeltään heksadesimaali,
jos sinulla on 16 numeroa, sijasta 10 tai sijasta 2.
Ja ne numeroa, sopimuksen mukaan, ovat 0 kautta 9 ja sitten
kautta f, jossa f edustaa mitä desimaaliluku, kuten nopea järki
tarkistaa?
Niin, 15.
Ja on edustettava 10, vain luonne tilaus että olen antanut.
Se on vain mielivaltainen yleissopimus, mutta se on melko tavallinen.
>> Joten jos katsomme tätä mallia kolme bytes-- katsotaanpa
vain alkaa katsomaan sitä tavalla, joka on miten
tietotekniikan tutkijoita yleisesti tarkastella ja miettiä tiedostoja.
Voit varmasti ajatella tiedostoja 0s ja 1s, ja desimaalin,
mutta todellisuudessa meillä on tapana käyttää binary tai tyypillisemmin hexadecimal--
takaisin PSET 0.
Haluan siis ehdottaa, että 255, 216, ja 255 ovat vain nämä mallit 0 ja 1s.
Ja voit tarkistaa tämän, jos haluavat tehdä matematiikka viikosta 0.
Mutta, nyt, vain olettaa että tämä on todellakin oikea.
Olen juuri uusiksi kolmen desimaalin numerot kolme binääriarvot.
Nyt mitä aion tehdä, on lisää vain tyhjää tilaa,
vain luettavuuden vuoksi.
Ja ilmoitus, olen juuri menossa siirrellä toisistaan.
Joten ennen, jälkeen, ennen, jälkeen.
Mulla mitään mielenkiintoista muut kuin vain levittää asiat niin
että ilmoitus jokaisen sarjan kahdeksan bitit on nyt kaksi neljä bittiä.
Tämä on hyödyllinen, koska heksadesimaali on erityisen muodikas
koska jokainen heksadesimaalinumero 0 f, tai tarkemmin sanottuna 0 läpi 15,
voidaan esittää täsmälleen neljä bittiä.
Toisin sanoen, heksadesimaali jos haluavat edustaa 0, se on vain 0000,
neljä nollaa.
Ja jos haluat edustaa 15, se on 1111, mikä on neljä bittiä.
Ja jos et matematiikka, jos tämä on itse paikka,
tämä on 16s paikka, joka tulee antaa sinä--
pikemminkin se on menossa to-- pahoillani, binary,
joka on menossa antaa sinulle 15, niistä paikka, kaksittain paikka, nelosta ja kahdeksikkoa paikka.
Joten haluan ehdottaa, että Aseta neljä bittiä vasemmalle
on mitä aiomme soittaa f.
Se on suurin numero voi edustaa neljä bittiä.
Ja tiedämme jo heksadesimaali, f on suurin numero heksadesimaalimuodossa.
Meillä toinen f siellä, kaksi tuolla.
Ja nyt, ota uskoon että olen tehnyt matematiikka oikea
ja että vasen puoli Näiden bittien, 1101,
on sama asia kuin d heksadesimaalimuodossa.
Ja oikea käsi, 1000, on vain 8.
>> Ja että yksi helppo nähdä, eikö?
8 represents-- on oikea alla, että kahdeksikkoa paikka.
Joten meillä on yksi kahdeksikkoa sarakkeessa ja mikään nelosta, kaksittain tai niistä.
Joten nyt enemmän tavanomaisesti, ihmisillä on taipumus kirjoittaa heksadesimaaliluvut näin,
juuri litistää ne yhteen, ja sitten etuliitteen ne 0x.
Se ei tarkoita mitään muuta kuin visuaalinen vihje human--
tässä tulee heksadesimaalinen value-- koska se ei ehkä muuten olisi ilmeinen.
>> Joka on sanoa, lopulta, että kuvio nollia ja ykkösiä,
tai rakenteessa heksadesimaali numeroa vastaavasti, että olet
aikoo aloittaa etsivät vuonna Harjoitus 4 on this--
ja Harjoitus 4 spec kävellä sinua tässä enemmän detail--
mutta ymmärtää koska tavallaan mystistä kuin tämä saattaa näyttää ensi silmäyksellä,
aiot alkaa nähdä tätä paljon.
Ja itse asiassa jopa GDB, debuggeri otimme käyttöön maanantaina
ja Dan esittelee vuonna PSET 3, tulee usein näyttää heksadesimaaliarvot
vain koska he ovat yleensä tavanomainen kuin desimaalin tai binary
maailman tietokoneita.
Nyt Taustaksi tälle.
Monet teistä saattaa muistaa tämä kuva täällä, joka tuli mitä?
Vista, joten jopa aiemmin kuin että, Windows XP teki tämän debyytti.
Joten tämä on kaunis maisema.
Ja itse asiassa, jos penkoa online-- Minusta se on Wikipedia-artikkeli,
jossa joku hyvin hämmästyttävän lähtivät löytyi tämä päin maailmaa perustettu
hänen kamera juuri oikeaan place--
ja tämä tänään näyttää like-- mutta se on täsmälleen sama asetus.
Tämä kuva on kuitenkin tiedostoon muodossa nimeltä bittikartta, b-m-p.
Ja aiomme ottaa super Pikainen vilkaisu mitä se tarkoittaa.
>> Mutta bittikartta on vain erilainen tapa edustavat kuvia edelleen käytössä pikseliä
vuonna 0s ja 1s, lopulta.
Mutta nopealla silmäyksellä, se on mielenkiintoisempi allekirjoitus
alussa tiedoston.
Se ei ole vain kolme tavua, eikä siellä
koko joukko malleja tavua jotka ovat ennalta merkitys.
Esimerkiksi jossain muutaman ensimmäisen tavua bittikarttakuvan
tulee olla koko kuva, leveys kuvan,
kuvan korkeus, niin hyödyllinen metatiedot, jos haluatte.
Hyödyllistä tietoa että Photoshop tai kuvankäsittelyohjelmaan käytät
voisi itse välitä.
>> Joten lisää tästä Harjoitus 4, mutta tämä
on vain sanoa, että päivän päätteeksi
kaikki tiedostomuodot olet käyttänyt varten years-- Microsoft Word-tiedostoja,
Numbers tiedostoja, Excel-tiedostoja, rajoittamattoman määrän tiedostomuotoja
että saattaa olla joitakin tunnettu tiedostopääte
ovat vain 0s ja 1s alla huppu.
Ja ihmiset ovat päättäneet mitä sopimukset ovat,
mitä malleja 0s ja 1s edustavat Word-tiedosto vs. Excel-tiedoston,
vastaan ​​useita muita tiedostomuotoja.
Joten PSET 4, sinun on mahdollisuus pelata kanssa.
>> Mutta mitä se tarkoittaa olla struct.
Tämä on todella mukava segue nyt osaksi C, joka on vain pari
lisäominaisuuksia, jotka emme ole katsonut vielä.
Se on aika pieni kieli ja yksi kivoja ominaisuuksia noin C on struct.
Esimerkiksi, jos halusi represent-- katsotaanpa
että haluat olla muuttuja, joka edustaa opiskelija joku ohjelma.
Ehkä olit kirjallisesti kurssi rekisteröinti ohjelma, tai ydin ostoksia
työkalu, tai jotain sellaista.
Mitä kappaletta liittyviä tietoja opiskelijalle, jotka tulevat mieleen?
Kuten opiskelija edustanut mitä arvoja?
Joo?
Sinulla nimi opiskelija.
Mitä muuta tyypillinen opiskelija on?
>> Yleisö: [äänetön]
>> DAVID J. MALAN: Niin, anteeksi.
>> Yleisö: Ikä.
>> DAVID J. MALAN: ikä tai syntymäpäivä vastaavasti, jep.
Mitä muuta?
Yleisö: ID-numero?
DAVID J. MALAN: Niin henkilötunnus, ehkä puhelinnumero, ehkä asuntolan, tai talo,
tai korkeakoulussa, tai jotain sellaista.
Mikä tahansa kappalemäärä tietojen saatat olla yhteystietoluettelossasi
on mitä voisi määritellä opiskelija.
Joten jos halusimme tehdä tämän koodin, voisimme tehdä jotain yksinkertaista, kuten tämä.
Meillä saattaa olla ohjelman niin, että on sanokaamme, int main (void).
Ja jos haluan edustaa opiskelija voisin olla, esimerkiksi,
merkkijonon kehotti nimi että opiskelija, merkkijono nimeltään asuntolan että opiskelija,
ehkä int kehotti tunnus että opiskelija.
Ja koska olen käyttäen merkkijono, minä täytyy mennä takaisin ja laittaa ylös CS50.h.
Ehkä olen menossa on stdio.h.
Joten anna minun ennaltaehkäisevästi tehdä noita ja minä olen aikoo kutsua tätä student.c nyt
ja tallentaa.
>> Ja nyt voin tehdä jotain näitä muuttujia.
Ja me juuri menossa kirjoittaa että kuten kommentti pseudokoodin,
koska se ei ole kiinnostavaa mitä teemme nyt.
OK, joten tämä on ohjelma, joka jotenkin tallentaa opiskelija.
Mitä haluan tehdä, jos haluat tallentaa kaksi opiskelijaa?
Joten minun ensimmäinen vaisto on menossa olla kunnossa, odota minuutti,
jos minulla on toinen opiskelija Miksi en vain tehdä merkkijonon nimi 2, merkkijono asuntolan 2,
int ID2.
Ja olemme tehneet mennyt tällä tiellä ennen
ja mikä oli meidän ratkaisu mitä näyttää olla eräänlainen hackish Kopioi Liitä
työ täällä?
Yleisö: array.
DAVID J. MALAN: Joo, voisimme käyttää array.
Oikea tämä hyvin nopeasti työskentely ruuhkautuu.
Sinun täytyy lajitella mielivaltaisesti aloittaa nimeäminen kaikkia näitä muuttujia.
Ja sinä, ihminen, on pidettävä seurata, että OK NAME2 vastaa
kanssa dorm2 vastaa ID2.
Se vain tulee sotkua.
Niin se on paljon helpompaa, muistamme muutama viikko sitten,
vain ottaa kutsutaan merkkijono nimet ja ehkä antaa meille kolme näistä.
Ja sitten ehkä meillä merkkijono asuntoloissa ja on
kolme näistä, tai vakio, int tunnukset ja kolme noita.
Mutta jo nyt tämä tuntuu hieman huolimaton, oikea.
Puhumme opiskelijoita ja vielä Olen todella asunnon alhaisella tasolla
toteutuksen yksityiskohdat.
Opiskelija nimi ja asuntolan ja tunnus.
>> Miksi en voi vain julistaa muuttuja nimeltään opiskelija ja kutsua sitä s.
Ja jos haluan toisen opiskelijan, miksi en vain kutsua sitä T.
Tai jos haluan koko joukko opiskelijoiden, miksi en vain
sanoa, että olen koko luokan opiskelijoille, ja se on kolme.
Toisin sanoen, miksi en tulla kanssa oman datatyypin, nimeltään
Opiskelijoita, jonka sisällä on nimi, on tunnus, on asuntolan,
on useita muita kenttiä.
Ja se osoittautuu sinua voi tehdä juuri näin.
>> Joten C on tämä ominaisuus nimeltä struct.
Se kielen ominaisuus, joka antaa meille mahdollisuuden tehdä juuri tämän.
Aion mennä eteenpäin ja avata structs.h
minne olemme menossa katsomaan seuraava määritelmä opiskelija.
On käynyt ilmi - ja tämä on jopa yksinkertaisempi kuin yksi mukana tunnus
hetki sitten.
Jos haluat keksiä kotitekoisia tietotyyppi,
ja lisäksi int, ja nieriää ja float ja kaikki nämä muut olemassa,
voit tehdä niin kirjaimellisesti kirjallisesti typedef struct,
sitten jotkut aaltosulkeita, jonka sisällä sinua
luettelo muuttujat haluat liittävät tämän uuden mukautetun tiedot
kirjoita kuten nimi ja asuntolan, ja sitten sen jälkeen aaltosulkeita
annat nimen uusien tietojen tyyppi.
Niinpä esimerkiksi, opiskelija.
>> Ja mitä mukavaa tästä on, että nyt jos katsomme vastaava koodi,
yleissopimus, ensimmäinen Kaikkien, on laittaa tämä
tiedostoon nimeltä jotain piste h, header-tiedosto, joka meillä ei
alkoi käyttää itseämme liikaa.
Mutta aiomme aloittaa käyttäen melko vähän nyt.
Ja mitä voimme tehdä tämän, lopulta, näissä muutaman rivin koodia
on julistaa juuri sitä tietotyyppi, opiskelija.
Ja Nyt käyttää sitä.
>> Aion nyt mennä tiedosto nimeltä structs1.c.
Ja lähdetään katsomaan harvat ominaisuudet täällä.
Joten tukkia tässä enimmäkseen tuttuja, ja me
palata mikä ei ole tuttu vain hetken.
Tämä tietenkin on myös omassani header-tiedosto, joka on uusi myös,
paitsi PSET 3 missä, Recall, meillä on helpers.h.
Joten saatat muistaa # include helpers.h.
>> Miksi vaikka minulla on käytössä lainausmerkkejä sijasta kulmassa suluissa?
Milloin voin valita ne?
Lähes aina Näytän käyttää kulma suluissa.
Ja sitten, yhtäkkiä on line kuusi Käytän lainausmerkkeihin.
Miksi voisi olla?
Joo?
>> Yleisö: [äänetön]
DAVID J. MALAN: Se todellinen, mitä?
Yleisö: Se on teidän IDE.
DAVID J. MALAN: Joo, se on minun todellinen IDE.
Ja älkäämme viipyä IDE, koska se on vain työkalu, joka olen käyttäen.
Se on minun nykyinen hakemiston, erityisesti.
Joten structs.h on oma tiedosto ei asennettu IDE,
käyttöjärjestelmä itse, vaan se on minun hakemistossa.
Joten yleissopimus on, jos haluat sisällyttää oman header-tiedosto,
käytät vain lainausmerkkejä.
>> Mitä me kutsumme tätä asia linja 8, yleisesti ottaen?
Tämä on mitä?
#define jotain.
Tämä on vakiot, eikö?
Jos haluat olla arvoa ohjelman
että käytät koko joukko kertaa, se on
hyvä yleissopimus tekijä sitä, julistaa, että se, hash symboli
määritellä, sitten Sopimuksen mukaan kaikissa isoiksi word-- vaikka se ei ole
ehdottoman välttämätöntä, mutta se on ihmisen yleissopimus
hyödyntää vakioita jotta ne hyppää ulos
sinua visually-- tilaa ja niin arvo haluat olla
vastaa, että jatkuva nimi.
Ei puolipiste, mutta voit yksinkertaisesti seuraa, että kuvio siellä.
>> Joten mitä teen tässä todellinen koodi.
Joten katsomaan pääohjelma täällä.
Linjassa 12, koska olen ovat olleet structs.h,
Minulla on nyt maagisesti minun hävittäminen uusi tietotyyppi.
Minulla ei vain ole pääsyä int, ja nieriää, ja kellua, ja string,
ja sininen ja muut.
Minulla on nyt pääsy opiskelija tietotyyppi.
Joten linja 12, olen yhdistämällä kaksi ideas-- yksi mukautetun tietotyyppi ja kaksi,
käyttäen array.
Ja niin tässä ohjelmassa, jos Haluan todella tukea
kolme eri opiskelijat minun ohjelma, minä
voi yksinkertaisesti sanoa antaa minulle muuttuja kutsutaan opiskelijoita, joista jokainen
on tyyppiä opiskelijoita, jotka minulla on tapana tietotyyppi.
Ja, erityisesti, anna minulle kolme näistä minun array.
>> Joten nyt mitä me teemme tässä ohjelmassa?
Tässä on vain varten silmukka iteroimalla 0-3, koska se on
mitä arvo opiskelijoiden on.
Olen vain kehottaa käyttäjää anna minulle opiskelijan nimi.
Ja sitten linjassa 17, me on enimmäkseen tuttuja linja.
Meillä on vanha ystävä GetString oikealla.
Ja mitä pala syntaksin on ilmeisesti uusi,
jos et ole koskaan ohjelmoitu C ennen, eikä ole koskaan käyttänyt structs?
Joo?
>> Yleisö: .name.
DAVID J. MALAN: .name.
Mutta tämä ei ole liikaa harppaus, koska nyt opiskelijat kannatin i
antaa sinulle i: nnen opiskelija.
Ja jos haluat sukeltaa sisällä että rakenne,
käytät vain yhden kerran ja sitten muuttujan nimi sisällä,
tai omaisuuden sisällä että haluat päästä käsiksi.
Samoin silloin, jos en sitten pyytää käyttäjä, anna minulle opiskelijan asuntolan,
voit samalla tallentaa että merkkijono asuntolan muuttuja sisällä
Kyseisen opiskelija rakenne.
>> Ja nyt asiat saavat hieman fancy.
Ja tämä tulee näyttämään klo ehkä paljon melko pian.
Mutta näet tämän paljon enemmän PSET 4, joten haluan vain vilkaista sitä nyt.
On käynyt ilmi, että linja 23 kautta 38, mitä luulet minun kenties tekemässä?
Olen poistanut kommentit tänään, mutta versio
koodi verkossa viittaus on kaikki kommentit.
Mitä Näytän tekevän?
>> Yleisö: tallentaminen tiedoston kaikki tiedot, jotka käyttäjä on antanut.
>> DAVID J. MALAN: Joo, juuri, tämä on uusi tapa
että näemme kaksi, Toinen piirre C,
jolloin voin luoda oman tiedostoja.
Tähän mennessä lähes jokainen ohjelma olet kirjoittanut on kansalaisuudeton.
Heti kun se on tehty käynnissä, se on siinä.
Ei ole muistia tai muistikuvaa siitä.
Ei ole tallennettu tiedosto.
Mutta jos et halua tallentaa tulo että on
tapahtui, kuten pelin tai ohjelman näin, se kääntyy pois voimme tehdä niin.
Ja näet tämän lisää vuonna PSET 4 ja jaksossa.
Mutta tämä linja 23 olennaisesti luo tiedosto nimeltä students.csv.
Ja ehkä nähnyt tämän ennenkin.
Vaikka et ole koskaan opiskellut CS ennen, CSV on pilkulla erotettuna muuttujia.
Se on kuin hyvin köyhän versio Excel-tiedoston,
mikä tarkoittaa, että se voidaan avata Excel ja Apple numerot,
ja se on rivejä ja sarakkeita.
Mutta se ei ole omaa muodossa, kuten Microsoftin tai Applen.
Se on vain pilkkuja erottamalla arvot että näemme hetken kuluttua.
>> Ja ota arvaus.
Linjassa 23, aivan Lopulta minun toinen väite
tähän uuteen toiminto nimeltään f avoinna tiedosto auki on w.
Mikä mahtaa W tarkoittavat?
Joo?
>> Yleisö: Sen avulla voit kirjoittaa tiedostoon?
>> DAVID J. MALAN: Sen avulla voit kirjoittaa tiedostoon.
Joten siellä on pari vaihtoehtoja että voimme plug täällä.
Mutta jos haluat vain lukea tiedosto, joka on katsoa sitä
ja lukea sen muistiin, voit vain käyttää lainaus lainaus päättyy "R".
Jos haluat kirjoittaa tiedosto, käytät lainaus lainaus päättyy "w".
Mukana on myös liittää ja pari muutakin
jos haluat muokata olemassa olevia tiedostoja.
Nyt aiomme pitää nähdä tämä asia, niin me palaamme linja 24.
NULL, se kääntyy pois, on erityinen arvo
voidaan palauttaa tiettyjä toimintoja jos jotain on mennyt wrong--
jos tiedostoa ei ole olemassa, jos olet loppuu muisti,
tai joukko muita virheitä.
Mutta nyt, haluan vain olettaa, että tämä on vain tavanomainen virheentarkistus.
Täällä linja 26, olen iteroimalla 0-3 kaikkia oppilaitani.
Ja tämä on tavallaan eräänlainen Uuden toiminnon, fprintf,
mutta ota arvaus.
Jos printf on vain tulosta muotoiltu merkkijono,
mitä fprintf luultavasti tarkoittaa?
Yleisö: Tulosta tiedostoon.
DAVID J. MALAN: Tulosta muotoiltu merkkijono tiedostoon.
Sitähän lisää f keino on tiedosto.
Ja uusi ensimmäinen väite on oltava muuttuja, joka edustaa tiedosto.
Sitten vain formaatti string kuten printf.
Ja vaikka tämä syntaksi on uusi, tämä vain
tarkoittaa kytke opiskelijan nimi, plug-in opiskelija asuntolan, ja sitten
kanssa fclose, sulje tiedosto.
Ja sitten lastly-- tämä on uusi ja me palaamme tähän
ennen long-- Olen vapauttaa opiskelija syistä
tapahtui ylhäällä siellä.
Mutta tulemme takaisin sen, että ennen long--
se johtuu siitä, miten GetString on itse asiassa työskentelevät alla huppu.
>> Joten ottaa vilkaista täällä.
Jos kirjoitan ls minun hakemistoon, huomata, että en
on tiedosto nimeltä students.csv, vain ole siellä, ei ole olemassa.
Jos siis nyt kokoamaan tämän ohjelman, tehdä structs-1. / Tietueet-1,
ja aion mennä eteenpäin ja kirjoita Andi, joka asuu Berkeley Yalen.
Aiomme olla Rob jotka asuu Thayer näinä päivinä.
Ja nyt keksiä missä on, mielestäni, Maria on Mather,
jos olen muistanut oikein.
>> Joten mitään ei tunnu tapahtuvan.
Mutta jos kirjoitan ls nyt, on students.csv.
Mennään eteenpäin ja avoin students.csv.
Tämä on jälleen hyvin kevyt tiedostomuoto.
Mutta olen yksinkertaisesti antoi yleissopimus että minulla on kaksi riviä ja sarakkeita.
Ensimmäisessä sarakkeessa on ihmisten etunimet.
Toinen sarake on opiskelijan asuntolan, tai korkeakoulussa, tai talon, tai vaikka mitä.
Ja nyt olen tallentanut tämän pysyvästi tiedostoon.
>> Joten se ei ole kaikki, että mielenkiintoinen.
Mutta tämä on vain ponnahduslauta nyt , että voi jatkua tiedot
pysyvästi.
Katsotaanpa nyt, mitä enemmän voimme tehdä näitä ja muita ominaisuuksia.
Mutta ensin kysyttävää?
Se oli paljon, ja se oli nopea.
Mutta näet paljon enemmän PSET 4, samoin.
Joo?
>> Yleisö: Onko olemassa tapa jatkaa lisäämällä nimiä tiedoston?
>> DAVID J. MALAN: Hyvä kysymys.
Onko tapa jatkaa Nimien lisääminen tiedoston?
Kyllä.
Ja itse asiassa, jos lopetat up uudelleen tiedoston avaus
käyttäisit lainaus lainaus "" varten append,
joka olisi vain lisätä uuden rivin, Uusi linja uudestaan ​​ja uudestaan, tarkalleen.
Hyvä kysymys.
Muita kysymyksiä?
Joo?
Yleisö: Jos suoritit ohjelma uudelleen juuri nyt,
olisi se pitää lisätä nimet tiedostoon tai olisiko avata uuden tiedoston?
>> DAVID J. MALAN: Ah, hyvä kysymys.
Jos juoksi ohjelman uudelleen oikea nyt, ehkä kirjoittanut uudet nimet,
olisi se lisää tiedosto tai korvata tiedoston?
Jälkimmäinen, koska olen et käytä append tilassa.
Ja koska olen vain sokeasti tiedoston avaus kirjoittamista varten,
se vain menee korvata tiedoston.
Joten haluan todellakin tarvitsee vain liittää, jos haluan todella olla pitkällä aikavälillä
tietokanta.
>> Nyt CSV on hyödyllinen, suoraan sanottuna, vaikka sillä kuten jos olet writing--
ja me lopulta nähdä tämä myöhemmin lukukauden kun
käytämme CSV-raportit voivat muihin tarkoituksiin.
Jos haluat tallentaa kaikki ihmiset jotka ovat rekisteröityneet jostakin tapahtumasta,
tai rekisteröitynyt oman opiskelija ryhmä, tai jotain,
datan tallentamisen tällaisessa muotoa on erittäin kätevä.
Koska kirjaimellisesti, jos en olivat lataat tämän tiedoston.
Voisin double-- ja nyt itse kokeilla tätä
jos minulla on Excel tai Numerot täällä.
>> Aion hiiren kakkospainikkeella tai Control-osoita minun arkistoida.
Oho.
Hiiren kakkospainikkeella tai Control-osoita minun arkistoida.
Tule, minun hiiri ei ole yhteistyötä.
Download-- Aion ladata kaikki tiedostot täällä niin
vain jotta voin napata tämä yksi.
Ja katsotaan, jos tämä toimii students.csv-- ensimmäistä kertaa
Olen aktivoitu.
Nyt he haluavat nähdä minun yhteystiedot.
Nyt minun täytyy rekisteröityä.
Katso, miten helppoa se on käyttää CSV-raportit voivat?
Kyllä, pitää sen ajan tasalla.
OK, nyt olemme valmiita luokan.
OK, oi, mitä uutta?
OK, sulje.
Se oli maaginen.
OK, nyt meidän on päivitettävä.
Ja nyt, se unohtanut, mitä tiedosto Olen alun perin avannut,
mutta mitä a-- siellä mennään.
OK, joten nyt meillä on Excel-tiedoston.
Kiitos.
>> OK, joten mitä tein oli helppoa.
Tietenkin olisin voinut esiasennettuna Excel- tai numerot, tai mitä ohjelmaa.
Mutta tämä on mukava, koska nyt voin manipuloida
tiedot vakiomuodossa.
>> Joten nyt Katsotaanpa yhteydessä vaihtaa mihin jäimme
viime kerralla, jonka oli määrä aloittaa ottaa pois apupyörät.
Mutta ensin sinun ei nähdä tämän aikaisemmin lounas
jälleen tapahtuu täällä Palo ja Ice Cambridge, Sitar New Haven.
Rekisteröidy ylös CS50s verkkosivuilla ASAP liittyä CS50 opiskelijoille ja henkilökunnalle.
>> Joten otimme apupyörät pois maanantain follows--
merkkijono on ilmoitettu CS50s kirjasto jonkin aikaa.
Ja se on mukavaa, koska se mahdollistaa voimme puhua muuttujien olevan
kokonaisia ​​sanoja ja lauseita ja enemmän.
Mutta se osoittautuu merkkijono ei ole olemassa.
Se on vain synonyymi, tai alias, että olemme luoneet jotain,
itse asiassa on hieman tekninen kutsutaan char *.
>> Ja todellakin, näimme esimerkki ohjelman maanantaina
että ei käyttäytynyt aivan kuin odotimme.
Tämä oli tiedosto, vertaa-0.
Ja muistuttavat, että vertaat-0, jos Olen kääntää maanantain ohjelma
ja ajaa vertaa-0 ja kirjoita äiti vuonna pieniä, ja äiti pienillä kirjaimilla uudelleen.
Ohjelma vaati I Kirjoita eri asioita,
vaikka äiti, kaikki pieniä, on sama visuaalisesti.
Joten mikä oli lyhyt vastaus miksi tietokoneen ajattelee
nämä kaksi merkkijonoa ovat erilaisia?
Joo?
>> Yleisö: [äänetön]
DAVID J. MALAN: Oikea.
Niin, äiti, ensimmäistä kertaa Kirjoitan sen, ollaan
tallennettu jonnekin tietokoneeni muistia, mutta eri paikassa
kuin toinen kerta, kun kirjoitat äiti.
Nyt se varmasti voitaisiin optimoida.
Tietokone voi olla fiksu ja ymmärtää nämä kaksi merkkijonoa, hei,
he identtisiä.
Saanen ei tarpeettomasti säilytä sitä.
Mutta tietokoneet eivät tee sitä optimointi, ellet kerro heille.
Joten, oletuksena, he juuri menossa päätyä
kahdessa eri paikassa muistiin.
Ja niin olla selvempi, kun vertasimme kaksi merkkijonoa,
ensimmäinen oli nimeltään s, toinen oli nimeltään
t, mitä nimenomaan oli I verrataan täällä line 13?
Joo.
>> Yleisö: Se on paikka muistiin että muuttuja osoittaa.
>> DAVID J. MALAN: Aivan, olin vertaamalla paikka muistiin
että nämä muuttujat viittasivat.
Joten erityisesti, jos äiti oli tavu numero 1, ja 2, ja 3,
ja 4-- koska muistan kenoviiva 0 on oltava aina lopussa.
Ja muut esiintymä äiti, m-o-m, oli osoitteessa 10, 11, 12, ja 13.
Olin vertaamalla 1, että osoite, että paikalla muistissa,
vastaan ​​10, joka on tietenkään ole sama.
1 ei ole 10.
>> Joten tämä on mukavaa, että se on melko yksinkertainen.
Mutta se on ongelmallinen sikäli kuin emme voi näyttää verrata jouset.
Niin fundamentally-- ja tällä alhaisella tasolla,
jos halusi toteuttaa ohjelma verrata
kaksi erillistä sanaa, jotka käyttäjä on kirjoitettu laatua,
he riviin char varten char, vain yleisesti,
mitä meidän täytyy tehdä, ilmeisesti?
Se ei ole riittävää vain Katso näitä kaksi osoitetta.
Mitä meidän pitää tehdä?
Joo?
>> Yleisö: kerrata kautta string [kuultavissa].
>> DAVID J. MALAN: Joo, katsotaanpa kerrata läpi merkkijono.
Katsotaanpa käyttää silmukka, kun silmukka, tai mitä olet eniten mukava.
Ja jos meillä kaksi merkkijonoa jonnekin muistiin, Katsotaanpa jokaisen n
Ensimmäinen merkki, jokainen toinen merkki, sitten kolmas, ja neljäs,
ja viides, kunnes osuma mitä erityisiä Sentinel arvo?
Yleisö: [äänetön]
DAVID J. MALAN: Joo, kenoviiva nolla, minkä jälkeen joko merkkijono
voimme päättää se on siinä.
Olemmeko Hyväksytty jokainen merkki?
Jos ei, return false.
Jos näin on, return true.
Ja niin se on juuri mitä tämä versio Ohjelman vertaa-1.c tekee.
Se on sama kuin mitä me Katsoin maanantain paitsi että olen
päässyt eroon sanan string-- vaikka että ei ole toiminnallista impact-- kaikki
Teen nyt on poistaa joitakin visuaalisia apupyörät,
mutta nähdä selvästi, että s ja t ovat osoitteita.
Ja sitähän tähti, tähti, edustaa
on osoite, joka tunnetaan teknisesti osoittimena.
>> Joten kun Vakuutan s linja 9 ja sanoa char * s,
se ei tarkoita antaa minulle merkkijono.
Tämä tarkoittaa antaa minulle muuttuja, jonka tarkoitus elämässä on säilyttää osoite.
Koska olen aikeissa laittaa osoitteen merkkijono siihen.
Ja todellakin, GetString, olla kirkas, ei palauta merkkijonon.
Se ei palauta äiti kenoviiva nolla, sinänsä.
Mitä GetString erityisesti ja tarkasti palata?
Yleisö: [äänetön]
DAVID J. MALAN: osoite, osoite ensimmäisen merkin
Joissakin merkkijono se on saanut.
Ja nyt näemme erityinen avainsana uudelleen.
Ja minä viittasi tähän aiemmin.
Tämä tulee olemaan hyvä yleissopimuksen että näemme uudelleen ja uudelleen nyt.
Olen tarkkailun varmistaa, että s ei ole nolla ja t ei ole nolla.
Koska perustuu minun todella nopea mainita aikaisemmin,
mitä saattaa merkitä, jos GetString palauttaa ei osoite mutta N-U-L-L, joka on jälleen,
joitakin erityisiä arvoa?
>> Yleisö: Virhe.
>> DAVID J. MALAN: Se on virhe.
Jotain meni pieleen.
Ja mitä tyypillisesti voi tapahtua, erityisesti
kanssa strings-- jotka saattavat olla tuntemattomien pituus advance--
ehkä tietokoneet " muisti, ehkä
kirjoitit tällaisessa pitkä sana tai lause
tai liittää niin valtava essee siellä vain ole tarpeeksi muistia.
Ja niin GetString voi palauttaa osoitteen koko juttu,
niin se vain palauttaa mitään.
Ja se sanoo virhe on tapahtunut palauttamalla erityinen NULL arvo.
Se on nolla osoite, niin sanoakseni.
>> Nyt on käynyt ilmi C mukana toiminto, joka tekee sen iterointia.
Meillä ei tarvitse toteuttaa tämän kanssa silmukan tai while-silmukka itse.
Voimme käyttää toimintoa, nimeltään ytimekkäästi,
sekoita comp, tai merkkijono vertailla, jonka tarkoitus elämässä on tehdä juuri näin.
Annat sille kaksi osoittimia, kaksi osoitetta, ja se menee osoitteet
ja sitten verrata kirjain kirjain, kirjain laatu,
pysähtyen vain silloin, kun mikä on totta?
Kun intuitiivisesti pitäisi sekoittua Comp lopettaa iteroimalla, vain olla selvä?
Kun se osuu kenoviiva 0 joko string, jolloin se voi päättää
on kaikki Hyväksytty, tai ei ole ollut ristiriita?
>> Joten, jos me suorittaa tämän nyt ja kokeile meidän pikku-arvo peli,
joten varmista vertailla-1, ./compare-1, ja Kirjoita äiti pienillä molemmilla kerroilla.
Nyt se on sama asia.
Ja jos teen sen uudelleen pieniä ja sitten ehkä isoja.
Nyt se todellakin erottaa pien- ja suuraakkosten välillä.
Joten kaikki, että kova tai maaginen, mutta se ei nyt selittää
mitä tapahtuu alla huppu.
>> Mitä enemmän voimme poimia tällaisesta oppitunnin?
Joten katsomaan tätä.
Aion mennä eteenpäin ja kirjoittaa nopea ohjelma tässä kutsutaan copy-0.
Ja nyt mennään eteenpäin ja todella Tehdään this-- kopio-0,
katsomaan mitä minulla täällä.
Haluan ensin kertoa käyttäjälle, sanoa jotain.
Sitten saan merkkijono ja minä varastoidaan sen s.
Sitten minä tarkistaa, jos s on yhtä kuin vastaa NULL, vain palata 1.
Joten tämä on vain standardi virheentarkistus.
Mitään mielenkiintoista on tapahtunut.
Ja itse asiassa, jos me eroon virhe tarkistus-, tämä näyttää viikolla 1 koodi
hetkellä.
Mutta olen alkanut saada vähän paremmin siitä.
>> Nyt linja 16, viikko sitten, ehkä jopa pari päivää tai minuuttia sitten,
saatat sanoa linja 16 on luodaan muuttuja nimeltä t
ja kopiointi s siihen.
Ja se on täysin kohtuullinen takeaway.
Mutta tarkemmin nyt.
Mitä tapahtuu linja 16?
Mitä on tulossa kopioidaan oikealta vasemmalle?
Joo?
Yleisö: on t saada osoitteen s?
>> DAVID J. MALAN: Aivan, t on saada osoitteen s.
Joten tehtävä selväksi nyt, jos menen takaisin tämän aikaisemman esimerkin
ja minä vetää ulos mitä olen kirjoittanut.
Ja mitä olen kirjoittanut in-- tässä s, ja tässä
on mitä olen kirjoittanut jossain muisti, äiti ja sitten kenoviiva
0 joka on lisätty minulle.
Mitä minä tallennettu täällä, muistaa, tämä on paikassa 1, 2, 3, 4,
tämä on mitä tällä hetkellä n.
Joten jos linjalla 16, sanon anna minulle toinen muuttuja nimeltä t ja tallentaa
klo arvon s, mitä saa säilyttää täällä ei äiti
vaan vain numero 1.
>> Joten jos katsomme eteenpäin tässä ohjelmassa nyt, mitä tulee tapahtumaan?
Niin huomaa, että on olemassa tämä toiminto saatat
ovat käyttäneet tätä jonkin aikaa sitten Caesar, tai Vigenere, tai ehkä ei ollenkaan.
Väitän minun printf, olen menossa hyödyntää kopion t.
Ensimmäinen rivi 19, nopea järki tarkista, strlen tarkastukset pituus t.
Koska en halua yrittää hyödyntää jotain
jos ei ole merkkijono siellä.
Jos käyttäjä painaa Enter, ei ole mitään hyödyntää.
Joten en halua tehdä linja 21.
Joten linja 21 capitalizing joka kirjeen, ilmeisesti, t?
>> Yleisö: m?
DAVID J. MALAN: Se näyttää kuten se on kopiointi kumpi?
Yleisö: m.
DAVID J. MALAN: Tuota, m.
OK, joten ensimmäinen m, koska ilmoitus, että olen
ohimennen toupper, joka jos et ole koskaan nähnyt sitä se on
vain toiminto hyödyntämään sen panos.
t kiinnike nolla tarkoittaa antaa minulle nolla luonnetta t.
Ja niin miten tämä kuva muutos, olla selvä?
Mitä pitää saada kirjoitettu uudelleen tai muuttaa suhteen s ja t ja äiti
kenoviiva nolla.
>> Yleisö: [äänetön]
>> DAVID J. MALAN: Joo, joten tämä yksi täällä yksinkertaisesti
tarvitsee saada muuttunut to-- korjata this-- pitää saada muuttunut pääoman m.
Mutta nyt, katso myöhemmin ohjelma, jos olen tulostaa
s ja t kuin siivoan täällä, katsella mitä tapahtuu tulostaa s ja t.
Niin tehdä kopio-0, ./copy-0.
Anna minun mennä eteenpäin ja kirjoita vuonna äiti on pienillä.
Huomaa, sekä alkuperäisessä kopio on aktivoitu.
Miksi?
Hyvin, s ja t ovat molemmat osoittavat, jos haluatte, sama murikka muistia.
Ja rehellisesti, tämä on tulossa todella uninteresting-- se
että käytämme osoite nolla täällä.
Tarkoitan, en todellakaan välitä jossa tavaraa on muistissa.
Anteeksi pyyhkimällä hieman liikaa.
Mutta en oikeastaan ​​välitä jossa asiat ovat muistissa.
Ja niin, todellakin mitä ohjelmoijat taipumus ajatella
on, että kun puhut osoitteen, tai osoitin,
joka välittää missä se on muistissa.
En välitä, jos se on tavu yksi tai miljardi.
Minä vain välitä, että tämä muuttuja on tehokkaasti
osoittaen että murikka muistia.
Ja niin, vastedes, pikemminkin kuin saivarrella yli mielivaltaisen muistin osoitteet, katsotaanpa
vain alkaa tehdä osoittimia osoittimia, kuten nuolet.
Joten mitä s ja t todella ovat, Tämän ohjelman mukaisesti,
koska miten Loin t, se on vain kaksi erillistä muuttujaa
osoittaen samalla murikka muistia.
Ja emme välitä, missä ne ovat.
Joten voimme abstrakti pois, että yksityiskohtia.
>> Joten miten voin korjata tämän?
Jos haluan kirjoittaa version kopio ohjelma, joka todella kappaletta merkkijono
ja aktivoi vain kopio, vain intuitiivisesti,
mitä täytyy olla ainesosa meidän ratkaisu?
Yleisö: [äänetön]
DAVID J. MALAN: Tarvitsemme mitä?
Yleisö: murikka muistia.
DAVID J. MALAN: Tarvitsemme toinen kimpale muistia, eikö?
Emme tiedä, miten tehdä sitä vielä, välttämättä.
Mutta olen sellainen täytyy tämän tapahtua niin että alkuperäinen äiti pienin kirjaimin
päätyy että ylimääräinen murikka muistia.
Ja sitten kun muutan kopio, minä eivät halua muuttaa tämä kopio täällä.
Olen sen sijaan haluat muuttaa vain tämä kopio niin että alkuperäinen on ennallaan.
>> Niin, Katsotaanpa, miten voisimme tehdä tämän.
In copy-1, joka on jo viety kommentti,
mutta ei kommentoi verkossa.
Me sen sijaan tehdä following-- nämä linjat ovat samat, saat minut merkkijono
ja kutsuvat sitä s.
Mutta nyt Katsotaanpa yksi kaikkein monimutkainen mutta viimeinen monimutkaisuus
jonkin aikaa, linja 16 tekee juuri tämän.
Joten jos mukava kanssa kuva me vain drew--
anna minulle uusi kimpale muistia, kopioida kaiken siihen,
Katsotaanpa, miten voimme kääntää, että koodin.
>> Joten linja 16, vasemmalla puolella, char * t antaa minulle tämä jos tänne.
Siinä kaikki se tekee.
Oikealla puolella, m Alloc, tai malloc,
on muistin jakamista, Super fancy, arvoituksellinen tapa vain sanoa
antaa minulle palan muistia.
Kuinka paljon muistia tarvitaan?
No, on tavallaan iso ilme.
Mutta katsotaanpa, mitä tässä sanotaan.
Joten tämä tietenkin on antaa minulle merkkijonon pituus n.
Niin, äiti olisi mitä?
Joten vain kolme, eikö? äiti on kolme merkkiä.
Sinun ei lasketa kenoviiva nollaan, kun
puhua pituus merkkijono on todella ihmisen näkyvissä kirjaimet.
Niin äiti, joten tämä antaa minulle 3.
Mutta hetkinen, olen nyt lisäämällä 1.
Miksi todella haluavat jakaa 4 tavua eikä vain 3?
Joo?
>> Yleisö: Sentinel arvo?
>> DAVID J. MALAN: Aivan, että Sentinel arvo.
Sillä kenoviiva nolla, Tarvitsen 4 tavua yhteensä.
Joten minun on pituus merkkijonon plus 1.
Ja sitten vain hyvä measure-- vaikka tätä järjestelmää,
se on aina olemaan 1-- sanon moninkertaistaa tätä koko char.
Osoittautuu sizeof on operaattori C että
vain kertoo tavujen, joka on
vaaditaan tiettyjen tietojen tyyppi.
Se ei toimi paneelit, tyypillisesti, joskus se tekee.
Mutta yleisessä tapauksessa ei.
Mutta se kertoo minulle, kuinka monta tavua nieriä on, joka osoittautuu on aina 1.
Joten tämä on kuin kertomalla 1.
>> Joten Super arvoituksellinen etsivät riviä koodia.
Mutta kaikki se on antanut minulle kimpale muistia.
Mutta se näyttää olevan kopiointi mitään tuohon muistiin?
Ei vielä.
Ja niin mitä voin verkossa 22, ja 23, 24, 25, no, minä yksinkertaisesti tehdä tämän.
Ja tämä on tavallaan old school kamaa nyt.
Tämä on kuin PSET 2, jossa olet vain liikkuvat asiat
noin muistiin tai pikemminkin jouset.
>> Joten olen iteroimalla 0 merkkijonon pituus n.
Ja olen kopiointi i: nnen merkin S osaksi i: nnen hahmo t.
Ja koska minä, ohjelmoija, tehty Muista jakaa täsmälleen yhtä monta tavua
kuten minä tarvitsen, se on täydellinen yksi-yhteen suhde.
Ja voin kopioida äiti vuonna pieniksi uuteen yhteen.
Ja sitten lopuksi, teen tätä linjaa.
Ja niin vaikutus on vain hyödyntää t täällä.
Niin paljon imeä, mutta jos vain harkita
mitä todella tapahtuu on alla huppu
on vain liikkuvat nämä tavua noin, kaikki,
tarvitaan ratkaista tämä ongelma on vain antaa meille tämän murikka muistia.
Nyt riski ylivoimainen, haluan näyttää
Toinen esimerkki, joka on lähes identtinen, lukuun ottamatta tämä
koodiriviä.
Joten tämä on hakkeri versio tämän ohjelman, jos haluatte.
Mutta Haluan vain polttaa se mitä tapahtuu.
Rivi 24 aiemmin t kiinnike i saa s kiinnike i.
Nyt olen muuttuvat tämän paljon arvoituksellinen tähti t
plus 1 vastaa tähti s plus 1.
>> Joten mitä tapahtuu ja miksi meillä on tähti merkki?
Olemme nähneet tähti ennen, ja sitä käytetään eri tavalla täällä.
Olemme aiemmin näimme char *, nyt näen tähti alussa, ja se on OK.
Koska se osoittautuu meillä voi sellaista päätellä vain
Näistä ensimmäinen periaatteita mitä tapahtuu.
Joten vain tehdä selväksi, mikä on s?
Viime viikolla se oli merkkijono.
Se ei riitä enää.
Mikä on s, erityisesti?
>> Yleisö: [äänetön]
>> DAVID J. MALAN: Se on osoitin.
Se on osoite Ensimmäinen merkki me kirjoitetaan.
OK, mikä on t?
>> Yleisö: [äänetön]
>> DAVID J. MALAN: osoite ensimmäisen tavun
t, että murikka muistia uudelleen.
Joten käy ilmi, että kun me kerrata 0 jopa merkkijono
length-- ensinnäkin, i alkaa klo 0, koska
Tämän vanhan koulun silmukka asia.
Joten yksinkertaisuuden, katsotaanpa olettaa, että ensimmäinen rivi koodia
on oikeastaan ​​vain tämä, oikea.
Jos i on nolla, lisäämällä nolla jotain oletettavasti
ei tule vaikuttaa.
>> Joten mitä on tämä sanonta?
On käynyt ilmi, että tähti toimija tässä yhteydessä
on dereference operaattori, joka on vain
hieno tapa sanoa mennä seuraavaan osoitteeseen.
Joten jos s on osoite ensimmäisen merkki tässä kimpale muistia,
* S tarkoittaa sinne.
Ja koska olemme laadittu kuva tällä tavalla,
voit hyväksyä Seuraavat henkinen malli.
Jos tämä on s, ja sanot * s, * s ikään kuin liukumäet ja tikkaat,
jos muistat peli lapsuudesta, on kuin seurata, että nuoli ja mennä
osoitteeseen.
>> * T on sama asia.
Niin alkaa täällä, siirry sen kimpale.
En voi vain hyödyntää tämän näytön näin.
* T tarkoittaa mennä tänne.
Ja sitten, silmukka on vain sanomalla siirtää tätä merkkiä täällä,
siirtää tätä merkkiä täällä, siirtää tämän merkin tässä.
Mutta miten voin tehdä, että incrementation?
Minun täytyy perua, mitä juuri poistettu.
Tämä on mitä yleensä kutsutaan osoitin aritmeettinen, joka
tarkoittaa matematiikka osoitteita.
>> Jos tässä silmukka, Jatkan monesko I,
ja s on osoite ja t on osoite, jos vain pitää lisätä 1,
että vain sitä jatkaa eteenpäin, ja eteenpäin, ja eteenpäin muistissa.
Se on kuin Oxford Street, katu että CS rakennus sijaitsee.
CS rakennukset on 33 Oxford Street.
Joten jos olit tehdä 33 Oxford Street plus 1,
joka vie sinut 34 Oxford Katu, sitten 35 Oxford Street,
sitten 36 Oxford Street, riippumatta näiden rakennukset todellisuudessa ovat - jos ne ovat olemassa.
Ja niin, että kaikki teemme täällä osoitin aritmeettinen.
>> Joten se on erittäin mystistä tavalla ilmaista itseämme.
Mutta kaikki, mitä tapahtuu alla huppu
on vain seuraava näistä osoitteista, kuten seuraava kartta, jos haluatte,
tai seuraavat nuolia kuten olemme piirretään ruudulle.
OK, paljon sulattaa.
Kysymyksiin on syntaksi, käsitteitä, osoittimia, malloc, tai vastaavat.
Joo, täällä ensin.
>> Yleisö: Missä että sanoo * t vastaa toupper * t,
on, että aikoo hyödyntää kaikki kirjaimet tai just--
>> DAVID J. MALAN: Ah, todella hyvä kysymys.
Joten tätä linjaa täällä, 31, tämä tulee hyötymään
ensimmäinen kirjain tai kaikki kirjaimet.
Joten vastata tähän menemällä takaisin ensimmäiset periaatteet.
Ja ensimmäiset periaatteet tässä tarkoitan vain mennä perusmääritelmät
ja mitä mukana.
Joten toupper on funktio että aktivoi merkkiä.
Siinä kaikki.
* T tarkoittaa mennä first-- Siirry osoitteeseen t.
Joten, kuvassa, jos tämä on murikka muistia me kohdennetaan malloc,
ja tämä on t, * t tarkoittaa täältä.
>> Samalla olet ohimennen että arvo, pieniä m
että toupper, saat takaisin pääoma M, missä olet laittoi pallon?
Olet laskemisesta sitä, että samassa paikassa.
Ja niin, että logiikka näiden perusmääritelmiä se on vain
hyödyntäminen ensimmäinen kirjain ellet kerrata I tai
silmukan tai while-silmukka, se ei tule tehdä mitään enemmän kuin kysyt sitä.
Hyvä kysymys.
Joo?
>> Yleisö: Miksi käytät dereference tapa eikä
array?
>> DAVID J. MALAN: Ah, hyvä kysymys.
Miksi käytät dereference menetelmä sijaan array menetelmä?
Mitään erityistä syytä, olla rehellinen.
Ja, itse asiassa, tämän Tällainen esimerkiksi oikea,
Olen vain väittäen tehdä ohjelma monimutkaisempi,
lisää silmät lasitus yli, ihmiset ovat tarkkailun
koska tämä näyttää erittäin mystistä, mutta vaikka se tekee saman asian.
Ja niin, rehellisesti, tämä on tarpeettoman visuaalisesti monimutkainen ratkaisu
ongelmaan.
>> Se on edelleen hyvä suunnittelu, viidessä viidestä suunnittelun,
onko se on kiinnike merkintä tai osoitin merkintä.
But-- erityisesti uusista myöhemmin kurssin PSET 5
kun toteutamme että sanakirjaa Olen maininnut pari times--
me todella kiinnostaa alhainen muistiosoitteita
että me todella ymmärtää mitä on meneillään.
>> Mutta, nyt, käy ilmi, että tämä koodiriviä tässä hakasulkeet
ei ole edes olemassa.
Ne ovat mitä kutsutaan syntaktisia sokeria, joka
on vain outo viileä tapa sanoa kääntäjä muuntaa hakasuluissa olevan
että matemaattinen lauseke.
Joten se on ihmisen yleissopimus pystyä vain kirjoittaa
nämä erittäin käyttäjäystävällinen suluissa.
Mutta mitä kääntäjä, clang, on todella tekee tahansa
voit kirjoittaa mitä korostetaan linja 24, alla huppu se on todella
muuntaa sen tähän.
Se on vain enemmän miellyttävää kuin ihmisen lukea ja kirjoittaa koodia rivi 24.
Mutta lopulta ne apupyörät liian irtoa
kun oman mukavuuden vahvistuu.
>> Selvä, joten muistuttaa sitten, että tämä oli tavallaan suurin ongelma
törmäsimme.
Ja sitähän herätti tämä koko hemmetin keskustelua viitteitä,
ja osoitteet, ja kopiointi asioita.
Se oli, koska me kompastui tämä tyhmä, tyhmä kysymys, jolloin
Olen toteuttanut logically-- Lauren täällä demo ja appelsiinimehu
vuonna milk-- täydellisesti algoritmisesti oikea toiminto
ja vaihtamalla kaksi muuttujaa " arvot, mutta hemmetin asia
ei ollut pysyviä, tai pysyvä, vaikutus minun koodi.
>> Ja miksi se oli?
Lyhyesti sanottuna, miksi tämä täytäntöönpano swap
loogisesti oikea, mutta sillä ei ole vaikutusta muuttujia, jotka välitetään se,
kuten x ja y pääasiallisten?
Mikä oli ydin kysymys?
Joo?
Yleisö: Koska vaihteleva tehty kopiot muuttuja pass
Läpitoiminto.
>> DAVID J. MALAN: Aivan, kun ohitat muuttujia funktio, tai väitteitä
osaksi toiminto, he ohi kopio, joka
tarkoittaa, saat samanlaista näköinen kuvio bittiä sekä x ja y,
kutsutaan täällä ja b.
Ja voit tehdä mitään haluat näiden kopiot,
mutta he aikovat ei ole Vaikutus kutsuvan toiminto.
Ja itse asiassa me kiinnitti että kuva ruudulla, Recall
viime kerralla, jolloin jos todella miettiä, mitä
meneillään alla hood-- jos tämä on tietokoneen muistiin,
ja täällä on kimpale muistia käytetään pääasiassa
tämä on kimpale muistia käytetään swap,
ja niin vaikka tärkein on kaksi muuttujaa, x ja y,
swap saattaa olla samanlainen näköinen arvot, jotka molemmat ovat 1 ja 2,
mutta ne ovat täysin eri paloina muisti.
>> Tarvitsemme siis ratkaisu tähän.
Ja rehellisesti, näyttäisi siltä, ​​että me nyt on ratkaisu tähän ongelmaan, oikea.
Jos meillä on nyt mahdollisuus manipuloida asiat Poiketen osoitteiden
ja, tavallaan liukumäet ja tikkaat tyyli, toimi nuolet
ja mennä minne haluamme muistiin, emmekö voisi
ratkaista tämän ongelman kulkee päässä tärkeimmistä vaihtaa
ei arvoja haluamme swap, mutta vain intuitiivisesti
mitä voisimme kulkea vaihtaa sijaan?
>> [Väliin ÄÄNTÄ]
>> DAVID J. MALAN: Miksi emme vain siirtää sen osoitteet, eikö?
Miksi emme anna swap aarrekartan, jos haluatte,
joka johtaa sen todelliset arvot x ja y.
Katsotaanpa swap, todella muuttaa Original bittiä sijasta
vain ohimennen kopioita bittiä.
Ja niin, itse asiassa, se on mitä olemaan ratkaisu.
Tämä versio tässä selvästi huono ja puutteellinen.
Ja nyt, ensi silmäyksellä, se vain näyttää kuin lisäsimme nippu tähtiä satunnaisesti
ja keskitti sormet että se koota.
Mutta se nyt koota.
>> Mutta katsotaanpa mitä ne oikein ovat.
Ja valitettavasti laatijat C olisi voinut valita toisen symbolin
tehdä tästä hieman selkeämpi, mutta tähti operaattori
on eri merkitys kahdessa eri yhteydessä.
Ja olemme nähneet molemmat, mutta nyt erottaa.
>> Joten ylös huipulla siellä, kun olen muuttanut ja b
olemasta int n huono versio int tähtiä, ja b,
aikaisemmin, oli kokonaislukuja.
Mitä ovat a ja b nyt hyvä, vihreä versio?
He osoitteet.
Osoitteet mitä, olla selvä?
Osoitteet kokonaislukujen.
Niin että olen sanomalla int tähti välineet
tämä on osoite kokonaisluku, erityisesti.
>> Joten nyt ilmoituksen riviä koodia, jotain muuta on muuttunut liikaa.
TMP pysyy samana, koska se on vain väliaikainen kokonaisluku,
ei muisti taikuutta siellä.
Mutta tarvitsee nyt tähti.
Ja, itse asiassa, joka muut maininta ja b,
huomaat, että kaikki se muuttuvat punaisesta vihreäksi
on että olen prefixing nämä muuttujat tähtien kanssa.
Koska en halua kopioida ja b.
Koska jos vain kopioida ja b ja swap ja b, mitä olen todella vaihtokauppa?
Vain osoitteet, haluan vaihtaa mitä noita osoitteita.
Haluan mennä sinne.
Ja niin tähti operaattori sisällä minun toiminto,
ei sisällä parametriluetteloon tarkoittaa menet osoitteet
ja todella muuttaa näitä arvoja.
>> Joten mitä kuva nyt näyttää sijaan.
No, jos sen sijaan olen ohimennen in ja B 1 ja 2--
Olen itse täytyy lisätä yksi muu määritelmä täällä.
Joten olettaa, että tämä möhkäle muistia on paikassa 10.
>> Tämä on paikka 11, mutta tämä on vähän yksinkertaistamista,
Minulla on nyt kaksi vaihtoehtoa tehdä välitän X ja y tai voin siirtää niiden osoitteet?
Jos kuljen heidän osoitteet näin, minä vain
nyt täytyy toteuttaa swap kohti vihreää koodi
niin että kun se näkee, ja kun se näkee b, se ei vain kopioida ja b
ja siirrä maito ja appelsiinimehu.
Maito ja appelsiinimehu metafora nyt hajoaa,
koska ne ovat kupit nesteen eikä karttoja.
Meidän sijaan täytyy mennä käsitellä 10 ja me
täytyy mennä käsitellä 11, ja sitten suorittaa että vaihtamalla logiikka.
>> Joten logiikka on sama, mutta Tarvitsemme hieman eri tavalla
saada yhteys näiden muuttujien.
Ja niin lopulta, mitä Ohjelma on näyttää tämä.
Vuonna swap.c kirjaimellisesti kopioitu ja liittänyt vihreä versio.
Mutta minun täytyy tehdä yksi muutos.
Se ei ole riittävää vain vaihtaa swap.
Mitä muita koodiriviä minun täytyy muuttaa?
Joo?
>> Yleisö: Jos se vie väitteet.
>> DAVID J. MALAN: Missä se tekee väitteen.
Jos siis siirry jopa tärkein, I voi vain kulkea x ja y,
ja, lupaan, viimeinen pala uusia syntaksin tänään.
Minun täytyy kulkea ei X ja y mutta osoite x ja y.
Ja se osoittautuu, symboli että laatijat C valitsi
on jos käytät et-merkki täällä, ei sekoittaa ja verkon peiton et-merkki,
jos käytät et-merkki täällä ja et-merkki täällä,
tämä keksii sinulle, mitä osoitteen x,
ehkä se on 10, mikä on osoite y, ehkä se
11, ja kulkee kuin sijasta.
>> Niin paljon imeä kaikki kerralla.
Mutta katsotaanpa nyt nopeasti meidän jäljellä neljä minuuttia
jossa asiat voivat mennä pieleen.
Ja syrjään, todella Otin tämän kuvan,
TF otti tämän kuvan vuosi tai kaksi sitten.
Joten tämä on takaisin nurkka Eliot ruokasalissa.
Osoittimet ovat ehkä vaikein aihe, että me kattaa CS50.
Joten jos olet huolissasi lajitella kaltevuus on kuin ehkä se
enemmän jääkiekkomailasta näin, ymmärtää
olemme tavallaan loppusuoralla huippu ehdot käsitteellinen monimutkaisuus.
>> Ja minä tuoda tätä valokuva, koska vannon
Jumalalle, syksyllä 1996, kun otin CS50 minun opetus muiden,
Nishat Mehta, hän istui minua alas nurkassa Eliot D. Hall lounaalla,
tai päivällinen, tai jotain yrittää auttaa minua ymmärtämään osoittimia.
Ja tämä on missä olin viikon kuluttua se otettiin käyttöön vuonna luento kun
Olen vihdoin ymmärtänyt osoittimia.
Ja olen toiveikas, että tämä klikkaa paljon nopeammin sinulle.
Mutta ymmärtää tämä ehdottoman keskuudessa kehittyneempiä aiheita
teimme.
Mutta se on yksi tehokkaimmista.
Ja kun saat sen, se on oikeastaan ​​kaikki juuri menossa vihdoinkin yhdessä.
Joten varma se ei täytyy kaikki uppoavat tänään.
>> Joten tässä on viimeinen ohjelma aiomme tarkastella.
Ja aiomme päättyy nopea kolmen minuutin claymation
tekemät ystävämme, Nick Parlante.
Tässä ohjelmassa, että kaksi parasta linjat ilmoittaa muuttujan x ja y.
Jotka molemmat ovat osoitteita kokonaislukujen, AKA osoittimia.
Sitten käyttää riittävästi muisti tallentaa int
ja tallenna osoite Tämän muistin x.
Niin, se on vieläkin helpompaa kuin esimerkiksi ennen.
Anna minulle neljä tavua muistia, se koko int,
ja esittää, että osoite X.
Tämä linja tässä tarkoittaa Siirry osoitteeseen X
ja laittaa merkitys elämä, numero 42 siellä.
Mutta tämä linja huolestuttaa minua.
Star y tarkoittaa mennä osoitteeseen y, ja laittaa epäonnen luku 13 siellä.
Miksi on vaarallista, tässä vaiheessa vuonna story-- joskin nopeasti kertoi
meidän hiipuu minuutissa here-- miksi se huono
minun sanoa, mene osoitteeseen y?
>> Yleisö: Et ole [kuultavissa].
DAVID J. MALAN: En ole laita mitään y.
Joten mikä on arvo y, tässä vaiheessa tarina?
Meillä ei ole aavistustakaan.
On joitakin roskat arvo ja eikä Binky tiedä.
Jos voisimme päättyy tämän merkinnän.
>> [VIDEOTOISTOSTA]
>> Hei, Binky, herätä.
On aika osoitin hauskaa.
>> -Mikä tuo on?
Lisätietoja viitteitä?
Voi, Goody.
>> -No, Päästä alkuun, kai olemme menossa on pari viitteitä.
>> -OK.
Tämä koodi jakaa kaksi osoitinta joka voi viitata kokonaislukuja.
>> -OK, Hyvin näen kaksi osoitinta, mutta ne
eivät näytä olevan osoittaa mitään.
>> -Oikein.
Aluksi Nata eivät viittaa mihinkään.
Mitä he viittaavat ovat nimeltään pointees ja asettamalla ne
on erillinen vaihe.
>> -Voi, Oikea, oikea.
Tiesin sen.
Pointees ovat erillisiä.
Joten miten jakaa pointee?
>> -OK, Hyvin tämä koodi allokoi uusi kokonaisluku pointee,
ja tämä osa sarjaa x osoittamaan sitä.
>> -Hei, Että näyttää paremmalta.
Joten tee se jotain.
>> -OK, Minä epäviittausongelman osoitin X Tallenna numero 42 osaksi pointee.
Tämän temppu, minä tarvitsen taikasauva on dereferencing.
>> -Sinun Taikasauva on dereferencing?
Uh, että se on suuri.
>> -Tämä On mitä koodi näyttää.
Otan vain perustanut numero and--
>> [POP SOUND]
>> Hei, katso siellä se menee.
Joten, tekee dereference X seuraavasti nuoli pääsy sen pointee.
Tässä tapauksessa, tallentaa 42 siellä.
Hei, kokeile sitä tallentaa numero 13 kautta muiden osoitin, y.
>> -OK.
Otan vain mennä tänne y, ja saada numero 13 perustaa.
Ja sitten ottaa sauva on dereferencing ja just--
>> [Summeriäänen]
>> -Voi, Hei että ei toimi.
Sano, öh, Binky, en ajatella dereferencing
y on hyvä idea, koska asetus ylös pointee on erillinen vaihe.
Ja en usko meidän koskaan tehnyt sitä.
>> -Hmm, Hyvä pointti.
>> -Joo, Me varattu osoitin, y, mutta emme koskaan aseta se osoittamaan pointee.
>> -Hmm, Hyvin tarkkaavainen.
Hei, etsit hyvä siellä, Binky.
Voitteko korjata sen niin, että y pistettä samaan pointee kuin x.
>> -Sure, Käytän taikasauvaa osoitin tehtävän.
>> -Onko Se tulee ongelma, kuten ennen?
>> -Ei, Tämä ei kosketa pointees.
Se vain muuttaa yksi osoitin osoittamaan samaan thing--
>> [Poksahdus]
--as toiseen.
>> -Voi, Näen.
Nyt y pistettä samaan paikkaan kuin x.
Niin, odota, nyt y on kiinteä.
Se on pointee.
Joten voit kokeilla sauva on dereferencing jälleen lähettää 13 yli.
>> -Voi, OK, tässä menee.
>> Hei, katso tuota.
Nyt dereferencing toimii y.
Ja koska viitteitä jakavat että yksi pointee, he molemmat katso 13.
>> -Niin, Jakaminen, öh riippumatta.
Joten, aiomme vaihtaa paikkoja nyt?
>> -Voi, Katso olemme myöhässä.
>> -But--
>> -Vain Muistaa kolme osoitin sääntöjä.
Numero 1, perusrakenne on, että sinulla on osoitin,
ja se osoittaa yli pointee.
Mutta osoitin ja pointee ovat erillisiä.
Ja yleinen virhe on perustaa osoitin
mutta unohtaa antaa sille pointee.
>> Numero 2, osoitin dereferencing alkaa osoittimen
ja seuraa sen nuoli yli pääsy sen pointee.
Kuten me kaikki tiedämme, tämä toimii vain jos on pointee, millaisia ​​saa takaisin
lausua numero 1.
>> Numero 3, osoitin toimeksianto kestää yhden osoitin
ja muuttaa sen osoittamaan sama pointee kuin toinen osoitin.
Niin sen jälkeen tehtävän, kaksi osoitinta
tulee kohta samaan pointee, joskus sitä kutsutaan jakaminen.
Ja siinä kaikki on sitä, todella.
Hei hei nyt.
>> [Lopeta toisto]
>> DAVID J. MALAN: Se on se CS50.
Kiitos professori Nick Parlante.
Nähdään ensi viikolla.
>> [ELECTRONIC musiikkia]