>> DAVID Malan: Pozdravljeni, in Dobrodošli nazaj CS50.
Tako je ta konec štiri tedne.
Samo ena objava prvi.
Tako ti peti ponedeljek prihaja do tega prihaja v ponedeljek.
To je priložnost, da se spremeni iz SAT / UNSAT na črko razreda, ali
Pismo razred SAT / UNSAT.
Dolgčas, da proces ne zahteva podpis, ker ste morali izpolniti
iz ene od teh roza oblik add / drop.
>> Ker tehnično, SAT / UNSAT različica in različica pismo razred
imajo različne kataloške številke.
Ampak nič posebnega.
Samo pridi do mene ali Rob ali Lauren na kateri koli točki.
Ali nam pišite, če nimate vrste administracije, morate danes, in smo
bodo prepričani, da vam pomaga sprejeti skrb, da pred ponedeljkom.
>> Vse je v redu, tako da danes -
dejansko pa je malo odmev.
Lahko imamo ton me dol malo?
OK.
Torej danes, uvajamo temo znan kot kazalca.
In jaz moram priznati, da je to eden od bolj kompleksne teme, ki jih ponavadi
zajema ta razred ali res vse uvodni tečaj, ki uporablja C.
>> Ampak vzemi mojo besedo za to, še posebej če je vaš um počuti malo več ukrivljen
danes in v prihodnjih tednih.
To ni predstavnik snemaš vse slabši to pomeni samo, da
to je še posebej prefinjeno temo Obljubim, nekaj tednov
zato bo zdelo vse preveč presenetljivo enostavna za nazaj.
>> Še vedno se spomnim na ta dan.
Sedel sem v Elliott jedilnici sedi poleg moje TF Nishat Mehta,
ki je bil rezident Elliott hiše.
In iz nekega razloga, to temo enim klikom.
Kar pomeni, da sem preveč boril z njo za nekaj časa, vendar sem
se bo po svojih najboljših močeh, da bi preprečili vsako tako Boj s temo, ki na koncu
je precej močna.
>> Pravzaprav, ena od tem bomo razpravljali v prihodnjih tednih, je, da
za varnost, in kako lahko dejansko izkoriščati stroje na načine,
ki niso bile namenjene.
In tisti izkoriščanj so običajno Rezultat hroščev, napak, ki smo
ljudje, ki jih ne razume nekaterih osnovnega izvajanja
Podatki po kateri programi so.
>> Sedaj bi to zdi vse bolj uporabniku prijazen, sem mislil, da sem imel 10
Drugi predogled malo claymation slika imenom Binky, ki je bila vložena v
življenje z našega prijatelja na Stanfordu, profesor Nick Parlante.
Torej, mi dovolite, da vam to teaser za Binky tukaj.
>> [Predvajanje videa]
>> Hej, Binky.
Zbudi.
Čas je za zabavo kazalca.
>> Kaj je to?
Spoznajo kazalci?
Oh, goodie.
>> [END predvajanje videa]
>> DAVID Malan: To je Stanford računalništva.
Torej, več o tem, da pridejo.
>> [APLAVZ]
>> DAVID Malan: Oprosti, Nick.
>> Tako opozarjajo, da je zadnji čas, da se je končalo to je res razburljivo Alpinista
pri čemer je ta funkcija samo ni delovala.
Vsaj intuitivno, se mu je zdelo kot da bi bilo delo.
Preprosto zamenjavo vrednosti dveh celih števil.
Vendar pa opozarjajo, da ko smo izpisal prvotne vrednosti v glavnem, ene in
dva, ki so še vedno ena in dva in ne dve, ena.
>> Torej, kaj mi dejansko preklop kot na aparat.
In sem napisala nekaj skeletne kode v napreduje tukaj, kjer sem trdijo, da x
bo 1, bo y je 2.
Nato sem izpisal obeh svojih vrednosti z tiskanja f.
>> Nato sem trdijo tukaj, da bomo swap njih.
Sem pustil prazno mesto tu za nas izpolnite danes v samo nekaj trenutkov.
Nato bom trdijo, da dve spremenljivki bili zamenjani.
Potem bom za tiskanje jih ven.
In tako upam, naj vidim 1, 2.
2, 1.
To je zelo preprosta Cilj zdaj.
>> Torej, kako bomo šli o menjavi dve spremenljivki?
No, če jaz predlagam tukaj, da te skodelice lahko predstavlja spomin na računalniku.
To je le nekaj grižljajev, to je še nekaj grižljajev.
Smo lahko prostovoljec pridi gor in nam mešajte nekaj pijače, če je kaj znano?
Pridi gor.
Kako ti je ime?
>> JESS: Jess.
>> DAVID Malan: Jess?
Pridi gor, Jess.
Če vas ne moti, da moramo dati Google Glass na vas, da bomo lahko
nesmrtne to.
OK, steklo.
Snemanje videa.
In OK, smo na dobri pojdi z Jess tukaj.
Vse je v redu.
Lepo, da sva se spoznala.
>> Torej, kaj bi rad delaš tukaj - če bi lahko, dokaj hitro -
samo nam vliva pol kozarca oranžne sok in pol kozarec mleka,
predstavlja učinkovito številke 1 v eno skodelico in 2 v drugi skodelico.
>> To bo dober posnetek.
>> JESS: Žal mi je.
>> DAVID Malan: Ne, ne.
To je v redu.
Lepo.
Vse je v redu, tako da imamo štiri bajte vredno pomarančnega soka.
Bomo ga imenujemo vrednost 1.
Zdaj pa še štiri bajte vredno mleka.
Bo poklical, da cenite 2.
Torej, x in y, v tem zaporedju.
>> Vse je v redu, tako da zdaj, če naloga pri roki - zate, Jess, pred vsem
vaših sošolcev -
je, da bi zamenjali vrednosti x in y tako da želimo pomarančni sok v
drugi pokal in mleko v tem pokalu, kako morda vas - preden se dejansko ne
to - iti o tem?
>> OK, pametno odločitev.
Tako da boste morali malo več pomnilnika.
Torej, kaj je dodelila začasna cup, če boste.
In zdaj nadaljuje, da bi zamenjali x in y.
>> Odlično.
Torej, zelo dobro opravljeno.
Najlepša hvala, Jess.
Tukaj si.
Malo spominek.
>> OK, torej je očitno, zelo preprosta ideja.
Povsem intuitivno, da moramo bit več prostora za shranjevanje - v tej obliki,
pokal - če dejansko želimo swap teh dveh spremenljivk.
Torej, kaj je naredil točno to.
Tukaj vmes, kjer trdim, da sem da se delaš nekaj zamenjavo, bom
iti naprej in razglaša temp.
In jaz sem jo nastavite enako, recimo, x.
>> Potem bom spremeniti vrednost x tako kot Jess tukaj delal z
mleko in pomarančni sok enaka y.
In jaz bom za spremembo y enaka da ne x, ker zdaj pa bi bilo
zaljubljen v krogu, ampak temp.
Kje začasno - ali če Jess začasno dal pomarančni sok
Pred clobbering da skodelico z mlekom.
>> Naj gredo naprej in zdaj bo to.
Je pozval noswap.c.
In zdaj mi teče brez zamenjave.
In res vidim, če sem širite Okno malo, da
x je 1, je y 2.
Potem je x 2, y 1.
>> Vendar pa opozarjajo, da je v ponedeljek sva stvari malo drugače, pri čemer sem
namesto da izvaja funkcijo pomočnika, če boste, da je pravzaprav nična.
Poklical sem ga zamenjal.
Dal sem dva parametra, in sem poklical njimi in sem poklical jim b.
>> Odkrito povedano, sem jim x in y pokličite.
Nič ni ustavil mi s tem, da.
Ampak jaz bi trdili, da je takrat malo dvoumno.
Ker odpoklic za ponedeljek, da smo je trdil, da so bili ti parametri
kopije vrednosti minilo noter
Torej je le zafrkava z vašo Um, mislim, če uporabljate
popolnoma enake spremenljivke.
>> Tako da bom namesto njih poklicati in b, samo za jasnost.
Ampak lahko bi jim najbolj pokličite kaj hočemo.
In bom kopiranje in lepljenje dejansko ta koda od tam gor
navzdol v tukaj.
Ker sem videl, da deluje.
Tako da je v zelo dobri formi.
In bom spremeniti svoj x na, moji x da, moj y na b in mojo Y b.
>> Torej, z drugimi besedami, popolnoma enaka logika.
Točno isto stvar, Jess storil.
In potem je ena stvar, moram gor tu, seveda, sedaj sklicuje ta
funkcijo, ali to funkcijo poklicati.
Torej bom poklical to funkcijo z dvema vhodi, x in y, in hit Save.
>> V redu, torej bistveno ista stvar.
V bistvu, sem verjetno naredil program, nepotrebnem zapletena
pisanje funkcijo, ki je samo ob nekateri šest vrstic kode ker sem
prej izvedle to samo tri.
>> Naj gredo naprej in zdaj remake to, da ne bo zamenjave.
Vse je v redu, sem zajebal tukaj.
To mora biti napaka, ki jo morda videti bolj pogosto kot vaš
Programi dobili bolj zapleten.
Ampak tam je enostavno popraviti.
Dovolite mi, da se pomaknete nazaj gor.
>> In kaj je prva napaka jaz vidim?
Implicitno izjavo.
Kaj to običajno kaže?
Oh, sem pozabil prototip.
Pozabil sem naučil prevajalnik, da swap se dogaja, da obstajajo, čeprav je
ne obstaja na samem začetku programa.
Torej, jaz sem samo reči, nična, zamenjave, int, int b, podpičje.
>> Torej, ne bom ga reimplement.
Toda zdaj se ujema, kaj je tu spodaj.
In obvestilo, odsotnost podpičjem tu, ki ni potrebna, če
izvajanje.
>> Naj remake to, da ne bo zamenjave.
Veliko boljša oblika.
Zagnati nobene zamenjave.
In prekleto.
Zdaj smo spet tam, kjer smo bili v ponedeljek, če stvar ni zamenjal.
>> In kaj je intuitivna razlaga zakaj je temu tako?
Ja?
>> ŠTUDENT: [neslišno].
>> DAVID Malan: Točno tako.
Tako sta a in b kopije x in y.
In v resnici, kadarkoli ste bili kliče funkcijo tako daleč, da
prehaja spremenljivk, kot so ints -
tako kot zamenjava pričakuje tukaj -
fantje so bili kratki v kopijah.
>> Zdaj to pomeni, da je potrebno malo časa, delček sekunde, za
Računalnik kopirati bitov iz enega spremenljivi bitov drugega.
Ampak to ni tako velik posel.
Ampak oni so vseeno kopija.
>> In tako zdaj, v okviru zamenjave, Jaz sem v resnici uspešno
spreminjanje a in b.
V resnici, naredimo hitro preveri pameti.
Natisni f je% i, nova linija.
In kaj je plug.
Zdaj pa to isto stvar z b.
In kaj je naredil isto tukaj.
>> In zdaj, mi kopijo te iste linije spet na dnu funkcije
Po mojih treh linij zanimivo bi se lahko izvrši, in
še enkrat natisniti in b.
Torej, zdaj pa bo to, da ne bo zamenjave.
Naj terminal okno nekoliko višji, tako da bomo lahko videli
več to naenkrat.
>> In vodijo nobene zamenjave.
x je 1, je y 2. 1, b je 2.
Potem pa je 2, je b 1.
Tako da deluje, tako kot Jess tukaj delal znotraj zamenjave.
Ampak seveda, to je nima učinka o spremenljivk v glavnem.
>> Tako smo videli trik, pri čemer smo bi lahko to popraviti, kajne?
Ko ste se soočajo s to izbrskati vprašanje, ki bi si punt in da x
in y, kakšne spremenljivke namesto?
>> Lahko bi jih globalno.
Daj jih na samem vrhu datoteke kot smo to storili tudi v igri z dne 15..
Mi uporabljamo globalno spremenljivko.
Toda v okviru igre 15 je smiselno, da ima globalna
spremenljivki, ki predstavlja svet, saj celota 15.c je vse
o izvajanju te igre.
To je tisto, kar obstaja datoteka storiti.
>> Toda v tem primeru tukaj, sem kliče funkcijo zamenjave.
Želim, da bi zamenjali dve spremenljivki.
Pa naj bi se začel počutiti le površno če je rešitev za vse naše
Težave ko naletite na področje Vprašanja je, da je globalna.
Ker zelo hitro naš program bo postal precej nereda.
In sva, da je zelo varčno kot rezultat v 15.c.
>> Vendar se izkaže, da je boljši način v celoti.
Dovolite mi, da dejansko šel nazaj in brisanje tiskanje F-ih, samo da bi poenostavili to kodo.
In mi predlagal, da To, seveda, je slabo.
Če pa namesto tega dodati v nekaterih zvezdicah in zvezde, lahko namesto tega pa je to
Funkcija v eno, ki je dejansko deluje.
>> Naj gredo nazaj in priznam, pravijo Zvezdica je vedno težko,
tako bom rekel zvezde.
Jaz bom samo priznaj, da to.
Vse je v redu.
In zdaj, kaj bom , namesto da bi naredili?
>> Torej, najprej bom opredeliti da namesto mimo int v
Funkcija swap, sem namesto od reči int zvezda.
Zdaj, kaj zvezda kažejo?
To je, da pojem kazalec tem Binky, claymation značaj, je bilo
se nanaša na trenutek pred tem.
>> Torej, če rečemo, int zvezdo, smisel ta sedaj je, da se ne bo
sprejet po svoje vrednosti.
To ne bo mogoče kopirati noter
Namesto, naslov je bodo opravili noter
>> Tako opozarjajo, da je notranjost vašega računalnika je cel kup pomnilnika, sicer
znan kot RAM.
In to je samo RAM cel kup bajtov.
Torej, če je vaš Mac ali osebni računalnik dva gigabajta, imate 2
milijarda bajtov pomnilnika.
>> Zdaj pa samo domnevam, da samo da se stvari lepo in urejeno, smo
dodelite naslov -
številka -
za vsak bajt pomnilnika RAM v računalniku.
Zelo prvi bajt tistih 2 milijard za številko nič.
Naslednjič je bajt številka ena, številka dva, vse tja gor, dot dot
pika, za približno 2 milijardi.
>> Torej, lahko število bajtov pomnilnika v računalniku.
Torej, kaj je domnevati, da je to tisto, kar mislimo z naslovom.
Torej, ko vidim int zvezda, kaj se dogaja , ki se prenese v zamenjavo zdaj
naslov.
Ni njegova vrednost, ampak ne glede na poštno Naslov je tako rekoč -
njegovo mesto v RAM.
>> Podobno velja tudi za b, grem povedati isto stvar.
Int, zvezda, b.
Kot prahi, tehnično zvezde bi lahko šel na drugih lokacijah.
Ampak bomo standardizirali na zvezdico počutje tik vrsto podatkov.
>> Torej swap podpis sedaj pomeni, da mi naslov notr, in klic
da naslov.
In mi še naslov int in poziv, da se naslov b.
>> Ampak zdaj moja koda tukaj se mora spremeniti.
Ker če Izjavljam int temp -
ki je še vedno tipa int -
ampak jaz shranite v to, kakšno vrednost?
Da bo jasno, sem dajanje z kodo, kot napisana prav zdaj?
>> Jaz bom dal mesto v.
Ampak jaz ne zanima mesto, kajne?
Temp obstaja samo Jess 'tretji pokal obstajala, za kakšen namen?
Če želite shraniti vrednost.
Mleko ali pomarančni sok.
Ne da bi dejansko shranjevanje naslov eno od teh stvari, ki se počuti
malo nesmiselno v tem realnem svetovni kontekst nekako.
>> Torej res, kaj želim dati v temp ne naslov, vendar
vsebina.
Torej, če je število kot 123, to je 123. bajt pomnilnika, ki pravkar
zgodi, da je okupacijska, da vrednost V zgodi, da se zaseda.
>> Če želim iti na ta naslov, Moram reči zvezda.
Podobno, če bi bil jaz spremeniti, kaj je na naslovu, sem spremenila
To za začetek.
Če želim, da shranite, kaj je na lokacija s tem, kar je na lokaciji
na b, zvezda b zvezda.
>> Torej na kratko, čeprav to ni povsem potaplja v še - in jaz ne bi pričakoval
da bi tako hitro -
Zavedam se, da vse kar delam je prefixing te zvezde mojim spremenljivk,
Pregovor ne zgrabi vrednosti.
Ne spreminjajte vrednosti.
Ampak, pojdite na te naslove in dobili vrednost.
Pojdite na ta naslov in spremembe Vrednost tam.
>> Torej, zdaj mi pomaknete nazaj na vrh, le popraviti to linijo tukaj, da
spremenite prototip igralcev.
Ampak zdaj moram storiti eno stvar.
Intuitivno, če sem spremenil vrste argumentov, da swap pričakuje,
kaj moram spremenite v mojo kodo?
>> Ko sem poklical zamenjave.
Ker prav zdaj, kaj sem Sem mimo, da še zamenjati?
Vrednost x in y vrednost ali mleko in pomarančni sok.
Ampak jaz ne želim storiti.
Jaz namesto tega želijo prenesti v kaj?
Lokacija x in mesto y.
Kakšne so njihove poštne naslove, tako govoriti.
>> Torej za to, da je znak pove.
Znak za nekako zveni kot naslov.
Tako n, znak pove, naslov za x in y naslov.
Torej, to je namerno, da bomo uporabili ampersands ko kliče funkcijo,
in zvezde, ko razglasitvi in ​​ko izvedbo funkcije.
>> In samo pomislite, kot znak & naslov izvajalca in zvezda kot
tja operater -
ali, natančneje, Operater dereference.
Tako da je cel kup besed, samo da pravijo, da je zdaj, upam, da se bo zamenjava
pravilna.
>> Dovolite mi, da gredo naprej in -
kaj je pravzaprav preimenovati datoteko, da ne Ta program se še vedno imenuje swap št.
Trdim, da bomo pravimo swap.c zdaj.
Zato poskrbite, swap.
Pika, poševnica, swap.
>> Sedaj res, x je 1, je y 2.
Potem, je x 2, y je ena.
No, da vidimo, če nam tega ne more storiti malo drugače kot s tem, kar je
dogaja.
Prvič, dovolite mi povečavo na našem risanje zaslon tukaj.
In mi predlagal za trenutek - in ko rišem Tukaj bo odražala
tam zdaj - naj predlaga tukaj je cel kup pomnilnika, ali
RAM, znotraj mojega računalnika.
>> In to se bo število pik, recimo, 1.
To bo bajta številka 2.
In bom naredil cel kup bolj in nato kup dot dot piko
kažejo, da je 2 milijardi O teh stvareh.
4, 5 in tako naprej.
>> Tako so v prvih petih zlogov spomina mojega računalnika.
Vse v redu?
Zelo malo od 2 milijard evrov.
Ampak zdaj bom predlagala Naslednji.
Jaz bom predlagal, da x bo shraniti številko 1, in y je tekoč
da shranite številko 2.
In mi gredo naprej in zdaj predstavlja te vrednosti, kot sledi.
>> Naredimo to takole.
Daj mi samo eno sekundo.
Eno sekundo.
OK.
Želim, da bi to malo -
dajmo to narediti še enkrat.
V nasprotnem primeru bom in uporabo iste številke, nenamerno,
večkrat.
>> Torej, samo zato, da imamo različne številke govoriti, kaj je to imenujemo bajt
številka 123, 124, 125, 126, in dot dot dot.
In mi trdijo sedaj, da bom dal vrednost 1 tukaj, vrednost 2
tukaj, znane tudi kot x in y.
Torej je prav tako se zgodi, da to je x, to je y.
>> In samo z nekaj naključno naključje, računalnik, operacijski sistem,
se je zgodilo, da dajo x na lokaciji Številka 123.
In y končal na lokaciji 124 -
prekleto.
Tole bi morala določiti.
Oh človek, jaz res želite to storiti?
Da, želim popraviti to in b Pravilno o tem danes.
Oprostite, nov v tem.
>> 127, 131, in nisem hotel biti tako zapleteno, ampak zakaj sem spremenila
Številke tam?
Ker želim, da ints za dejansko štiri bajte.
Torej, kaj je bilo super anal o tem.
Tako da če 1. zgodi, da je treba obravnavati 123, 2 se bo na naslovu
127, saj je le 4 odstavne niše stran.
To je vse.
In bomo pozabili na vse druge naslove na svetu.
>> Torej je x na mestu 123, y je na mestu 127.
In sedaj, kaj storiti, sem dejansko želite narediti?
Ko sem poklical swap zdaj, kaj je pravzaprav dogaja?
No, ko sem poklical menjavo, sem prehodu v naslov x in y naslov.
Torej za primer, če ti dva kosa papirja, sedaj predstavljajo dve
argumenti in b, da bi zamenjali, kaj sem jaz bodo napisali na prvem,
kar bom poklical imenujemo?
>> Točno, 123.
Torej, to Trdim je.
To je parameter.
Jaz bom dal naslov x tam.
>> Kaj je to?
>> Ne, ne.
To je v redu.
Še vedno dobro, še vedno dobra.
Torej je to.
Sedaj pa na drugi list papirja To se bo b, in kaj sem jaz
bodo pisno ta kos papirja?
127.
>> Torej, edina stvar, ki se je spremenilo od leta naša prejšnja Prerokovanje te zgodbe je,
namesto dobesedno 1 in 2, sem dogaja, da prenese v 123 in 127.
In jaz sem zdaj bo dal te noter te škatle, v redu?
Tako, da črna skrinjica zdaj predstavlja Funkcija swap.
>> Medtem pa imajo zdaj nekoga izvajanje funkcije swap.
Bi kdo tu gor se javi?
Pridi gor.
Kako ti je ime?
Charlie.
Vse je v redu, Charlie.
Pridi gor.
>> Torej, Charlie se bo igral Vloga naše črne škatle.
Charlie, kaj bi rad, da narediš Zdaj se izvajajo zamenjave tako
da je glede teh dveh naslovov, ste dejansko dogaja
za spreminjanje vrednosti.
In bom šepeta v uho kako teči TV tukaj.
>> Tako da gredo naprej in si črna skrinjica.
Dosežejo tam.
Katere vrednote vidite za in Katere vrednote vidite za b?
>> CHARLIE: je 123 in je b 127.
>> DAVID Malan: V redu, prav.
Zdaj ustavite se za trenutek.
Prva stvar, ki jo boš naredil zdaj, glede na oznako - ki
Jaz bom zdaj dvigni na zaslonu -
se bo za dodelitev malo Malo spomina imenovano temp.
Tako da sem šel naprej in vam ta pomnilnik.
>> Torej, to se bo tretja spremenljivka da imate dostopno
si poklical temp.
In kaj boš napisal na temp kos papirja?
>> CHARLIE: Kazalci, kajne?
>> DAVID Malan: OK, tudi ne nujno napotke.
Torej vrstico kode, da sem poudarjeno na desni strani,
začnimo tam.
Piše zvezda.
Torej je trenutno shranjevanje številka 123.
In samo intuitivno, kaj je zvezda 123 pomeni?
>> Toda posebej, če je 123, zvezda pomeni kaj?
Vrednost.
Ali bolj mimogrede, pojdi tja.
Torej, kaj mi predlaga, da imajo v roko, pojdi naprej in zdravljenje, ki
kot da je zemljevid.
In hodi prepustite računalnika spomin, in nas, kar je
na lokaciji 123.
Točno tako.
>> Tako smo videli na mestu 123 je tisto, kar je očitno?
OK, kakšno vrednost sedaj ste bo dal v temp?
Točno tako.
Tako da gredo naprej in to.
In napišite številko 1 na kos papir, ki je trenutno z naslovom temp.
>> In zdaj naslednji korak, da boš za izvajanje
se bo kaj.
No, na desni strani Naslednja vrstica kode je zvezda b. b, od
Tečaj, shranjuje naslov.
, Ki obravnava 127.
Star b pomeni tisto, mimogrede rečeno?
>> Pojdite na tej lokaciji.
Tako da gredo naprej in nam najti tistega, kar je na lokaciji 127.
OK.
Seveda je na mestu 127, še vrednost 2.
Torej, kaj boš sedaj trgovino na vse, kar je na lokaciji?
Torej zvezdic sredstvo pojdite na mesto v.
Kaj je mesto?
>> Točno tako.
Torej, zdaj, če želite spremeniti kaj je na tem mestu -
Jaz bom šel naprej in zagon radirko so tukaj.
In zdaj ga vrnili na krtačo.
Katero številko boste napisali v tem praznem polju zdaj?
>> Točno tako.
Torej, ta vrstica kode, da bo jasno - kaj mene ustavite, kaj je Charlie počne in
poudariti tukaj, kaj mu je storiti samo je pisati v tem polju na lokaciji 123
vrednost, ki je bila prej na b.
In tako smo zdaj izvaja v resnici ta druga vrstica kode.
>> Zdaj na žalost, tam je Preostali še ena vrstica.
Zdaj, kaj je v temp, dobesedno?
Očitno številka ena.
To ni naslov.
To je samo številka, vrsta razlikuje od enega tedna.
>> In sedaj, ko ste rekli zvezda b, ki pomeni kraju naslovno b, ki je
Tečaj tukaj.
Torej, ko prideš tja -
Jaz bom šel naprej in izbrisati kaj je dejansko tam - in kaj ste
bom napisal zdaj na lokaciji, 127?
>> CHARLIE: Temp, ki je eden.
>> DAVID Malan: Temp, ki je eden.
In kaj se zgodi s temperaturo na koncu?
No, res ne vem.
Mi ne briga.
Vsak čas, ki smo jih izvajali funkcijo doslej, vse lokalne spremenljivke imate
so res lokalno.
In kar izginil.
Oni predelalo za poslovanje Sistem sčasoma.
>> Zato je dejstvo, da je še vedno temp vrednost 1 je nekako bistveno
nezanimiv za nas.
Vse je v redu, tako da aplavz če bi lahko za Charlie.
Zelo dobro opravljeno.
>> V redu, kaj več pa to pomeni, da lahko storimo?
Tako se izkaže, da smo bili povedal nekaj bele laži
za kar nekaj časa.
Dejansko se je izkazalo, da je niz, vsem tem času ni res
Zaporedje znakov per se.
Nekako je to intuitivno.
>> Ampak tehnično gledano niz tip podatkov, ki smo prijavljeni v notranjosti
CS50 knjižnica poenostaviti svet V prvih nekaj tednih razredu.
Kaj niz res je naslov iz narave nekje v RAM.
Niz je res več kot 123 ali 127, ki se zgodi, da se določijo
kjer niz začne spomin računalnika.
>> Ampak to ne pomeni Niz po sebi sama.
In lahko vidimo to kot sledi.
Dovolite mi, da gredo naprej in odpiranje del kode, ki je med
Primeri izvorne kode današnji.
In jaz grem naprej in odprite do, recimo, primerjate-0.c.
To je vozičkom program, ki se bo ki se izvaja, kakor sledi.
>> Prvi.
Bom kaj rekel.
Potem sem šel naprej in dobili niz od uporabnika
v tej naslednje vrstice.
Potem bom ponavljal.
Potem bom dobil drugo Niz od uporabnika.
>> In obvestilo, da sem pokazal eno strune v spremenljivko y in
ena od teh nizov v spremenljivko imenovano t.
In zdaj bom trdijo, zelo smiselno, da če je enaka enaka t,
niza sta enaka.
Vnesete isto stvar.
Else, strune so ni ista stvar.
>> Konec koncev, če vnesemo dve ints, dva znakov, dve plovci, dva podvoji, vse z
podatkovni tipi smo govorili Tako daleč, da bi jih primerjali -
Spominjam smo zelo jasno že pred časom da ne bi to naredili, ker
sam enačaj je seveda Operater naloga.
Torej bi bilo to napako.
>> Mi uporabljamo enako enačaj, ki dejansko primerja
Stvari za resnično enakost.
Vendar trdim, da je to vozičkom.
Če grem naprej in primerjati nič, in potem pika poševnica primerjati nič.
In jaz sem tip v, recimo, zdravo.
In potem pa spet pozdravit.
Dobesedno isto stvar, računalniški trditvah sem tipkal različne stvari.
>> Zdaj morda sem samo nekaj zatipkali.
Jaz bom vnesite ime mi ta čas.
Mislim, zdravo.
Pozdravljeni.
To je drugačen vsak čas.
>> No, zakaj je to?
Kaj se v resnici dogaja pod pokrovom?
No, kaj se v resnici dogaja pod Pokrov je niz, nato
Sem tipkal v tem prvič za primer je beseda zdravo, seveda.
Ampak, če mi predstavlja to pod napa, opozarjajo, da
niz v matriki.
In sva rekla toliko v preteklosti.
>> Torej, če potegnemo to paleto, kot je ta, da sem dogaja, da predstavlja nekaj povsem
podoben temu, kar smo storili pred nekaj trenutki.
In tam je dejansko nekaj Posebna tukaj.
Kaj smo ugotoviti, je bil na konec vsakega niza?
Ja, to Nagibnica nič, kar je samo način zastopanja,
dobesedno, 00000000.
Osem 0 bitov zapored.
>> Ne vem, odkrito povedano, kaj je potem to.
To je samo kup več RAM-a znotraj mojega računalnika.
Ampak to je matrika.
Pogovarjali smo se o nizi prej.
In smo ponavadi govorimo o nizi kot lokacija nič,
nato pa eno, potem pa dva.
Ampak to je samo za udobje.
In to je povsem relativno.
>> Ko ste dejansko dobili iz spomina računalnik, je seveda koli
2 milijardi nekaj čudno bajti, potencialno.
Torej res pod pokrovom, Ves ta čas, ja.
To bi bilo zelo dobro držalo nič.
Ampak, če ste kopljemo še globlje pod napa, to je res
obravnavati številko 123.
To je naslov 124.
To je naslov 125.
>> In nisem zamočil tokrat.
To so zdaj ena bajta poleg zakaj?
Kako velika je znak?
Char je samo en bajt.
Int je običajno štiri bajte.
Tako, da je razlog, zakaj sem to 123, 127, 131 in tako naprej.
Sedaj lahko obdržim math enostavnejši in samo to plus 1.
In to je zdaj tisto, kar se v resnici dogaja na pod pokrovom.
>> Torej, ko ugotovi, kaj takega, niz s, to je pravzaprav -
Izkazalo se je -
char zvezda.
Star seveda pomeni naslov, alias kazalec.
Torej je naslov nečesa.
Kaj je naslov?
>> No -
Jaz sem edini, ki vidi zelo Pomembna točka delam, ali mislite
Delam.
Torej niz -
Žalostno je, da imam monitor tam, kjer sem
lahko opazila, da.
>> Vse je v redu, tako da je niz je tisto, Prej sem prijavljeni.
Izkaže pa se, zahvaljujoč malo magija v knjižnici CS50, vse to
Čas niz ima dobesedno bil znak zvezda.
Zvezda spet pomeni, kazalec ali naslov.
Dejstvo, da je spremljajočih Beseda znak pomeni, da je
naslov znak.
>> Torej, če bi dobili niz se imenuje, in sem tip v H-E-L-L-O, predlagam kaj zdaj je dobil
Niz dobesedno bilo vračanje vseh ta čas, čeprav smo jih prej
poenostavljeno svet?
Kaj se pravzaprav niz vrniti kot svojo vrnjene vrednosti?
>> 123 v tem primeru, na primer.
Mi smo že prej rekli, da bi dobili niz preprosto vrne niz, zaporedje
znakov.
Ampak to je malo belo laž.
Tako bi dobili niz res deluje Pod pokrovom se ga dobi
Niz od uporabnika.
To skoči znake, ki on ali ona vrste v spominu.
To postavlja backslashem ničle na koncu tistih zaporedje znakov.
>> Ampak potem kaj dobil niz dobesedno vrnil?
Dobesedno vrne naslov Prve bajtov RAM-a, da je
uporablja za to moč.
In izkazalo se je, da samo z vrnitvijo sam naslov
Prvi znak v nizu, ki je zadostuje za ugotovitev celoto
niz.
>> Z drugimi besedami, dobili niz nima vrniti 123 in 124 in 125.
To ni nujno, da mi dolg seznam vseh bajtov, ki
moj niz se uporabljajo.
Ker je ena, da so vsi na hrbtni strani.
In dva, ki temelji na prvem naslovu, sem Lahko ugotovimo, kje Niz se konča.
Kako?
>> Posebna null znak, Nagibnica nič na koncu.
Torej, z drugimi besedami, če boste peljali okrog -
Notranjost spremenljivk -
naslov char in prevzeti da je ob koncu vsakega niza, vse
zaporedje znakov, kot smo ljudje mislim strune, če predpostavimo, da
na koncu vsakega takega niza tam Nagibnica nič, ti si zlata.
Ker lahko vedno najdete Konec niza.
>> Zdaj, kaj je res, potem bo na v tem programu?
Zakaj je ta program, primerjajo-0.c, buggy?
Kaj se dejansko primerjali?
Ja?
>> ŠTUDENT: [neslišno].
>> DAVID Malan: Točno tako.
To je primerjanje lokacij od nizov.
Torej, če je uporabnik vnesli v zdravo enkrat, kot sem storil, bi spomin na koncu
videti takole.
Če nato uporabnik tipi iz Pozdravljeni, ampak ga kliče spet dobil niz, c je
ni posebno pameten, če ne boste naučili , da je pametno s pisanjem kode.
>> C -
in računalnikov na splošno -
Če vnesete v besedi Pozdravljeni še enkrat, veš, kaj boš dobil.
Greš samo, da bi dobili drugo matriko spomina, ja, zgodi se
shranjevanje H-E-L-L-O in tako naprej.
>> To se dogaja, da zgledajo enako nas ljudje, vendar ta naslov
morda ne bo 123.
Morda samo zato, da se zgodi, da operacijski sistem ima nekaj na voljo
prostor, na primer na lokaciji -
recimo nekaj arbitrarno, kot je to mesto 200.
In to je lokacija 201.
In to je lokacija 202.
Nimamo pojma, kje ki je bo v pomnilniku.
>> Ampak kaj to pomeni, da tisto, kar je bo na koncu shranjena v s?
Številka 123.
Kaj se dogaja, da se shranjujejo na t, pri tem poljubno primer?
Številka 200.
In vse to pomeni, potem je očitno, 123 ni enako 200.
In tako je to, če pogoj ni ovrednoten kot resničen.
Saj je dobil niz z drugačno kose pomnilnika vsakič.
>> Zdaj lahko to spet videl v drugem primeru.
Dovolite mi, da gredo naprej in odprla copy-0.c.
Trdim, da je ta primer se bo poskusite - vendar pa ne - za kopiranje dveh nizov
kot sledi.
>> Jaz bom rekel nekaj za uporabnika.
Jaz pa bom dobil niz in ga je poklical.
In zdaj, delam to preverjanje tukaj.
Smo omenili tem že nekaj časa nazaj.
Toda, ko bi lahko dobili niz vrne null, en poseben znak, ali posebni
Simbol recimo.
Če je iz spomina.
>> Na primer, če je uporabnik res da je težko in vrste krute
število znakov v Tipkovnica in zadetki Enter.
Če to število znakov samo ne more prilegajo v RAM za karkoli nor
Razlog, tudi dobili niz morda Zelo dobro vrne null.
>> Ali če sam program počne veliko drugih stvari, in tam je samo
Ni dovolj pomnilnika za get niz uspeti, je morda na koncu
se vrača nično.
Ampak bodimo bolj natančni , da je to.
Kaj je podatkovni tip ev je res?
Char zvezda.
>> Tako se izkaže, zdaj smo lahko lupino varnostno plast null.
Izkazalo se je, ničen, je - da, seveda poseben simbol.
Toda kaj je to res?
Res, ničen, je samo simbol, da smo ljudje uporabljajo, da predstavlja nič, kot dobro.
>> Torej avtorji C in računalnikov bolj splošno, odločili že pred leti
da, veš kaj.
Zakaj ne bi zagotovili, da noben uporabnik podatki nikoli, nikoli, nikoli
shranjena pri bye nič?
Sicer pa tudi v moji poljubno primer prej nisem začeti številčenje
bajti nič.
Začel sem na eni.
Ker sem vedel, da so ljudje na svetu so se odločili, da si pridržujejo nič
bajt nikomur v RAM, kolikor nekaj posebnega.
>> Razlog je, kadarkoli želite znamenje, da je nekaj narobe
glede naslovov, ste se vrnili null - sicer znan kot nič -
in ker veš, da ni zakonit podatke na naslovu nič jasno
to pomeni napako.
In zato smo po dogovoru, preverite za ničelno in vrnitev nečesa
kot eden v teh primerih.
>> Torej, če se pomaknete navzdol zdaj, to je samo potem nekaj preverjanje napak, samo v primeru
kaj je šlo narobe z [? bail?]
skupaj in zaprete program z vrnitvijo zgodaj.
Ta linija bi se sedaj lahko zapišemo kot je to, kar pomeni, kaj?
Na levi strani, daj mi drugo kazalec na znak in sprožajo je t.
Kaj sem shranjevanja znotraj t, ki temelji na eno vrstico kode?
>> Jaz shranjevanje lokacijo.
Specifično lokacijo da je v s.
Torej, če je uporabnik vnesli v zdravo, in da najprej pozdravite se zgodi, da na koncu
, potem pa se število 123 je bo vrnil iz dobili
obesil in shranjeni -
kot smo že povedali -
vs.
>> Ko sem zdaj razglaša drugo kazalec char in ga imenujemo t, kar je število
Dobesedno bo na koncu leta Ne glede na zgodbo?
Torej 123.
>> Torej tehnično zdaj tako je in t so kazali na točno
enake kose pomnilnika.
Torej opazili kaj bom sedaj storiti, da dokazati, da je ta program vozičkom.
>> Najprej bom trdijo, s print f, kapitalizacijo
kopijo niza.
Potem bom naredil malo Preverjanje napak.
Jaz bom se prepričajte.
Dajmo se prepričajte, da je niz t na vsaj večja od nič dolžine,
tako da je nekaj znakov je dejansko izkoristili.
>> In potem boste morda spomni tega iz prejšnjih primerov.
2. Zgornji - ki je v ctype.h datoteke.
T nosilec nič mi daje nič znak niza t.
In 2. zgornji del iste vrednosti, Tečaj, ga pretvori v velike črke.
>> Torej intuitivno, to označite vrstico kode je izkoristila prvo
črka t.
Ampak to ni izkoristila, intuitivno, prva črka v s.
Toda, če razmišljate naprej, kaj sem jaz nadeja, ko sem zagon tega programa
in izpisal tako original, s, in ti kopijo, t?
>> Oni dejansko dogaja, da je isto.
In zato se bo enaka?
Oni so tako kaže na natanko isto stvar.
Torej, kaj je to.
>> Naredite kopijo nič.
To prevede v redu.
Dovolite mi, da teče kopiranje nič.
Dovolite mi, vnesite nekaj podobnega zdravo v vse male nato pritisnite tipko Enter.
In trdi, da prvotna s in izvod dejansko enaki.
>> Torej, kaj se je zares zgodilo?
Dovolite mi, da izvlečete to sliko le povedati zgodbo v
nekoliko drugačen način.
Kaj se v resnici dogaja pod hood ko Izjavljam, nekaj podobnega
znak začetek s, ali niz s, Dobim kazalec -
ki se zgodi, da je štiri bajte V CS50 naprave
in v veliko računalnikov.
In bom poklical to je.
In to ima trenutno nekateri neznano vrednost.
>> Ko izjavi spremenljivko, razen če si dal vrednost tam, kdo
ve, kaj je tam.
To je lahko nekaj naključno zaporedje bitov iz prejšnjega izvedbo.
Torej, ko sem v mojem kode ne dobijo niz in nato shrani vrnitev
Vrednost vs dobili niz nekako -
In bomo sčasoma lupine nazaj kako priti vrvice dela, nekako razporeja
matrika, ki je verjetno videti bit, kot je ta.
H-E-L-L-O, nagibnica nič.
>> Recimo, da je to naslov 123 samo prvi doslednost.
Torej, dobil niz vrne v poudarjeno linijo tam, se vrne
Številka smo rekli, 123.
Torej, kaj pravzaprav gre notranjost je tu?
>> No, kaj res gre Notranjost s je 123.
Vendar odkrito povedano, sem že malo zmedeni zaradi vseh teh naslovov,
Vse te poljubnih številk.
123, 124, 127.
Torej, kaj je pravzaprav poenostavitev svet malo.
>> Ko govorimo o kazalci, odkrito povedano, da nas ljudje, ki vraga briga, če
stvari so v spomin?
To je povsem samovoljno.
To bo odvisno od tega, kako veliko RAM-a ima uporabnik.
To bo odvisno, če na dan zaženete program, morda, in
kaj vložek uporabniku vam daje.
Mi smo stanovanje na nepomembnih podrobnostih.
>> Torej, kaj je abstraktna stran in reči, da je ko zaženete vrstico kode, kot je ta,
char zvezda je dobil vrnitev Vrednost get niza.
Zakaj ne bi namesto tega preprosto sestaviti, kar smo da kliče kazalec, kot da je
kaže na nekaj?
Tako da sem zdaj trdijo, da je do je kazalec -
Pod pokrovom je naslov.
Ampak to je samo kaže na prvi bajt pri
niz, ki je bil vrnjen.
>> Če bom zdaj vrnil na kodo tukaj kaj se dogaja na tej liniji?
No, v tej označeno linijo sedaj, Jaz razglasitvi očitno še
spremenljivka imenovan t.
Ampak to je tudi kazalec, tako da bom da se pripravi kot v teoriji, natančna
Velikost polje enako.
In jaz bom, da ga pokličete t.
>> In zdaj, če gremo nazaj na kodo še enkrat ko sem shraniti notri t,
kaj sem jaz tehnično dajanje znotraj t?
No, tehnično, to je število 123.
Torej, res sem se pisno številka 123 tam.
Ampak kaj je to višji ravni sprejeti.
t, če je to samo kazalec, intuitivno, je prav to.
To je vse, kar bi shranjena notri.
>> Sedaj je v zadnjih zanimivih linij kode, ko sem dejansko šel okoli
pripisala nič značaja na t, kaj se dogaja?
No, t nosilec nič se zdaj kaže s tem, kar lik, verjetno?
>> To se kaže na h.
Ker t nosilec nič -
opozarjajo, da je to stara sintaksa. t kotnik nič pomeni samo, če je t niz, t
Nosilec nič pomeni, dobili nič lik v tej moči.
Torej, kaj to v resnici pomeni je šel v ta sklop -
in ja, to bi bilo 123, to je lahko 124.
Ampak to je vse relativno, ne pozabite.
Kadarkoli govorimo o matriki, ki smo jih Prednost govoriš
relativna indeksi.
>> In sedaj lahko samo prevzeti da t nosilec nič je h.
Torej, če kličem 2 zgornja na to, kaj je to res delaš se kapitalizirajo
male h z veliko začetnico H. Ampak seveda, kaj je?
To se kaže na isti darn niza.
>> Torej, to je vse, kar se dogaja v kodi doslej.
Torej, kaj je potem posledice?
Kako bomo rešili teh dveh problemov?
Kako bomo primerjali z dejanskimi strune?
>> No intuitivno, kako bi greste o primerjavi dveh
strune za resnično enakopravnost?
>> Kaj pomeni, če se dva niza sta enaka?
Ni jasno, da so njihovi naslovi enako v spomin, ker to je nizka
Podatek o izvajanju raven.
Vsi znaki so enaki.
Torej, kaj mi predlaga, naj vam predstavim v različici ene od compare.c
tukaj, tako da primerjate-1.c.
>> Dovolite mi, da predlagam, da še vedno zaslužiti Kazalec se imenuje i in trgovina na to
vrne vrednost get niza.
Naredimo isto st.
Torej nobeden od oznake je drugačna.
Bom dodati malo preverjanje zdaj več napak.
Torej sedaj, da smo neke vrste piling nazaj to plasti v CS50, kaj niz
dejansko je, da morajo biti bolj anal v tem, da se ne zlorablja
neveljavnih vrednote, kot so nične.
>> Torej, grem preveriti.
Če je ni enak nično in t ne enaka nič, to pomeni, da si v redu.
Get niz ni zajebal pridobivanje eno od teh nizov.
In lahko morda veš zdaj, kaj ne STR CMP verjetno naredil?
String primerjavo.
>> Torej, če ste program java prej, to je kot metodo enaka v
Niz razred.
Toda za tiste, ki nimajo programirana prej,
to je samo funkcija c.
To se zgodi, da pridejo v datoteka z imenom string.h.
To je, kjer je to prijavljeni.
>> In godalni primerjavo -
Pravzaprav sem pozabil njegovo uporabo, vendar nikoli ne moti, da.
Spomnimo se, da lahko storimo Človek, premešamo primerjavo.
In to se dogaja, da bi do Programerji Linux navodila.
In to je, odkrito povedano, malce skrivnosten.
Vendar sem lahko tukaj vidite, da, ja.
Moram tudi string.h.
>> In tukaj piše pod opisom " Niz funkcija primerjaj primerja
dva niza S1 in S2. "In S1 in S2 sta očitno dve
Argumenti opravili noter
Res ne spomnim, kaj const je, ampak zdaj opazil -
in lahko že to videli, ko ste uporabite man strani, če
imajo vse -
da znak zvezda je le sinonim z vrvico.
>> Tako da primerja dva niza, S1 in S2, in vrne celo manj
od ali enaka ali večja od nič če se ugotovi, S1, oziroma, da se
nižji ali enaki, ali biti večja od S2.
To je samo zelo zapleten način rekel da niz primerjati donose
nič, če dva niza sta intuitivno identična, znak za
znak za znakom.
>> Se vrne negativno število če i, po abecedi, naj
priti pred t.
Ali pa vrne pozitivno število, če i naj bi prišel po t
po abecedi.
Torej s te preproste funkcije, lahko si, na primer, razvrstite
cel kup besed?
>> Torej, v tej novi različici, bom iti naprej in compare1.
Dot poševnica primerjati enega.
Bom vnesite zdravo v vseh malimi črkami.
Jaz grem vnesti zdravo v vseh male znova.
In na srečo zdaj se zaveda, Sem tipkal isto stvar.
>> Medtem, če se vpišem v zdravo v spodnji primera in HELLO v zgornjem primeru in
jih primerjajo, sem tipkal različni stvari.
Ker ne le, da so naslovi različni, vendar smo primerjali
vedno znova različnih znakov.
>> Pa pojdimo in določi enega Druga težava zdaj.
Naj se odprejo različico eno od kopija, ki zdaj obravnava
to vprašanje takole.
In to se dogaja, da si malo bolj zapletena.
Toda če mislite, kaj problem smo treba rešiti, upajmo, da bo to
jasno, čez nekaj trenutkov zdaj.
>> Torej je to prva vrstica, znak start t, v smislu navadnega je lahko nekdo predlaga
Kaj ta vrstica tu pomeni?
Char zvezda t, kaj je to delaš?
>> Dobro.
Ustvarite kazalec na nekatere mesto v pomnilniku.
In mi ga malo izboljšati.
Razglasi spremenljivko, ki bo hranila Naslov nekaterih znak v spomin, le
da se malo bolj pravilno.
>> OK, zdaj na desni strani, sem nikoli nisem videl enega od teh funkcij
prej, malloc.
Ampak kaj bi to pomenilo?
Dodeljevanje pomnilnika.
>> Tako se izkaže, do sedaj smo ni res imela močan način
prosi operacijski sistem, dajte mi neki spomin.
Namesto tega imamo zdaj funkcijo imenovano malloc da počne ravno to.
Čeprav je to malo moteča zdaj, opazili, da v
med oklepaju je šele bo število.
Kjer sem tipkal na vprašanje oznake lahko število.
>> In to število pomeni, Dajte mi 10 bajtov.
Daj mi 20 bajtov.
Daj mi 100 bajtov.
In bo malloc po svojih močeh vprašajte operacijski sistem -
Linux, v tem primeru -
hej, so njihovi 100 bajtov RAM na voljo?
Če je tako, se vrnite tiste bajte, ki mi jih vračanje naslov katerega od
tisti bajti, morda?
Zelo prvi.
>> Torej tudi tu - in to je prevladujoča v C, kadarkoli si
ki se ukvarjajo z naslovi?
Ti si skoraj vedno ukvarjajo z Prvi tak naslov, ne glede na to, kako velik
kos pomnilnika, ste se vrnil, tako rekoč.
>> Torej, da se potopite v igro.
Jaz sem poskušal razporediti kako veliko bajti, točno?
No.
Dolžina niz s - lets ' ne konkreten primer.
Če je, je zdravo, H-E-L-L-O, kaj je Niz dolžine s, seveda?
Torej je pet.
Ampak delam plus 1 o tem, zakaj?
Zakaj želim šest zlogov namesto petih?
Null znak.
>> Nočem pustiti off to Posebna null znak.
Ker če naredim kopijo Pozdravljeni in pač H-E-L-L-O, ampak jaz ne dajo
da je poseben znak, računalnik ne bi imeli, po naključju, backslash
ni nič za mene.
In tako, če sem poskušal ugotoviti, Dolžina kopijo, sem morda misliš, da
to je dolga 20 znakov, ali milijon znakov, če mi ne bo zgodilo
udariti poševnico nazaj nič.
>> Zato moramo šest bajtov za shranjevanje H-E-L-L-O, nagibnica nič.
In potem je to samo da je super anal.
Recimo, da sem pozabil, kaj velikost char je.
Hranimo pojasni, je to en bajt.
In ponavadi je.
V teoriji bi lahko bilo kaj različna, na drug računalnik ali
drugačna PC.
>> Tako se izkaže, da je ta izvajalec imenovano sizeof da če jo je mimo
ime podatkovnega tipa - kot char, ali int ali float -
vam bo povedal, dinamično, koliko bajtov char zavzema za to
Zlasti računalnik.
>> Torej je to dejansko samo Kot bi rekel krat 1 ali
krat sploh nič.
Ampak to delam samo, da je super anal, da samo v primeru, char razlikuje
na vašem računalniku proti rudnikom, na ta način matematika je vedno tekoč, da preverite.
>> Končno, tukaj sem ček za nično, kar je vedno dobra praksa - še enkrat,
koli imamo opravka s kazalci.
Če malloc ni bil sposoben dati me šest odstavne niše - kar je
verjetno ne, ampak samo v primeru -
takoj vrniti eno.
In zdaj, pojdi naprej in kopiranje niz, kot sledi.
In to je znano sintakso, čeprav v drugačni vlogi.
>> Jaz grem naprej in dobili niz Dolžina ih in ga shranite v n.
Jaz sem potem bo ponovitev iz i je enak nič do vključno n
večja ali enaka.
Tako da na vsaki ponovitvi, sem dal i-narava-ih v i-
značaj t.
>> Torej, kaj se v resnici dogaja pod hood tukaj?
Torej, če je ta, na primer, je s -
in sem vnesli v besedo H-E-L-L-O in tam je backslash nič.
Še enkrat, to je obrnjena tukaj.
In tu je t.
>> To kaže zdaj kopija spomina, kajne?
Malloc mi je dal celotno kos pomnilnika.
Ne vem, kaj je sprva V nobenem od teh mest.
Torej bom razmišljati o njih, kot cel kup vprałaji.
>> Ampak takoj, ko sem začel zanka od nič gor skozi dolžino S, T
Nosilec nič in t nosilec 1 -
in bom to dal zdaj v zgornjem delu -
t nosilec nič in je nosilec nič pomenilo da bom za kopiranje
ponavljajočim h tukaj, E-L-L-O. Plus, ker sem naredil plus
1, backslash nič.
>> Sedaj v primeru Primerjava-c 1., Na koncu, če sem natisnete
kapitalizacija t, bi morali vidim, da je nespremenjen.
Dovolite mi, da gredo naprej in zdaj to.
Zato poskrbite, copy1.
Dot slash copy1.
Jaz grem vnesti zdravo, Enter.
In zdaj opazil, samo kopijo je bil začetnico.
Ker sem resnično imamo dva kose pomnilnika.
>> Na žalost, to lahko storite nekaj precej slabe in precej nevarno stvari tukaj.
Dovolite mi, dvigni primer tukaj zdaj, ki nam daje zgled nekaj
Različne linije.
Torej samo intuitivno tukaj, prva vrstica kode, int x zvezda, ki je razglasila
spremenljivka imenovan x.
In kaj je podatkovni tip te spremenljivke?
Kaj je podatkovni tip te spremenljivke?
To ni bilo Alpinista.
>> Podatkovnega tipa int zvezda.
Torej, kaj to pomeni? x bo shranjevanje naslov notr.
Enostavno kot da.
Y se dogaja, da shranite naslov notr.
Kaj je tretja vrstica kode počne tam?
To je dodeljevanje koliko zlogov, najverjetneje?
Štiri.
Zaradi velikosti notr je praviloma štiri, malloc štirih daje
me nazaj naslov na kos spomin, prva katerega bajtov,
sedaj shranjen v x.
>> Zdaj gremo malo hitreje.
Star x pomeni kaj?
To pomeni, da gredo na ta naslov in dal kaj več tam?
To število 42 tam.
Star y pomeni iti, kaj je na y in dal številko 13 tam.
>> Toda počakaj malo.
Kateri je y trenutno?
Kaj je naslov y shranjevanje?
Ne vemo, kajne?
Nikoli nismo enkrat uporabite nalogo Operater, ki vključuje y.
Torej, y, kot je opredeljena v drugi vrstici koda je le nekaj smeti vrednost, velik
vprašaj tako rekoč.
Lahko se naključno obrnjena za kaj v spomin, ki
je na splošno slabo.
>> Torej, takoj, ko smo zadeli to vrstico tam, zvezda y enaka 13, nekaj slabega,
Nekaj ​​zelo slabo gre se zgodi, da Binky.
Torej, da vidimo, kaj se bo na koncu dogaja tukaj Binky v tem trenutku
ali tako videti.
>> [Predvajanje videa]
>> Hej, Binky.
Zbudi.
Čas je za zabavo kazalca.
>> Kaj je to?
Spoznajo kazalci?
Oh, goodie.
>> No, za začetek, mislim, da smo bodo potrebovali nekaj nasvetov.
>> -V redu.
Ta koda namenja dva kazalca , ki lahko kažejo na cela števila.
>> -V redu, dobro, vidim dva kazalca.
Vendar pa se ne zdi, da kaže na nič.
>> -To je res.
Sprva kazalci ne opozarjajo na karkoli.
Stvari, ki jih kažejo, da so ti pointees, in jih ustanavljajo je
ločena korak.
>> -Oh, v redu, v redu.
Vedel sem, da je.
V pointees sta ločena.
Torej, kako si namenil pointee?
>> -V redu.
No, ta številka dodeli novo števil pointee, in ta del določa x
da kažejo na to.
>> Hej, da izgleda bolje.
Torej bi bilo nekaj storiti.
>> -V redu.
Bom dereference kazalec x za shranjevanje Številka 42 na svojem pointee.
Za ta trik, potreboval bom svojo čarovnijo palica za Dereferenciranje.
>> -Vaš čarobno palico iz Dereferenciranje?
Uh, to je super.
>> -To je tisto koda izgleda.
Jaz bom ustanovil številko, in -
>> Hej, poglej.
Tu gre.
Tako početje ciljne datoteke na x sledi arrow dostop do svojega pointee.
V tem primeru se za shranjevanje 42 tam.
Hej, poskusite ga uporabljali za shranjevanje števila 13 skozi drugi kazalec, y.
>> -V redu.
Jaz bom šel tja do y in se številka 13 ustanovi.
In nato z palico Dereferenciranje in samo -
vau!
>> Oh, hej.
To ni delo.
Pravijo, Binky, jaz ne mislim, Dereferenciranje y je dobra ideja,
ker vzpostavitev pointee je ločen korak.
In jaz ne mislim, da bomo kdaj to storil.
>> -Hmm.
Dobro vprašanje.
>> -Ja, namenila kazalec y.
Ampak mi nikoli ne nastavite na opozarjajo na pointee.
>> -Hmm.
Zelo pazljiv.
>> Hej, iščete Dobro je, Binky.
Lahko določi, tako da y točke na isti pointee kot X?
>> -Seveda.
Jaz bom uporabil mojo čarobno palico kazalec nalogo.
>> -Je, da bo problem, kot prej?
>> -Ne.
To ne dotikajte pointees.
Prav tako se spreminja en kazalec s točko na isto stvar kot drugo.
>> Oh, vidim.
Zdaj y opozarja na istem mestu kot x.
Torej, počakajte.
Zdaj je y določena.
Ima pointee.
Torej, lahko poskusite palico za ponovno Dereferenciranje
poslati 13 nad.
>> -V redu.
Tukaj gre.
>> Hej, poglej to.
Sedaj Dereferenciranje dela na y.
In ker so kazalci v skupni rabi da je eden pointee, da
tako videli 13.
>> -Ja.
Delitev.
Karkoli.
Torej bomo zamenjala zdaj?
>> -Oh, poglej.
Zmanjkuje nam časa.
>> Ampak -
>> -Samo spomnite se tri Pravila kazalec.
Prvič, osnovna struktura je, da imate kazalec.
In to kaže več na pointee.
Ampak kazalec in pointee sta ločena.
In pogosta napaka je, da vzpostavi kazalec, ampak
pozabi dati pointee.
>> Številka dve, se začne kazalec Dereferenciranje Na kazalcem in sledi svojemu
arrow čez dostop do svojega pointee.
Kot vsi vemo, to deluje samo, če obstaja je pointee, ki dobi nazaj
Pravilo številka ena.
>> Številka tri, kazalec naloga je en kazalec in spremembe, da kažejo na
Enako pointee kot drugi kazalec.
Torej, po odstopu, dva kazalca bo
opozarjajo na istem pointee.
Včasih, ki se imenuje delitev.
In to je vse, kar je z njo, res.
Adijo zdaj.
>> [END predvajanje videa]
>> DAVID Malan: Torej bolj na kazalcev, Več o Binky naslednji teden.
Se vidimo v ponedeljek.