[Mūzikas atskaņošanai] DAVID J. Malan: Tas ir tāpat kā pirmkursnieks seminārs šodien. LABI. Tik ļoti lietains out. Tas mēdz notikt trešdienās, bet vēl vairāk iespēju par jautājumiem šodien. Tāpēc sāksim off faktiski ar plēvi tikai brīdi. Bet mēs sāksim grandly kā vienmēr. Tas ir CS50, un šis ir beigu 4. nedēļā. Tātad, ja jūs esat kādreiz noskatījos TV vai filmu, kur tur ir daži datoru eksperti un policija, vai FBI, vai kādu aģentūra mēģina noķert kādu pretinieks, labi, jūs esat dzirdējuši izteicienu "uzlabot", kuru tas tehniķis kaut kā maģiski zooms bezgalīgi tālu, lai redzētu noziedzniekus identitāti vai numura zīme numurs jo pat mirdzumu spoguļa vai atspīdums kāda cilvēka acs. Tātad tiešām, pieņemsim to apskatīt dažas šādas ainas no Holivudas. [Video atskaņošana] -OK, Tagad pieņemsim iegūt labu apskatīt jums. -Paturi to. Run, ka atpakaļ. -Uzgaidi minūti. Iet labi. -Ir, Iesaldēt to. -Full Ekrāns. -OK, Iesaldēt to. Tiks padarīta stingrāka līdzi, ka, jūs? -Vector Kas par ka puisis ar pakaļējā riteņa. -Zoom Jo tepat šajā vietā. -Ar Labo aprīkojumu, attēls varētu tikt paplašināta un palielinājusi. -Kas tas ir? -Tas Ir papildierīci programma. -Vai Jums ir skaidrs, ka līdz kāds? -Es Nezinu. Pieņemsim uzlabot to. -Enhance Sadaļa A6. -Es Uzlabota detalizēti, and-- Es domāju, ka tur ir pietiekami, lai uzlabotu, atlaidiet to uz mana ekrāna. -Es Uzlabota pārdomas viņas acīs. -Ļaujiet Ir palaist to caur video uzlabošanu. -Edgar, Jūs varat uzlabot šo? -Pagaidi. -I've Strādājuši pie šīm pārdomām. -Someone Ir pārdomas. -Reflection. -Ir Ir pārdomas par cilvēka seju. -The Pārdomas. -Ir Ir atspulgs. -Zoom Kas par spoguli. -Jūs Varat redzēt pārdomas. -Var Jums uzlabot attēlu no šejienes? -Var Jums uzlabot viņu tieši šeit? -Var Jūs uzlabot to? Vai jūs varat uzlabot to? -Var Mēs veicinām šo? -Var Jūs uzlabot to? -Turiet Uz otru, es ņemšu uzlabot. -Zoom Jo uz durvīm. -fonts Times 10. -Zoom. -Ievākties. -vairāk. -Wait, Apstāties. -Stop. -Pause To. -Rotate Mums 75 grādus ap vertikāli, lūdzu. -Stop. Iet atpakaļ uz daļu par durvīm, atkal. -Got Attēla pastiprinātāju, kas var bitmap? -Hey, Varbūt mēs varam izmantot pradeep Sen metode, lai redzētu, uz logiem. -Tas Programmatūra ir valsts mākslas. -The Eigenvalue ir izslēgts. -Ar Tiesībām kombinācija algorithm-- -Viņš Ir jāņem likvidēšana algoritmi uz nākamo līmeni, un es varu izmantot tos, lai uzlabot šo fotogrāfiju. -Lock Par un paplašināt z ass. -Enhance. -Enhance. -Enhance. -Freeze Un uzlabot. [Beigtu atskaņošanu] DAVID J. Malan: Labi, tāpēc visi no tiem ir faktiski vārdi. Viņi vienkārši savērtas apvienojas tā, ka tas nav reāli saprātīgs. Un, patiesībā, CS50 un kursi patīk mēdz sagraut daudz TV un filmas tev. Jo, kad šiem datoru eksperti ir grabošs off termini un pasakot fancy lietas, piemēram, eigenvectors, un z-ass, un jebkuru citu skaits faktiski vairāk tehniskie termini, viņi tiešām tikai rindu vārdi kopā pārāk bieži. Vai tas ir viens no mūsu cerības ir, ka, kā blakusparādība kursos Kā šis, būs vairāk cilvēku, pasaule faktiski varētu nosvērt un tikai kādreiz tik nedaudz ietekmēt kvalitāte un precizitāte no šīm filmām? Patiesībā, pieņemsim to apskatīt realitāti. Tātad, šeit ir personāls foto Marija, viens no mūsu mācību līdzcilvēkiem. Un domāju, ka viņa ir aizdomas par kaut ko. Un tomēr, tur ir zaigot daži pierādījums viņas acīs, vai atstarojot viņas brilles. Nu, ja mēs tieši tā, kā filmās ierosināt, kur mēs tuvinātu un "uzlabot", tas ir, cik daudz informācijas ir Marijas sejā kad jūs fotografētu ar šo oriģinālo izšķirtspēju. Un, patiesībā, jūs varat redzēt šos punktus. Un tie ir, ko ir sauc pikseļi, P-I-X-E-L-S, kas ir tikai kvadrātveida parasti ka ir punkts, kas, veido attēlu. Un atpakaļ dienā, un faktiski pat Šodien ar dažiem mūsdienu LED televizoriem vai LCD televizori, ja tev viens savā istabā vai mājās, ja jums iet uz augšu super tuvu tai, un it īpaši, ja tas ir nedaudz vecāks TV, Jūs, iespējams, var pat redzēt šos punktus un tas, ko sacerēt attēlu. Un nav vairāk Informācija par šo. Mēs varētu "uzlabot", ar to saprotot izlīdzinot lietas atkal un veida veida, veida, ko izsecinot krāsai jābūt blakus Marijas acīm tāpēc, ka tas nav reāli tik pixelated. Bet, ja es turpinu pietuvināt, tur ir slikts puisis viņas acīs. Tāpat kā tas ir viss Informācija par mums. Jūs nevarat izveidot Informācija no nekā. Tur ir tikai ierobežots bitu skaits tur. Tātad Problēma Set 4, kur Jums ir iespēja spēlēt ar šāda veida pasaulē. Problemātiskajās Set 4, jūs izpētīt pasaule grafikas un kriminālistikas, un faktiski rakstīt kodu kas atgūst zaudēto attēlus. Jūs rakstīt kodu, manipulē esošos attēlus un galu galā saprast, kas ir notiek zem motora pārsega. Un, izrādās, tas ir faktiski ne viss tik sarežģīta. Piemēram, ja mēs vēlējāmies pārstāvēt smaidiņam kur ar šiem melnajiem pikseļiem, vai šie melni punkti, labi, mēs varētu vienkārši pārstāvam tos kā patiesi bitkarte. Un, ja jūs kādreiz dzirdējis, ka izteiksme bitmap, varbūt tagad sāk veikt mazliet vairāk sajūtu šodien. Mēs jau zinām, kas mazliet ir. Tas ir 0 vai 1. Un karte ir tikai kaut kas piemēram, papīra kas dod jums virzienos un ir varbūt režģis x un y koordinātes. Tātad, šeit ir bitkarte. Tā ir karte bitu , saskaņā ar kuru 1 ir acīmredzot gatavojas pārstāvēt baltu pikseli, un 0 gatavojas pārstāvēt melnu pikseli. Bet mēs, protams, var uzsist to apkārt. Tas nav īsti jautājums tik Kamēr mēs esam konsekventi. Un šeit ir, kā, binary-- iekšā no datora atmiņas, vai pat iekšā faila cietajā drive-- jūs varētu uzglabāt vienkāršākais smaidiņam attēlus. Bet ko mēs, protams, trūkst šo attēlu? Color, vai ne? Tas ir skaidrs, nākamais solis vai uzlabošana, lai uzlabotu to ar krāsu. Tik diemžēl tikai ar vienu bitu, 0 vai 1, mēs varētu būt krāsu. Tas varētu būt sarkana vai zila, vai melns, vai balts, vai zaļa, vai rozā, vai jebkuri pāri krāsas. Bet Vienkāršības labad, mēs tikai pieņemt melnā un baltā krāsā. Tātad, ko loģiski mums vajag, ja mēs vēlamies īstenot krāsu attēlu? Kas mums jādara? Tāpat, ja ierobežojošais faktors šeit ir tā, ka ar vienu bitu jūs varat tikai pārstāvēt divas valstis, 0 vai 1, balts vai melns, ko jūs vēlaties darīt? Mērķauditorija: vairāk datu. DAVID J. Malan: Vairāk biti, yeah vairāk datu, vairāk bitiem. Un, protams, tas ir tieši tas, kā krāsu attēli tiek pārstāvētas. Nevis izmantot vienu bitu A 0 vai 1, lai katram pikselim, katrs punkts, jūs vienkārši izmantot vairākus. Varbūt izmantot 8, varbūt, biežāk izmantot 24, un, protams, problemātiskajās Set 4, būs jums spēlēt ar failu formātā, kas izmanto 24 bitus parasti. Bet lielākā daļa no jums, iespējams, iepazinušies ar JPEG. Ja esat kādreiz veikti fotogrāfiju savā tālrunī, vai augšupielādē vai redzējis kaut ko Facebook vai Flickr, jebkurš skaits Foto balstītas mājas lapas, jūs esat iespējams, redzējuši JPEG attēlu pirms. Un izrādās, tas ir fails formāts mēs spēsim izmantot PSET 4, ar ko jūs gatavojas ir, lai atgūtu attēlus ka es esmu nejauši svītrots no A bojāti atmiņas karti kamerā, ja Jums gribas. Un izrādās, ka pat tad, ja JPEG ir diezgan sophisticated-- tas ir daudz sarežģītākas nekā melnā un baltiem punktiņiem mēs redzējām pirms brīža, jo tur ir tiešām fancy algoritmi, kas tiek izmantoti, lai saspiestu JPEG, tā ka jūs varat būt tiešām jauks, kvalitātes attēlu, bet, izmantojot salīdzinoši maz biti. Un mēs būsim atpakaļ saspiešana pirms ilgi. Izrādās, ka pirmais trīs baiti JPEG image-- nav svarīgi, ko tu esi fotogrāfiju of-- ir vērtības, 255, 216, 255. Citiem vārdiem sakot, ja jūs vienkārši redzēt, ka modelis bitiem, pārstāvētas šeit kā trīs baiti, vai 24 bitu kopā, ar lielu varbūtību var secināt, ka jūs meklējat pie tā šo pirmo trīs baiti JPEG. Un tas ir tas, kas ir zināms kā no JPEG parakstu. Vairāki failu formātus daudz tur mēdz sākt ar dažiem modeļiem 0s un 1s, tāpēc, ka Windows un Mac OS, un iOS, un Android zināt, kāda veida failu viņi ir, papildus tā saukto failu paplašinājums, kas daudz faili ir. Ja jums ir .jpg, kas ir vēl viens pavediens uz datora. Tātad pieņemsim tagad apskatīt šo nedaudz vairāk tehniski. Mēs zinām, ka decimālo sistēma ir no 0 līdz 9. Mēs zinām, bināro ir 0 un 1. Un, ja jūs domājat, ka atpakaļ uz PSET 0, mums bija jums cīnīties ar, par mazliet, kaut sauc heksadecimālo, kur jums ir 16 cipariem, nevis 10 vai vietā 2. Un tie cipari, pēc vienošanās, ir no 0 līdz 9 un tad caur f, kur f apzīmē ko decimāls skaitlis, tāpat kā ātri vesels saprāts pārbaudīt? Tātad, 15. Un jāpārstāv 10, tikai ar raksturs pasūtīšanas ka es esmu devis. Tas ir tikai patvaļīgs konvencija, bet tas ir diezgan standarta. Tātad, ja mēs skatāmies uz šo rakstu trīs bytes-- pieņemsim sāc skatīties uz to atbilstošā veidā, kā datorzinātnieku vispār apskatīt un domāt par failiem. Jūs, protams, varat domāt par failus 0s un 1s, un decimal, bet patiesībā, mums ir tendence izmantot bināro vai vairāk parasti hexadecimal-- atpakaļ no PSET 0. Tātad, ļaujiet man ieteikt, ka 255, 216, un 255 ir tikai šie 0s un 1s modeļus. Un jūs varat pārbaudīt šo, ja jums gribu darīt to math no 0. nedēļā. Bet, tagad, vienkārši pieņemu ka šis patiešām ir pareizs. Esmu tikko pārrakstīt trīs decimālo skaitļus kā trīs bināro vērtību. Tagad to, ko es esmu gatavojas darīt, ir vienkārši pievienojiet dažas balto laukumu, tikai lasāmību dēļ. Un paziņojums, es esmu tikai gatavojas lai pārvietotu lietas intervālu. Tātad, pirms, pēc, pirms, pēc. Es esmu darot neko interesantu cits nekā tikai izplatot lietas tik šis paziņojums katrs kopums astoņiem biti tagad divas četri biti. Tas ir noderīgi, jo heksadecimālo ir īpaši moderns jo katra heksadecimālo ciparu 0 cauri f, vai precīzāk no 0 līdz 15, var pārstāvēt ar tieši četri biti. Citiem vārdiem sakot, heksadecimālā ja jums vēlas pārstāvēt 0, tas ir tikai 0000, četri nullēm. Un, ja jūs vēlaties, lai pārstāvētu 15, tas ir 1111, kas ir četri biti. Un, ja jūs darīt to math, ja tas ir tiem, vieta, šī ir 16s vieta, kas notiek, lai dotu you-- drīzāk, ka notiek kuri paredzēti, sorry, bināro, kas notiek, lai dotu jums 15, tiem vieta, twos Place, četrrāpus un eights vieta. Tātad, ļaujiet man ieteikt ka noteikti četri biti pa kreisi ir tas, ko mēs ejam, lai izsauktu f. Tas ir lielākais skaits, ko var pārstāvēt ar četrām bitiem. Un mēs jau zinām no heksadecimālo, f ir lielākais cipars heksadecimālo. Mēs esam ieguvuši vēl vienu f tur, vairāk nekā tur divi. Un tagad, lietojiet tikai uz ticību ka es esmu darījis math tiesības un, ka kreisajā pusē no šiem bitiem, 1101, ir tas pats, kas D heksadecimālo. Un labā roka, 1000, ir tikai 8. Un, ka viens ir viegli redzēt, vai ne? 8 represents-- ir taisnība zem šī eights vietā. Tātad mums ir viens no astotnieku kolonnā un nekas četrrāpus, pa pāriem vai ones. Tāpēc tagad vairāk tradicionāli, cilvēki mēdz rakstīt heksadecimālo cipariem, piemēram, tas, jūs vienkārši squish tos kopā, un tad jūs prefiksu tos ar 0x. Tas nenozīmē neko citu kā vizuālā pavediens uz human-- šeit nāk heksadecimālo value-- jo tas varētu citādi būt acīmredzama. Kas ir, galu galā, ka modelis nullēm un tiem, vai modelis heksadecimālo cipariem līdzvērtīgi, ka jūs esat gatavojas sākt meklē problemātiskajās Set 4 ir this-- Un problēma Set 4 spec būs staigāt jūs caur to vairāk detail-- bet saprast kā sava veida Arcane kā tas varētu izskatīties pēc pirmā acu uzmetiena, jūs gatavojas sākt redzēt šo daudz. Un patiesībā, pat GDB, tad atkļūdotājs mēs iepazīstinājām pirmdien un Dan ievieš in PSET 3, gatavojas to bieži parādīs heksadecimālo vērtības tikai tāpēc, ka tie mēdz būt vairāk parasto nekā decimālo vai bināro pasaulē datoriem. Tagad pieņemsim nodot to vērā kontekstu. Daudzi no jums, iespējams, atceras šo attēlu šeit, kas nāca no tā, ko? Vista, tāpēc pat agrāk nekā ka, Windows XP izdarīja šo debija. Tātad šī ir skaista ainava. Un patiesībā, ja jūs kule ap online-- Es domāju, ka tas ir Wikipedia raksts, kur kāds ļoti pārsteidzoši izgāja uzskatīja, ka šis vieta pasaulē, kas izveidota viņa vai viņas kamera Tieši īstais place-- un tas šodien izskatās like-- bet tas ir tieši tas pats iestatījums. Šis attēls, lai gan, ir failā formāts sauc bitmap, b-m-p. Un mēs spēsim veikt super ātrs skatiens uz to, ko tas nozīmē. Bet bitmap ir tikai cits veids, pārstāv attēli joprojām izmantojot pikseļi in 0s un 1s, galu galā. Bet tajā ātru skatienu, tas ir daudz interesantu paraksts sākumā failu. Tas nav tikai trīs baiti, bet tur ir viss ķekars modeļus baitu kas ir iepriekš jēgu. Piemēram, kaut kur Pirmais pāris baiti bitmap attēlu būs lielumu no attēls, platums attēla, augstums attēla, lai Noderīgas metadatus, ja Jums gribas. Noderīga informācija, ka Photoshop vai jebkuri grafikas programmu jūs izmantojat tiešām var rūp. Tātad vairāk par šo Problēma Set 4, bet tas ir tikai teikt, ka beigās, dienā visi failu formāti esat lietojis par years-- Microsoft Word failus, Cipari failus, Excel failus, jebkuru failu formātus skaits kas varētu būt daži zināms faila paplašinājums ir tikai 0s un 1s atrodas zem motora pārsega. Un cilvēki ir nolēmuši kādi konvencijas ir, kādi modeļi 0s un 1s pārstāvēt Word failu versus Excel failā, pret jebkuru citu failu formātiem numuru. Tātad PSET 4, jums ir iespēja spēlēt ar to. Bet ko tas nozīmē, lai būtu struct. Tas ir tiešām jauks segue tagad uz C, kas ir tikai pāris papildu funkcijas, kas mēs neesam paskatījās vēl. Tas ir diezgan maza valoda un viena no jauku iezīmes par C ir struct. Piemēram, ja jums gribēju represent-- pieņemsim teikt jūs vēlētos, lai būtu mainīgais, kas ir students kādā programmā. Varbūt jūs rakstāt kursu reģistrācija programma, vai kodols iepirkšanās instruments, vai kaut kas tamlīdzīgs. Kas ir gabali datu saistītie students, kas nāk prātā? Tāpat students ir pārstāvēta ar kādas vērtības? Yeah? Jums ir vārds kā students. Kas vēl nav tipisks students ir? Mērķauditorija: [dzirdams] DAVID J. Malan: Tātad, sorry. Mērķauditorija: Age. DAVID J. Malan: An vecuma vai dzimšanas līdzvērtīgi, yep. Kas vēl? Mērķauditorija: ID numurs? DAVID J. Malan: Tik ID numurs, varbūt tālruņa numuru, varbūt kopmītnes, vai māja, vai koledžas, vai kaut kas tamlīdzīgs. Jebkura gabalu datu skaitu, kas Jums varētu būt jūsu kontaktu sarakstā ir tas, ko varētu definēt students. Tātad, ja mēs vēlējāmies, lai to paveiktu, ar kodu, mēs varētu darīt kaut ko vienkāršu, piemēram, šis. Mums varētu būt programmu, lai ir teiksim, int galvenais (spēkā neesošs). Un, ja es vēlos pārstāvēt students es varētu būt, piemēram, virkne aicināja nosaukums šai students, virkne sauc kopmītnes šai students, varbūt int sauc ID šim studentam. Un tāpēc es esmu, izmantojot virkni, es jāiet atpakaļ un safasēti CS50.h. Varbūt es esmu gatavojas nepieciešama stdio.h. Tāpēc ļaujiet man preemptively darīt tiem, un es esmu gatavojas aicināt šo student.c tagad un saglabājiet to. Un tagad es varu darīt kaut ko ar šiem mainīgajiem. Un mēs esam tikai gatavojas rakstīt ka kā komentāru pseido kodu, jo tas nav interesanti ko mēs darām tagad. Labi, tāpēc šī ir programma, kas kaut saglabā students. Ko es gribu darīt, ja es vēlaties saglabāt divus studentus? Tātad mans pirmais instinkts būs lai būtu labi, pagaidiet minūti, ja man ir cits students kāpēc ne es vienkārši darīt string nosaukums 2, stīgu kopmītnes 2, int ID2. Un mēs esam darījuši Gone pa šo ceļu līdz un kāda bija mūsu risinājums, kas šķiet būt sava veida hackish Copy Paste darbs šeit? Mērķauditorija: Masīvs. DAVID J. Malan: Jā, mēs varētu izmantot masīvu. Tiesības tas ļoti ātri kļūst smagnēja. Jums ir sava veida patvaļīgi sākt nosaucot visus šos mainīgos lielumus. Un tu, cilvēka, ir, lai saglabātu izsekot, ka OK NAME2, atbilst ar dorm2 atbilst ID2. Tā tikai kļūst haoss. Tātad, tas ir daudz vieglāk, Atsaukt no pirms pāris nedēļām, tikai ņemot sauc par stīgu nosaukumiem un varbūt dot mums trīs no tiem. Un tad varbūt mēs esam stīgu dorms un ir Trīs no tiem, vai ar konstanti, int ID un ir trīs no tiem. Bet pat tagad tas jūtas nedaudz apliets, labi. Mēs runājam par studentiem un vēl Es esmu patiešām mājokli zemā līmenī īstenošanas detaļas. Students ir vārds un kopmītnes un ID. Kāpēc es nevaru vienkārši deklarēt mainīgo sauc students un aicinu to s. Un, ja es gribu vēl students, kāpēc ne es tikai aicinu to t. Vai, ja es gribu visu ķekars studentu, kāpēc ne es tikai ka man ir vesela klasi studenti, un tas ir trīs no tiem. Citiem vārdiem sakot, kāpēc es nevaru nākt klajā ar savu datu tipu, ko sauc Studenti, kuru iekšpusē ir nosaukums, ir ID, ir kopmītnes, ir kāda no citām jomām skaits. Un izrādās, jums var darīt tieši to. Tātad C ir šī iezīme sauc struct. Tas ir valoda iezīme, kas ļauj mums darīt tieši to. Es iešu uz priekšu un atvērt structs.h kur mēs ejam, lai redzētu pēc definīcijas students. Izrādās - un tas viens ir pat vienkāršāka nekā vienu iesaistot ID pirms brīža. Ja jūs vēlaties, lai nākt klajā ar Jūsu mājās datu tips, un turklāt, lai Int, un char un peldēt un visi šie citi, kas pastāv, jūs varat darīt, burtiski rakstot typedef struktūrai, tad daži cirtaini bikšturi, iekšpusē, kas jums uzskaitīt mainīgos vēlaties saistīt ar šo jauno pasūtījuma datiem ierakstiet, piemēram, vārdu un kopmītnes, un tad pēc cirtaini lencēm jums dot nosaukumu uz jauno datu tipu. Tā, piemēram, students. Un, kas ir jauka par šo tagad ir tas, ka ja mēs skatāmies uz attiecīgo kodu, konvencija, pirmais no visiem, ir likt šo failā sauc par kaut ko dot h, header failu, kas mums nav sāka izmantot sevi pārāk daudz. Bet mēs esam gatavojas sākt izmantojot diezgan daudz tagad. Un ko mēs varam darīt ar šo, galu galā, šajās dažas rindiņas kodu ir atzīt, ka tieši datu tips, students. Un tagad pieņemsim to izmantot. Es esmu gatavojas tagad iedziļināties failu sauc structs1.c. Un pieņemsim apskatīt Dažas īpašības šeit. Tātad sīkumi šeit ir galvenokārt pazīstami, un mēs atgriezties uz to, kas nav pazīstami tikai brīdi. Tas, protams, ir arī mana header fails, kas ir jauns, kā arī, izņemot PSET 3, kur, Atsaukt, mums ir helpers.h. Tātad jūs varētu atgādināt #include helpers.h. Kāpēc gan es esmu, izmantojot citātus nevis leņķveida iekavās? Kad man izvēlēties starp viņiem? Gandrīz vienmēr man šķiet izmantot leņķveida iekavās. Un tad, pēkšņi uz line seši es esmu, izmantojot dubultās pēdiņas. Kāpēc varētu būt? Yeah? Mērķauditorija: [dzirdams] DAVID J. Malan: Tas ir reāls, ko? Mērķauditorija: Tas ir jūsu IDE. DAVID J. Malan: Jā, kas ir manā faktiskā IDE. Un pieņemsim nav aiztures uz IDE, jo tas ir tikai instruments, kas es esmu, izmantojot. Tas ir manā pašreizējā katalogs, konkrēti. Tātad structs.h ir mana fails nav uzstādītas IDE, jo operētājsistēma pati, drīzāk tas ir manā pašreizējā direktorijā. Tātad konvencija ir, ja jūs vēlaties iekļaut savu header failu, jūs vienkārši izmantot dubultās pēdiņas. Ko mēs saucam šo lietu līnija 8, vispārīgi runājot? Tas ir tas, ko? # define kaut ko. Tas ir konstantes, vai ne? Ja jūs vēlaties, lai būtu vērtība jūsu programmā ka jūs izmantojat vesela ķekars reizes, tas ir labs konvencija faktors to ārā, atzīt to, ar hash simbolu definēt, tad, pēc vienošanās, visās lielajiem burtiem word-- lai gan tas nav noteikti nepieciešams, bet tas ir cilvēka konvencija kapitalizēt konstantes lai tie izlēkt pie jums visually-- telpu un tad vērtība jūs vēlaties būt līdzvērtīgs ka nemainīga nosaukumu. Nē semikols, bet jūs vienkārši sekot šo modeli tur. Tātad, ko es daru šajā faktisko kodu. Tātad, pieņemsim to apskatīt galvenā programma šeit. Atbilstoši 12. jo I ir iekļauti structs.h, Man tagad ir maģiski pie manas apglabāšana jaunu datu tipu. Es ne tikai piekļūt int, un char, un peldēt, un stīgu, un zilā un citi. Man tagad ir pieejami students datu tips. Tātad rindā 12, es esmu apvienojot divus ideas-- viena pasūtījuma datu tipu un divi, izmantojot masīvu. Un tāpēc šajā programmā, ja Es gribu, lai tiešām atbalstītu trīs dažādi studenti manā programmā, es var vienkārši pateikt man mainīgais saucamie studenti, katrs no kuriem ir veids studentiem, kas ir mana pasūtījuma datu tips. Un, konkrēti, dod man trīs no tiem manā masīvs. Tāpēc tagad, ko mums darīt šajā programmā? Šeit ir tikai par cilpa atkārtojot no 0 līdz 3, jo tas ir kāda vērtība studentu. Es esmu tikai pamudinot lietotājam iedodiet man studenta vārdu. Un tad līnija 17, mēs ir galvenokārt pazīstams līniju. Mums ir mūsu vecais draugs GetString labajā pusē. Un ko gabals sintakse ir acīmredzami jauns, Ja jūs nekad neesmu programmēt C pirms, un nekad nav izmantojuši structs? Yeah? Mērķauditorija: Nosaukumu. DAVID J. Malan: The Nosaukumu. Bet tas nav pārāk daudz lēciens, jo tagad skolēni stiprinājuma i dod jums i-th students. Un, ja jūs vēlaties, lai ienirt iekšā šīs struktūras, jūs vienkārši izmantot vienu periodu un tad nosaukums mainīgā iekšpusē, vai īpašums iekšā, ka jūs vēlaties, lai iegūtu piekļuvi. Tāpat tad, ja es tad rosināt lietotāju, dod man studenta kopmītnes, jūs varat uzglabāt līdzīgi, ka string in kopmītnes mainīgā iekšpusē Minētās studentu struktūru. Un tagad lietas iegūt nedaudz iedomātā. Un tas ir gatavojas meklēt at varbūt daudz pavisam drīz. Bet jūs redzēsiet tik tālu vairāk PSET 4, tāpēc pieņemsim tikai skatienu pie tā tagad. Izrādās, ka saskaņā ar 23 38, ko jūs domājat, ka es esmu varbūt dara? Esmu izņēmusi komentārus šodien, bet versija koda tiešsaistē atsauce ir visus komentārus. Kas man šķiet, ir darīt? Mērķauditorija: saglabājot failu ar visiem informācija, ka lietotājs ir ievadījis. DAVID J. Malan: Jā, tieši tā, tas ir jauns veids ka mēs redzam divus, Vēl C iezīme, ar ko es varu izveidot pats savus failus. Līdz šim gandrīz katrs programma jūs esat rakstiski ir bezvalstnieks. Tiklīdz tas ir izdarīts darbojas, tas arī viss. Nav atmiņā vai atmiņas par to. Nav fails saglabāts. Bet, ja jūs vēlaties, lai ietaupīt ievadi, kas ir noticis, tāpat spēli vai programmu kā šis, izrādās, mēs varam darīt. Un jūs redzēsiet šo vairāk in PSET 4. un sadaļā. Bet šī līnija 23 būtībā rada failu ar nosaukumu students.csv. Un jūs varētu būt redzējis šo pirms. Pat ja jūs nekad neesmu studējis CS agrāk, CSV ir komatatdalītas mainīgie. Tas ir tāpat kā ļoti slikts cilvēks s versija Excel failā, kas nozīmē, ka tas var atvērt Excel un Apple Numbers, un tas ir rindas un kolonnas. Bet tas nav patentēts formāts, piemēram, Microsoft vai Apple. Tas ir tikai komatus atdalot vērtības, kuras mēs redzēsim pēc brīža. Un tikai veikt minējums. Atbilstoši 23, pašā beigas, mans otrais arguments ar šo jauno funkciju sauc f atvērts failu atvērt ir w. Kas varētu w apzīmē? Yeah? Mērķauditorija: Tas ļauj jums rakstīt uz failu? DAVID J. Malan: Tas ļauj jūs rakstīt uz failu. Tātad tur ir pāris variantu ka mēs varam plug šeit. Bet, ja jūs vienkārši vēlaties, lai lasītu fails, kas ir apskatīt to un lasīt to atmiņā, jums tikai izmantot quote likt pēdiņas beigās "R". Ja jūs vēlaties rakstīt uz failu, jūs izmantojat citātu likt pēdiņas beigās "w". Tur ir arī pievienot un pāris citas lietas ja jūs vēlaties mainīt esošos failus. Tagad mēs spēsim saglabāt redzēt šo lieta, tad mēs būsim atpakaļ uz līnijas 24. NULL, izrādās, ir īpaša vērtība, kas var atgriezt ar noteiktām funkcijām ja kaut kas ir nogājis wrong-- ja fails neeksistē, Ja esat izsīkšanai atmiņas, vai ķekars citu kļūdām. Bet tagad, pieņemsim tikai pieņemt, ka šis ir tikai parasto kļūdu pārbaudi. Šeit rindā 26, es esmu atkārtojot no 0 līdz 3 pār visiem maniem skolēniem. Un tas ir sava veida veida Jaunas funkcijas, fprintf, bet tikai veikt minējums. Ja printf ir tikai print formatēts string, Kāda fprintf droši vien nozīmē? Mērķauditorija: Drukāt uz failu. DAVID J. Malan: Izdrukājiet formatēti string uz failu. Tas ir tas, ko papildus f līdzeklis ir fails. Un jaunā pirmais arguments ir jābūt mainīgais, kas pārstāv savu failu. Tad mēs vienkārši ir formātā string tāpat kā printf. Un, pat ja tas sintakse ir jauns, tas tikai nozīmē iespraudiet studenta vārdu, plug-in studentu kopmītnes, un pēc tam ar fclose, aizveriet failu. Un tad lastly-- tas ir jauns un mēs atgriezīsimies pie šī pirms long-- es esmu atbrīvojot students dēļ kas noticis augšas tur. Bet mēs atgriezīsimies to, ka pirms long-- tas ir tāpēc, ka, kā GetString ir faktiski strādā zem motora pārsega. Tātad pieņemsim ātri apskatīt šeit. Ja es ierakstiet ls manā direktorijā, ievēroju, ka man nav ir fails ar nosaukumu students.csv, tikai ne tur, neeksistē. Tātad, ja es tagad apkopo šo programmu, padarīt structs-1,. / structs-1, un es esmu gatavojas iet uz priekšu un ierakstiet Andi, kurš dzīvo Berkeley at Yale. Mēs ejam, lai būtu Rob kas dzīvo Thayer šajās dienās. Un pieņemsim nākt klajā ar kur ir, es domāju, Maria ir Mather, ja esmu atcerējos pareizi. Tātad nekas, šķiet, nenotiks. Bet, ja es tipa ls tagad, ir students.csv. Iesim uz priekšu un atvērt students.csv. Tas ir atkal ļoti viegls faila formāts. Bet es esmu vienkārši pieņēma konvenciju ka man ir divas rindas un kolonnas šeit. Pirmajā ailē ir cilvēku vārdi. Otrajā slejā ir studenta kopmītnes, vai koledžas, vai māju, vai plauktiņš. Un tagad es esmu saglabājis šo pastāvīgi failā. Tātad, tas nav tik interesanti. Bet tas ir tikai pakāpiens tagad ka ar to var pastāvēt informāciju pastāvīgi. Tātad, pieņemsim redzēt, tagad to, ko vēl mēs varam darīt ar šīm un citām funkcijām. Bet vispirms, kādi jautājumi? Tas bija daudz, un tas bija ātri. Bet jūs redzēsiet daudz vairāk PSET 4, kā arī. Yeah? Mērķauditorija: Vai ir veids, kā turpināt pievienojot vārdus šai lietai? DAVID J. Malan: Labs jautājums. Vai ir veids, lai turpinātu pievienojot vārdus šai lietai? Jā. Un, patiesībā, ja jūs galu up atsākt failu, jūs varētu izmantot citātu likt pēdiņas beigās "a", lai pievienot, kas vienkārši pievienojiet jaunu rindu A Jaunā līnija atkal un atkal, tieši tā. Labs jautājums. Citi jautājumi? Yeah? Mērķauditorija: Ja jūs skrēja Programma atkal tieši tagad, tas tā saglabāt pievienojot nosaukumus failu vai arī tas pavērs jaunu failu? DAVID J. Malan: Ah, labs jautājums. Ja jūs skrēja programmu vēlreiz tiesības Tagad, varbūt drukāti jauni vārdi, tas tā pievienot lietas materiāliem vai pārrakstīt failu? Pēdējais, jo es esmu neizmantojat pievienot režīmā. Un tāpēc es esmu tikai akli atverot failu rakstīšanai, tas ir tikai gatavojas pārrakstīt failu. Tāpēc es patiešām ir jādara, ir pievienot, ja es gribu, lai tiešām ir ilgtermiņa datubāzi. Tagad CSV ir noderīga, godīgi sakot, pat lai, piemēram, ja tu esi writing-- un mēs beidzot redzam vēlāk semestrī, kad mēs izmantojam CSV pārskatos var citiem mērķiem. Ja vēlaties saglabāt visus cilvēkus kuri ir reģistrēti kādu notikumu, vai pierakstījies jūsu students grupa, vai kaut kas tamlīdzīgs, uzglabātu datus šāda veida formāta ir super ērts. Jo burtiski, ja I bija lejupielādēt šo failu. Es varētu double-- un pieņemsim faktiski izmēģināt šo ja man ir Excel vai numuri šeit. Es esmu gatavojas labo klikšķi vai kontroles klikšķi manu failu. Whoops. Peles labo pogu vai kontroles klikšķi manu failu. Nāc, mana pele nesadarbojas. Download-- es esmu gatavojas lejupielādēt visus failus šeit tik tikai, lai es varētu paķert šo vienu. Un pieņemsim redzēt, ja tas darbojas students.csv-- pirmo reizi Esmu aktivizēts. Tagad viņi vēlas redzēt savus kontaktus. Tagad, man ir nepieciešams reģistrēties. Redzēt, cik viegli tas ir izmantot CSV pārskatos var? Jā, saglabāt to līdz šim. Labi, tagad mēs esam gatavi klasē. OK, ak, kas jauns? OK, tuvu. Tas bija maģisks. Labi, tagad mums ir jāatjaunina. Un tagad, tā aizmirsu, ko failu es sākotnēji atklāja, bet ko a-- tur mēs ejam. Labi, tāpēc tagad mums ir Excel failu. Paldies. Labi, lai to, ko es darīju bija viegli daļu. Protams, es varētu būt iepriekš instalēta Excel, vai Numbers, vai jebkura programma. Bet tas ir jauki, jo Tagad es varu manipulēt dati, kas standarta formātā. Tāpēc tagad pieņemsim konteksts pāriet uz kur mēs left off pēdējo reizi, kas bija, lai sāktu pacelties mācību riteņiem. Bet vispirms, jums nav redzēt šo agrāko pusdienas atkal notiek šeit Uguns un Ledus Cambridge, Sitar New Haven. Pierakstīties uz CS50s vietnē ASAP pievienoties CS50 studentus un darbiniekus. Tātad mēs ņēmām mācību riteņiem off pirmdien kā follows-- string ir deklarēta CS50s bibliotēka kādu laiku. Un tas ir jauki, jo tas ļauj mums runāt par mainīgajiem kā pilnīga vārdus un teikumus un vairāk. Bet izrādās virkni neeksistē. Tas ir tikai sinonīms, vai alias, ka mēs esam radījuši kaut ko, kas patiesībā ir nedaudz vairāk tehniskā sauc char *. Un tiešām, mēs redzējām piemēru Programmas pirmdien ka nerīkojās gluži kā mēs gaidīts. Tas bija fails, salīdzināt-0. Un atceros, ka salīdzināt-0, ja Es recompile Pirmdiena programmu un palaist salīdzināt-0 un ierakstiet mamma mazie, un mamma ar mazajiem vēlreiz. Programma uzstāja I tips dažādas lietas, kaut gan mamma, viss mazos, ir identisks vizuāli. Tātad, kas bija īsa atbilde kāpēc dators domā šie divi stīgas ir atšķirīgs? Yeah? Mērķauditorija: [dzirdams] DAVID J. Malan: Right. Tātad, mamma, pirmo reizi Es ierakstiet to, tiek glabājas kaut kur manā datora atmiņa, bet citā vietā kā otro reizi es rakstīt mamma. Tagad tas noteikti varētu optimizēt. Dators var būt gudri un realizēt šīs divas stīgas, hey, viņi ir identiski. Ļaujiet man nav lieki uzglabāt to. Bet datori nav darīt, ka optimizācija, ja vien jums pateikt viņiem. Tātad, pēc noklusējuma, viņi tikai gatavojas, lai galu galā divās dažādās vietās atmiņā. Un tā, lai būtu skaidrs, kad mēs salīdzinājām divas stīgas, Pirmais bija sauc par s, otrais sauca t, ko tieši es biju Salīdzinot šeit on line 13? Jā. Mērķauditorija: Tā ir vieta atmiņā ka mainīgais norādīs uz. DAVID J. Malan: Tieši tā, es biju Salīdzinot vietu atmiņā ka šie mainīgie norādīja uz. Tātad īpaši, ja mamma bija baits numurs 1, un 2, un 3, un 4-- jo atceros slīpsvītru 0 jābūt visu ceļu beigās. Un otrs gadījums mamma, M-o-m, bija adresē 10., 11., 12., un 13. Man bija salīdzinot 1., ka adrese, ka vieta atmiņā, pret 10, kas ir protams nav vienādi. 1 nav 10. Tātad tas ir jauki, jo tas ir diezgan vienkārši. Bet tas ir problemātiski, ciktāl mēs nevaram salīdzināt stīgas. Tātad fundamentally-- un šajā zemā līmenī, Ja jūs vēlētos, lai īstenotu programma, lai salīdzinātu divi atsevišķi vārdi, ka lietotājs ir drukāti uz kvalitāti, viņi rindā char uz char, tikai vispārīgi, Ko mums darīt, acīmredzot? Tas nav pietiekami, tikai, lai apskatīt šīm divām adresēm. Kas mums jādara? Yeah? Mērķauditorija: atkārtot, izmantojot string [nedzirdama]. DAVID J. Malan: Jā, pieņemsim atkārtot, izmantojot virkni. Let 's izmantot cilpas, kamēr cilpa, vai ko jūs esat visērtāk. Un, ja mēs esam ieguvuši divas virknes kaut kur atmiņā, aplūkosim katru'S Pirmā zīme, tad katrs otrais raksturs, tad trešā, un, ceturtkārt, un piektais, kamēr mēs hit kāda īpaša Sentinel vērtība? Mērķauditorija: [dzirdams] DAVID J. Malan: Jā, tad slīpsvītra nulle, kurā brīdī vai nu virknē mēs varam izlemt, tas arī viss. Vai mēs saskaņota katru rakstzīmi? Ja ne, atgriezties viltus. Ja tā, tad atgriezties true. Un tā tas ir tieši tas, ko šī versija Programmas salīdzināt-1.c dara. Tas ir identisks tam, ko mēs paskatījās pirmdien izņemot to, ka es esmu gotten atbrīvoties no vārda string-- though ka nav nekādas funkcionālas impact-- visu Es esmu dara tagad ir likvidēt daži vizuālie mācību diski, bet skaidri redzēt, ka s un t ir adreses. Un tas ir tas, ko zvaigzne, zvaigznīti, apzīmē ir adrese, citādi zināma vairāk tehniski kā rādītājs. Tātad, kad es apliecinu s uz line 9 un teikt char * s, tas nenozīmē, ka man virkni. Tas nozīmē, ka man mainīgais, kura mērķis dzīvē ir uzglabāt adresi. Tā kā es esmu par to ielieciet adrese virknes tajā. Un tiešām, GetString, lai būtu skaidrs, neatgriežas virkni. Tas neatgriežas mamma slīpsvītru nulle, per se. Kāda GetString īpaši un precīzi atgriezties? Mērķauditorija: [dzirdams] DAVID J. Malan: An adresi, adrese pirmā rakstura dažās stīgu tā ir gotten. Un tāpēc tagad mēs redzam īpašs atslēgvārdu vēlreiz. Un, es norādīja uz šo agrāk. Tas būs labs konvencija ka mēs redzēsim atkal un atkal tagad. Es esmu pārbaudes, lai pārliecinātos, ka s ir nav nulle, un t ir nav nulle. Tāpēc, ka, pamatojoties uz manu patiešām ātri pieminēt agrāk, ko varētu nozīmēt, ja GetString atgriež ne adrese, bet N-U-L-L, kas ir atkal, dažas īpašas vērtība? Mērķauditorija: Kļūda. DAVID J. Malan: Tas ir kļūda. Kaut kas nogāja greizi. Un ko parasti varētu notikt, jo īpaši ar strings-- kas varētu būt nezināmas garums advance-- varbūt datori " no atmiņas, varbūt jūs ierakstījāt tādā garš vārds vai teikums vai ielīmēts tik lielu eseju tur ir vienkārši nav pietiekami daudz atmiņas. Un tā GetString nevar atgriezties adrese no visa lieta, tā tas vienkārši atgriež neko. Un tā saka ir noticis kļūda atgriežoties īpašo nulles vērtību. Tas ir nulle adresi, lai runāt. Tagad izrādās, C nāk ar funkcija, kas dara šo atkārtojuma. Mums nav to īstenot ar A cilpas vai kamēr cilpa sevi. Mēs varam izmantot funkciju, sauc īsumā, maisīt comp, vai string salīdzināt, kura mērķis dzīvē ir darīt tieši to. Jūs arī tā divas norādes, divas adreses, un tas dosies uz šīm adresēm un tad salīdzināt vēstule vēstule par vēstuli par kvalitāti, apstāšanās tikai tad, kad to, kas ir taisnība? Kad intuitīvi būtu maisīt comp stop atkārtojot, tikai, lai būtu skaidrs? Kad tas hits slīpsvītru 0 nu string, kurā brīdī tas var izlemt ir viss saskaņota, vai ir bijuši neatbilstību? Tātad, ja mēs palaist šo tagad un izmēģināt mūsu mazā kapitalizācija spēle, tā darīt salīdzināt-1, ./compare-1, un ierakstiet mamma ar mazajiem abas reizes. Tagad tas ir viens un tas pats. Un, ja es varu to darīt atkal ar mazie un tad varbūt lielais. Tagad tas patiešām atšķir starp augšējo un mazie burti. Tātad nav tik grūti vai maģisks, bet tas tagad paskaidrot kas notiek zem motora pārsega. Tātad, ko vēl mēs varam iegūt No šāda veida nodarbības? Tātad, pieņemsim to apskatīt šo. Es iešu uz priekšu un rakstīt quick programma šeit sauc copy-0. Un tagad iesim uz priekšu un faktiski pieņemsim do this-- kopiju-0, to apskatīt to, ko es esam ieguvuši šeit. Es vispirms pateikt lietotājam, kaut ko pateikt. Tad man virkne un es uzglabā to s. Tad es pārbaudītu, vai s vienāds vienāds NULL, vienkārši atgriezties 1. Tātad tas ir tikai standarta kļūdu pārbaudi. Nekas interesants nav noticis. Un patiesībā, ja mēs atbrīvotos no kļūdu pārbaudot, tas izskatās šonedēļ 1 kodu pašlaik. Bet es esmu sācis iegūt mazliet labāk par to. Tagad 16 līniju, pirms nedēļas, varbūt pat pāris dienas vai stundas pirms, Jūs varētu teikt, 16 līnija ir radot mainīgo sauc t un kopēšanas s to. Un tas ir pilnīgi saprātīgs takeaway. Bet precīzāk tagad. Kas notiek 16. rindā? Kas kļūst kopēts no labās uz kreiso pusi? Yeah? Mērķauditorija: Vai t iegūt adresi s? DAVID J. Malan: Tieši tā, t kļūst adresi s. Tātad, lai būtu skaidrs, tagad, ja es eju atpakaļ uz šo agrāko piemēru un es izņemt lieta, ko es esmu ierakstījāt. Un ko es esmu drukāti in-- šeit ir s, un šeit ir tas, ko es esmu drukāti kaut kur atmiņa, mamma un tad slīpsvītru 0, kas ir pievienots par mani. Ko es glabājas šeit, atgādināt, tas ir pie atrašanās 1, 2, 3, 4, tas ir tas, kas ir pašlaik s. Tātad, ja uz 16 līniju, es saku dod man citu mainīgo sauc t un veikals pie vērtības s, ko izpaužas uzglabā šeit nebūs mamma bet gan tikai skaitlis 1. Tātad, ja mēs skatāmies uz priekšu šajā programmā Tagad, kas notiek varētu notikt? Tāpēc ievērosiet, ka tur ir šī funkcija jūs varētu ir izmantojis šo kādu laiku atpakaļ par ķeizaru, vai Vigenere, vai varbūt nemaz. Es apgalvo, ar manu printf, es esmu gatavojas kapitalizēt kopēšanas t. Pirmā līnija 19, ātri veselība pārbaudiet, strlen pārbauda garumu t. Jo es negribu mēģināt gūt labumu kaut ko ja tur nav string tur. Ja lietotājs tikai hit Enter, tur nekas kapitalizēt. Tāpēc es nevēlos darīt līniju 21. Tāpēc līnija 21 ir kapitalizēt kas vēstule, acīmredzot, t? Mērķauditorija: m? DAVID J. Malan: Tas izskatās kā tas ir kopēšana kuriem viens? Mērķauditorija: m. DAVID J. Malan: Uh, m. Labi, tāpēc pirmo m, jo paziņojums, ka es esmu iet uz toupper, kas Ja jūs nekad neesmu redzējis to tas ir tikai funkcija kapitalizēt par savu ieguldījumu. t kronšteins nulle nozīmē dot mani nulles raksturs t. Un tā kā to dara attēlu izmaiņas, lai būtu skaidrs? Kas nepieciešams, lai saņemtu pārrakstīt vai mainīta attiecībā uz s un t un mamma slīpsvītru nulle. Mērķauditorija: [dzirdams] DAVID J. Malan: Jā, tāpēc tas viens šeit vienkārši nepieciešams, lai saņemtu mainījusies kuri paredzēti, noteikt this-- nepieciešams, lai saņemtu mainīts uz kapitāla m. Bet tagad, izskatās vēlāk programma, ja es izdrukāt s un t, kā es tīru šeit, skatīties, ko ir notiks izdrukāšana s un t. Tātad, lai copy-0, ./copy-0. Ļaujiet man iet uz priekšu un tips jo mamma ar visiem mazajiem. Ievērojiet, gan oriģinālu un kopija ir kapitalizētas. Kāpēc? Labi, s un t ir abi norādot uz, ja jūs, pats rieciens atmiņas. Un godīgi sakot, tas kļūst tiešām uninteresting-- faktu ka mēs esam izmantojot adresi nulle šeit. Es domāju, man nav īsti aprūpi kur stuff ir atmiņā. Sorry es esmu dzēšana pārāk daudz. Bet man nav īsti aprūpi kur lietas ir atmiņā. Un tā, ko patiešām programmētāji mēdz domāt par ir tas, ka tad, kad tu runā par adresi, vai rādītājs, kas cares kur tas ir atmiņā. Man vienalga, ja tas ir pie baitu vienu vai vienu miljardu. Es tikai rūp, ka šis mainīgais ir efektīvi norādot tajā rieciens atmiņas. Un tā, turpmāk, nevis atrunāšanās pār patvaļīgu atmiņas adreses, pieņemsim sāc izdarīt norādes kā norādes, kā bultas. Tātad, ko s un t tiešām ir, saskaņā ar šīs programmas, jo cik es izveidojis t, tas ir tikai divas atsevišķas mainīgie norādot tajā pašā gabalu no atmiņas. Un mums ir vienalga, kur viņi ir. Tātad, mēs varam abstrakts prom šo detaļu. Tātad, kā es varu noteikt šo? Ja es gribu rakstīt versiju kopijas programmu, kas faktiski kopijas virknes un kapitalizē tikai kopija, tikai intuitīvi, kādi ir nokļuvis būt sastāvdaļa, lai mūsu risinājums? Mērķauditorija: [dzirdams] DAVID J. Malan: Mums vajag ko? Mērķauditorija: rieciens atmiņas. DAVID J. Malan: Mums ir nepieciešams cits rieciens atmiņas, vai ne? Mēs nezinām, kā to darīt vēl, obligāti. Bet es veida ir nepieciešams, lai tas notiktu tik ka sākotnējā mamma ar mazajiem burtiem beidzas ar to, ka papildus rieciens atmiņas. Un tad, kad es mainīt kopiju, es nevēlos mainīt šo kopiju šeit. Es tā vietā vēlaties mainīt tikai šī kopija tā, ka oriģināls ir nemainīgs. Tātad, pieņemsim redzēt, kā mēs varētu to izdarīt. In kopēt-1, kas ir jau uzlauzta komentāru, bet komentēja tiešsaistē. Mēs tā vietā darīt following-- šiem līnijas ir identiski, atnesiet man virkni un to sauc s. Bet tagad aplūkosim vienu no mūsu visvairāk komplekss, bet pēdējā no sarežģītība awhile, 16 līnija dara tieši to. Tātad, ja jūsu comfy ar picture mēs vienkārši drew-- dod man jaunu rieciens atmiņas, kopēt visu, tajā, pieņemsim redzēt, kā mēs tulkot, ka, lai kodu. Tātad 16 līnija, kreisajā pusē, char * t dod man šo lodziņu nekā šeit. Tas ir viss, tā dara. Labajā pusē, m alloc, vai malloc, ir atmiņas sadali, super fancy, mistisks veids, vienkārši sakot man rieciens atmiņas. Cik daudz atmiņas mums vajag? Nu, ir sava veida liels izteiksmes. Bet pieņemsim redzēt, ko tā saka šeit. Tātad tas, protams, ir dot mani stīgu garums s. Tātad, mamma tas būtu tas, ko? Tātad tikai trīs, vai ne? mamma ir trīs rakstzīmes. Jums nav skaitīt slīpsvītru nullei, kad jūs runāt par garumu virknes tas ir Patiesībā cilvēka redzami burti. Tātad mamma, tāpēc tas dod man 3. Bet pagaidiet minūti, es esmu tagad pievienojot 1. Kāpēc es tiešām gribu piešķirt 4 baiti un ne tikai 3? Yeah? Mērķauditorija: Sentinel vērtību? DAVID J. Malan: Tieši tā, šajā pastiprinātas vērtību. Par slīpsvītru nulles, Man vajag 4 baiti pavisam. Tāpēc man vajag garumu no virknes plus 1. Un tad tikai par labu measure-- kaut arī par šo sistēmu, tas vienmēr būs 1-- es saku reizināt šo, lielumu char. Izrādās sizeof ir operators C, kas vienkārši stāsta jums baitu skaits, kas ir nepieciešams kādam datu tipu. Tas nedarbojas blokiem parasti, dažreiz tā dara. Bet vispārējā gadījumā, nē. Bet tas man pateikt, cik daudz baitu char ir, kas izrādās vienmēr ir 1. Tātad tas ir kā reizinot ar 1. Tātad super mistisks meklē līnija kodu. Bet viss tas ir dod man rieciens atmiņas. Bet tas, šķiet, ir kopēšanas kaut kas minētajā atmiņu? Vēl nē. Un tā, ko es varu uz līnijas 22, un 23, 24, 25, labi, es vienkārši izdarīt. Un tas ir sava veida vecās skolas sīkumi tagad. Tas ir tāpat kā PSET 2, kur jūs vienkārši pārvietojas lietas ap atmiņā, vai drīzāk stīgas. Tāpēc es esmu atkārtojot no 0 līdz garums virknes s. Un es esmu kopēšana i-raksturu S stāšanās i-tā rakstura t. Un tāpēc es, programmētājs, kas izgatavoti Noteikti piešķirt tieši tik daudz baitu kā man ir nepieciešams, tas ir ideāls viens pret vienu attiecību. Un es kopēt mamma mazie burti uz jauno. Un tad visbeidzot, es darīt šo līniju. Un tā efekts ir tikai kapitalizēt šo t šeit. Tik daudz, lai absorbētu, bet ja jūs vienkārši apsvērt to, kas īsti notiek par zem motora pārsega ir tikai pārvietojas šiem baiti apkārt, viss, kas ir nepieciešama, lai atrisinātu šo problēmu, ir tikai, lai dotu mums šo rieciens atmiņas. Tagad riskējot milzīgs, ļaujiet man parādīt viens cits piemērs, kas ir gandrīz identiski, izņemot šo vienu līnija kodu. Tātad šis ir hakeris versija Šīs programmas, ja Jums gribas. Bet pieņemsim tikai destilēt tas par to, kas notiek. Line 24 izmanto, lai būtu šis t kronšteins i izpaužas s kronšteinu i. Tagad, es esmu mainot to tik ļoti vairāk mistisks star t plus 1 vienāds star s plus 1. Tātad, kas notiek un kāpēc Vai mums ir zvaigzne raksturs? Mēs esam redzējuši zvaigzne pirms, un tas tiek izmantoti atšķirīgi šeit. Mēs jau iepriekš redzējām char *, tagad es esmu redzēt Zvaigzne sākumā, un tas ir OK. Jo izrādās, mēs var veida secināt tikai No tiem pirmais principi, kas notiek. Tik vienkārši, lai būtu skaidrs, kas ir s? Pagājušajā nedēļā, tas bija virkne. Ka nepietiek vairs. Kas ir S, konkrēti? Mērķauditorija: [dzirdams] DAVID J. Malan: Tas ir rādītājs. Tas ir adrese Pirmā rakstzīme mēs drukāti. OK, kas ir t? Mērķauditorija: [dzirdams] DAVID J. Malan: The adrese pirmā baits t, kas rieciens atmiņas pārdalīti. Tātad izrādās, ka tad, kad mēs atkārtot no 0 līdz pat string length-- pirmkārt, i aizsāk 0, jo Šīs vecās skolas cilpu lieta. Tātad tikai uz vienkāršību, pieņemsim Pieņemsim, ka pirmajā rindā kodu ir tiešām tikai tas, tiesības. Ja i ir nulle, pievienojot nulli lai kaut ko domājams nav gatavojas ietekmēt. Tātad, kas ir šis teiciens? Izrādās, ka zvaigzne operators šajā kontekstā ir dereference operators, kas ir tikai iedomātā veids, kā pateikt iet uz šādu adresi. Tātad, ja S ir adrese pirmā raksturu šajā rieciens atmiņas, * s līdzekļiem iet uz turieni. Un tāpēc, ka mēs esam sagatavoti aina šādā veidā, Jūs varat pieņemt pēc garīgo modeli. Ja tas ir s, un jūs sakāt * s, * s veida, piemēram, izejas un kāpnes, Ja jūs atceraties spēli no bērnības, ir kā sekot šai bultiņas un iet uz adresi. * t ir viens un tas pats. Tātad, sākt šeit, dodieties uz savu gabalu. Es nevaru vienkārši izmantot Šis ekrāns, ka veidā. * t nozīmē iet šeit. Un tad, lai cilpa ir tikai sakot pārvietot šo raksturu šeit, pārvietot šo raksturu šeit, pārvietot šo raksturu šeit. Bet kā es varu darīt, ka incrementation? Man vajag, lai atsauktu to, ko es tikko izdzēsa. Tas ir tas, ko parasti sauc par rādītājs aritmētika, kas nozīmē math ar adresēm. Ja šis cilpa, Es turpinu palielināšanai i, un s ir vesels adrese un t ir vesels adrese, ja es tikai glabāt pievienojot 1, tas tikai nozīmē saglabāt pārvietojas uz priekšu, un uz priekšu, un nosūta atmiņā. Tas ir tāpat kā Oxford Street, tad iela ka CS celtne ir par. CS ēkas ir 33 Oxford Street. Tātad, ja tu būtu to darīt 33 Oxford Street plus 1, kas parādīs jums 34 Oxford Street, tad 35 Oxford Street, tad 36 Oxford Street, neatkarīgi no tās ēkas patiesībā ir - ja tie pastāv. Un tā, tas ir viss, ko mēs darām šeit ar rādītāju aritmētisko. Tātad tas ir super arcane veids izteikt sevi. Bet viss, kas notiek zem motora pārsega ir tikai pēc šīs adreses, tāpat pēc karti, ja jūs, vai pēc bultas, piemēram mēs esam novilkta uz ekrāna. OK, daudz sagremot. Jebkuru jautājumu par sintaksi, koncepcijas, norādes, malloc vai tamlīdzīgi. Jā, nekā šeit pirmo reizi. Mērķauditorija: Tātad, ja kas saka * t vienāds toupper * t, ir tas, ka gatavojas kapitalizēt visi burti vai just-- DAVID J. Malan: Ah, tiešām labs jautājums. Tātad šajā līnijā šeit, 31, tas notiek kapitalizēt pirmais burts vai visi burti. Tātad pieņemsim atbildēt, ka, dodoties atpakaļ uz pirmajiem principiem. Un pirmais principi šeit es domāju dodieties uz pamata definīcijām par to, kas ir iesaistīti. Tātad toupper ir funkcija ka kapitalizē char. Tas ir viss. * t nozīmē iet uz first-- iet uz adresi t. Tātad, attēlā, ja tas ir rieciens Atmiņas mēs piešķirti ar malloc, un tas ir t, * t nozīmē iet šeit. Tikmēr, jūs iet ka vērtība, mazie m līdz toupper, jūs saņemat atpakaļ kapitāls M, kur jūs nodot to? Jūs esat ievietojot to šajā pašā vietā. Un tā, ko šī loģika tiem Pamata definīcijas tas ir tikai gūstot pirmo burtu ja vien jūs atkārtot ar I vai cilpa vai kamēr cilpa, tas nav dodas kaut kas vairāk, nekā jūs lūgt to darīt. Labs jautājums. Yeah? Mērķauditorija: Kāpēc jūs izmantojat dereference metode, nevis masīvs? DAVID J. Malan: Ah, labs jautājums. Kāpēc jūs izmantojat dereference metode, nevis masīva metodi? Bez īpaša iemesla, lai būtu godīgi. Un, patiesībā, jo tas veida, piemēram, tiesības, Es esmu tikai norādot, padarot Programma sarežģītāka, vairāk acis stiklojums vairāk, cilvēki ir pārbaudīt out jo tas izskatās super arcane, bet pat ja tas dara to pašu. Un tā, godīgi sakot, tas ir nevajadzīgi vizuāli komplekss risinājums problēmai. Tas joprojām ir labs dizains, pieci no pieciem projektēšanai, vai tas ir šajā grupā notācija vai rādītājs notācija. But-- jo īpaši, ja mēs vēlāk, veicot in PSET 5 kad mēs īstenotu šo vārdnīcu, ka Es esmu minēts pāris times-- mēs tiešām rūp zema līmeņa atmiņas adreses ka mēs patiešām saprotam kas notiek. Bet, tagad, izrādās, ka šis līnija kodu šeit kvadrātiekavās nav īsti nepastāv. Tie ir tas, ko sauc sintaktisko cukurs, kas ir tikai weirdly foršs veids, kā sakot kompilators pārvērš kvadrātiekavas būt ka matemātiskā izteiksme. Tātad, tas ir cilvēks konvencija lai varētu vienkārši uzrakstīt šie ļoti draudzīgu lietotājam iekavās. Bet ko kompilators, šķindēt, ir patiešām dara jebkurā laikā jūs rakstīt to, kas ir iezīmēts līniju 24, zem motora pārsega tas ir patiešām pārveidojot to šis. Tas ir tikai vēl patīkamāku kā cilvēkam lasīt un rakstīt kodu, piemēram, līniju 24. Bet galu galā tie, mācību riteņi pārāk iztrūkt kad vienu pašu komfortu kļūst spēcīgāka. Labi, lai atgādināt, tad šo bija sava veida lielākā problēma mēs uzbrauca. Un tas, ko izraisīja šis viss damn saruna par norādes, un adreses, un kopēšanas lietas. Tas bija tāpēc, ka mēs paklupa pār šī stulba, stulba problēma, ar kuru Es īsteno logically-- ar Lauren šeit par demo un apelsīnu sulu šajā milk-- perfekti algoritmiski pareiza funkcija par pārnešana divi mainīgie " vērtības, bet nopelt lieta nebija nekādu noturīgas, vai pastāvīga, ietekme uz manu kodu. Un kāpēc tas bija? In Īsumā, kāpēc tas ir īstenošana mijmaiņas loģiski pareizs, taču nav ietekmes uz mainīgajiem, kas tiek nodots tā, piemēram, x un y par galveno? Kāds bija kopsavilkums jautājumā? Yeah? Mērķauditorija: Tā mainīgais veikti kopijas mainīgais caurlaides izmantojot funkciju. DAVID J. Malan: Tieši tā, kad jūs iet mainīgie uz funkciju, vai argumenti par funkciju, viņi garām kopiju, kas nozīmē, ka jums identisks meklē modelis no bitu gan x un y, sauc šeit a un b. Un jūs varat darīt jebko vēlaties ar šīm kopijām, bet viņi nāksies nē Ietekme uz izsaucēja funkcijas. Un, patiesībā, mēs vērsa ka attēlu uz ekrāna, atsaukšanu pēdējo reizi, saskaņā ar kuru, ja jums patiešām domā par to, kas ir notiek Zem hood-- ja Šis ir jūsu datora atmiņā, un uz leju, šeit ir rieciens atmiņa tiek izmantota galvenais, tas ir rieciens atmiņa tiek izmantota swap, un tāpēc pat tad, ja galvenais ir divi mainīgie lielumi, x un y, swap varētu būt identiski meklē vērtības, kas abi ir 1 un 2, bet viņi pilnīgi dažādi gabalos atmiņas. Tāpēc mums ir nepieciešams rast risinājumu šo. Un godīgi sakot, šķiet, ka mēs tagad ir risinājums šai problēmai, labi. Ja mums tagad ir spēja manipulēt lietas veidā adresēm un, veida siles un kāpnes stils, veiciet šīs bultas un iet visur mēs gribam atmiņā, mēs nevarējām atrisināt šo problēmu, iet no galvenā apmainīt nav vērtības, mēs vēlamies, lai swap, bet tikai intuitīvi ko mēs varētu iet apmainīt vietā? [Iestarpinot Voices] DAVID J. Malan: Kāpēc ne mēs tikai caurlaide tas adreses, vai ne? Kāpēc mēs dodam mijmaiņas dārgumu karti, ja jūs, kas noved to uz faktiskās vērtības x un y. Pieņemsim swap, reāli mainīt šie oriģināli biti, nevis tikai iet kopijas bitiem. Un tā, patiesībā, tas ir tas, ko ir būs risinājums. Šī versija šeit ir skaidri slikts un kļūdains. Un tagad, pēc pirmā acu uzmetiena, tas tikai izskatās tāpat mēs pievienojām ķekars zvaigznēm nejauši un šķērsoja mūsu pirksti ka tas varētu apkopot. Bet, tas tagad būtu apkopot. Bet pieņemsim redzēt, ko šīs lietas nozīmē. Un, diemžēl, autori C varēja izvēlēties citu simbolu lai padarītu šo mazliet skaidrāks, bet zvaigzne operators ir atšķirīga nozīme divi dažādos kontekstos. Un mēs esam redzējuši gan, bet pieņemsim atšķirt. Tātad augšā tur, kad es esmu mainījusies a un b no tā krama grāds slikti versija int zvaigznes A un B, Agrāk bija veseli skaitļi. Kas ir a un b tagad labs, zaļā versija? Viņi adreses. Adreses ko, lai būtu skaidrs? Adreses veseli skaitļi. Tātad fakts, ka es esmu sakot int zvaigzne līdzekļus tas ir adrese vesels skaitlis, kas īpaši. Tāpēc tagad paziņojuma līnijas kodu, kaut kas cits ir mainījies too. TMP nemainās, jo tas ir tikai pagaidu skaitlis, nē atmiņas maģija tur. Bet tagad ir zvaigzne. Un, patiesībā, katrs Citas norādes uz A un B, ievērosiet, ka viss, kas ir mainās no sarkanas uz zaļu ir tas, ka es esmu prefixing šie mainīgie ar zvaigznēm. Jo es negribu kopēt a un b. Jo, ja es tikai kopēt a un b un mijmaiņas a un b, ko es patiesībā pārnešana? Tikai adreses, es gribu, lai mijmaiņas kas ir šajās adresēs. Es gribu iet uz turieni. Un tā zvaigzne operators iekšā manas funkcijas, ne iekšpusē parametru sarakstā, nozīmē doties uz šīm adresēm un reāli mainīt šīs vērtības. Tātad, ko dara attēlu Tagad izskatās vietā. Nu, ja tā vietā, es esmu iet kas par A un B nevis 1. un 2-- Man tiešām ir nepieciešams, lai pievienotu viena cita definīcija šeit. Tātad pieņemsim, ka šajā rieciens atmiņas ir vietā 10. Tas ir vietā 11, bet tas ir mazliet vienkāršošanu, Man tagad ir divas izvēles man iet x un y vai man nodot to adreses? Ja es iet to adreses kā šis, es tikko tagad ir nepieciešams, lai īstenotu swap par zaļo kodu tā, ka tad, kad tas redz un kad to redz b, tas nav tikai kopēt A un B un pārvietot pienu un apelsīnu sulu. Piena un apelsīnu sula metafora tagad sabojājas, jo tie ir kausi Šķidro un ne kartēm. Mums nevis jāiet lai risinātu 10. un mēs jādodas, lai risinātu 11, un tad veikt šo pārnešana loģiku. Tātad loģika ir tas pats, bet mums vajag nedaudz citu ceļu piekļūt minētos mainīgos lielumus. Un tā galu galā, ko Programma ir izskatās tas ir. In swap.c burtiski kopēts un ielīmēt zaļo versiju. Bet man ir nepieciešams veikt vienu maiņu. Tas nav pietiekami, tikai, lai mainītu swap. Kādi citi līnija koda man ir nepieciešams, lai mainītu? Yeah? Mērķauditorija: Kur tas aizņem argumentus. DAVID J. Malan: Kur tā uzņemas savu argumentāciju. Tātad, ja es ritiniet līdz galvenais, es nevar vienkārši iet uz x un y, un, es apsolu, pēdējais gabals jaunās sintakses šodien. Man vajag, lai iet ne x un y bet adrese x un y. Un izrādās, simbols ka autori C izvēlējās ir, ja jūs izmantojat aizvieto & zīmes šeit, nevis jaukt ar Bitu līmeņa Ampersand, ja jūs izmantojat aizvieto & zīmes šeit un Ampersand šeit, šis skaitļi par Jums, kāda ir adrese x, varbūt tas ir 10, kāda ir adrese y, varbūt tas ir 11, un iet tiem, vietā. Tik daudz, lai absorbētu visu uzreiz. Bet pieņemsim redzēt tagad ātri Mūsu atlikušās četras minūtes kur lietas var noiet greizi. Un kā malā, patiesībā Paņēmu šo attēlu, TF ņēma šo attēlu gadu vai divus atpakaļ. Tātad šis ir atpakaļ stūris no Eliot ēdamzālē. Norādes ir varbūt visgrūtāk temats, ka mēs segtu CS50. Tātad, ja jums jāuztraucas kārtošanas slīpuma ir kā varbūt tas ir vairāk par hokeja nūju piemēram, tas, saproti mēs esam veida tuvojas maksimumu Noteikumi konceptuālā sarežģītības. Un es audzināt šo foto, jo es zvēru Dievam, kas 1996. rudenī, kad es ņēma CS50 ar manu mācību kolēģiem, Nishat Mehta, viņš sēdēja man noteikti stūris Eliot D. zālē pusdienu laikā, vai vakariņas, vai kaut kas, lai mēģinātu lai palīdzētu man saprast norādes. Un tas ir, ja es biju nedēļas pēc tā tika ieviesta lekcijā kad Es beidzot saprata norādes. Un es esmu cer, ka šis klikšķi daudz ātrāk par jums. Bet saprotu, tas absolūti vidū tad sarežģītākus tēmas mēs esam paskatījās. Bet tas ir viens no spēcīgākajiem. Un, kad jums to, tas ir patiešām visu tikai gatavojas beidzot sanākt kopā. Tik drošs, tas nav vajag visiem izlietnes šodien. Tātad, šeit ir pēdējā programma mēs ejam apskatīt. Un mēs ejam, lai izbeigtu ar ātri trīs minūtes Claymation , ko mūsu draugs, Nick Parlante. Lūk programma, ka top divi līnijas deklarē mainīgo x un y. Abi ir adreses integers, aka norādes. Mēs pēc tam piešķirt pietiekami atmiņa glabāt int un saglabāt adresi Šīs atmiņas x. Tātad, tas ir vēl vienkāršāk kā piemēru iepriekš. Dodiet man četri baiti atmiņas, tas ir lielums int, un nodot šo adresi x. Šī līnija šeit nozīmē iet uz adresi x un nodot nozīmi life skaits 42 tur. Bet tas line mani uztrauc. Star y nozīmē iet uz adresi y, un nodot nelaimīgs skaitlis 13 tur. Kāpēc tas ir bīstami, šajā brīdī Jo story-- kaut arī strauji pastāstīja mūsu Maz minūtēs here-- kāpēc tas ir slikti man teikt, iet uz adresi y? Mērķauditorija: Jums nav [nedzirdama]. DAVID J. Malan: man nav likt neko y. Tātad, kas ir vērtība y, šajā brīdī stāsts? Mums nav ne jausmas. Tas ir daži atkritumu vērtība un nav arī mīkstās zināt. Ja mēs varētu nonākt pie šīs piezīmes. [Video atskaņošana] -Hey, Mīkstās, mosties. Ir pienācis laiks, lai rādītāju jautri. -Kas tas ir? Uzziniet par norādes? Ak, našķis. -Labi, 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. -OK, Arī es redzu divas norādes, taču tie nešķiet, ka norādot uz kaut ko. -That Ir labi. Sākotnēji norādes nenorāda uz neko. Lietas, tie norāda, ir šādi sauc pointees un to izveidošanas ir atsevišķs pasākums. OH, pa labi, pa labi. Es zināju, ka. Par pointees ir atsevišķi. Tātad, kā jūs piešķirt pointee? -OK, Arī šis kods piešķir jauna skaitlis pointee, un Šajā daļā ir x, lai norādītu uz to. -Hey, Kas izskatās labāk. Tātad, lai tas kaut ko darīt. -OK, Es ņemšu dereference rādītāja x, lai saglabāt numuru 42 savā pointee. Par šo triks, man būs nepieciešams mans burvju nūjiņa no dereferencing. -Jūsu Burvju zizlis no dereferencing? Uh, ka tas ir lieliski. -Tas Ir tas kods izskatās. Es ņemšu tikai izveidota skaitu and-- [POP SOUND] -Hey, Izskatās tur tas notiek. Tātad, darot dereference pret x šādi bultiņas, lai piekļūtu savu pointee. Šajā gadījumā, lai saglabātu 42 tur. Hey, mēģiniet izmantot to, lai saglabātu numuru 13 caur otras rādītājs, y. -LABI. Es ņemšu tikai iet pār šeit y, un saņemt numuru 13 iestatīšanu. Un tad paņem zizlis dereferencing un just-- [BUZZER SOUND] OH, hey, kas nestrādāja. Teiksim, uh, mīkstās, man nav domāju dereferencing y ir laba ideja, jo nosakot up pointee ir atsevišķs pasākums. Un es nedomāju, ka mēs kādreiz to darīja. -Hmm, Labs punkts. -Yeah, Mēs piešķirti rādītāju, y, bet mēs nekad iestatīt tā, lai norādītu uz pointee. -Hmm, Ļoti vērīgs. -Hey, Jūs meklējat labi tur, mīkstās. Vai jūs varat salabot, lai y punkti ar to pašu pointee kā x. -Sure, Es izmantot savu burvju nūjiņu no rādītāja cesiju. -Vai Tas būs problēma, tāpat kā agrāk? -Nē, Tas nepieskaras pointees. Tas tikai maina vienu rādītāju norādīt uz to pašu thing-- [Paukšķi] --as citu. -Ak, es redzu. Tagad y norāda uz to pašu vietu kā x. Tātad, jāgaida, tagad y ir fiksēts. Tā ir pointee. Tātad jūs varat izmēģināt zizli no dereferencing vēlreiz nosūtīt 13 pārvērtībām. OH, OK, šeit iet. -Hey, Apskatīt to. Tagad dereferencing darbus y. Un tāpēc, ka norādes tiek daloties ka vienā pointee, viņi abi skatiet 13. -Yeah, Koplietošana, uh, neatkarīgi. Tātad, mēs gatavojamies, lai pārslēgtos vietām tagad? OH, izskatās, mēs esam ārā no laika. -But-- -Just Atcerēties trīs rādītāju noteikumus. Number 1, 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 aizmirst to pointee. Number 2, rādītājs dereferencing sākas rādītāja un seko tās bultiņas pār Lai piekļūtu savu pointee. Kā mēs visi zinām, tas darbojas tikai tad, ja pastāv ir pointee, kāda veida saņem atpakaļ lemt numuru 1. Number 3, rādītājs piešķiršana notiek vienu rādītāju un maina to norādīt uz pats pointee kā cits rādītājs. Tātad, pēc uzdevuma, divas norādes norādīs uz to pašu pointee, dažreiz, ka sauc dalīšana. Un tas viss notiek ar to, tiešām. Bye-bye tagad. [Beigtu atskaņošanu] DAVID J. Malan: Tas ir tas CS50. Pateicoties profesoram Nick Parlante. Redzēsim tevi nākamnedēļ. [ELECTRONIC mūzikas atskaņošanai]