>> DAVID Malan: Sveiki, un welcome atpakaļ uz CS50.
Tātad, tas ir beigām, no četrām nedēļām.
Tikai viens paziņojums pirmās.
Tā saukto piekto pirmdiena ir nāk klajā šo nāk pirmdiena.
Šī ir iespēja, lai mainītu no SAT / UNSAT uz burtu pakāpē, vai no
vēstule pakāpes SAT / UNSAT.
Kaitinoši, ka process nav nepieciešama paraksts, jo jums ir jāaizpilda
veic vienu no šiem rozā pievienot / piliens formas.
>> Jo tehniski, SAT / UNSAT versiju un burtu pakāpes versija
ir atšķirīgas katalogu numuriem.
Bet nav liels darījumu.
Vienkārši nākt pie manis vai Rob vai Lauren jebkurā brīdī.
Vai e-pastu mums, ja jums nav sava veida ar dokumentiem, jums ir nepieciešams šodien, un mēs
būs pārliecināti, lai palīdzētu jums veikt aprūpi, ka pirms pirmdien.
>> Labi, tāpēc šodien -
patiesībā, tur ir atbalss mazliet.
Mēs varam tonis mani mazliet?
Labi.
Tātad šodien, mēs ieviest tēmu pazīstams kā norādes.
Un es atzīstu, ka šis ir viens no sarežģītākas tēmas, kas mums ir tendence
aptver šajā klasē, vai tiešām jebkāda ievadkurss, kas izmanto C.
>> Bet ņemt manu vārdu par to, jo īpaši ja jūsu prāts jūtas mazliet vairāk smilga
šodien un dažu nedēļu laikā nākt.
Tas nav uzrādīts jūs saņemat kāds ir šis sliktāk tas tikai nozīmē, ka
tas ir īpaši sarežģīta tēma ka man sola, dažas nedēļas
līdz ar to, kas šķiet pārāk uzkrītoši vienkārši retrospektīvi.
>> Es joprojām atceros, līdz pat šai dienai.
Es sēdēju Elliott ēdamzāle, sēžot blakus manam TF Nishat Mehta,
kurš bija par Elliott mājas iedzīvotājs.
Un kādu iemeslu dēļ, tas temats vienkārši klikšķiem.
Kas ir teikt, ka arī es cīnījos ar to kādu laiku, bet es
darīšu visu iespējamo, lai palīdzētu izvairīties no šāda cīņa ar tēmu, kas galu galā
ir diezgan spēcīgs.
>> Patiesībā, viens no jautājumiem, mēs apspriestu pēdējās nedēļās, lai nāk, ir, ka
par drošību, un kā jūs faktiski var izmantot mašīnas veidos
kas netika paredzēti.
Un tie exploitations parasti rezultāts bugs, kļūdas, kas mums
cilvēki dara, ko nesaprot, kādu pamatā esošā īstenošanu
detaļas, caur kuru programmas tiek veiktas.
>> Tagad, lai padarītu to, šķiet, visas lietotājam draudzīgs, es domāju, ka man spēlēt 10
otrais preview par maz claymation skaitlis nosaukts mīkstās, kas bija vērsta uz
dzīve, ko draugs mūsējie Stenfordas, profesors Niks Parlante.
Tātad, ļaujiet man sniegt jums šo teaser no mīkstās šeit.
>> [VIDEO PLAYBACK]
>> -Hei, mīkstās.
Mosties.
Ir pienācis laiks, lai rādītāja fun.
>> -Kas tas ir?
Uzziniet par norādes?
Ak, goodie.
>> [END VIDEO PLAYBACK]
>> DAVID Malan: Tas ir Stanford datorzinātnes.
Tātad vairāk par to, lai nāk.
>> [Aplausi]
>> DAVID Malan: Atvainojiet, Nick.
>> Tāpēc atgādinām, ka pēdējo reizi mēs beidzās tas tiešām aizraujošs cliffhanger
kad šī funkcija vienkārši nestrādāja.
Vismaz intuitīvi, tā uzskatīja tāpat kā tai vajadzētu strādāt.
Vienkārši pārnešana vērtības no diviem veseliem skaitļiem.
Bet atceros, ka tad, kad mēs izdrukāts sākotnējās vērtības pamata, vienā un
divi, tie joprojām ir viens un divi un ne divi un viens.
>> Tātad, ļaujiet man faktiski pāriet pār ierīci.
Un es uzrakstīju uz augšu mazliet skeleta kodeksa iepriekš šeit, kur es apgalvot, ka x
būs 1, y būs 2.
Es pēc tam izdrukāt gan viņu vērtības ar drukas f.
>> Es pēc tam jāpieprasa šeit lejā, ka mēs ejam, lai mijmaiņas tiem.
Es atstāju tukšumu šeit, lai mēs aizpildīt šodien tikai brīdi.
Tad, es esmu gatavojas apgalvot, ka divi mainīgie ir samainīti.
Tad es esmu gatavojas drukāt tos no jauna.
Un tā, cerams, es būtu jāsaredz 1, 2.
2, 1.
Tas ir super vienkārši Mērķis tiesības tagad.
>> Tātad, kā mēs iet par pārnešana divi mainīgie?
Nu, ja es ierosinu šeit, ka šie kausi varētu pārstāvēt atmiņu datorā.
Tas ir maz kodumi, šis Ir vēl dažas kodumi.
Vai mēs esam brīvprātīgie nāk uz augšu, un samaisa mums daži dzērieni, ja pazīstami?
Nāciet uz augšu.
Kāds ir Jūsu vārds?
>> JESS: Jess.
>> DAVID Malan: Jess?
Nāciet uz augšu, Jess.
Ja jums nav prātā, mums ir jāuzsāk Google par jums Stikla lai mēs varētu
iemūžinātu šo.
Labi, stikls.
Ierakstītu video.
Un Labi, mēs esam labi iet ar Jess šeit.
Labi.
Priecājos ar jums iepazīties.
>> Tātad, ko es gribētu, lai jūs darīt šeit - ja jūs varētu, diezgan ātri -
vienkārši izlej mums pusglāzi apelsīnu sulas un puse glāzi piena,
pārstāv efektīvi skaitļus 1 vienā tasē un 2 citā čempionātā.
>> Tas būs labs kadrus.
>> JESS: Atvainojiet.
>> DAVID Malan: Nē, nē.
Tas ir OK.
Nice.
Labi, tāpēc mums ir četri baiti vērts apelsīnu sulas.
Mēs to nosauca vērtību 1.
Tagad vēl četri baiti vērts piena.
Sauksim to vērtība 2.
Tātad, x un y, attiecīgi.
>> Labi, tāpēc tagad, ja uzdevums pie rokas - jums, Jess, pie visiem
no saviem klasesbiedriem -
ir swap vērtības x un y šāda ka mēs vēlamies, apelsīnu sulu
cits kauss un šajā čempionātā piens, kā varētu jums - pirms jūs faktiski darīt
tā - iet par to izdarīt?
>> Labi, gudrs lēmums.
Tātad jums ir nepieciešams mazliet vairāk atmiņas.
Tā ļauj piešķirt pagaidu kauss, ja Jums gribas.
Un tagad doties uz mijmaiņas x un y.
>> Excellent.
Tik ļoti labi darīts.
Thank you so much, Jess.
Lūdzu.
Maz suvenīru.
>> Labi, tā acīmredzot, super vienkārša ideja.
Pilnīgi intuitīvu, ka mums ir nepieciešams mazliet vairāk uzglabāšanas telpa - šajā formā,
kauss - ja mēs tiešām gribam mijmaiņas šos divus mainīgos.
Tātad, pieņemsim darīt tieši to.
Šeit starp, kur es varu pieprasīt es esmu gatavojas darīt kādu pārnešana, es ņemšu
iet uz priekšu un atzīt temp.
Un es noteikti tā ir vienāds ar, teiksim, x.
>> Tad es esmu gatavojas mainīt vērtību x tāpat kā Jess bija šeit ar
pienu un apelsīnu sula līdz būt vienāds ar y.
Un es esmu gatavojas mainīt y ir vienāds līdz ne x, jo tagad mēs varētu būt
iestrēdzis pa apli, bet gan temp.
Kur es laiku - vai ja Jess uz laiku nodot apelsīnu sulu
pirms clobbering ka tasi ar pienu.
>> Tātad, ļaujiet man iet uz priekšu tagad un veikt to.
To sauc noswap.c.
Un tagad ļaujiet man palaist nav swap.
Un tiešām es redzu, ja es paplašināt logs mazliet, ka
x ir 1, y ir 2.
Un tad x ir 2, y ir 1.
>> Bet atcerēties, ka pirmdien mēs darījām lietas nedaudz savādāk, kurā es
vietā īsteno palīgs funkciju, ja jūs, kas faktiski tika anulēts.
Es to sauca swap.
Man bija tā divus parametrus, un es aicināju viņiem, un es aicināju viņus b.
>> Atklāti sakot, es varētu viņiem piezvanīt x un y.
Tur nekas apstāšanās mani no darot to.
Bet es teiktu, tas ir, tad nedaudz neskaidrs.
Tāpēc, ka atgādināt par pirmdiena, ka mēs apgalvoja, ka šie parametri bija
kopijas vērtībām pagājis collas
Tātad tas tikai virtuves ar savu prātā, es domāju, ka, ja jūs izmantojat
tieši tie paši mainīgie.
>> Tāpēc es ņemšu vietā viņiem piezvanīt un b, tikai skaidrības labad.
Bet mēs varētu saukt viņus visvairāk kaut ko mēs gribam.
Un es esmu gatavojas kopēt un ielīmēt faktiski šis kods no tur augšā
uz leju šeit.
Tāpēc, ka es redzēju, ka tas darbojas.
Tātad tas ir diezgan labā formā.
Un es ņemšu mainīt savu x ar, manu x lai, mana y b un manu Y b.
>> Tātad, citiem vārdiem sakot, tieši tādu pašu loģiku.
Tieši tas pats, kas Jess darīja.
Un tad viena lieta, kas man ir jādara augšu Šeit, protams, tagad ir atsaukties uz šo
funkciju, vai arī nosaukt šo funkciju.
Tāpēc es aicinu šo funkciju ar divām ieejas, x un y, un hit Save.
>> Labi, tāpēc būtiski tas pats.
Patiesībā, es esmu, iespējams, veikuši programmu nevajadzīgi sarežģī
rakstot funkciju, kas ir tikai aizņem daži sešas rindas kods bet man
iepriekš ir īstenojušas tas ir tikai trīs.
>> Tātad, ļaujiet man iet uz priekšu tagad pārtaisīt tas, nav nekādas swap.
Labi, es ieskrūvē šeit.
Tas būtu kļūda, ka jūs varētu redzēt arvien biežāk kā savu
programmas iegūtu vairāk sarežģītu.
Bet tur ir viegli noteikt.
Ļaujiet man ritināt atpakaļ uz augšu šeit.
>> Un, kas ir pirmā kļūda, es esmu redzēt?
Netieši deklarācija.
Ko tas parasti nozīmē?
Ak, es aizmirsu prototipu.
Es aizmirsu mācīt kompilatoru, ka mijmaiņas gatavojas pastāvēt, pat ja viņš
neeksistē pašā sākumā Programmas.
Tāpēc es esmu tikai gatavojas teikt par spēkā neesošu, swap, int, int b, semikols.
>> Tāpēc es neesmu gatavojas reimplement to.
Bet tagad tas atbilst to, kas ir uz leju šeit.
Un paziņojums, par semikolu trūkums šeit, kas nav vajadzīgs, ja
īstenošanai.
>> Tātad, ļaujiet man pārtaisīt to, nav nekādas swap.
Daudz labāk forma.
Palaist nav swap.
Un damn it.
Tagad mēs esam atpakaļ, kur mēs bijām pirmdien, ja lieta nav swap.
>> Un, kas ir intuitīvs izskaidrojums , kāpēc tas tā ir?
Yeah?
>> STUDENTU: [nedzirdama].
>> DAVID Malan: Tieši tā.
Tik un b ir kopijas, x un y.
Un patiesībā, jebkurā laikā jūs esat bijis zvana funkciju, līdz šim, ka
iet mainīgie, piemēram, Ints -
tāpat kā mijmaiņas sagaida šeit -
jums puiši ir iet kopijās.
>> Tagad, tas nozīmē, ka tas aizņem mazliet laika, split otro, lai
Dators kopēt biti no viena mainīgs vērā no citu bitiem.
Bet tas nav tik liels darījumu.
Bet viņi tomēr kopiju.
>> Un tāpēc tagad, saistībā ar swap, Es esmu patiešām veiksmīgi
mainot a un b.
Faktiski, pieņemsim do ātri vesels saprāts pārbaude.
Drukāt f ir% i, jaunā līnija.
Un pieņemsim spraudni.
Tagad pieņemsim darīt to pašu ar b.
Un pieņemsim darīt to pašu šeit.
>> Un tagad, ļaujiet man kopēt tās pašas līnijas atkal apakšā funkciju
Pēc maniem trim virzieniem interesanti varētu būt izpildīts, un
drukāt un b vēlreiz.
Tātad tagad pieņemsim to, nav nekādas swap.
Ļaujiet man termināļa logu mazliet garāks, lai mēs varētu redzēt
vairāk par to uzreiz.
>> Un palaist bez swap.
x ir 1, y ir 2. ir 1, b ir 2.
Un pēc tam, ir 2, b ir 1.
Tātad tas strādā, tāpat kā Jess darīja šeit iekšpusē swap.
Bet, protams, tas nekādi neietekmē par situāciju galveno mainīgo.
>> Tātad mēs redzējām triks kurā mēs varētu noteikt šo, labi?
Kad esat saskaras ar šo tvēruma jautājums, jūs varētu vienkārši punt un padarīt x
un y kādi mainīgie vietā?
>> Jūs varētu padarīt tās pasaules.
Viņus pašā augšā no faila kā mēs, pat tad, ja spēle 15.
Mēs izmantojam globālo mainīgo.
Bet saistībā ar spēli 15, tas ir saprātīgi, lai būtu pasaules
mainīgajam pārstāv kuģa, jo gada 15.c veselums ir visu
par īstenojot šo spēli.
Tas, ko fails eksistē darīt.
>> Bet šajā gadījumā šeit, es esmu zvana funkciju swap.
Es gribu, lai mijmaiņas diviem mainīgajiem.
Un tas jāsāk justies vienkārši apliets Ja risinājums, lai visas mūsu
problēmas, ja mēs uzskriet jomu jautājumiem, ir padarīt to pasaulē.
Tāpēc, ka ļoti ātri, mūsu programma ir gatavojas kļūt diezgan haoss.
Un mēs to izdarījām, ļoti taupīgi kā rezultātā 15.c.
>> Bet izrādās, tur ir labāks veids vispār.
Ļaujiet man tiešām iet atpakaļ un izdzēst drukāt F s, tikai, lai vienkāršotu šo kodu.
Un ļaujiet man ieteikt, ka tas, protams, ir slikti.
Bet, ja es tā vietā pievienot dažas zvaigznītes un zvaigznes, es varu tā vietā pārvērst šo
funkcija, vienā, kas ir faktiski darbojas.
>> Tātad, ļaujiet man atgriezties šeit un jāatzīst, pasakot zvaigznītes vienmēr ir grūti,
tāpēc es saku zvaigznes.
Es ņemšu tikai fess līdz šo vienu.
Labi.
Un tagad, ko es esmu gatavojas darīt tā vietā?
>> Tātad, pirmkārt, es esmu gatavojas, lai precizētu ka tā vietā, lai iet int stājas
swap funkcija, es esmu vietā gada teiksiet int zvaigzni.
Tagad, ko tas zvaigzne liecina?
Tas ir, ka jēdziens ir rādītājs, ka Mīkstās, claymation raksturs, bija
atsaucoties uz brīdi atpakaļ.
>> Tātad, ja mēs sakām, int zvaigzne, nozīmē, tagad tas ir tas, ka nav būs
pieņemts pēc tā vērtības.
Tas nav gatavojas kopēt collas
Drīzāk adrese ir būs pagājis collas
>> Tātad, atgādināt, ka iekšpusē datora ir visai ķekars atmiņas, pretējā
pazīstams kā RAM.
Un tas RAM ir tikai Visa ķekars baitu.
Tātad, ja jūsu Mac vai jūsu dators ir divi gigabaiti, jums ir 2
miljardu baiti atmiņas.
>> Tagad pieņemsim tikai pieņemt, ka tikai saglabātu lietas jauki un kārtīgi, mēs
piešķirt adresi -
numurs -
uz katru baitu RAM savā datorā.
Pati pirmā baits 2 tiem miljardi ir par nulli.
Nākamā ir baitu numur viens, numurs divi, visu ceļu uz augšu, dot dot
punkts, līdz aptuveni 2 miljardiem.
>> Tātad jūs varat skaits, baitu atmiņas datorā.
Tātad, pieņemsim, ka tas, ko mēs domājam ar adresi.
Tātad, kad es redzu int star, kas notiek, kas nonāca maiņas darījuma tagad ir
adrese.
Nav tā vērtība, bet neatkarīgi no tā pasta adrese ir, tā teikt -
tā atrašanās vietu RAM.
>> Un līdzīgi aprēķina b, es esmu gatavojas teikt to pašu.
Int, zvaigzne, b.
Kā malā, tehniski zvaigzne varētu iet citās vietās.
Bet mēs standartizēt zvaigzne pagaidām pa labi blakus uz datu tipa.
>> Tātad mijmaiņas paraksts tagad nozīmē, dod man adresi int, un zvanu
ka adrese.
Un dod man vēl vienu adresi int un aicinu šo adresi b.
>> Bet tagad mans kods šeit ir jāmaina.
Jo, ja es apliecinu int temp -
, kas ir vēl int tipa -
bet es glabāt tā, kāda veida vērtības?
Lai būtu skaidrs, es esmu liekot ar kodu, kā rakstīts tieši tagad?
>> Es esmu liekot atrašanās vietu.
Bet man nav rūp vieta tagad, labi?
Temp pastāv tikai Jess "trešo kausu pastāvēja, kādam mērķim?
Lai saglabātu vērtību.
Pienu vai apelsīnu sulu.
Nav faktiski uzglabāt adresi vai nu no tām lietām, kas jūtas
nedaudz muļķīgi, jo tas ir reāls pasaules konteksts anyway.
>> Tik tiešām, ko es gribu, lai temp ir ne adrese, bet
saturu.
Tātad, ja ir skaitlis, piemēram, 123, tas ir 123 baitu atmiņas, kas tikko
notiek, ir okupācijas, ka vērtība kas notiek, ir okupācijas.
>> Ja es gribu iet uz šo adresi, Man jāsaka star.
Tāpat, ja man bija, lai mainītu to, kas ir norādītajā adresē, es varu mainīt
tas, lai sāktu.
Ja es gribu, lai saglabātu to, kas ir pie vieta ar to, kas konkrētajā vietā
pie b, b star star.
>> Tātad, īsi sakot, pat ja tas nav gluži grimst vēl - un es negaidu
ka tas būtu tik ātri -
saprast, ka viss, ko es daru, ir apzīmētāju šīs zvaigznes uz maniem mainīgajiem,
sakot nesagrāb vērtības.
Nemaina vērtības.
Bet, dodieties uz šīm adresēm un iegūt vērtību.
Iet uz šo adresi un pārmaiņām vērtību tur.
>> Tātad, tagad ļaujiet man ritiniet atpakaļ uz augšu uz augšu, tikai noteikt šo līniju šeit, lai
mainīt prototipu, lai atbilstu.
Bet man tagad jādara viena cita lieta.
Intuitīvi, ja es esmu mainījies veidus argumentu, ka mijmaiņas gaida,
Kas vēl man ir nepieciešams, lai mainīt manu kodu?
>> Kad es zvanu swap.
Jo tieši tagad, ko esmu Es iet apmainīt vēl?
Vērtība x un y vērtība, vai pienu un apelsīnu sulu.
Bet es nevēlos to darīt.
Es nevis gribu iet kādā?
No x izvietojums un atrašanās vieta y.
Kādas ir viņu pasta adreses, tā runāt.
>> Tātad, lai to izdarītu, tur ir zīme &.
Ampersand veida izklausās adresi.
tā n, zīme &, adrese no x, un y adrese.
Tātad, tas ir apzināts, ka mēs izmantojam ampersands kad zvana funkciju,
un zvaigznes, deklarējot, un, ja Īstenojot funkciju.
>> Un tikai domā par & zīmi, jo adresi uzņēmējam, un kā zvaigzne
iet uz turieni operators -
vai, precīzāk, dereference operators.
Tātad, tas ir visai daudz vārdu tikai teikt, ka tagad, cerams, mijmaiņas notiek
ir pareizs.
>> Ļaujiet man iet uz priekšu un darīt -
pieņemsim faktiski pārdēvēt failu, citādi šī programma joprojām var saukt ne swap.
Es apgalvot, ka mēs to saucam swap.c tagad.
Tāpēc pārliecinieties, swap.
Dot, slīpsvītra, swap.
>> Un tagad patiešām, x ir 1, y ir 2.
Un pēc tam, x ir 2, y ir viens.
Nu pieņemsim redzēt, ja mēs nevaram izdarīt mazliet savādāk, kā to, kas ir
notiek šeit.
Pirmkārt, ļaujiet man tuvinātu mūsu zīmēšanas ekrānu šeit.
Un ļaujiet man piedāvāt uz brīdi - un kad es izdarīt šeit tiks atspoguļota
tur tagad - ļaujiet man ieteikt, ka šeit ir viss ķekars atmiņā vai
RAM, iekšpusē mana datora.
>> Un tas būs kodums numurs, teiksim, 1.
Tas būs baiti numurs 2.
Un es darīšu visu ķekars vairāk, un tad ķekars dot dot punktiem, lai
norāda, ka tur ir 2 miljardi no šīm lietām.
4, 5, un tā tālāk.
>> Tātad tur ir pirmie pieci baiti no mana datora atmiņā.
Visas tiesības?
Ļoti nedaudzi no 2 miljardi.
Bet tagad es esmu gatavojas ierosināt punktu.
Es esmu gatavojas ierosināt x gatavojas saglabāt numuru 1, un y ir iet
saglabāt numuru 2.
Un ļaujiet man iet uz priekšu tagad pārstāv šīs vērtības šādi.
>> Darīsim to šādi.
Dodiet man tikai vienu sekundi.
Vienu sekundi.
Labi.
Es gribu, lai tas maz -
pieņemsim darīt atkal.
Citādi es esmu gatavojas un izmantojot tie paši skaitļi, nejauši,
vairākas reizes.
>> Tik vienkārši tāpēc mums ir dažādi skaitļi runāt par to, sauksim šo baitu
numurs 123, 124, 125, 126, un dot dot dot.
Un ļaujiet man apgalvot tagad, ka es esmu gatavojas ielieciet vērtību 1 šeit, un vērtību 2
Šeit, citādi zināma kā x un y.
Tātad, tas tikai tā notiek, ka tas ir x, tas ir y.
>> Un tikai ar kādu nejaušības, datoru, operētājsistēmu,
gadījās likt x atrašanās vietā numuru 123.
Un y beidzās pie 124 vietā -
damn it.
Man bija jānosaka šo.
Ak, cilvēks, es tiešām gribu darīt?
Jā, es gribu, lai atrisinātu šo un b pareizi par šo šodien.
Atvainojiet, jauns šajā.
>> 127, 131, un es negribēju būt šī sarežģīta, bet kāpēc es nomainu
skaitļi tur?
Tāpēc, ka es vēlos, Ints, lai faktiski ir četri baiti.
Tātad, pieņemsim būt super anālais par to.
Tā ka, ja 1 notiek, ir jārisina 123, 2 būs pēc adreses
127, jo tas ir tikai 4 byes prom.
Tas arī viss.
Un mēs aizmirstam par visiem citas adreses pasaulē.
>> Tātad x ir pie 123 atrašanās vietu, y ir pie 127 vietā.
Un tagad, ko darīt, es tiešām gribu darīt?
Kad es zvanu mijmaiņas tagad, kas ir patiesībā notiek?
Nu, kad es zvanu mijmaiņas, es esmu dodas, no x adrese un y adrese.
Tā, piemēram, ja šīs divas detaļas Papīra tagad pārstāv divas
argumenti un b swap, ko es esmu gatavojas rakstīt par pirmā no tām,
ko es esmu gatavojas aicināt atsaukties kā?
>> Tieši tā, 123.
Tāpēc šī es pretenziju ir.
Tas ir parametrs.
Es esmu liekot adresi x tur.
>> Kas tas ir?
>> Nē, nē.
Tas ir OK.
Joprojām ir labs, joprojām ir labs.
Tātad, tas ir.
Un tagad uz otro papīra, tas būs b, un to, ko es esmu
būs rakstot uz šis gabals papīra?
127.
>> Tātad vienīgā lieta, kas ir mainījies kopš Mūsu iepriekšējais stāsta šim stāstam ir,
nevis burtiski 1 un 2, es esmu gatavojas iet uz 123 un 127.
Un es esmu tagad gatavojas īstenot šos iekšā Šīs kastes, labi?
Tā, ka melnā kaste tagad veido swap funkcija.
>> Tikmēr, pieņemsim tagad ir kāds, īstenot mijmaiņas funkciju.
Vai kāds šeit gribētu veikt brīvprātīgo darbu?
Nāciet uz augšu.
Kāds ir Jūsu vārds?
Charlie.
Visas tiesības, Charlie.
Nāciet uz augšu.
>> Tātad Charlie gatavojas spēlēt loma mūsu melnā kaste.
Un Charlie, ko es gribētu, lai jūs darīt tagad ir īstenot mijmaiņas tādā veidā
ka, ņemot vērā šīs abas adreses, jūs tiešām dodas
lai mainītu vērtības.
Un es čuksti auss kā vadīt TV šeit.
>> Tik iet uz priekšu, un jūs esat melnā kaste.
Reach tur.
Kādas vērtības jūs redzēt, un Kādas vērtības, Jūsuprāt, b?
>> CHARLIE: ir 123 un b ir 127.
>> DAVID Malan: Labi, tieši tā.
Tagad pauze tur tikai brīdi.
Pirmā lieta, jūs gatavojas darīt tagad, saskaņā ar kodu -, kas
Es tagad uzvilkt uz ekrāna -
būs piešķirt nedaudz bitu atmiņas sauc temp.
Tāpēc es esmu gatavojas iet uz priekšu un jums šo atmiņu.
>> Tātad tas būs trešā mainīga ka jums ir pieejamas
jūs sauc temp.
Un ko jūs gatavojas rakstīt par temp papīra?
>> CHARLIE: Pointers, vai ne?
>> DAVID Malan: Labi, labi ne vienmēr norādes.
Tātad līnija kods, kas es esmu uzsvēra labajā pusē,
sāksim tur.
Tā saka zvaigzne.
Tā ir šobrīd glabāšanai numuru 123.
Un tikai intuitīvi, ko bija zvaigzne 123 nozīmē?
>> Bet īpaši, ja ir 123, zvaigzne nozīmē ko?
Vērtība.
Vai vairāk pagadās, iet uz turieni.
Tātad, ļaujiet man piedāvāt, ka, turot uz Jūsu rokas, iet uz priekšu un ārstēt, ka
it kā tas ir plāns.
Un staigāt sevi vairāk nekā uz datora atmiņu, un mūs atrast to, kas ir
pie 123 vietā.
Tieši tā.
>> Tātad mēs redzam pie 123 vietā ir tas, kas, protams?
Labi, lai to vērtība tagad jūs esat gatavojas nodot temp?
Tieši tā.
Tik iet uz priekšu un darīt to.
Un rakstīt numuru 1 uz gabals papīru, kas pašlaik nosaukumu temp.
>> Un tagad nākamais solis, kas jūs gatavojas īstenot
būs ko.
Labi, labajā pusē nākamais rindā kods ir zvaigzne b. b, no
Protams, veikalos adresi.
Kas risina 127.
Star b nozīmē to, ko, nejauši runā?
>> Iet uz šo vietu.
Tik iet uz priekšu un atrast mums, kas ir pie 127 vietā.
Labi.
Protams, 127 vietā, joprojām ir vērtība 2.
Tātad, ko jūs gatavojas tagad veikalā at kāds ir tajā vietā?
Tātad zvaigžņu līdzeklis doties uz vietu ar.
Kas ir vieta?
>> Tieši tā.
Tāpēc tagad, ja jūs vēlaties mainīt kas ir šajā vietā -
Es iešu uz priekšu un palaist dzēšgumija ir šeit.
Un tagad nodot to atpakaļ uz birstīti.
Ko numuru jūs gatavojas rakstīt šajā tukšajā ailē tagad?
>> Tieši tā.
Tātad šī koda līnijas, lai būtu skaidrs - let mani apturējis, ko Charlie dara un
norāda šeit, ko viņš ir tikai darīts, ir iestrādāt šo lodziņu 123 vietā
vērtība, kas bija iepriekš pie b.
Un tāpēc mēs esam tagad ir īstenoti patiešām Šī otrajā rindā kodu.
>> Tagad diemžēl, tur ir vēl viena līnija paliek.
Tagad to, kas ir temp, burtiski?
Tas ir acīmredzami numur viens.
Tas nav adrese.
Tas ir tikai skaitlis, veida mainās no vienas nedēļas.
>> Un tagad, kad jūs sakāt zvaigzne b, tas nozīmē, ka iet uz adresi B, kas ir no
kurss šeit.
Tātad, kad jūs tur nokļūt -
Es iešu uz priekšu un dzēst to, kas patiesībā tur - un ko jūs
gatavojas rakstīt tagad atrašanās 127?
>> CHARLIE: Temp, kas ir viens.
>> DAVID Malan: Temp, kas ir viens.
Un kas notiek ar temp beigās?
Nu, mēs īsti nezinām.
Mums nav īsti aprūpi.
Katru reizi, kad mēs esam ieviesuši funkciju līdz šim, visi vietējie mainīgie jums ir
tiešām vietējie.
Un viņi vienkārši pazūd.
Viņi atgūt pārmaksāto darbības sistēma galu galā.
>> Tātad fakts, ka temp joprojām ir vērtība 1 ir sava veida fundamentāli
neinteresanti mums.
Labi, tāpēc kārta aplausi ja mēs varētu par Čārliju.
Ļoti labi darīts.
>> Labi, lai to, kas vēl nav tas nozīmē, ka mēs varam darīt?
Tātad izrādās, ka mēs esam bijuši stāsta dažus baltos melus
jau ilgu laiku.
Patiešām, izrādās, ka virkni, visu laiku, nav patiešām
rakstzīmju secība per se.
Tā veida ir tā, ka intuitīvi.
>> Bet tehniski runājot, virkne ir datu tips, kas mēs būtu deklarējuši iekšpusē
CS50 bibliotēkas vienkāršot pasauli dažu pirmo nedēļu klasē.
Kas virkne tiešām ir adrese par raksturu kaut kur RAM.
Virkne ir patiešām skaitlis, piemēram, 123 vai 127, kas notiek, lai norobežotu
kur virkne sākas datora atmiņā.
>> Bet tas neatspoguļo string, per se, pati.
Un mēs varam redzēt to, kā šādi.
Ļaujiet man iet uz priekšu un atvērt daži kodu, kas ir viens
šodienas pirmkodu piemēri.
Un es iešu uz priekšu un atvērt augšu, teiksim, salīdziniet-0.c.
Tas ir viegli rati programma, kas notiek , kas īsteno šādi.
>> Pirmais.
Es esmu gatavojas teikt kaut ko.
Tad es iešu uz priekšu un saņemt string no lietotāja
šajā nākamajā rindā.
Tad es esmu gatavojas teikt to vēlreiz.
Tad es esmu gatavojas saņemt otru string no lietotāja.
>> Un paziņojums, es esmu rādīt vienu no virknes mainīgo sauc s, un
Vēl viens no šiem stīgas ar mainīgo sauc t.
Un tagad es esmu gatavojas pieprasīt, ļoti loģiski, ka, ja s vienāds vienāds t,
virknes ir vienādas.
Rakstot to pašu.
Else, ka stīgas ir nav tas pats.
>> Galu galā, ja mēs ieeja two Ints, divi simboli, divi pludiņi, divi divvietīgi, kāds no
datu tipi, mēs esam runājuši par Līdz šim, lai salīdzinātu tos -
atceros, mēs ļoti skaidri, bet pirms ka jums nav darīt, jo
viens vienādības zīmi, protams, ir cesiju operators.
Tā, ka būtu kļūda.
>> Mēs izmantojam vienlīdzīgu vienādības zīmi, kas tiešām salīdzina
lietas, par patiesu līdztiesību.
Bet es apgalvo, tas ir buggy.
Ja es iet uz priekšu un darīt salīdzināt nullei, un tad dot slash salīdzināt nulli.
Un es rakstīt, teiksim, sveiki.
Un tad teiksim sveiki atkal.
Burtiski tas pats, dators norādēm es drukāti dažādas lietas.
>> Tagad varbūt es vienkārši nepareizi uzrakstīta kaut ko.
Es rakstīt mans vārds šoreiz.
Es domāju, sveiki.
Sveiki.
Tas ir atšķirīgs katru reizi.
>> Nu, kāpēc tā?
Kas īsti notiek zem pārsega?
Nu, to, kas īsti notiek zem pārsegs ir virkne, tad
Es drukāti tajā pirmo reizi, piemēram ir vārds sveiki, protams.
Bet, ja mēs pārstāvam to zem pārsegs, atgādināt, ka
virkne ir masīva.
Un mēs jau teicām, cik agrāk.
>> Tātad, ja es izdarīju, ka masīvu, piemēram, tas, es esmu gatavojas pārstāvēt kaut ko pavisam
līdzīgs tam, ko mēs darījām pirms brīža.
Un tur tiešām kaut kas īpašs šeit, too.
Ko mēs nosakām, tika pie beigām katru string?
Jā, šis slīpsvītru nulle, kas ir tikai veids, kā pārstāvēt,
burtiski, 00000000.
Astoņi 0 biti pēc kārtas.
>> Es nezinu, godīgi sakot, kas ir pēc tam.
Tas ir tikai ķekars vairāk RAM iekšpusē mana datora.
Bet tas ir masīvs.
Mēs runājām par masīvu agrāk.
Un mēs parasti runājam par blokiem kā vieta nulle,
tad viens, tad divi.
Bet tas ir tikai ērtības.
Un tas ir pilnīgi relatīvs.
>> Kad jūs faktiski kļūst atmiņas no dators, tas ir, protams, jebkura
2 miljardi daži nepāra baiti, iespējams.
Tik tiešām zem motora pārsega, visu šo laiku, jā.
Tas varētu ļoti labi būt kronšteins nulle.
Bet, ja jūs rakt vēl dziļāk zem pārsegs, kas ir patiešām
pievērsties numuru 123.
Tas ir adrese 124.
Tas ir adrese 125.
>> Un man nav screw up šo laiku.
Tie ir tagad viens baiti izņemot kāda iemesla dēļ?
Cik liela ir char?
Simbols ir tikai viens baits.
Int parasti ir četri baiti.
Tātad, tāpēc es to 123, 127, 131 un tā tālāk.
Tagad es varu saglabāt math vienkāršāku un vienkārši darīt plus 1.
Un tagad tas ir to, kas īsti notiek par zem motora pārsega.
>> Tātad, ja jūs atzīt kaut kas līdzīgs šim, string s, tas ir faktiski -
izrādās -
char zvaigzne.
Zvaigzne, protams, nozīmē, adresi, aka rādītājs.
Tātad, tas ir adrese kaut ko.
Kas tas ir adrese?
>> Nu -
Es esmu vienīgais, kurš var redzēt ļoti svarīgs jautājums es esmu padarot, vai domājat, ka
Es esmu padarot.
Tātad string -
skumji ir tas, man ir monitors labi tur, kur es
varēja redzēt, ka.
>> Labi, tāpēc virkne s ir tas, ko Man paziņoja iepriekš.
Bet izrādās, pateicoties nedaudz burvju CS50 bibliotēkā, tas viss
laiks string ir burtiski ir char zvaigzne.
Zvaigzne atkal nozīmē rādītāju vai adrese.
Fakts, ka tā ir papildinošiem Vārds char nozīmē, ka ir
adrese raksturs.
>> Tātad, ja saņem virkne sauc, un es tipa in H-E-L-L-O, ierosināt tagad to, ko ir iegūt
stīgu burtiski atgriežas visus šoreiz, lai gan mēs esam samērā
pārspīlēti pasauli?
Kāda saņemt virkne reāli atpakaļ, jo tā atgriešanās vērtību?
>> 123 Šajā gadījumā, piemēram.
Mēs esam jau iepriekš teica, ka saņem virkni vienkārši atgriež string, secība
rakstzīmes.
Bet tas ir mazliet baltu meli.
Veids, kā iegūt virkne tiešām strādā zem motora pārsega tas izpaužas
string no lietotāja.
Tā plops rakstzīmes, ka viņš vai viņa veidi atmiņā.
Tas liek slīpsvītru nulli beigās no tiem rakstzīmju secību.
>> Bet tad ko tas saņem virkni burtiski atgriezties?
Tā burtiski atgriež adresi Pati pirmā baiti RAM, ka
tas izmanto šim spēka.
Un izrādās, ka vienkārši nosūtot viena adrese no
pirmais raksturs virknē, kas ir pietiekama, lai atrastu datus par visu
string.
>> Citiem vārdiem sakot, iegūt stīgu nav atgriezties 123 un 124 un 125.
Tas nav man garš saraksts no visiem bytes ka
mans string izmanto.
Jo viens, viņi visi atpakaļ atpakaļ.
Un divi, pamatojoties uz pirmo adresi, es var izdomāt, kur virkne beidzas.
Kā?
>> Īpašais null raksturs, Slīpsvītru nulli beigās.
Tātad, citiem vārdiem sakot, ja jums iet apkārt -
iekšpusē mainīgo lielumu -
adresi char, un jūs uzņematies ka beigās jebkuru rakstzīmju virkni, kāds
rakstzīmju secība, kā mēs, cilvēki domā par stīgas, ja jūs pieņemt, ka
gada beigās šādu virkni tur ir slīpsvītru nulle, tu esi zelta.
Tāpēc, ka jūs vienmēr varat atrast auklas galā un.
>> Tagad to, kas īsti tad notiek uz šīs programmas?
Kāpēc šī programma, salīdzināt-0.c, buggy?
Kas faktiski tiek salīdzināta?
Yeah?
>> STUDENTU: [nedzirdama].
>> DAVID Malan: Tieši tā.
Tas salīdzinot vietas no stīgas.
Tātad, ja lietotājs ir ievadījis sveiki vienu reizi, kā es to izdarīju, atmiņas varētu nonākt
meklē kā šis.
Ja lietotājs, tad veidi sveiki atkal, bet zvanot saņemt virkni atkal, c ir
nav īpaši gudrs, ja jūs mācīt tas ir gudrs, rakstot kodu.
>> C -
un datori vispār -
ja jūs ierakstiet vārdu sveiki atkal, jūs zināt, ko jūs gatavojas saņemt.
Jūs esat tikai gatavojas iegūt otru masīvs atmiņas, ka, jā, gadās būt
glabāšanai H-E-L-L-O un tā tālāk.
>> Tas skatīsies pašu mums cilvēkiem, bet šī adrese
varētu būt 123.
Tas var tikai tik gadīties, ka operētājsistēma ir daži pieejami
telpas, piemēram, uz atrašanās vietu -
teiksim kaut ko patvaļīgi, piemēram, tas ir vieta 200.
Un tas ir vieta 201.
Un tas ir vieta 202.
Mums nav ne jausmas, kur, kas ir būs atmiņā.
>> Bet ko tas nozīmē, ir tas, kas ir būs jāuzglabā galu galā s?
Numuru 123.
Kas notiek, jāuzglabā t, Šajā patvaļīgu piemēram?
Numuru 200.
Un tas viss nozīmē, tad ir acīmredzami, 123 nav vienāds ar 200.
Un tā tas, ja nosacījums nekad novērtē kā patiess.
Jo get virkne ir, izmantojot dažādas gabalos atmiņas katru reizi.
>> Tagad mēs varam redzēt to vēlreiz Citā piemērā.
Ļaujiet man iet uz priekšu un atvērt kopēt-0.c.
Man apgalvo, ka šis piemērs ir gatavojas mēģināt - bet nespēj - lai kopētu divas virknes
šādi.
>> Es esmu gatavojas teikt kaut ko lietotājam.
Es esmu tam gatavojas saņemt stīgu un to sauc s.
Un tagad, es daru šo pārbaudi šeit.
Mēs minēja šo, kamēr atpakaļ.
Bet, kad varētu saņemt stīgu atgriezties null, citu īpašo raksturu, vai īpašu
simbols, teiksim.
Ja tas ir no atmiņas.
>> Piemēram, ja lietotājs ir patiešām ir sarežģīta un veidi šausmīgs
rakstzīmju skaits pie tastatūru un hits Enter.
Ja tas rakstzīmju skaits vienkārši nevar iederēties RAM kāda traks
iemesla dēļ arī saņemt virkni varētu ļoti labi atgriezties null.
>> Vai, ja jūsu programma pati par sevi dara daudz citas lietas, un tur ir tikai
Nepietiek atmiņas, lai get virknes lai gūtu panākumus, tas var beigties
līdz atgriežas null.
Bet būsim precīzāki par to, kas tas ir.
Kas ir s spēlētājs datu tips tiešām?
Char zvaigzne.
>> Tātad izrādās, tagad mēs varam mizas atpakaļ slāni null.
Izrādās, null, ir - jā, protams, īpašs simbols.
Bet kas tas īsti?
Tiešām, nulle ir tikai simbols, kas mums cilvēki izmanto, lai pārstāvētu nulli, kā arī.
>> Tātad no C autoriem, un datoriem kopumā, nolēma gadus atpakaļ
, ka jūs zināt, ko.
Kāpēc nav mēs nodrošinātu, ka neviens lietotājs dati ir nekad, nekad, nekad
uzglabāt bye nulli?
Faktiski, pat manā patvaļīgā piemērā pirms, es nesākās numerācijas
baiti pie nulles.
Es sāku vienā.
Tā kā es zināju, ka cilvēki visā pasaulē nolēma rezervēt nulles
baitu ikvienā RAM kā kaut kas īpašs.
>> Iemesls ir, jebkurā laikā vēlaties signāls, ka kaut kas ir nogājis greizi
attiecībā uz adresēm, tu atgriezies null - citādi zināma kā nulli -
un, jo jūs zināt, ka tur nav legit datu nulles adreses, nepārprotami
tas nozīmē, ka kļūda.
Un tas ir iemesls, kāpēc mēs, pēc tradīcijas, pārbaudiet for null un atgriešanās kaut ko
kā viens šādos gadījumos.
>> Tātad, ja mēs ritinātu uz leju tagad, tas ir vienkārši tad daži kļūdu pārbaude, tikai gadījumā,
kaut kas nogāja greizi ar [? bail?]
vispār un atmest programmu nosūtot sākumā.
Šī līnija tagad var pārrakstīt jo tas, kas nozīmē ko?
Kreisajā pusē, dod man vēl rādītājs, lai raksturu, un to sauc par t.
Ko es glabāšanai iekšā t, balstoties par šo vienu rindiņu kodu?
>> Es esmu uzglabāšanas vietu.
Konkrēti vieta tas bija s.
Tātad, ja lietotājs ir ievadījis sveiki, un ka vispirms sveiki notiek, lai galu galā
šeit, tad skaitlis 123 ir gatavojas atgriezties no get
string un jāuzglabā -
kā mēs teicām iepriekš -
s.
>> Kad es tagad paziņot citu rādītāju char, un to sauc par t, cik lielā skaitā ir
burtiski dodas, lai galu galā t saskaņā ar rakstu?
Tātad 123.
>> Tātad tehniski tagad gan s un t ir norāda uz precīzu
paši gabalos atmiņas.
Tātad, paziņojums, ko es esmu gatavojas darīt tagad, lai pierādīt, ka šī programma ir buggy.
>> Vispirms es esmu gatavojas pieprasīt, ar drukas f, gūstot
kopiju virknes.
Tad es esmu gatavojas darīt nedaudz kļūdu pārbaudi.
Es esmu gatavojas, lai pārliecinātos.
Pieņemsim, pārliecinieties, ka virkne t ir vismaz lielāka par nulli garumā,
tāpēc tur ir dažas raksturs tur faktiski kapitalizēt.
>> Un tad jūs varētu atcerēties šo no iepriekšējiem piemēriem.
2 augšējais -, kas ir ctype.h failu.
T kronšteins nulle dod man nulle raksturs stīgu t.
Un 2 augšējo šīs pašas vērtības, no protams, pārvērš to par lielajiem burtiem.
>> Tātad intuitīvi, tas uzsvērts līnija koda ir kapitalizēt pirmo reizi
burtu t.
Bet tas nav kapitalizēt, intuitīvi, pirmais burts s.
Bet, ja jūs domāšana uz priekšu, ko es esmu par to, lai redzētu, kad es palaist šo programmu
un izdrukāt gan oriģināls, s, un tā saukto kopija, t?
>> Viņi faktiski būs tāds pats.
Un kāpēc viņi būs tāds pats?
Viņi abi norādot uz tieši tas pats.
Tātad, pieņemsim to izdarītu.
>> Padarīt kopiju nulli.
Tā apkopo OK.
Ļaujiet man palaist kopiju nulli.
Ļaujiet man rakstīt kaut ko līdzīgu sveiki in visi mazie tad hit Enter.
Un tā apgalvo, ka gan sākotnējā s un kopija patiešām identiskas.
>> Tātad, kas īsti notika šeit?
Ļaujiet man ievilktu šo attēlu vienkārši lai pastāstītu stāstu
nedaudz citādā veidā.
Kas īsti notiek zem pārsegs, kad es deklarēt kaut ko līdzīgu
char start s, vai string s, Es esmu kļūst rādītāju -
kas notiek, ir četri baiti šajā CS50 ierīces
un daudz datoriem.
Un es esmu gatavojas nosaukt šo s.
Un tas šobrīd ir kādu nezināmu vērtību.
>> Kad jūs deklarēt mainīgo, ja vien jūs sevi nodot vērtību tur, kurš
zina, kas ir tur.
Tas varētu būt daži izlases secība biti no iepriekšējā izpildi.
Tātad, kad es, manā līniju kodu saņemam stīgu, un pēc tam uzglabāt atgriešanos
vērtība s get virkni kaut kā -
un mēs galu galā pīlings atpakaļ, kā nokļūt stīgu darbi, kaut piešķir
masīvs, kas, iespējams, izskatās mazliet kā šis.
H-E-L-L-O, slīpsvītra nulle.
>> Pieņemsim, ka tas ir adrese 123 tikai pirmās konsekvenci.
Tātad iegūt stīgu atdevi, jo uzsvēra līnijas tur, tas atgriež
numuru mēs teicām, 123.
Tātad, kas īsti notiek iekšpusē s šeit?
>> Nu, ko īsti iet iekšpusē no s ir 123.
Bet atklāti sakot, es saņemu nedaudz sajaukt ar visu no šīm adresēm,
visiem šiem patvaļīgu numuriem.
123, 124, 127.
Tātad, pieņemsim faktiski vienkāršot pasaule mazliet.
>> Kad mēs runājam par norādes, godīgi sakot, lai mums cilvēkiem, kas heck rūpējas, kur
lietas ir atmiņā?
Tas ir pilnīgi patvaļīgi.
Tas būs atkarīgs no tā, cik RAM lietotājs ir.
Tas būs atkarīgs, kad dienā palaižot programmu, varbūt, un
kāda ieejas lietotājam dod jums.
Mēs esam mājokli nesvarīgas detaļas.
>> Tātad, pieņemsim abstrakts prom un saka, ka, palaižot līnijas kodu, piemēram, tas,
char zvaigzne s saņem peļņu vērtība get virknes.
Kāpēc ne mēs nevis vienkārši izdarīt to, ko mēs saglabātu zvana rādītāju, it kā tas ir
norādot uz kaut ko?
Tāpēc es apgalvo, ka šobrīd ir atkarīgs tur ir rādītājs -
zem motora pārsega, tas ir adrese.
Bet tas ir tikai norādot uz pirmais baits in
virkne, kas ir atdota.
>> Ja es tagad atgriežas ar kodu šeit kas notiek šajā līnijā?
Nu, šajā uzsvēra līnijā tagad, Es esmu paziņojot, acīmredzot vēl
mainīgo sauc t.
Bet tas ir arī rādītājs, tāpēc es esmu gatavojas izdarīt to, kas, teorētiski, precīzu
vienāda izmēra kaste.
Un es esmu gatavojas, lai izsauktu to t.
>> Un tagad, ja mēs ejam atpakaļ uz kodu vēlreiz, kad es glabāt s iekšpusē t,
ko es esmu tehniski liekot iekšā t?
Nu tehniski, tas bija skaitlis 123.
Tik tiešām es būtu rakstiski numuru 123 tur.
Bet pieņemsim ņemt to augstāka līmeņa.
t, ja tas ir tikai rādītājs, intuitīvi, ir tikai to.
Tas ir viss, kas ir glabājas tur.
>> Tāpēc tagad pēdējos interesantas līnijas koda, kad es tiešām iet par
kapitalizējot nulles raksturu t, kas notiek?
Nu, t kronšteinu nulle tagad norāda lai kāda rakstura, iespējams?
>> Tas norāda uz h.
Jo t bracket nulles -
atceros, tas ir vecs sintakse. t kronšteins nulle nozīmē tikai tad, ja t ir virkne, t
kronšteins nulle nozīmē, kļūst nulles raksturu šajā izturību.
Tātad, ko tas īsti nozīmē ir iet uz šo masīvs -
un jā, tas varētu būt 123, tas varētu būt 124.
Bet tas viss ir relatīvs, atcerēties.
Ikreiz, kad runājam par masīvu, mums ir priekšrocība runāt par
relatīvie rādītāji.
>> Un tāpēc tagad mēs varam tikai pieņemt, ka t kronšteins nulle ir h.
Tātad, ja es aicinu 2 augšējā par to, kas tas ir īsti dara ir kapitalizēt
mazo h uz lielo burtu H Bet, protams, to, kas ir s?
Tas norāda uz to pašu darn virkni.
>> Tātad tas ir viss, kas ir noticis Šajā kodu līdz šim.
Tātad, kāda ir tad secinājums?
Kā mēs varam noteikt šīs divas problēmas?
Kā mēs salīdzināt ar faktisko stīgas?
>> Nu intuitīvi, kā būtu jūs iet par salīdzinot divas
stīgas patiesu līdztiesību?
>> Ko tas nozīmē, ja divi stīgas ir vienādas?
Protams, nav, ka viņu adreses ir vienāds atmiņā, jo tas ir zems
līmeņa īstenošanas detaļas.
Visi simboli ir vienādi.
Tātad, ļaujiet man piedāvāt, un ļaujiet man iepazīstināt no compare.c vienas versijas
šeit, lai salīdzinātu-1.c.
>> Ļaujiet man ieteikt, ka mēs joprojām saņemt rādītājs sauc s, un ar tā veikala
atgriešanās vērtību get virknes.
Darīsim to pašu ar t.
Tātad, neviens no koda ir atšķirīgs.
Es esmu gatavojas pievienot nedaudz vairāk kļūdu pārbaudi tagad.
Tāpēc tagad, ka mēs esam sava veida atplēšot tas slāņiem CS50, ko virkne
patiesībā ir, mums ir jābūt daudz anālais par pārliecinoties, ka mums nav ļaunprātīgi
nederīgs vērtības, piemēram, Null.
>> Tāpēc es esmu tikai gatavojas pārbaudīt.
Ja s nav vienāds ar null, un t nav vienlīdzīgas null, tas nozīmē, ka mēs esam OK.
Get stīgu nav screw up kļūst kāda no šīm stīgas.
Un jūs varat, iespējams, domāju, tagad, ko tas STR CMP iespējams darīt?
String salīdzināt.
>> Tātad, ja jūs esat programmu java iepriekš, tas ir kā vienāds metodi
stīgu klasē.
Bet par tiem no jums, kas ir ne programmēt pirms,
tas ir tikai c funkcija.
Tas notiek, lai nāk failu ar nosaukumu string.h.
Tas ir, ja tas ir deklarēts.
>> Un stīgu salīdzināt -
Es tiešām aizmirst tās izmantojumu, bet nekad prātā, ka.
Atgādināt, ka mēs varam darīt Vīrietis, samaisa salīdzināt.
Un tas notiek, lai atvērtu Linux programmētāji rokasgrāmata.
Un tas ir, atklāti sakot, mazliet noslēpumains.
Bet es šeit redzu, ka yep.
Man ir arī string.h.
>> Un tas saka šeit ar nosaukumu " string salīdzināt funkcija salīdzina
abas virknes S1 un S2 "Un. S1 un S2 acīmredzami ir divi
argumenti pagājis collas
Man nav īsti atcerēties, ko const ir, bet tagad paziņojums -
un Jums var būt redzējis šo jau tad, kad Jūs esat izmantot cilvēks lapas, ja jūs
to visu -
ka char zvaigzne ir tikai sinonīms ar auklu.
>> Tātad, tas salīdzina divas virknes, S1 un S2, un tas atgriež veselu skaitli, mazāk
par vai vienāda ar vai lielāka par nulli ja S1 ir konstatēts, attiecīgi, lai būtu
mazāk nekā, vai spēles, vai būt lielāks nekā S2.
Tas ir tikai ļoti sarežģīts veids, kā pateikt ka virkne salīdzināt peļņu
nulle, ja divas stīgas ir intuitīvi identiski, rakstzīme
rakstzīme raksturs.
>> Tā atgriež negatīvu skaitli, ja s, alfabētiski, ir paredzēts
ierasties t.
Vai atgriež pozitīvu skaitli, ja s ir paredzēts nākt pēc t
alfabētiskā secībā.
Tātad ar šo vienkāršo funkciju, varētu Jūs, piemēram, šķirot
Visa ķekars vārdu?
>> Tātad šo jauno versiju, es esmu gatavojas iet uz priekšu un veikt compare1.
Dot slīpsvītra salīdzināt vienu.
Es ierakstiet sveiki visās mazajiem burtiem.
Es esmu gatavojas rakstīt sveiki visās mazos vēlreiz.
Un par laimi, tagad saprot, Es drukāti to pašu.
>> Tajā pašā laikā, ja es rakstīt sveiki ar mazajiem lietu un HELLO ar lielajiem burtiem un
salīdzināt tos, es drukāti dažādas lietas.
Jo ne tikai ir adreses dažādi, bet mēs esam salīdzinot
dažādas rakstzīmes atkal un atkal.
>> Nu iesim un noteikt vienu Otra problēma tagad.
Ļaujiet man atvērt ar vienu versiju kopija, kas tagad risina
šis jautājums ir šāds.
Un tas viens ir skatīsies nedaudz sarežģītāka.
Bet, ja jūs domājat par to, ko problēma mums nepieciešams, lai atrisinātu, cerams, tas būs
skaidrs tikai brīdi tagad.
>> Tātad, šī pirmā rinda, palija sākums t, kas lajs izteiksmē varētu kāds ieteikt
Ko tas līnija šeit nozīmē?
Char zvaigzne t, kas ir tas dara?
>> Labs.
Izveidot rādītāju uz dažām vietas atmiņā.
Un ļaujiet man noslīpēt mazliet.
Deklarē mainīgo, kas saglabās adrese daži char atmiņā, tikko
lai būtu nedaudz vairāk atbilstošu.
>> Labi, tāpēc tagad labajā pusē, es esmu nekad neesmu redzējis kādu no šīm funkcijām
pirms malloc.
Bet ko var tas nozīmē?
Sadali atmiņas.
Atmiņas sadalījumu.
>> Tātad izrādās, līdz šim, mēs nav īsti bijis spēcīgs veids
lūdzot operētājsistēmu, iedodiet man dažas atmiņas.
Drīzāk, mums tagad ir tā saucamā funkcija malloc, kas dara tieši tā.
Pat ja tas ir mazliet uzmanību tieši tagad, ievērosiet, ka
starp abām iekavās ir tikai būs vairāki.
Kur es esmu ievadījis attiecīgo zīmes var būt vairāki.
>> Un tas skaitlis nozīmē, man 10 baiti.
Dodiet man 20 baiti.
Dodiet man 100 baiti.
Un malloc darīs visu iespējamo, lai lūgt operētājsistēmu -
Linux, šajā gadījumā -
hey, ir viņu 100 baiti RAM pieejams?
Ja tā, tad atgriezīsies tie baiti man ar atgriežoties adresi, kuru no
šie baiti, varbūt?
Ļoti pirmais.
>> Tātad arī šeit - un tas ir dominējošais C, jebkurā laikā jūs esat
nodarbojas ar adresēm?
Jūs esat gandrīz vienmēr nodarbojas ar Pirmā šāda adrese, nav svarīgi, cik liels
rieciens atmiņas jums tiek nodotas atpakaļ, lai runāt.
>> Tātad, pieņemsim ienirt šeit.
Es cenšos, lai sadalītu to, kā daudzi baiti, tieši tā?
Labi.
Virknes garums s - pieņemsim do konkrētu piemēru.
Ja u ir sveiki, H-E-L-L-O, kas ir virknes garums s, protams?
Tātad, tas ir pieci.
Bet es esmu dara plus 1 par to, kāpēc?
Kāpēc es vēlos sešas baiti piecu vietā?
Null raksturs.
>> Es nevēlos atstāt off šo īpašu null raksturs.
Jo, ja es drīkstu kopiju Sveiki un tikai do H-E-L-L-O, bet man nav iekļauti
ka īpašo raksturu, dators varētu būt, nejauši, slīpsvītru
nullei tur par mani.
Un tāpēc, ja es cenšos izdomāt garums kopiju, es varētu domāt, ka
tas ir 20 rakstzīmes garš, vai miljons rakstzīmēm, ja es tikai nekad nenotiks
lai sasniegtu slīpsvītru nulli.
>> Tāpēc mums ir seši baiti uzglabāt H-E-L-L-O, slīpsvītra nulle.
Un tad tas ir tikai līdz būt super Anal.
Pieņemsim, ka es aizmirst to, ko no char izmērs ir.
Mēs pastāvīgi sakot, tas ir viens baits.
Un tas parasti ir.
Teorētiski tas varētu būt kaut kas atšķirīgs, par citu Mac vai
atšķirīgs PC.
>> Tātad izrādās, tur ir šis operators sauc sizeof ka, ja jūs nodot to uz
nosaukums datu tipu - piemēram, char, vai int, vai peldēt -
tas jums pateiks, dinamiski, cik baiti char aizņem par šo
konkrētu datoru.
>> Tātad, tas ir faktiski tikai kā saka reizes 1 vai
reizes neko.
Bet es to daru tikai, lai būtu super anālais, ka tikai gadījumā, ja char atšķiras
datorā, salīdzinot ar manējo, šādā veidā matemātika ir vienmēr gatavojas pārbaudīt.
>> Visbeidzot, noteikti šeit es pārbaudīt null, , kas vienmēr ir laba prakse - atkal,
jebkurā laikā, mēs esam nodarbojas ar rādītājiem.
Ja malloc nevarēja dot mani seši byes - kas ir
Maz ticams, taču tikai gadījumā -
atgriezties vienu uzreiz.
Un tagad, iet uz priekšu un kopēt string šādi.
Un tas ir pazīstams sintaksi, lai arī citā lomā.
>> Es iešu uz priekšu un iegūt virkni no s garumu un uzglabāt to n.
Es esmu tam gatavojas atkārtot no i vienāds nulles līdz un ieskaitot N,
lielāks par vai vienāds ar.
Tā, ka uz katra atkārtojuma, man kārtējā raksturs s, kas i-
raksturu t.
>> Tātad, kas īsti notiek zem pārsegs šeit?
Nu ja tas, piemēram, ir s -
un es ir ievadījis vārdu H-E-L-L-O un tur slīpsvītru nulle.
Un atkal, tas ir s norādot šeit.
Un šeit nu ir t.
>> Un tas ir vērsta tagad kopiju atmiņas, vai ne?
Malloc man ir devis visu rieciens atmiņas.
Es nezinu, sākotnēji, kas ir jebkurā no šīm vietām.
Tāpēc es esmu gatavojas domāt par šiem, kā viss ķekars jautājuma zīmes.
>> Bet, tiklīdz es sāku looping no nulles uz augšu pa garumu, S, T
kronšteins nulle un t bracket 1 -
un es nolikšu šo tagad pie griestiem -
t kronšteins nulle un s kronšteins nulle nozīmē ka es esmu būs kopēšanu
iteratīvi h šeit, E-L-L-O. Plus, jo man bija plus
1, slīpsvītru nulle.
>> Tāpēc tagad, ja salīdzināt-1.c, galu galā, ja es izdrukāt
kapitalizācija t, mums vajadzētu redzēt, ka s ir nemainīgs.
Ļaujiet man iet uz priekšu tagad darīt.
Tātad, lai copy1.
Dot slīpsvītra copy1.
Es esmu gatavojas rakstīt sveiki, Enter.
Un tagad paziņojums, tikai kopiju ir kapitalizēti.
Jo man patiešām ir divi gabalos atmiņas.
>> Diemžēl, jūs varat darīt daži diezgan slikti un diezgan bīstamas lietas šeit.
Ļaujiet man uzvilkt piemēru šeit tagad, kas dod mums piemēru, daži
dažādas līnijas.
Tik vienkārši intuitīvi šeit, pirmā līnija koda, int zvaigzne x, deklarē
mainīgo sauc x.
Un, kas ir datu tips Šī mainīgā?
Kas ir datu tips šim mainīgajam?
Tas nebija cliffhanger.
>> Datu tips ir int zvaigzne.
Tātad, ko tas nozīmē? x būs uzglabāt adresi int.
Vienkārši.
Y gatavojas glabāt adresi int.
Kāds ir trešais rindā koda dara tur?
Tas piešķirot cik baiti, visticamāk?
Četri.
Sakarā ar izmēru int ir kopumā četri, malloc no četriem sniedz
mani atpakaļ adresi rieciens atmiņa, no, kuru bytes vispirms ir
uzglabā tagad x.
>> Tagad mēs esam pārvietojas nedaudz ātrāk.
Star x nozīmē ko?
Tas nozīmē iet uz šo adresi un īstenot to, ko skaitu tur?
Put numur 42 tur.
Star y nozīmē iet ar to, kas ir pie y un nodot numuru 13 tur.
>> Bet pagaidiet minūti.
Kas ir y šobrīd?
Kāda adrese ir y uzglabāšana?
Mēs nezinām, vai ne?
Mēs nekad vienreiz izmantot uzdevumu operators iesaistot y.
Tātad y kas deklarēti otrajā rindā kods ir tikai daži atkritumu vērtību, liela
jautājuma zīme, lai runāt.
Tas varētu būt vērsta nejauši kaut ko atmiņā, kas
parasti ir slikti.
>> Tātad, tiklīdz mēs hit šīs līnijas tur, star y vienāds 13, kaut ko sliktu,
kaut kas ļoti slikts ir aptuveni notikt ar mīkstās.
Tātad, pieņemsim redzēt, kas notiek, lai galu galā kas notiek ar Binky šeit, šajā brīdī
vai arī tā izskatās.
>> [VIDEO PLAYBACK]
>> -Hei, mīkstās.
Mosties.
Ir pienācis laiks, lai rādītāja fun.
>> -Kas tas ir?
Uzziniet par norādes?
Ak, goodie.
>> -Nu, lai sāktu, es domāju, mēs esam būs nepieciešama pāris norādes.
>> -Labi.
Šis kods piešķir divas norādes kas var norādīt uz veseliem skaitļiem.
>> -Labi, labi, es redzu divas norādes.
Bet tie nav, šķiet, ir norādot uz kaut ko.
>> -Tas ir labi.
Sākotnēji, norādes nav norāda uz kaut ko.
Lietas, tie norāda uz sauc pointees, un to izveidošanas ir
atsevišķa solis.
>> -Ak, labi, labi.
Es zināju, ka.
Par pointees ir atsevišķi.
Tātad, kā jūs piešķirt pointee?
>> -Labi.
Nu, šis kods piešķir jaunu skaitļu pointee, un šī daļa nosaka x
norādīt uz to.
>> -Hei, kas izskatās labāk.
Tātad, lai to kaut ko darīt.
>> -Labi.
Es dereference rādītāju x uzglabāt skaitlis 42 savā pointee.
Par šo triks, man būs nepieciešams savu burvju zizlis no dereferencing.
>> -Jūsu burvju nūjiņa no dereferencing?
Uh, tas ir lieliski.
>> -Tas ir tas kods izskatās.
Es ņemšu tikai izveidot numuru, un -
>> -Hei, paskaties.
Tur tas notiek.
Šādi rīkojoties ar dereference par x šādi bultiņas, lai piekļūtu savu pointee.
Šajā gadījumā, lai saglabātu 42, kas tur.
Hei, mēģināt to izmantot, lai saglabātu numuru 13 caur otru rādītāju, y.
>> -Labi.
Es ņemšu tikai iet pa šeit y un get skaitlis 13, kas izveidota.
Un tad paņem zizli no dereferencing un vienkārši -
Eh!
>> -Ak, hey.
Tas nestrādāja.
Teiksim, mīkstās, es nedomāju, ka dereferencing y ir laba ideja,
tāpēc izveido pointee ir atsevišķs solis.
Un es nedomāju, ka mēs kādreiz darīja.
>> -Hmm.
Labs punkts.
>> -Jā, mēs piešķīra rādītāja y.
Bet mēs nekad iestatīt tā, lai norāda uz pointee.
>> -Hmm.
Ļoti uzmanīgs.
>> -Hei, jūs meklējat labi tur, mīkstās.
Vai jūs varat salabot, lai vec punkti uz to pašu pointee as X?
>> -Protams.
Es izmantot savu burvju nūjiņu, par rādītājs uzdevumu.
>> -Vai tas būs problēmas, piemēram, pirms?
>> -Nē.
Tas nav pieskarties pointees.
Tas tikai maina vienu rādītāju norādīt uz to pašu kā cita.
>> -Ak, es redzu.
Tagad y norāda uz tajā pašā vietā kā x.
Tik jāgaida.
Tagad y ir fiksēts.
Tā ir pointee.
Tātad jūs varat izmēģināt zizli gada dereferencing atkal
nosūtīt 13 pāri.
>> -Labi.
Šeit iet.
>> -Hei, paskaties uz to.
Tagad dereferencing darbus y.
Un tāpēc, ka norādes tiek daloties ka viens pointee, viņi
gan redzēt 13.
>> -Jā.
Sharing.
Neatkarīgi.
Tātad mēs ejam pārslēgtos vietām tagad?
>> -Ak, paskaties.
Mēs esam no laika.
>> -Bet -
>> -Tikai atceraties trīs rādītājs noteikumiem.
Numur viens, pamatstruktūra ir tas, ka jums ir rādītājs.
Un tas norāda vairāk nekā uz pointee.
Bet rādītājs un pointee ir atsevišķi.
Un kopējā kļūda ir izveidot rādītāju, bet
aizmirsis dota pointee.
>> Numurs divi, rādītājs dereferencing sākas gada rādītāja, un šādi tās
arrow vairāk, lai piekļūtu savu pointee.
Kā mēs visi zinām, tas darbojas tikai tad, ja ir pointee, kas izpaužas atpakaļ uz
noteikums numur viens.
>> Numuru trīs, rādītājs uzdevums aizņem viens rādītājs un izmaiņas to norādīt uz
pats pointee kā cits rādītājs.
Tātad, pēc uzdevuma, divas norādes būs
norāda uz to pašu pointee.
Dažreiz tas ir sauc par koplietošanu.
Un tas viss notiek ar to, tiešām.
Bye bye tagad.
>> [END VIDEO PLAYBACK]
>> DAVID Malan: Tik daudz par norādes, vairāk mīkstās nākamajā nedēļā.
Mēs tiksimies pirmdien.