1 00:00:00,000 --> 00:00:03,395 >> [Mūzikas atskaņošanai] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. Malan: Tas ir tāpat kā pirmkursnieks seminārs šodien. 4 00:00:13,280 --> 00:00:14,060 LABI. 5 00:00:14,060 --> 00:00:15,024 Tik ļoti lietains out. 6 00:00:15,024 --> 00:00:17,690 Tas mēdz notikt trešdienās, bet vēl vairāk iespēju 7 00:00:17,690 --> 00:00:18,700 par jautājumiem šodien. 8 00:00:18,700 --> 00:00:22,210 Tāpēc sāksim off faktiski ar plēvi tikai brīdi. 9 00:00:22,210 --> 00:00:24,560 Bet mēs sāksim grandly kā vienmēr. 10 00:00:24,560 --> 00:00:28,000 >> Tas ir CS50, un šis ir beigu 4. nedēļā. 11 00:00:28,000 --> 00:00:30,820 Tātad, ja jūs esat kādreiz noskatījos TV vai filmu, kur 12 00:00:30,820 --> 00:00:34,690 tur ir daži datoru eksperti un policija, vai FBI, vai kādu aģentūra 13 00:00:34,690 --> 00:00:36,930 mēģina noķert kādu pretinieks, labi, jūs esat 14 00:00:36,930 --> 00:00:40,850 dzirdējuši izteicienu "uzlabot", kuru tas tehniķis kaut kā 15 00:00:40,850 --> 00:00:44,750 maģiski zooms bezgalīgi tālu, lai redzētu noziedzniekus 16 00:00:44,750 --> 00:00:48,640 identitāti vai numura zīme numurs jo pat mirdzumu spoguļa 17 00:00:48,640 --> 00:00:50,390 vai atspīdums kāda cilvēka acs. 18 00:00:50,390 --> 00:00:55,196 Tātad tiešām, pieņemsim to apskatīt dažas šādas ainas no Holivudas. 19 00:00:55,196 --> 00:00:55,862 [Video atskaņošana] 20 00:00:55,862 --> 00:00:59,243 -OK, Tagad pieņemsim iegūt labu apskatīt jums. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> -Paturi to. 23 00:01:07,415 --> 00:01:08,267 Run, ka atpakaļ. 24 00:01:08,267 --> 00:01:09,121 >> -Uzgaidi minūti. 25 00:01:09,121 --> 00:01:11,300 Iet labi. 26 00:01:11,300 --> 00:01:12,209 >> -Ir, Iesaldēt to. 27 00:01:12,209 --> 00:01:12,750 -Full Ekrāns. 28 00:01:12,750 --> 00:01:13,558 -OK, Iesaldēt to. 29 00:01:13,558 --> 00:01:14,820 Tiks padarīta stingrāka līdzi, ka, jūs? 30 00:01:14,820 --> 00:01:16,530 -Vector Kas par ka puisis ar pakaļējā riteņa. 31 00:01:16,530 --> 00:01:19,400 -Zoom Jo tepat šajā vietā. 32 00:01:19,400 --> 00:01:22,846 -Ar Labo aprīkojumu, attēls varētu tikt paplašināta un palielinājusi. 33 00:01:22,846 --> 00:01:24,065 -Kas tas ir? 34 00:01:24,065 --> 00:01:25,600 -Tas Ir papildierīci programma. 35 00:01:25,600 --> 00:01:26,860 -Vai Jums ir skaidrs, ka līdz kāds? 36 00:01:26,860 --> 00:01:27,890 -Es Nezinu. 37 00:01:27,890 --> 00:01:29,050 Pieņemsim uzlabot to. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Sadaļa A6. 39 00:01:31,575 --> 00:01:33,642 >> -Es Uzlabota detalizēti, and-- Es domāju, ka tur ir 40 00:01:33,642 --> 00:01:35,433 pietiekami, lai uzlabotu, atlaidiet to uz mana ekrāna. 41 00:01:35,433 --> 00:01:37,080 -Es Uzlabota pārdomas viņas acīs. 42 00:01:37,080 --> 00:01:38,830 >> -Ļaujiet Ir palaist to caur video uzlabošanu. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Jūs varat uzlabot šo? 44 00:01:40,100 --> 00:01:41,875 >> -Pagaidi. 45 00:01:41,875 --> 00:01:44,010 >> -I've Strādājuši pie šīm pārdomām. 46 00:01:44,010 --> 00:01:44,995 >> -Someone Ir pārdomas. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 -Ir Ir pārdomas par cilvēka seju. 49 00:01:47,399 --> 00:01:48,065 -The Pārdomas. 50 00:01:48,065 --> 00:01:48,981 -Ir Ir atspulgs. 51 00:01:48,981 --> 00:01:50,600 -Zoom Kas par spoguli. 52 00:01:50,600 --> 00:01:52,712 -Jūs Varat redzēt pārdomas. 53 00:01:52,712 --> 00:01:54,350 -Var Jums uzlabot attēlu no šejienes? 54 00:01:54,350 --> 00:01:55,370 -Var Jums uzlabot viņu tieši šeit? 55 00:01:55,370 --> 00:01:56,210 -Var Jūs uzlabot to? 56 00:01:56,210 --> 00:01:56,900 Vai jūs varat uzlabot to? 57 00:01:56,900 --> 00:01:57,870 >> -Var Mēs veicinām šo? 58 00:01:57,870 --> 00:01:58,717 >> -Var Jūs uzlabot to? 59 00:01:58,717 --> 00:02:00,050 -Turiet Uz otru, es ņemšu uzlabot. 60 00:02:00,050 --> 00:02:00,924 -Zoom Jo uz durvīm. 61 00:02:00,924 --> 00:02:01,700 -fonts Times 10. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Ievākties. 64 00:02:03,490 --> 00:02:03,990 -vairāk. 65 00:02:03,990 --> 00:02:04,690 -Wait, Apstāties. 66 00:02:04,690 --> 00:02:05,190 -Stop. 67 00:02:05,190 --> 00:02:05,970 -Pause To. 68 00:02:05,970 --> 00:02:09,460 -Rotate Mums 75 grādus ap vertikāli, lūdzu. 69 00:02:09,460 --> 00:02:10,962 -Stop. 70 00:02:10,962 --> 00:02:14,040 Iet atpakaļ uz daļu par durvīm, atkal. 71 00:02:14,040 --> 00:02:15,860 >> -Got Attēla pastiprinātāju, kas var bitmap? 72 00:02:15,860 --> 00:02:18,776 >> -Hey, Varbūt mēs varam izmantot pradeep Sen metode, lai redzētu, uz logiem. 73 00:02:18,776 --> 00:02:20,372 -Tas Programmatūra ir valsts mākslas. 74 00:02:20,372 --> 00:02:21,845 >> -The Eigenvalue ir izslēgts. 75 00:02:21,845 --> 00:02:24,300 >> -Ar Tiesībām kombinācija algorithm-- 76 00:02:24,300 --> 00:02:26,755 >> -Viņš Ir jāņem likvidēšana algoritmi uz nākamo līmeni, 77 00:02:26,755 --> 00:02:28,730 un es varu izmantot tos, lai uzlabot šo fotogrāfiju. 78 00:02:28,730 --> 00:02:31,286 >> -Lock Par un paplašināt z ass. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -Freeze Un uzlabot. 83 00:02:34,960 --> 00:02:37,180 >> [Beigtu atskaņošanu] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. Malan: Labi, tāpēc visi no tiem ir faktiski vārdi. 85 00:02:41,160 --> 00:02:44,450 Viņi vienkārši savērtas apvienojas tā, ka tas nav reāli saprātīgs. 86 00:02:44,450 --> 00:02:48,400 Un, patiesībā, CS50 un kursi patīk mēdz sagraut daudz TV un filmas 87 00:02:48,400 --> 00:02:48,900 tev. 88 00:02:48,900 --> 00:02:52,330 Jo, kad šiem datoru eksperti ir grabošs off termini un pasakot 89 00:02:52,330 --> 00:02:56,860 fancy lietas, piemēram, eigenvectors, un z-ass, 90 00:02:56,860 --> 00:02:59,572 un jebkuru citu skaits faktiski vairāk tehniskie termini, 91 00:02:59,572 --> 00:03:02,030 viņi tiešām tikai rindu vārdi kopā pārāk bieži. 92 00:03:02,030 --> 00:03:05,020 Vai tas ir viens no mūsu cerības ir, ka, kā blakusparādība kursos 93 00:03:05,020 --> 00:03:08,245 Kā šis, būs vairāk cilvēku, pasaule faktiski varētu nosvērt 94 00:03:08,245 --> 00:03:12,040 un tikai kādreiz tik nedaudz ietekmēt kvalitāte un precizitāte no šīm filmām? 95 00:03:12,040 --> 00:03:14,350 >> Patiesībā, pieņemsim to apskatīt realitāti. 96 00:03:14,350 --> 00:03:18,070 Tātad, šeit ir personāls foto Marija, viens no mūsu mācību līdzcilvēkiem. 97 00:03:18,070 --> 00:03:20,050 Un domāju, ka viņa ir aizdomas par kaut ko. 98 00:03:20,050 --> 00:03:23,730 Un tomēr, tur ir zaigot daži pierādījums viņas acīs, 99 00:03:23,730 --> 00:03:25,480 vai atstarojot viņas brilles. 100 00:03:25,480 --> 00:03:30,760 Nu, ja mēs tieši tā, kā filmās ierosināt, kur mēs tuvinātu un "uzlabot", 101 00:03:30,760 --> 00:03:34,080 tas ir, cik daudz informācijas ir Marijas sejā 102 00:03:34,080 --> 00:03:36,795 kad jūs fotografētu ar šo oriģinālo izšķirtspēju. 103 00:03:36,795 --> 00:03:39,120 >> Un, patiesībā, jūs varat redzēt šos punktus. 104 00:03:39,120 --> 00:03:41,900 Un tie ir, ko ir sauc pikseļi, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 kas ir tikai kvadrātveida parasti ka ir punkts, kas, veido attēlu. 106 00:03:45,740 --> 00:03:49,200 Un atpakaļ dienā, un faktiski pat Šodien ar dažiem mūsdienu LED televizoriem 107 00:03:49,200 --> 00:03:51,950 vai LCD televizori, ja tev viens savā istabā vai mājās, 108 00:03:51,950 --> 00:03:55,100 ja jums iet uz augšu super tuvu tai, un it īpaši, ja tas ir nedaudz vecāks TV, 109 00:03:55,100 --> 00:03:58,760 Jūs, iespējams, var pat redzēt šos punktus un tas, ko sacerēt attēlu. 110 00:03:58,760 --> 00:04:00,980 >> Un nav vairāk Informācija par šo. 111 00:04:00,980 --> 00:04:05,400 Mēs varētu "uzlabot", ar to saprotot izlīdzinot lietas atkal un veida 112 00:04:05,400 --> 00:04:09,040 veida, veida, ko izsecinot krāsai jābūt blakus Marijas acīm 113 00:04:09,040 --> 00:04:10,910 tāpēc, ka tas nav reāli tik pixelated. 114 00:04:10,910 --> 00:04:14,510 Bet, ja es turpinu pietuvināt, tur ir slikts puisis viņas acīs. 115 00:04:14,510 --> 00:04:16,600 Tāpat kā tas ir viss Informācija par mums. 116 00:04:16,600 --> 00:04:18,920 Jūs nevarat izveidot Informācija no nekā. 117 00:04:18,920 --> 00:04:20,790 Tur ir tikai ierobežots bitu skaits tur. 118 00:04:20,790 --> 00:04:22,873 >> Tātad Problēma Set 4, kur Jums ir iespēja 119 00:04:22,873 --> 00:04:24,580 spēlēt ar šāda veida pasaulē. 120 00:04:24,580 --> 00:04:27,610 Problemātiskajās Set 4, jūs izpētīt pasaule grafikas un kriminālistikas, 121 00:04:27,610 --> 00:04:30,870 un faktiski rakstīt kodu kas atgūst zaudēto attēlus. 122 00:04:30,870 --> 00:04:33,510 Jūs rakstīt kodu, manipulē esošos attēlus 123 00:04:33,510 --> 00:04:36,120 un galu galā saprast, kas ir notiek zem motora pārsega. 124 00:04:36,120 --> 00:04:38,540 >> Un, izrādās, tas ir faktiski ne viss tik sarežģīta. 125 00:04:38,540 --> 00:04:41,320 Piemēram, ja mēs vēlējāmies pārstāvēt smaidiņam kur 126 00:04:41,320 --> 00:04:44,160 ar šiem melnajiem pikseļiem, vai šie melni punkti, 127 00:04:44,160 --> 00:04:47,230 labi, mēs varētu vienkārši pārstāvam tos kā patiesi bitkarte. 128 00:04:47,230 --> 00:04:50,040 Un, ja jūs kādreiz dzirdējis, ka izteiksme bitmap, varbūt 129 00:04:50,040 --> 00:04:52,330 tagad sāk veikt mazliet vairāk sajūtu šodien. 130 00:04:52,330 --> 00:04:53,580 >> Mēs jau zinām, kas mazliet ir. 131 00:04:53,580 --> 00:04:54,160 Tas ir 0 vai 1. 132 00:04:54,160 --> 00:04:56,201 Un karte ir tikai kaut kas piemēram, papīra 133 00:04:56,201 --> 00:04:59,180 kas dod jums virzienos un ir varbūt režģis x un y koordinātes. 134 00:04:59,180 --> 00:05:00,540 Tātad, šeit ir bitkarte. 135 00:05:00,540 --> 00:05:03,680 Tā ir karte bitu , saskaņā ar kuru 1 ir acīmredzot 136 00:05:03,680 --> 00:05:07,857 gatavojas pārstāvēt baltu pikseli, un 0 gatavojas pārstāvēt melnu pikseli. 137 00:05:07,857 --> 00:05:09,440 Bet mēs, protams, var uzsist to apkārt. 138 00:05:09,440 --> 00:05:11,648 Tas nav īsti jautājums tik Kamēr mēs esam konsekventi. 139 00:05:11,648 --> 00:05:15,570 Un šeit ir, kā, binary-- iekšā no datora atmiņas, vai pat iekšā 140 00:05:15,570 --> 00:05:18,160 faila cietajā drive-- jūs varētu uzglabāt 141 00:05:18,160 --> 00:05:20,240 vienkāršākais smaidiņam attēlus. 142 00:05:20,240 --> 00:05:23,990 Bet ko mēs, protams, trūkst šo attēlu? 143 00:05:23,990 --> 00:05:24,610 Color, vai ne? 144 00:05:24,610 --> 00:05:28,220 Tas ir skaidrs, nākamais solis vai uzlabošana, lai uzlabotu to ar krāsu. 145 00:05:28,220 --> 00:05:32,230 Tik diemžēl tikai ar vienu bitu, 0 vai 1, mēs varētu būt krāsu. 146 00:05:32,230 --> 00:05:36,100 Tas varētu būt sarkana vai zila, vai melns, vai balts, vai zaļa, vai rozā, 147 00:05:36,100 --> 00:05:37,420 vai jebkuri pāri krāsas. 148 00:05:37,420 --> 00:05:40,860 Bet Vienkāršības labad, mēs tikai pieņemt melnā un baltā krāsā. 149 00:05:40,860 --> 00:05:45,930 >> Tātad, ko loģiski mums vajag, ja mēs vēlamies īstenot krāsu attēlu? 150 00:05:45,930 --> 00:05:49,080 Kas mums jādara? 151 00:05:49,080 --> 00:05:51,900 Tāpat, ja ierobežojošais faktors šeit ir tā, ka ar vienu bitu jūs varat tikai 152 00:05:51,900 --> 00:05:55,977 pārstāvēt divas valstis, 0 vai 1, balts vai melns, ko jūs vēlaties darīt? 153 00:05:55,977 --> 00:05:56,810 Mērķauditorija: vairāk datu. 154 00:05:56,810 --> 00:05:58,813 DAVID J. Malan: Vairāk biti, yeah vairāk datu, vairāk bitiem. 155 00:05:58,813 --> 00:06:01,440 Un, protams, tas ir tieši tas, kā krāsu attēli tiek pārstāvētas. 156 00:06:01,440 --> 00:06:05,120 Nevis izmantot vienu bitu A 0 vai 1, lai katram pikselim, katrs punkts, 157 00:06:05,120 --> 00:06:06,170 jūs vienkārši izmantot vairākus. 158 00:06:06,170 --> 00:06:09,660 Varbūt izmantot 8, varbūt, biežāk izmantot 24, un, protams, problemātiskajās Set 159 00:06:09,660 --> 00:06:13,300 4, būs jums spēlēt ar failu formātā, kas izmanto 24 bitus parasti. 160 00:06:13,300 --> 00:06:15,430 >> Bet lielākā daļa no jums, iespējams, iepazinušies ar JPEG. 161 00:06:15,430 --> 00:06:17,460 Ja esat kādreiz veikti fotogrāfiju savā tālrunī, 162 00:06:17,460 --> 00:06:20,360 vai augšupielādē vai redzējis kaut ko Facebook vai Flickr, jebkurš skaits 163 00:06:20,360 --> 00:06:24,882 Foto balstītas mājas lapas, jūs esat iespējams, redzējuši JPEG attēlu pirms. 164 00:06:24,882 --> 00:06:27,840 Un izrādās, tas ir fails formāts mēs spēsim izmantot PSET 4, 165 00:06:27,840 --> 00:06:30,340 ar ko jūs gatavojas ir, lai atgūtu attēlus 166 00:06:30,340 --> 00:06:35,160 ka es esmu nejauši svītrots no A bojāti atmiņas karti kamerā, 167 00:06:35,160 --> 00:06:35,800 ja Jums gribas. 168 00:06:35,800 --> 00:06:38,490 >> Un izrādās, ka pat tad, ja JPEG ir diezgan sophisticated-- 169 00:06:38,490 --> 00:06:40,906 tas ir daudz sarežģītākas nekā melnā un baltiem punktiņiem 170 00:06:40,906 --> 00:06:44,480 mēs redzējām pirms brīža, jo tur ir tiešām fancy algoritmi, kas 171 00:06:44,480 --> 00:06:47,410 tiek izmantoti, lai saspiestu JPEG, tā ka jūs varat būt tiešām jauks, 172 00:06:47,410 --> 00:06:49,832 kvalitātes attēlu, bet, izmantojot salīdzinoši maz biti. 173 00:06:49,832 --> 00:06:51,790 Un mēs būsim atpakaļ saspiešana pirms ilgi. 174 00:06:51,790 --> 00:06:56,280 Izrādās, ka pirmais trīs baiti JPEG image-- 175 00:06:56,280 --> 00:07:02,750 nav svarīgi, ko tu esi fotogrāfiju of-- ir vērtības, 255, 216, 255. 176 00:07:02,750 --> 00:07:05,990 >> Citiem vārdiem sakot, ja jūs vienkārši redzēt, ka modelis bitiem, 177 00:07:05,990 --> 00:07:09,180 pārstāvētas šeit kā trīs baiti, vai 24 bitu kopā, 178 00:07:09,180 --> 00:07:13,810 ar lielu varbūtību var secināt, ka jūs meklējat pie tā šo pirmo trīs 179 00:07:13,810 --> 00:07:15,230 baiti JPEG. 180 00:07:15,230 --> 00:07:18,040 Un tas ir tas, kas ir zināms kā no JPEG parakstu. 181 00:07:18,040 --> 00:07:20,540 Vairāki failu formātus daudz tur mēdz sākt 182 00:07:20,540 --> 00:07:23,735 ar dažiem modeļiem 0s un 1s, tāpēc, ka Windows un Mac OS, un iOS, 183 00:07:23,735 --> 00:07:28,272 un Android zināt, kāda veida failu viņi ir, papildus tā saukto failu 184 00:07:28,272 --> 00:07:29,730 paplašinājums, kas daudz faili ir. 185 00:07:29,730 --> 00:07:32,590 Ja jums ir .jpg, kas ir vēl viens pavediens uz datora. 186 00:07:32,590 --> 00:07:35,310 >> Tātad pieņemsim tagad apskatīt šo nedaudz vairāk tehniski. 187 00:07:35,310 --> 00:07:37,390 Mēs zinām, ka decimālo sistēma ir no 0 līdz 9. 188 00:07:37,390 --> 00:07:38,740 Mēs zinām, bināro ir 0 un 1. 189 00:07:38,740 --> 00:07:41,842 Un, ja jūs domājat, ka atpakaļ uz PSET 0, mums bija jums cīnīties ar, 190 00:07:41,842 --> 00:07:43,800 par mazliet, kaut sauc heksadecimālo, 191 00:07:43,800 --> 00:07:47,320 kur jums ir 16 cipariem, nevis 10 vai vietā 2. 192 00:07:47,320 --> 00:07:50,405 Un tie cipari, pēc vienošanās, ir no 0 līdz 9 un tad 193 00:07:50,405 --> 00:07:55,040 caur f, kur f apzīmē ko decimāls skaitlis, tāpat kā ātri vesels saprāts 194 00:07:55,040 --> 00:07:56,640 pārbaudīt? 195 00:07:56,640 --> 00:07:57,610 Tātad, 15. 196 00:07:57,610 --> 00:08:01,390 Un jāpārstāv 10, tikai ar raksturs pasūtīšanas ka es esmu devis. 197 00:08:01,390 --> 00:08:04,350 Tas ir tikai patvaļīgs konvencija, bet tas ir diezgan standarta. 198 00:08:04,350 --> 00:08:06,870 >> Tātad, ja mēs skatāmies uz šo rakstu trīs bytes-- pieņemsim 199 00:08:06,870 --> 00:08:09,620 sāc skatīties uz to atbilstošā veidā, kā 200 00:08:09,620 --> 00:08:12,450 datorzinātnieku vispār apskatīt un domāt par failiem. 201 00:08:12,450 --> 00:08:15,580 Jūs, protams, varat domāt par failus 0s un 1s, un decimal, 202 00:08:15,580 --> 00:08:19,340 bet patiesībā, mums ir tendence izmantot bināro vai vairāk parasti hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 atpakaļ no PSET 0. 204 00:08:20,760 --> 00:08:25,857 Tātad, ļaujiet man ieteikt, ka 255, 216, un 255 ir tikai šie 0s un 1s modeļus. 205 00:08:25,857 --> 00:08:28,440 Un jūs varat pārbaudīt šo, ja jums gribu darīt to math no 0. nedēļā. 206 00:08:28,440 --> 00:08:30,810 Bet, tagad, vienkārši pieņemu ka šis patiešām ir pareizs. 207 00:08:30,810 --> 00:08:33,850 Esmu tikko pārrakstīt trīs decimālo skaitļus kā trīs bināro vērtību. 208 00:08:33,850 --> 00:08:36,100 Tagad to, ko es esmu gatavojas darīt, ir vienkārši pievienojiet dažas balto laukumu, 209 00:08:36,100 --> 00:08:37,266 tikai lasāmību dēļ. 210 00:08:37,266 --> 00:08:39,940 Un paziņojums, es esmu tikai gatavojas lai pārvietotu lietas intervālu. 211 00:08:39,940 --> 00:08:43,090 Tātad, pirms, pēc, pirms, pēc. 212 00:08:43,090 --> 00:08:46,180 Es esmu darot neko interesantu cits nekā tikai izplatot lietas tik 213 00:08:46,180 --> 00:08:50,380 šis paziņojums katrs kopums astoņiem biti tagad divas četri biti. 214 00:08:50,380 --> 00:08:54,920 Tas ir noderīgi, jo heksadecimālo ir īpaši moderns 215 00:08:54,920 --> 00:09:00,930 jo katra heksadecimālo ciparu 0 cauri f, vai precīzāk no 0 līdz 15, 216 00:09:00,930 --> 00:09:03,430 var pārstāvēt ar tieši četri biti. 217 00:09:03,430 --> 00:09:07,960 Citiem vārdiem sakot, heksadecimālā ja jums vēlas pārstāvēt 0, tas ir tikai 0000, 218 00:09:07,960 --> 00:09:08,780 četri nullēm. 219 00:09:08,780 --> 00:09:13,997 Un, ja jūs vēlaties, lai pārstāvētu 15, tas ir 1111, kas ir četri biti. 220 00:09:13,997 --> 00:09:16,080 Un, ja jūs darīt to math, ja tas ir tiem, vieta, 221 00:09:16,080 --> 00:09:18,210 šī ir 16s vieta, kas notiek, lai dotu you-- 222 00:09:18,210 --> 00:09:19,960 drīzāk, ka notiek kuri paredzēti, sorry, bināro, 223 00:09:19,960 --> 00:09:23,660 kas notiek, lai dotu jums 15, tiem vieta, twos Place, četrrāpus un eights vieta. 224 00:09:23,660 --> 00:09:26,821 Tātad, ļaujiet man ieteikt ka noteikti četri biti pa kreisi 225 00:09:26,821 --> 00:09:28,070 ir tas, ko mēs ejam, lai izsauktu f. 226 00:09:28,070 --> 00:09:30,110 Tas ir lielākais skaits, ko var pārstāvēt ar četrām bitiem. 227 00:09:30,110 --> 00:09:33,300 Un mēs jau zinām no heksadecimālo, f ir lielākais cipars heksadecimālo. 228 00:09:33,300 --> 00:09:36,020 Mēs esam ieguvuši vēl vienu f tur, vairāk nekā tur divi. 229 00:09:36,020 --> 00:09:38,980 Un tagad, lietojiet tikai uz ticību ka es esmu darījis math tiesības 230 00:09:38,980 --> 00:09:41,890 un, ka kreisajā pusē no šiem bitiem, 1101, 231 00:09:41,890 --> 00:09:43,980 ir tas pats, kas D heksadecimālo. 232 00:09:43,980 --> 00:09:46,490 Un labā roka, 1000, ir tikai 8. 233 00:09:46,490 --> 00:09:48,140 >> Un, ka viens ir viegli redzēt, vai ne? 234 00:09:48,140 --> 00:09:51,670 8 represents-- ir taisnība zem šī eights vietā. 235 00:09:51,670 --> 00:09:56,040 Tātad mums ir viens no astotnieku kolonnā un nekas četrrāpus, pa pāriem vai ones. 236 00:09:56,040 --> 00:09:59,830 Tāpēc tagad vairāk tradicionāli, cilvēki mēdz rakstīt heksadecimālo cipariem, piemēram, tas, 237 00:09:59,830 --> 00:10:03,000 jūs vienkārši squish tos kopā, un tad jūs prefiksu tos ar 0x. 238 00:10:03,000 --> 00:10:05,920 Tas nenozīmē neko citu kā vizuālā pavediens uz human-- 239 00:10:05,920 --> 00:10:10,350 šeit nāk heksadecimālo value-- jo tas varētu citādi būt acīmredzama. 240 00:10:10,350 --> 00:10:13,629 >> Kas ir, galu galā, ka modelis nullēm un tiem, 241 00:10:13,629 --> 00:10:16,170 vai modelis heksadecimālo cipariem līdzvērtīgi, ka jūs esat 242 00:10:16,170 --> 00:10:18,990 gatavojas sākt meklē problemātiskajās Set 4 ir this-- 243 00:10:18,990 --> 00:10:22,120 Un problēma Set 4 spec būs staigāt jūs caur to vairāk detail-- 244 00:10:22,120 --> 00:10:25,344 bet saprast kā sava veida Arcane kā tas varētu izskatīties pēc pirmā acu uzmetiena, 245 00:10:25,344 --> 00:10:27,010 jūs gatavojas sākt redzēt šo daudz. 246 00:10:27,010 --> 00:10:30,320 Un patiesībā, pat GDB, tad atkļūdotājs mēs iepazīstinājām pirmdien 247 00:10:30,320 --> 00:10:35,440 un Dan ievieš in PSET 3, gatavojas to bieži parādīs heksadecimālo vērtības 248 00:10:35,440 --> 00:10:39,910 tikai tāpēc, ka tie mēdz būt vairāk parasto nekā decimālo vai bināro 249 00:10:39,910 --> 00:10:41,157 pasaulē datoriem. 250 00:10:41,157 --> 00:10:42,490 Tagad pieņemsim nodot to vērā kontekstu. 251 00:10:42,490 --> 00:10:48,040 Daudzi no jums, iespējams, atceras šo attēlu šeit, kas nāca no tā, ko? 252 00:10:48,040 --> 00:10:51,240 Vista, tāpēc pat agrāk nekā ka, Windows XP izdarīja šo debija. 253 00:10:51,240 --> 00:10:52,620 Tātad šī ir skaista ainava. 254 00:10:52,620 --> 00:10:55,940 Un patiesībā, ja jūs kule ap online-- Es domāju, ka tas ir Wikipedia raksts, 255 00:10:55,940 --> 00:11:00,110 kur kāds ļoti pārsteidzoši izgāja uzskatīja, ka šis vieta pasaulē, kas izveidota 256 00:11:00,110 --> 00:11:02,240 viņa vai viņas kamera Tieši īstais place-- 257 00:11:02,240 --> 00:11:06,510 un tas šodien izskatās like-- bet tas ir tieši tas pats iestatījums. 258 00:11:06,510 --> 00:11:10,060 Šis attēls, lai gan, ir failā formāts sauc bitmap, b-m-p. 259 00:11:10,060 --> 00:11:12,910 Un mēs spēsim veikt super ātrs skatiens uz to, ko tas nozīmē. 260 00:11:12,910 --> 00:11:17,770 >> Bet bitmap ir tikai cits veids, pārstāv attēli joprojām izmantojot pikseļi 261 00:11:17,770 --> 00:11:19,580 in 0s un 1s, galu galā. 262 00:11:19,580 --> 00:11:23,282 Bet tajā ātru skatienu, tas ir daudz interesantu paraksts 263 00:11:23,282 --> 00:11:24,490 sākumā failu. 264 00:11:24,490 --> 00:11:26,670 Tas nav tikai trīs baiti, bet tur ir 265 00:11:26,670 --> 00:11:30,770 viss ķekars modeļus baitu kas ir iepriekš jēgu. 266 00:11:30,770 --> 00:11:34,490 Piemēram, kaut kur Pirmais pāris baiti bitmap attēlu 267 00:11:34,490 --> 00:11:37,440 būs lielumu no attēls, platums attēla, 268 00:11:37,440 --> 00:11:40,390 augstums attēla, lai Noderīgas metadatus, ja Jums gribas. 269 00:11:40,390 --> 00:11:43,940 Noderīga informācija, ka Photoshop vai jebkuri grafikas programmu jūs izmantojat 270 00:11:43,940 --> 00:11:45,180 tiešām var rūp. 271 00:11:45,180 --> 00:11:47,170 >> Tātad vairāk par šo Problēma Set 4, bet tas 272 00:11:47,170 --> 00:11:49,220 ir tikai teikt, ka beigās, dienā 273 00:11:49,220 --> 00:11:52,390 visi failu formāti esat lietojis par years-- Microsoft Word failus, 274 00:11:52,390 --> 00:11:55,820 Cipari failus, Excel failus, jebkuru failu formātus skaits 275 00:11:55,820 --> 00:11:57,770 kas varētu būt daži zināms faila paplašinājums 276 00:11:57,770 --> 00:12:00,130 ir tikai 0s un 1s atrodas zem motora pārsega. 277 00:12:00,130 --> 00:12:02,970 Un cilvēki ir nolēmuši kādi konvencijas ir, 278 00:12:02,970 --> 00:12:08,340 kādi modeļi 0s un 1s pārstāvēt Word failu versus Excel failā, 279 00:12:08,340 --> 00:12:10,322 pret jebkuru citu failu formātiem numuru. 280 00:12:10,322 --> 00:12:12,780 Tātad PSET 4, jums ir iespēja spēlēt ar to. 281 00:12:12,780 --> 00:12:14,405 >> Bet ko tas nozīmē, lai būtu struct. 282 00:12:14,405 --> 00:12:18,012 Tas ir tiešām jauks segue tagad uz C, kas ir tikai pāris 283 00:12:18,012 --> 00:12:20,220 papildu funkcijas, kas mēs neesam paskatījās vēl. 284 00:12:20,220 --> 00:12:24,230 Tas ir diezgan maza valoda un viena no jauku iezīmes par C ir struct. 285 00:12:24,230 --> 00:12:27,300 Piemēram, ja jums gribēju represent-- pieņemsim 286 00:12:27,300 --> 00:12:33,690 teikt jūs vēlētos, lai būtu mainīgais, kas ir students kādā programmā. 287 00:12:33,690 --> 00:12:37,330 Varbūt jūs rakstāt kursu reģistrācija programma, vai kodols iepirkšanās 288 00:12:37,330 --> 00:12:38,870 instruments, vai kaut kas tamlīdzīgs. 289 00:12:38,870 --> 00:12:42,922 Kas ir gabali datu saistītie students, kas nāk prātā? 290 00:12:42,922 --> 00:12:44,880 Tāpat students ir pārstāvēta ar kādas vērtības? 291 00:12:44,880 --> 00:12:45,732 Yeah? 292 00:12:45,732 --> 00:12:46,940 Jums ir vārds kā students. 293 00:12:46,940 --> 00:12:48,900 Kas vēl nav tipisks students ir? 294 00:12:48,900 --> 00:12:49,320 >> Mērķauditorija: [dzirdams] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. Malan: Tātad, sorry. 296 00:12:50,200 --> 00:12:50,660 >> Mērķauditorija: Age. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. Malan: An vecuma vai dzimšanas līdzvērtīgi, yep. 298 00:12:52,980 --> 00:12:53,557 Kas vēl? 299 00:12:53,557 --> 00:12:54,390 Mērķauditorija: ID numurs? 300 00:12:54,390 --> 00:12:57,460 DAVID J. Malan: Tik ID numurs, varbūt tālruņa numuru, varbūt kopmītnes, vai māja, 301 00:12:57,460 --> 00:12:58,670 vai koledžas, vai kaut kas tamlīdzīgs. 302 00:12:58,670 --> 00:13:01,820 Jebkura gabalu datu skaitu, kas Jums varētu būt jūsu kontaktu sarakstā 303 00:13:01,820 --> 00:13:03,890 ir tas, ko varētu definēt students. 304 00:13:03,890 --> 00:13:08,490 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. 305 00:13:08,490 --> 00:13:15,670 Mums varētu būt programmu, lai ir teiksim, int galvenais (spēkā neesošs). 306 00:13:15,670 --> 00:13:18,920 Un, ja es vēlos pārstāvēt students es varētu būt, piemēram, 307 00:13:18,920 --> 00:13:24,330 virkne aicināja nosaukums šai students, virkne sauc kopmītnes šai students, 308 00:13:24,330 --> 00:13:26,900 varbūt int sauc ID šim studentam. 309 00:13:26,900 --> 00:13:30,840 Un tāpēc es esmu, izmantojot virkni, es jāiet atpakaļ un safasēti CS50.h. 310 00:13:30,840 --> 00:13:33,300 Varbūt es esmu gatavojas nepieciešama stdio.h. 311 00:13:33,300 --> 00:13:38,190 Tāpēc ļaujiet man preemptively darīt tiem, un es esmu gatavojas aicināt šo student.c tagad 312 00:13:38,190 --> 00:13:40,080 un saglabājiet to. 313 00:13:40,080 --> 00:13:44,206 >> Un tagad es varu darīt kaut ko ar šiem mainīgajiem. 314 00:13:44,206 --> 00:13:46,830 Un mēs esam tikai gatavojas rakstīt ka kā komentāru pseido kodu, 315 00:13:46,830 --> 00:13:48,829 jo tas nav interesanti ko mēs darām tagad. 316 00:13:48,829 --> 00:13:51,242 Labi, tāpēc šī ir programma, kas kaut saglabā students. 317 00:13:51,242 --> 00:13:53,450 Ko es gribu darīt, ja es vēlaties saglabāt divus studentus? 318 00:13:53,450 --> 00:13:55,991 Tātad mans pirmais instinkts būs lai būtu labi, pagaidiet minūti, 319 00:13:55,991 --> 00:14:01,920 ja man ir cits students kāpēc ne es vienkārši darīt string nosaukums 2, stīgu kopmītnes 2, 320 00:14:01,920 --> 00:14:04,190 int ID2. 321 00:14:04,190 --> 00:14:06,540 Un mēs esam darījuši Gone pa šo ceļu līdz 322 00:14:06,540 --> 00:14:10,890 un kāda bija mūsu risinājums, kas šķiet būt sava veida hackish Copy Paste 323 00:14:10,890 --> 00:14:11,555 darbs šeit? 324 00:14:11,555 --> 00:14:12,346 Mērķauditorija: Masīvs. 325 00:14:12,346 --> 00:14:13,830 DAVID J. Malan: Jā, mēs varētu izmantot masīvu. 326 00:14:13,830 --> 00:14:15,620 Tiesības tas ļoti ātri kļūst smagnēja. 327 00:14:15,620 --> 00:14:18,453 Jums ir sava veida patvaļīgi sākt nosaucot visus šos mainīgos lielumus. 328 00:14:18,453 --> 00:14:22,190 Un tu, cilvēka, ir, lai saglabātu izsekot, ka OK NAME2, atbilst 329 00:14:22,190 --> 00:14:25,060 ar dorm2 atbilst ID2. 330 00:14:25,060 --> 00:14:26,200 Tā tikai kļūst haoss. 331 00:14:26,200 --> 00:14:29,350 Tātad, tas ir daudz vieglāk, Atsaukt no pirms pāris nedēļām, 332 00:14:29,350 --> 00:14:34,300 tikai ņemot sauc par stīgu nosaukumiem un varbūt dot mums trīs no tiem. 333 00:14:34,300 --> 00:14:36,940 Un tad varbūt mēs esam stīgu dorms un ir 334 00:14:36,940 --> 00:14:41,900 Trīs no tiem, vai ar konstanti, int ID un ir trīs no tiem. 335 00:14:41,900 --> 00:14:45,250 Bet pat tagad tas jūtas nedaudz apliets, labi. 336 00:14:45,250 --> 00:14:49,440 Mēs runājam par studentiem un vēl Es esmu patiešām mājokli zemā līmenī 337 00:14:49,440 --> 00:14:50,470 īstenošanas detaļas. 338 00:14:50,470 --> 00:14:52,790 Students ir vārds un kopmītnes un ID. 339 00:14:52,790 --> 00:14:59,814 >> Kāpēc es nevaru vienkārši deklarēt mainīgo sauc students un aicinu to s. 340 00:14:59,814 --> 00:15:02,230 Un, ja es gribu vēl students, kāpēc ne es tikai aicinu to t. 341 00:15:02,230 --> 00:15:05,260 Vai, ja es gribu visu ķekars studentu, kāpēc ne es tikai 342 00:15:05,260 --> 00:15:09,740 ka man ir vesela klasi studenti, un tas ir trīs no tiem. 343 00:15:09,740 --> 00:15:12,470 Citiem vārdiem sakot, kāpēc es nevaru nākt klajā ar savu datu tipu, ko sauc 344 00:15:12,470 --> 00:15:15,641 Studenti, kuru iekšpusē ir nosaukums, ir ID, ir kopmītnes, 345 00:15:15,641 --> 00:15:16,890 ir kāda no citām jomām skaits. 346 00:15:16,890 --> 00:15:19,030 Un izrādās, jums var darīt tieši to. 347 00:15:19,030 --> 00:15:21,850 >> Tātad C ir šī iezīme sauc struct. 348 00:15:21,850 --> 00:15:24,700 Tas ir valoda iezīme, kas ļauj mums darīt tieši to. 349 00:15:24,700 --> 00:15:28,370 Es iešu uz priekšu un atvērt structs.h 350 00:15:28,370 --> 00:15:32,299 kur mēs ejam, lai redzētu pēc definīcijas students. 351 00:15:32,299 --> 00:15:35,215 Izrādās - un tas viens ir pat vienkāršāka nekā vienu iesaistot ID 352 00:15:35,215 --> 00:15:36,080 pirms brīža. 353 00:15:36,080 --> 00:15:39,120 Ja jūs vēlaties, lai nākt klajā ar Jūsu mājās datu tips, 354 00:15:39,120 --> 00:15:42,750 un turklāt, lai Int, un char un peldēt un visi šie citi, kas pastāv, 355 00:15:42,750 --> 00:15:45,810 jūs varat darīt, burtiski rakstot typedef struktūrai, 356 00:15:45,810 --> 00:15:47,880 tad daži cirtaini bikšturi, iekšpusē, kas jums 357 00:15:47,880 --> 00:15:51,460 uzskaitīt mainīgos vēlaties saistīt ar šo jauno pasūtījuma datiem 358 00:15:51,460 --> 00:15:55,670 ierakstiet, piemēram, vārdu un kopmītnes, un tad pēc cirtaini lencēm 359 00:15:55,670 --> 00:15:57,860 jums dot nosaukumu uz jauno datu tipu. 360 00:15:57,860 --> 00:15:59,220 Tā, piemēram, students. 361 00:15:59,220 --> 00:16:03,247 >> Un, kas ir jauka par šo tagad ir tas, ka ja mēs skatāmies uz attiecīgo kodu, 362 00:16:03,247 --> 00:16:05,080 konvencija, pirmais no visiem, ir likt šo 363 00:16:05,080 --> 00:16:08,230 failā sauc par kaut ko dot h, header failu, kas mums nav 364 00:16:08,230 --> 00:16:09,780 sāka izmantot sevi pārāk daudz. 365 00:16:09,780 --> 00:16:12,120 Bet mēs esam gatavojas sākt izmantojot diezgan daudz tagad. 366 00:16:12,120 --> 00:16:18,650 Un ko mēs varam darīt ar šo, galu galā, šajās dažas rindiņas kodu 367 00:16:18,650 --> 00:16:22,130 ir atzīt, ka tieši datu tips, students. 368 00:16:22,130 --> 00:16:23,230 Un tagad pieņemsim to izmantot. 369 00:16:23,230 --> 00:16:27,274 >> Es esmu gatavojas tagad iedziļināties failu sauc structs1.c. 370 00:16:27,274 --> 00:16:29,440 Un pieņemsim apskatīt Dažas īpašības šeit. 371 00:16:29,440 --> 00:16:32,250 Tātad sīkumi šeit ir galvenokārt pazīstami, un mēs 372 00:16:32,250 --> 00:16:35,040 atgriezties uz to, kas nav pazīstami tikai brīdi. 373 00:16:35,040 --> 00:16:39,880 Tas, protams, ir arī mana header fails, kas ir jauns, kā arī, 374 00:16:39,880 --> 00:16:42,580 izņemot PSET 3, kur, Atsaukt, mums ir helpers.h. 375 00:16:42,580 --> 00:16:45,150 Tātad jūs varētu atgādināt #include helpers.h. 376 00:16:45,150 --> 00:16:49,381 >> Kāpēc gan es esmu, izmantojot citātus nevis leņķveida iekavās? 377 00:16:49,381 --> 00:16:50,630 Kad man izvēlēties starp viņiem? 378 00:16:50,630 --> 00:16:52,310 Gandrīz vienmēr man šķiet izmantot leņķveida iekavās. 379 00:16:52,310 --> 00:16:55,040 Un tad, pēkšņi uz line seši es esmu, izmantojot dubultās pēdiņas. 380 00:16:55,040 --> 00:16:55,860 Kāpēc varētu būt? 381 00:16:55,860 --> 00:16:56,700 Yeah? 382 00:16:56,700 --> 00:16:57,725 >> Mērķauditorija: [dzirdams] 383 00:16:57,725 --> 00:16:59,350 DAVID J. Malan: Tas ir reāls, ko? 384 00:16:59,350 --> 00:17:00,559 Mērķauditorija: Tas ir jūsu IDE. 385 00:17:00,559 --> 00:17:02,475 DAVID J. Malan: Jā, kas ir manā faktiskā IDE. 386 00:17:02,475 --> 00:17:05,690 Un pieņemsim nav aiztures uz IDE, jo tas ir tikai instruments, kas es esmu, izmantojot. 387 00:17:05,690 --> 00:17:08,119 Tas ir manā pašreizējā katalogs, konkrēti. 388 00:17:08,119 --> 00:17:11,647 Tātad structs.h ir mana fails nav uzstādītas IDE, 389 00:17:11,647 --> 00:17:14,480 jo operētājsistēma pati, drīzāk tas ir manā pašreizējā direktorijā. 390 00:17:14,480 --> 00:17:16,910 Tātad konvencija ir, ja jūs vēlaties iekļaut savu header failu, 391 00:17:16,910 --> 00:17:18,200 jūs vienkārši izmantot dubultās pēdiņas. 392 00:17:18,200 --> 00:17:23,290 >> Ko mēs saucam šo lietu līnija 8, vispārīgi runājot? 393 00:17:23,290 --> 00:17:25,200 Tas ir tas, ko? 394 00:17:25,200 --> 00:17:28,220 # define kaut ko. 395 00:17:28,220 --> 00:17:31,040 Tas ir konstantes, vai ne? 396 00:17:31,040 --> 00:17:33,140 Ja jūs vēlaties, lai būtu vērtība jūsu programmā 397 00:17:33,140 --> 00:17:35,110 ka jūs izmantojat vesela ķekars reizes, tas ir 398 00:17:35,110 --> 00:17:39,330 labs konvencija faktors to ārā, atzīt to, ar hash simbolu 399 00:17:39,330 --> 00:17:43,340 definēt, tad, pēc vienošanās, visās lielajiem burtiem word-- lai gan tas nav 400 00:17:43,340 --> 00:17:45,320 noteikti nepieciešams, bet tas ir cilvēka konvencija 401 00:17:45,320 --> 00:17:47,210 kapitalizēt konstantes lai tie izlēkt 402 00:17:47,210 --> 00:17:50,380 pie jums visually-- telpu un tad vērtība jūs vēlaties būt 403 00:17:50,380 --> 00:17:52,250 līdzvērtīgs ka nemainīga nosaukumu. 404 00:17:52,250 --> 00:17:56,110 Nē semikols, bet jūs vienkārši sekot šo modeli tur. 405 00:17:56,110 --> 00:17:57,770 >> Tātad, ko es daru šajā faktisko kodu. 406 00:17:57,770 --> 00:18:00,660 Tātad, pieņemsim to apskatīt galvenā programma šeit. 407 00:18:00,660 --> 00:18:04,080 Atbilstoši 12. jo I ir iekļauti structs.h, 408 00:18:04,080 --> 00:18:06,492 Man tagad ir maģiski pie manas apglabāšana jaunu datu tipu. 409 00:18:06,492 --> 00:18:09,200 Es ne tikai piekļūt int, un char, un peldēt, un stīgu, 410 00:18:09,200 --> 00:18:10,060 un zilā un citi. 411 00:18:10,060 --> 00:18:12,470 Man tagad ir pieejami students datu tips. 412 00:18:12,470 --> 00:18:17,740 Tātad rindā 12, es esmu apvienojot divus ideas-- viena pasūtījuma datu tipu un divi, 413 00:18:17,740 --> 00:18:18,940 izmantojot masīvu. 414 00:18:18,940 --> 00:18:21,700 Un tāpēc šajā programmā, ja Es gribu, lai tiešām atbalstītu 415 00:18:21,700 --> 00:18:24,320 trīs dažādi studenti manā programmā, es 416 00:18:24,320 --> 00:18:30,480 var vienkārši pateikt man mainīgais saucamie studenti, katrs no kuriem 417 00:18:30,480 --> 00:18:32,970 ir veids studentiem, kas ir mana pasūtījuma datu tips. 418 00:18:32,970 --> 00:18:35,890 Un, konkrēti, dod man trīs no tiem manā masīvs. 419 00:18:35,890 --> 00:18:37,750 >> Tāpēc tagad, ko mums darīt šajā programmā? 420 00:18:37,750 --> 00:18:40,670 Šeit ir tikai par cilpa atkārtojot no 0 līdz 3, jo tas ir 421 00:18:40,670 --> 00:18:42,110 kāda vērtība studentu. 422 00:18:42,110 --> 00:18:44,420 Es esmu tikai pamudinot lietotājam iedodiet man studenta vārdu. 423 00:18:44,420 --> 00:18:48,090 Un tad līnija 17, mēs ir galvenokārt pazīstams līniju. 424 00:18:48,090 --> 00:18:50,370 Mums ir mūsu vecais draugs GetString labajā pusē. 425 00:18:50,370 --> 00:18:52,345 Un ko gabals sintakse ir acīmredzami jauns, 426 00:18:52,345 --> 00:18:55,130 Ja jūs nekad neesmu programmēt C pirms, un nekad nav izmantojuši structs? 427 00:18:55,130 --> 00:18:55,510 Yeah? 428 00:18:55,510 --> 00:18:56,417 >> Mērķauditorija: Nosaukumu. 429 00:18:56,417 --> 00:18:57,500 DAVID J. Malan: The Nosaukumu. 430 00:18:57,500 --> 00:19:01,220 Bet tas nav pārāk daudz lēciens, jo tagad skolēni stiprinājuma i 431 00:19:01,220 --> 00:19:02,590 dod jums i-th students. 432 00:19:02,590 --> 00:19:04,730 Un, ja jūs vēlaties, lai ienirt iekšā šīs struktūras, 433 00:19:04,730 --> 00:19:09,490 jūs vienkārši izmantot vienu periodu un tad nosaukums mainīgā iekšpusē, 434 00:19:09,490 --> 00:19:11,900 vai īpašums iekšā, ka jūs vēlaties, lai iegūtu piekļuvi. 435 00:19:11,900 --> 00:19:14,816 Tāpat tad, ja es tad rosināt lietotāju, dod man studenta kopmītnes, 436 00:19:14,816 --> 00:19:18,390 jūs varat uzglabāt līdzīgi, ka string in kopmītnes mainīgā iekšpusē 437 00:19:18,390 --> 00:19:19,940 Minētās studentu struktūru. 438 00:19:19,940 --> 00:19:21,410 >> Un tagad lietas iegūt nedaudz iedomātā. 439 00:19:21,410 --> 00:19:24,420 Un tas ir gatavojas meklēt at varbūt daudz pavisam drīz. 440 00:19:24,420 --> 00:19:27,970 Bet jūs redzēsiet tik tālu vairāk PSET 4, tāpēc pieņemsim tikai skatienu pie tā tagad. 441 00:19:27,970 --> 00:19:33,364 Izrādās, ka saskaņā ar 23 38, ko jūs domājat, ka es esmu varbūt dara? 442 00:19:33,364 --> 00:19:35,530 Esmu izņēmusi komentārus šodien, bet versija 443 00:19:35,530 --> 00:19:38,660 koda tiešsaistē atsauce ir visus komentārus. 444 00:19:38,660 --> 00:19:40,171 Kas man šķiet, ir darīt? 445 00:19:40,171 --> 00:19:42,530 >> Mērķauditorija: saglabājot failu ar visiem informācija, ka lietotājs ir ievadījis. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. Malan: Jā, tieši tā, tas ir jauns veids 447 00:19:44,530 --> 00:19:46,370 ka mēs redzam divus, Vēl C iezīme, 448 00:19:46,370 --> 00:19:48,700 ar ko es varu izveidot pats savus failus. 449 00:19:48,700 --> 00:19:51,580 Līdz šim gandrīz katrs programma jūs esat rakstiski ir bezvalstnieks. 450 00:19:51,580 --> 00:19:53,334 Tiklīdz tas ir izdarīts darbojas, tas arī viss. 451 00:19:53,334 --> 00:19:55,000 Nav atmiņā vai atmiņas par to. 452 00:19:55,000 --> 00:19:56,110 Nav fails saglabāts. 453 00:19:56,110 --> 00:19:58,120 Bet, ja jūs vēlaties, lai ietaupīt ievadi, kas ir 454 00:19:58,120 --> 00:20:02,100 noticis, tāpat spēli vai programmu kā šis, izrādās, mēs varam darīt. 455 00:20:02,100 --> 00:20:04,360 Un jūs redzēsiet šo vairāk in PSET 4. un sadaļā. 456 00:20:04,360 --> 00:20:08,661 Bet šī līnija 23 būtībā rada failu ar nosaukumu students.csv. 457 00:20:08,661 --> 00:20:10,160 Un jūs varētu būt redzējis šo pirms. 458 00:20:10,160 --> 00:20:14,250 Pat ja jūs nekad neesmu studējis CS agrāk, CSV ir komatatdalītas mainīgie. 459 00:20:14,250 --> 00:20:19,000 Tas ir tāpat kā ļoti slikts cilvēks s versija Excel failā, 460 00:20:19,000 --> 00:20:22,270 kas nozīmē, ka tas var atvērt Excel un Apple Numbers, 461 00:20:22,270 --> 00:20:23,830 un tas ir rindas un kolonnas. 462 00:20:23,830 --> 00:20:26,485 Bet tas nav patentēts formāts, piemēram, Microsoft vai Apple. 463 00:20:26,485 --> 00:20:29,840 Tas ir tikai komatus atdalot vērtības, kuras mēs redzēsim pēc brīža. 464 00:20:29,840 --> 00:20:31,010 >> Un tikai veikt minējums. 465 00:20:31,010 --> 00:20:33,480 Atbilstoši 23, pašā beigas, mans otrais arguments 466 00:20:33,480 --> 00:20:37,700 ar šo jauno funkciju sauc f atvērts failu atvērt ir w. 467 00:20:37,700 --> 00:20:39,430 Kas varētu w apzīmē? 468 00:20:39,430 --> 00:20:40,022 Yeah? 469 00:20:40,022 --> 00:20:41,260 >> Mērķauditorija: Tas ļauj jums rakstīt uz failu? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. Malan: Tas ļauj jūs rakstīt uz failu. 471 00:20:42,630 --> 00:20:44,810 Tātad tur ir pāris variantu ka mēs varam plug šeit. 472 00:20:44,810 --> 00:20:47,184 Bet, ja jūs vienkārši vēlaties, lai lasītu fails, kas ir apskatīt to 473 00:20:47,184 --> 00:20:50,010 un lasīt to atmiņā, jums tikai izmantot quote likt pēdiņas beigās "R". 474 00:20:50,010 --> 00:20:53,110 Ja jūs vēlaties rakstīt uz failu, jūs izmantojat citātu likt pēdiņas beigās "w". 475 00:20:53,110 --> 00:20:55,190 Tur ir arī pievienot un pāris citas lietas 476 00:20:55,190 --> 00:20:57,356 ja jūs vēlaties mainīt esošos failus. 477 00:20:57,356 --> 00:21:00,480 Tagad mēs spēsim saglabāt redzēt šo lieta, tad mēs būsim atpakaļ uz līnijas 24. 478 00:21:00,480 --> 00:21:02,640 NULL, izrādās, ir īpaša vērtība, kas 479 00:21:02,640 --> 00:21:06,070 var atgriezt ar noteiktām funkcijām ja kaut kas ir nogājis wrong-- 480 00:21:06,070 --> 00:21:08,490 ja fails neeksistē, Ja esat izsīkšanai atmiņas, 481 00:21:08,490 --> 00:21:09,620 vai ķekars citu kļūdām. 482 00:21:09,620 --> 00:21:13,470 Bet tagad, pieņemsim tikai pieņemt, ka šis ir tikai parasto kļūdu pārbaudi. 483 00:21:13,470 --> 00:21:17,090 Šeit rindā 26, es esmu atkārtojot no 0 līdz 3 pār visiem maniem skolēniem. 484 00:21:17,090 --> 00:21:20,470 Un tas ir sava veida veida Jaunas funkcijas, fprintf, 485 00:21:20,470 --> 00:21:21,460 bet tikai veikt minējums. 486 00:21:21,460 --> 00:21:24,370 Ja printf ir tikai print formatēts string, 487 00:21:24,370 --> 00:21:26,507 Kāda fprintf droši vien nozīmē? 488 00:21:26,507 --> 00:21:27,590 Mērķauditorija: Drukāt uz failu. 489 00:21:27,590 --> 00:21:29,290 DAVID J. Malan: Izdrukājiet formatēti string uz failu. 490 00:21:29,290 --> 00:21:31,180 Tas ir tas, ko papildus f līdzeklis ir fails. 491 00:21:31,180 --> 00:21:36,420 Un jaunā pirmais arguments ir jābūt mainīgais, kas pārstāv savu failu. 492 00:21:36,420 --> 00:21:38,866 Tad mēs vienkārši ir formātā string tāpat kā printf. 493 00:21:38,866 --> 00:21:40,740 Un, pat ja tas sintakse ir jauns, tas tikai 494 00:21:40,740 --> 00:21:44,610 nozīmē iespraudiet studenta vārdu, plug-in studentu kopmītnes, un pēc tam 495 00:21:44,610 --> 00:21:47,160 ar fclose, aizveriet failu. 496 00:21:47,160 --> 00:21:49,730 Un tad lastly-- tas ir jauns un mēs atgriezīsimies pie šī 497 00:21:49,730 --> 00:21:53,240 pirms long-- es esmu atbrīvojot students dēļ 498 00:21:53,240 --> 00:21:54,860 kas noticis augšas tur. 499 00:21:54,860 --> 00:21:56,820 Bet mēs atgriezīsimies to, ka pirms long-- 500 00:21:56,820 --> 00:21:59,820 tas ir tāpēc, ka, kā GetString ir faktiski strādā zem motora pārsega. 501 00:21:59,820 --> 00:22:01,280 >> Tātad pieņemsim ātri apskatīt šeit. 502 00:22:01,280 --> 00:22:04,380 Ja es ierakstiet ls manā direktorijā, ievēroju, ka man nav 503 00:22:04,380 --> 00:22:09,360 ir fails ar nosaukumu students.csv, tikai ne tur, neeksistē. 504 00:22:09,360 --> 00:22:14,965 Tātad, ja es tagad apkopo šo programmu, padarīt structs-1,. / structs-1, 505 00:22:14,965 --> 00:22:20,570 un es esmu gatavojas iet uz priekšu un ierakstiet Andi, kurš dzīvo Berkeley at Yale. 506 00:22:20,570 --> 00:22:26,350 Mēs ejam, lai būtu Rob kas dzīvo Thayer šajās dienās. 507 00:22:26,350 --> 00:22:33,760 Un pieņemsim nākt klajā ar kur ir, es domāju, Maria ir Mather, 508 00:22:33,760 --> 00:22:35,100 ja esmu atcerējos pareizi. 509 00:22:35,100 --> 00:22:36,460 >> Tātad nekas, šķiet, nenotiks. 510 00:22:36,460 --> 00:22:40,680 Bet, ja es tipa ls tagad, ir students.csv. 511 00:22:40,680 --> 00:22:43,080 Iesim uz priekšu un atvērt students.csv. 512 00:22:43,080 --> 00:22:46,050 Tas ir atkal ļoti viegls faila formāts. 513 00:22:46,050 --> 00:22:49,570 Bet es esmu vienkārši pieņēma konvenciju ka man ir divas rindas un kolonnas šeit. 514 00:22:49,570 --> 00:22:52,020 Pirmajā ailē ir cilvēku vārdi. 515 00:22:52,020 --> 00:22:55,740 Otrajā slejā ir studenta kopmītnes, vai koledžas, vai māju, vai plauktiņš. 516 00:22:55,740 --> 00:22:57,900 Un tagad es esmu saglabājis šo pastāvīgi failā. 517 00:22:57,900 --> 00:22:59,280 >> Tātad, tas nav tik interesanti. 518 00:22:59,280 --> 00:23:02,980 Bet tas ir tikai pakāpiens tagad ka ar to var pastāvēt informāciju 519 00:23:02,980 --> 00:23:04,040 pastāvīgi. 520 00:23:04,040 --> 00:23:08,340 Tātad, pieņemsim redzēt, tagad to, ko vēl mēs varam darīt ar šīm un citām funkcijām. 521 00:23:08,340 --> 00:23:10,729 Bet vispirms, kādi jautājumi? 522 00:23:10,729 --> 00:23:12,145 Tas bija daudz, un tas bija ātri. 523 00:23:12,145 --> 00:23:16,131 Bet jūs redzēsiet daudz vairāk PSET 4, kā arī. 524 00:23:16,131 --> 00:23:16,630 Yeah? 525 00:23:16,630 --> 00:23:19,360 >> Mērķauditorija: Vai ir veids, kā turpināt pievienojot vārdus šai lietai? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. Malan: Labs jautājums. 527 00:23:19,880 --> 00:23:21,800 Vai ir veids, lai turpinātu pievienojot vārdus šai lietai? 528 00:23:21,800 --> 00:23:22,340 Jā. 529 00:23:22,340 --> 00:23:24,630 Un, patiesībā, ja jūs galu up atsākt failu, 530 00:23:24,630 --> 00:23:26,780 jūs varētu izmantot citātu likt pēdiņas beigās "a", lai pievienot, 531 00:23:26,780 --> 00:23:31,090 kas vienkārši pievienojiet jaunu rindu A Jaunā līnija atkal un atkal, tieši tā. 532 00:23:31,090 --> 00:23:32,010 Labs jautājums. 533 00:23:32,010 --> 00:23:32,950 Citi jautājumi? 534 00:23:32,950 --> 00:23:33,450 Yeah? 535 00:23:33,450 --> 00:23:35,580 Mērķauditorija: Ja jūs skrēja Programma atkal tieši tagad, 536 00:23:35,580 --> 00:23:38,000 tas tā saglabāt pievienojot nosaukumus failu vai arī tas pavērs jaunu failu? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. Malan: Ah, labs jautājums. 538 00:23:38,740 --> 00:23:41,448 Ja jūs skrēja programmu vēlreiz tiesības Tagad, varbūt drukāti jauni vārdi, 539 00:23:41,448 --> 00:23:44,820 tas tā pievienot lietas materiāliem vai pārrakstīt failu? 540 00:23:44,820 --> 00:23:47,420 Pēdējais, jo es esmu neizmantojat pievienot režīmā. 541 00:23:47,420 --> 00:23:49,930 Un tāpēc es esmu tikai akli atverot failu rakstīšanai, 542 00:23:49,930 --> 00:23:51,310 tas ir tikai gatavojas pārrakstīt failu. 543 00:23:51,310 --> 00:23:54,570 Tāpēc es patiešām ir jādara, ir pievienot, ja es gribu, lai tiešām ir ilgtermiņa 544 00:23:54,570 --> 00:23:55,350 datubāzi. 545 00:23:55,350 --> 00:23:58,220 >> Tagad CSV ir noderīga, godīgi sakot, pat lai, piemēram, ja tu esi writing-- 546 00:23:58,220 --> 00:24:00,100 un mēs beidzot redzam vēlāk semestrī, kad 547 00:24:00,100 --> 00:24:01,455 mēs izmantojam CSV pārskatos var citiem mērķiem. 548 00:24:01,455 --> 00:24:04,920 Ja vēlaties saglabāt visus cilvēkus kuri ir reģistrēti kādu notikumu, 549 00:24:04,920 --> 00:24:07,420 vai pierakstījies jūsu students grupa, vai kaut kas tamlīdzīgs, 550 00:24:07,420 --> 00:24:10,330 uzglabātu datus šāda veida formāta ir super ērts. 551 00:24:10,330 --> 00:24:12,580 Jo burtiski, ja I bija lejupielādēt šo failu. 552 00:24:12,580 --> 00:24:14,540 Es varētu double-- un pieņemsim faktiski izmēģināt šo 553 00:24:14,540 --> 00:24:16,720 ja man ir Excel vai numuri šeit. 554 00:24:16,720 --> 00:24:19,130 >> Es esmu gatavojas labo klikšķi vai kontroles klikšķi manu failu. 555 00:24:19,130 --> 00:24:20,020 Whoops. 556 00:24:20,020 --> 00:24:21,830 Peles labo pogu vai kontroles klikšķi manu failu. 557 00:24:21,830 --> 00:24:24,960 Nāc, mana pele nesadarbojas. 558 00:24:24,960 --> 00:24:32,694 Download-- es esmu gatavojas lejupielādēt visus failus šeit tik 559 00:24:32,694 --> 00:24:33,860 tikai, lai es varētu paķert šo vienu. 560 00:24:33,860 --> 00:24:37,850 Un pieņemsim redzēt, ja tas darbojas students.csv-- pirmo reizi 561 00:24:37,850 --> 00:24:39,310 Esmu aktivizēts. 562 00:24:39,310 --> 00:24:41,360 Tagad viņi vēlas redzēt savus kontaktus. 563 00:24:41,360 --> 00:24:44,310 Tagad, man ir nepieciešams reģistrēties. 564 00:24:44,310 --> 00:24:47,620 Redzēt, cik viegli tas ir izmantot CSV pārskatos var? 565 00:24:47,620 --> 00:24:50,840 Jā, saglabāt to līdz šim. 566 00:24:50,840 --> 00:24:52,375 Labi, tagad mēs esam gatavi klasē. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 OK, ak, kas jauns? 569 00:25:00,370 --> 00:25:02,920 OK, tuvu. 570 00:25:02,920 --> 00:25:04,750 Tas bija maģisks. 571 00:25:04,750 --> 00:25:07,280 Labi, tagad mums ir jāatjaunina. 572 00:25:07,280 --> 00:25:10,890 Un tagad, tā aizmirsu, ko failu es sākotnēji atklāja, 573 00:25:10,890 --> 00:25:13,090 bet ko a-- tur mēs ejam. 574 00:25:13,090 --> 00:25:16,341 Labi, tāpēc tagad mums ir Excel failu. 575 00:25:16,341 --> 00:25:18,290 Paldies. 576 00:25:18,290 --> 00:25:20,764 >> Labi, lai to, ko es darīju bija viegli daļu. 577 00:25:20,764 --> 00:25:23,930 Protams, es varētu būt iepriekš instalēta Excel, vai Numbers, vai jebkura programma. 578 00:25:23,930 --> 00:25:25,846 Bet tas ir jauki, jo Tagad es varu manipulēt 579 00:25:25,846 --> 00:25:28,090 dati, kas standarta formātā. 580 00:25:28,090 --> 00:25:30,294 >> Tāpēc tagad pieņemsim konteksts pāriet uz kur mēs left off 581 00:25:30,294 --> 00:25:32,710 pēdējo reizi, kas bija, lai sāktu pacelties mācību riteņiem. 582 00:25:32,710 --> 00:25:34,543 Bet vispirms, jums nav redzēt šo agrāko pusdienas 583 00:25:34,543 --> 00:25:38,150 atkal notiek šeit Uguns un Ledus Cambridge, Sitar New Haven. 584 00:25:38,150 --> 00:25:43,150 Pierakstīties uz CS50s vietnē ASAP pievienoties CS50 studentus un darbiniekus. 585 00:25:43,150 --> 00:25:46,090 >> Tātad mēs ņēmām mācību riteņiem off pirmdien kā follows-- 586 00:25:46,090 --> 00:25:49,120 string ir deklarēta CS50s bibliotēka kādu laiku. 587 00:25:49,120 --> 00:25:52,650 Un tas ir jauki, jo tas ļauj mums runāt par mainīgajiem kā 588 00:25:52,650 --> 00:25:54,660 pilnīga vārdus un teikumus un vairāk. 589 00:25:54,660 --> 00:25:56,710 Bet izrādās virkni neeksistē. 590 00:25:56,710 --> 00:26:00,200 Tas ir tikai sinonīms, vai alias, ka mēs esam radījuši kaut ko, kas 591 00:26:00,200 --> 00:26:03,780 patiesībā ir nedaudz vairāk tehniskā sauc char *. 592 00:26:03,780 --> 00:26:07,900 >> Un tiešām, mēs redzējām piemēru Programmas pirmdien 593 00:26:07,900 --> 00:26:11,200 ka nerīkojās gluži kā mēs gaidīts. 594 00:26:11,200 --> 00:26:13,630 Tas bija fails, salīdzināt-0. 595 00:26:13,630 --> 00:26:17,910 Un atceros, ka salīdzināt-0, ja Es recompile Pirmdiena programmu 596 00:26:17,910 --> 00:26:22,670 un palaist salīdzināt-0 un ierakstiet mamma mazie, un mamma ar mazajiem vēlreiz. 597 00:26:22,670 --> 00:26:25,320 Programma uzstāja I tips dažādas lietas, 598 00:26:25,320 --> 00:26:29,210 kaut gan mamma, viss mazos, ir identisks vizuāli. 599 00:26:29,210 --> 00:26:31,990 Tātad, kas bija īsa atbilde kāpēc dators domā 600 00:26:31,990 --> 00:26:34,500 šie divi stīgas ir atšķirīgs? 601 00:26:34,500 --> 00:26:35,250 Yeah? 602 00:26:35,250 --> 00:26:36,534 >> Mērķauditorija: [dzirdams] 603 00:26:36,534 --> 00:26:37,450 DAVID J. Malan: Right. 604 00:26:37,450 --> 00:26:39,600 Tātad, mamma, pirmo reizi Es ierakstiet to, tiek 605 00:26:39,600 --> 00:26:42,710 glabājas kaut kur manā datora atmiņa, bet citā vietā 606 00:26:42,710 --> 00:26:44,690 kā otro reizi es rakstīt mamma. 607 00:26:44,690 --> 00:26:46,580 Tagad tas noteikti varētu optimizēt. 608 00:26:46,580 --> 00:26:49,205 Dators var būt gudri un realizēt šīs divas stīgas, hey, 609 00:26:49,205 --> 00:26:49,954 viņi ir identiski. 610 00:26:49,954 --> 00:26:51,520 Ļaujiet man nav lieki uzglabāt to. 611 00:26:51,520 --> 00:26:54,229 Bet datori nav darīt, ka optimizācija, ja vien jums pateikt viņiem. 612 00:26:54,229 --> 00:26:56,061 Tātad, pēc noklusējuma, viņi tikai gatavojas, lai galu galā 613 00:26:56,061 --> 00:26:57,670 divās dažādās vietās atmiņā. 614 00:26:57,670 --> 00:27:01,570 Un tā, lai būtu skaidrs, kad mēs salīdzinājām divas stīgas, 615 00:27:01,570 --> 00:27:03,950 Pirmais bija sauc par s, otrais sauca 616 00:27:03,950 --> 00:27:08,530 t, ko tieši es biju Salīdzinot šeit on line 13? 617 00:27:08,530 --> 00:27:09,494 Jā. 618 00:27:09,494 --> 00:27:12,390 >> Mērķauditorija: Tā ir vieta atmiņā ka mainīgais norādīs uz. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. Malan: Tieši tā, es biju Salīdzinot vietu atmiņā 620 00:27:14,900 --> 00:27:16,300 ka šie mainīgie norādīja uz. 621 00:27:16,300 --> 00:27:20,560 Tātad īpaši, ja mamma bija baits numurs 1, un 2, un 3, 622 00:27:20,560 --> 00:27:24,020 un 4-- jo atceros slīpsvītru 0 jābūt visu ceļu beigās. 623 00:27:24,020 --> 00:27:29,420 Un otrs gadījums mamma, M-o-m, bija adresē 10., 11., 12., un 13. 624 00:27:29,420 --> 00:27:33,100 Man bija salīdzinot 1., ka adrese, ka vieta atmiņā, 625 00:27:33,100 --> 00:27:35,160 pret 10, kas ir protams nav vienādi. 626 00:27:35,160 --> 00:27:36,260 1 nav 10. 627 00:27:36,260 --> 00:27:39,620 >> Tātad tas ir jauki, jo tas ir diezgan vienkārši. 628 00:27:39,620 --> 00:27:42,870 Bet tas ir problemātiski, ciktāl mēs nevaram salīdzināt stīgas. 629 00:27:42,870 --> 00:27:44,930 Tātad fundamentally-- un šajā zemā līmenī, 630 00:27:44,930 --> 00:27:47,300 Ja jūs vēlētos, lai īstenotu programma, lai salīdzinātu 631 00:27:47,300 --> 00:27:50,270 divi atsevišķi vārdi, ka lietotājs ir drukāti uz kvalitāti, 632 00:27:50,270 --> 00:27:53,944 viņi rindā char uz char, tikai vispārīgi, 633 00:27:53,944 --> 00:27:55,360 Ko mums darīt, acīmredzot? 634 00:27:55,360 --> 00:27:57,940 Tas nav pietiekami, tikai, lai apskatīt šīm divām adresēm. 635 00:27:57,940 --> 00:27:58,860 Kas mums jādara? 636 00:27:58,860 --> 00:27:59,360 Yeah? 637 00:27:59,360 --> 00:28:01,120 >> Mērķauditorija: atkārtot, izmantojot string [nedzirdama]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. Malan: Jā, pieņemsim atkārtot, izmantojot virkni. 639 00:28:02,600 --> 00:28:05,808 Let 's izmantot cilpas, kamēr cilpa, vai ko jūs esat visērtāk. 640 00:28:05,808 --> 00:28:08,840 Un, ja mēs esam ieguvuši divas virknes kaut kur atmiņā, aplūkosim katru'S 641 00:28:08,840 --> 00:28:11,770 Pirmā zīme, tad katrs otrais raksturs, tad trešā, un, ceturtkārt, 642 00:28:11,770 --> 00:28:15,206 un piektais, kamēr mēs hit kāda īpaša Sentinel vērtība? 643 00:28:15,206 --> 00:28:16,080 Mērķauditorija: [dzirdams] 644 00:28:16,080 --> 00:28:18,800 DAVID J. Malan: Jā, tad slīpsvītra nulle, kurā brīdī vai nu virknē 645 00:28:18,800 --> 00:28:20,100 mēs varam izlemt, tas arī viss. 646 00:28:20,100 --> 00:28:21,970 Vai mēs saskaņota katru rakstzīmi? 647 00:28:21,970 --> 00:28:22,990 Ja ne, atgriezties viltus. 648 00:28:22,990 --> 00:28:24,770 Ja tā, tad atgriezties true. 649 00:28:24,770 --> 00:28:28,800 Un tā tas ir tieši tas, ko šī versija Programmas salīdzināt-1.c dara. 650 00:28:28,800 --> 00:28:31,677 Tas ir identisks tam, ko mēs paskatījās pirmdien izņemot to, ka es esmu 651 00:28:31,677 --> 00:28:34,760 gotten atbrīvoties no vārda string-- though ka nav nekādas funkcionālas impact-- visu 652 00:28:34,760 --> 00:28:37,450 Es esmu dara tagad ir likvidēt daži vizuālie mācību diski, 653 00:28:37,450 --> 00:28:40,880 bet skaidri redzēt, ka s un t ir adreses. 654 00:28:40,880 --> 00:28:43,020 Un tas ir tas, ko zvaigzne, zvaigznīti, apzīmē 655 00:28:43,020 --> 00:28:46,690 ir adrese, citādi zināma vairāk tehniski kā rādītājs. 656 00:28:46,690 --> 00:28:49,880 >> Tātad, kad es apliecinu s uz line 9 un teikt char * s, 657 00:28:49,880 --> 00:28:52,160 tas nenozīmē, ka man virkni. 658 00:28:52,160 --> 00:28:56,360 Tas nozīmē, ka man mainīgais, kura mērķis dzīvē ir uzglabāt adresi. 659 00:28:56,360 --> 00:29:00,400 Tā kā es esmu par to ielieciet adrese virknes tajā. 660 00:29:00,400 --> 00:29:03,500 Un tiešām, GetString, lai būtu skaidrs, neatgriežas virkni. 661 00:29:03,500 --> 00:29:06,110 Tas neatgriežas mamma slīpsvītru nulle, per se. 662 00:29:06,110 --> 00:29:10,005 Kāda GetString īpaši un precīzi atgriezties? 663 00:29:10,005 --> 00:29:10,880 Mērķauditorija: [dzirdams] 664 00:29:10,880 --> 00:29:14,080 DAVID J. Malan: An adresi, adrese pirmā rakstura 665 00:29:14,080 --> 00:29:16,070 dažās stīgu tā ir gotten. 666 00:29:16,070 --> 00:29:19,250 Un tāpēc tagad mēs redzam īpašs atslēgvārdu vēlreiz. 667 00:29:19,250 --> 00:29:20,640 Un, es norādīja uz šo agrāk. 668 00:29:20,640 --> 00:29:23,620 Tas būs labs konvencija ka mēs redzēsim atkal un atkal tagad. 669 00:29:23,620 --> 00:29:27,540 Es esmu pārbaudes, lai pārliecinātos, ka s ir nav nulle, un t ir nav nulle. 670 00:29:27,540 --> 00:29:30,100 Tāpēc, ka, pamatojoties uz manu patiešām ātri pieminēt agrāk, 671 00:29:30,100 --> 00:29:35,510 ko varētu nozīmēt, ja GetString atgriež ne adrese, bet N-U-L-L, kas ir atkal, 672 00:29:35,510 --> 00:29:36,990 dažas īpašas vērtība? 673 00:29:36,990 --> 00:29:37,890 >> Mērķauditorija: Kļūda. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. Malan: Tas ir kļūda. 675 00:29:38,600 --> 00:29:39,550 Kaut kas nogāja greizi. 676 00:29:39,550 --> 00:29:41,341 Un ko parasti varētu notikt, jo īpaši 677 00:29:41,341 --> 00:29:45,162 ar strings-- kas varētu būt nezināmas garums advance-- 678 00:29:45,162 --> 00:29:46,870 varbūt datori " no atmiņas, varbūt 679 00:29:46,870 --> 00:29:49,280 jūs ierakstījāt tādā garš vārds vai teikums 680 00:29:49,280 --> 00:29:51,880 vai ielīmēts tik lielu eseju tur ir vienkārši nav pietiekami daudz atmiņas. 681 00:29:51,880 --> 00:29:55,340 Un tā GetString nevar atgriezties adrese no visa lieta, 682 00:29:55,340 --> 00:29:56,620 tā tas vienkārši atgriež neko. 683 00:29:56,620 --> 00:30:00,580 Un tā saka ir noticis kļūda atgriežoties īpašo nulles vērtību. 684 00:30:00,580 --> 00:30:02,890 Tas ir nulle adresi, lai runāt. 685 00:30:02,890 --> 00:30:06,157 >> Tagad izrādās, C nāk ar funkcija, kas dara šo atkārtojuma. 686 00:30:06,157 --> 00:30:09,240 Mums nav to īstenot ar A cilpas vai kamēr cilpa sevi. 687 00:30:09,240 --> 00:30:11,150 Mēs varam izmantot funkciju, sauc īsumā, 688 00:30:11,150 --> 00:30:15,400 maisīt comp, vai string salīdzināt, kura mērķis dzīvē ir darīt tieši to. 689 00:30:15,400 --> 00:30:19,990 Jūs arī tā divas norādes, divas adreses, un tas dosies uz šīm adresēm 690 00:30:19,990 --> 00:30:23,130 un tad salīdzināt vēstule vēstule par vēstuli par kvalitāti, 691 00:30:23,130 --> 00:30:26,610 apstāšanās tikai tad, kad to, kas ir taisnība? 692 00:30:26,610 --> 00:30:31,540 Kad intuitīvi būtu maisīt comp stop atkārtojot, tikai, lai būtu skaidrs? 693 00:30:31,540 --> 00:30:35,400 Kad tas hits slīpsvītru 0 nu string, kurā brīdī tas var izlemt 694 00:30:35,400 --> 00:30:38,910 ir viss saskaņota, vai ir bijuši neatbilstību? 695 00:30:38,910 --> 00:30:42,740 >> Tātad, ja mēs palaist šo tagad un izmēģināt mūsu mazā kapitalizācija spēle, 696 00:30:42,740 --> 00:30:49,260 tā darīt salīdzināt-1, ./compare-1, un ierakstiet mamma ar mazajiem abas reizes. 697 00:30:49,260 --> 00:30:50,560 Tagad tas ir viens un tas pats. 698 00:30:50,560 --> 00:30:54,080 Un, ja es varu to darīt atkal ar mazie un tad varbūt lielais. 699 00:30:54,080 --> 00:30:56,720 Tagad tas patiešām atšķir starp augšējo un mazie burti. 700 00:30:56,720 --> 00:31:00,440 Tātad nav tik grūti vai maģisks, bet tas tagad paskaidrot 701 00:31:00,440 --> 00:31:03,140 kas notiek zem motora pārsega. 702 00:31:03,140 --> 00:31:07,640 >> Tātad, ko vēl mēs varam iegūt No šāda veida nodarbības? 703 00:31:07,640 --> 00:31:08,980 Tātad, pieņemsim to apskatīt šo. 704 00:31:08,980 --> 00:31:15,380 Es iešu uz priekšu un rakstīt quick programma šeit sauc copy-0. 705 00:31:15,380 --> 00:31:21,594 Un tagad iesim uz priekšu un faktiski pieņemsim do this-- kopiju-0, 706 00:31:21,594 --> 00:31:23,010 to apskatīt to, ko es esam ieguvuši šeit. 707 00:31:23,010 --> 00:31:24,712 Es vispirms pateikt lietotājam, kaut ko pateikt. 708 00:31:24,712 --> 00:31:26,420 Tad man virkne un es uzglabā to s. 709 00:31:26,420 --> 00:31:29,810 Tad es pārbaudītu, vai s vienāds vienāds NULL, vienkārši atgriezties 1. 710 00:31:29,810 --> 00:31:31,590 Tātad tas ir tikai standarta kļūdu pārbaudi. 711 00:31:31,590 --> 00:31:33,112 Nekas interesants nav noticis. 712 00:31:33,112 --> 00:31:36,320 Un patiesībā, ja mēs atbrīvotos no kļūdu pārbaudot, tas izskatās šonedēļ 1 kodu 713 00:31:36,320 --> 00:31:36,985 pašlaik. 714 00:31:36,985 --> 00:31:39,110 Bet es esmu sācis iegūt mazliet labāk par to. 715 00:31:39,110 --> 00:31:43,340 >> Tagad 16 līniju, pirms nedēļas, varbūt pat pāris dienas vai stundas pirms, 716 00:31:43,340 --> 00:31:46,720 Jūs varētu teikt, 16 līnija ir radot mainīgo sauc t 717 00:31:46,720 --> 00:31:48,219 un kopēšanas s to. 718 00:31:48,219 --> 00:31:50,010 Un tas ir pilnīgi saprātīgs takeaway. 719 00:31:50,010 --> 00:31:51,560 Bet precīzāk tagad. 720 00:31:51,560 --> 00:31:54,190 Kas notiek 16. rindā? 721 00:31:54,190 --> 00:31:56,170 Kas kļūst kopēts no labās uz kreiso pusi? 722 00:31:56,170 --> 00:31:56,669 Yeah? 723 00:31:56,669 --> 00:31:58,490 Mērķauditorija: Vai t iegūt adresi s? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. Malan: Tieši tā, t kļūst adresi s. 725 00:32:01,220 --> 00:32:05,170 Tātad, lai būtu skaidrs, tagad, ja es eju atpakaļ uz šo agrāko piemēru 726 00:32:05,170 --> 00:32:08,520 un es izņemt lieta, ko es esmu ierakstījāt. 727 00:32:08,520 --> 00:32:11,640 Un ko es esmu drukāti in-- šeit ir s, un šeit 728 00:32:11,640 --> 00:32:15,830 ir tas, ko es esmu drukāti kaut kur atmiņa, mamma un tad slīpsvītru 729 00:32:15,830 --> 00:32:17,840 0, kas ir pievienots par mani. 730 00:32:17,840 --> 00:32:23,060 Ko es glabājas šeit, atgādināt, tas ir pie atrašanās 1, 2, 3, 4, 731 00:32:23,060 --> 00:32:24,655 tas ir tas, kas ir pašlaik s. 732 00:32:24,655 --> 00:32:29,220 Tātad, ja uz 16 līniju, es saku dod man citu mainīgo sauc t un veikals 733 00:32:29,220 --> 00:32:33,590 pie vērtības s, ko izpaužas uzglabā šeit nebūs mamma 734 00:32:33,590 --> 00:32:35,480 bet gan tikai skaitlis 1. 735 00:32:35,480 --> 00:32:38,520 >> Tātad, ja mēs skatāmies uz priekšu šajā programmā Tagad, kas notiek varētu notikt? 736 00:32:38,520 --> 00:32:40,690 Tāpēc ievērosiet, ka tur ir šī funkcija jūs varētu 737 00:32:40,690 --> 00:32:44,410 ir izmantojis šo kādu laiku atpakaļ par ķeizaru, vai Vigenere, vai varbūt nemaz. 738 00:32:44,410 --> 00:32:48,170 Es apgalvo, ar manu printf, es esmu gatavojas kapitalizēt kopēšanas t. 739 00:32:48,170 --> 00:32:51,616 Pirmā līnija 19, ātri veselība pārbaudiet, strlen pārbauda garumu t. 740 00:32:51,616 --> 00:32:53,740 Jo es negribu mēģināt gūt labumu kaut ko 741 00:32:53,740 --> 00:32:55,104 ja tur nav string tur. 742 00:32:55,104 --> 00:32:57,520 Ja lietotājs tikai hit Enter, tur nekas kapitalizēt. 743 00:32:57,520 --> 00:33:01,100 Tāpēc es nevēlos darīt līniju 21. 744 00:33:01,100 --> 00:33:05,758 Tāpēc līnija 21 ir kapitalizēt kas vēstule, acīmredzot, t? 745 00:33:05,758 --> 00:33:06,514 >> Mērķauditorija: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. Malan: Tas izskatās kā tas ir kopēšana kuriem viens? 747 00:33:08,722 --> 00:33:09,486 Mērķauditorija: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. Malan: Uh, m. 749 00:33:10,450 --> 00:33:12,685 Labi, tāpēc pirmo m, jo paziņojums, ka es esmu 750 00:33:12,685 --> 00:33:14,935 iet uz toupper, kas Ja jūs nekad neesmu redzējis to tas ir 751 00:33:14,935 --> 00:33:16,980 tikai funkcija kapitalizēt par savu ieguldījumu. 752 00:33:16,980 --> 00:33:20,240 t kronšteins nulle nozīmē dot mani nulles raksturs t. 753 00:33:20,240 --> 00:33:22,550 Un tā kā to dara attēlu izmaiņas, lai būtu skaidrs? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Kas nepieciešams, lai saņemtu pārrakstīt vai mainīta attiecībā uz s un t un mamma 756 00:33:29,160 --> 00:33:30,097 slīpsvītru nulle. 757 00:33:30,097 --> 00:33:31,470 >> Mērķauditorija: [dzirdams] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. Malan: Jā, tāpēc tas viens šeit vienkārši 759 00:33:34,030 --> 00:33:40,860 nepieciešams, lai saņemtu mainījusies kuri paredzēti, noteikt this-- nepieciešams, lai saņemtu mainīts uz kapitāla m. 760 00:33:40,860 --> 00:33:44,330 Bet tagad, izskatās vēlāk programma, ja es izdrukāt 761 00:33:44,330 --> 00:33:49,800 s un t, kā es tīru šeit, skatīties, ko ir notiks izdrukāšana s un t. 762 00:33:49,800 --> 00:33:54,310 Tātad, lai copy-0, ./copy-0. 763 00:33:54,310 --> 00:33:57,140 Ļaujiet man iet uz priekšu un tips jo mamma ar visiem mazajiem. 764 00:33:57,140 --> 00:34:00,140 Ievērojiet, gan oriģinālu un kopija ir kapitalizētas. 765 00:34:00,140 --> 00:34:00,850 Kāpēc? 766 00:34:00,850 --> 00:34:04,431 Labi, s un t ir abi norādot uz, ja jūs, pats rieciens atmiņas. 767 00:34:04,431 --> 00:34:06,930 Un godīgi sakot, tas kļūst tiešām uninteresting-- faktu 768 00:34:06,930 --> 00:34:09,150 ka mēs esam izmantojot adresi nulle šeit. 769 00:34:09,150 --> 00:34:11,719 Es domāju, man nav īsti aprūpi kur stuff ir atmiņā. 770 00:34:11,719 --> 00:34:13,550 Sorry es esmu dzēšana pārāk daudz. 771 00:34:13,550 --> 00:34:15,674 Bet man nav īsti aprūpi kur lietas ir atmiņā. 772 00:34:15,674 --> 00:34:18,510 Un tā, ko patiešām programmētāji mēdz domāt par 773 00:34:18,510 --> 00:34:21,080 ir tas, ka tad, kad tu runā par adresi, vai rādītājs, 774 00:34:21,080 --> 00:34:22,679 kas cares kur tas ir atmiņā. 775 00:34:22,679 --> 00:34:24,989 Man vienalga, ja tas ir pie baitu vienu vai vienu miljardu. 776 00:34:24,989 --> 00:34:27,920 Es tikai rūp, ka šis mainīgais ir efektīvi 777 00:34:27,920 --> 00:34:29,620 norādot tajā rieciens atmiņas. 778 00:34:29,620 --> 00:34:33,350 Un tā, turpmāk, nevis atrunāšanās pār patvaļīgu atmiņas adreses, pieņemsim 779 00:34:33,350 --> 00:34:36,710 sāc izdarīt norādes kā norādes, kā bultas. 780 00:34:36,710 --> 00:34:39,340 Tātad, ko s un t tiešām ir, saskaņā ar šīs programmas, 781 00:34:39,340 --> 00:34:42,130 jo cik es izveidojis t, tas ir tikai divas atsevišķas mainīgie 782 00:34:42,130 --> 00:34:43,840 norādot tajā pašā gabalu no atmiņas. 783 00:34:43,840 --> 00:34:45,215 Un mums ir vienalga, kur viņi ir. 784 00:34:45,215 --> 00:34:47,130 Tātad, mēs varam abstrakts prom šo detaļu. 785 00:34:47,130 --> 00:34:48,780 >> Tātad, kā es varu noteikt šo? 786 00:34:48,780 --> 00:34:54,120 Ja es gribu rakstīt versiju kopijas programmu, kas faktiski kopijas virknes 787 00:34:54,120 --> 00:34:56,840 un kapitalizē tikai kopija, tikai intuitīvi, 788 00:34:56,840 --> 00:34:59,766 kādi ir nokļuvis būt sastāvdaļa, lai mūsu risinājums? 789 00:34:59,766 --> 00:35:00,640 Mērķauditorija: [dzirdams] 790 00:35:00,640 --> 00:35:01,420 DAVID J. Malan: Mums vajag ko? 791 00:35:01,420 --> 00:35:01,820 Mērķauditorija: rieciens atmiņas. 792 00:35:01,820 --> 00:35:03,280 DAVID J. Malan: Mums ir nepieciešams cits rieciens atmiņas, vai ne? 793 00:35:03,280 --> 00:35:05,360 Mēs nezinām, kā to darīt vēl, obligāti. 794 00:35:05,360 --> 00:35:11,330 Bet es veida ir nepieciešams, lai tas notiktu tik ka sākotnējā mamma ar mazajiem burtiem 795 00:35:11,330 --> 00:35:14,170 beidzas ar to, ka papildus rieciens atmiņas. 796 00:35:14,170 --> 00:35:19,770 Un tad, kad es mainīt kopiju, es nevēlos mainīt šo kopiju šeit. 797 00:35:19,770 --> 00:35:26,020 Es tā vietā vēlaties mainīt tikai šī kopija tā, ka oriģināls ir nemainīgs. 798 00:35:26,020 --> 00:35:27,980 >> Tātad, pieņemsim redzēt, kā mēs varētu to izdarīt. 799 00:35:27,980 --> 00:35:31,800 In kopēt-1, kas ir jau uzlauzta komentāru, 800 00:35:31,800 --> 00:35:33,250 bet komentēja tiešsaistē. 801 00:35:33,250 --> 00:35:36,710 Mēs tā vietā darīt following-- šiem līnijas ir identiski, atnesiet man virkni 802 00:35:36,710 --> 00:35:38,340 un to sauc s. 803 00:35:38,340 --> 00:35:43,500 Bet tagad aplūkosim vienu no mūsu visvairāk komplekss, bet pēdējā no sarežģītība 804 00:35:43,500 --> 00:35:47,340 awhile, 16 līnija dara tieši to. 805 00:35:47,340 --> 00:35:49,400 Tātad, ja jūsu comfy ar picture mēs vienkārši drew-- 806 00:35:49,400 --> 00:35:51,790 dod man jaunu rieciens atmiņas, kopēt visu, tajā, 807 00:35:51,790 --> 00:35:53,730 pieņemsim redzēt, kā mēs tulkot, ka, lai kodu. 808 00:35:53,730 --> 00:35:59,400 >> Tātad 16 līnija, kreisajā pusē, char * t dod man šo lodziņu nekā šeit. 809 00:35:59,400 --> 00:36:00,230 Tas ir viss, tā dara. 810 00:36:00,230 --> 00:36:03,240 Labajā pusē, m alloc, vai malloc, 811 00:36:03,240 --> 00:36:06,480 ir atmiņas sadali, super fancy, mistisks veids, vienkārši sakot 812 00:36:06,480 --> 00:36:07,640 man rieciens atmiņas. 813 00:36:07,640 --> 00:36:09,290 Cik daudz atmiņas mums vajag? 814 00:36:09,290 --> 00:36:10,910 Nu, ir sava veida liels izteiksmes. 815 00:36:10,910 --> 00:36:12,570 Bet pieņemsim redzēt, ko tā saka šeit. 816 00:36:12,570 --> 00:36:15,940 Tātad tas, protams, ir dot mani stīgu garums s. 817 00:36:15,940 --> 00:36:19,094 Tātad, mamma tas būtu tas, ko? 818 00:36:19,094 --> 00:36:21,010 Tātad tikai trīs, vai ne? mamma ir trīs rakstzīmes. 819 00:36:21,010 --> 00:36:22,830 Jums nav skaitīt slīpsvītru nullei, kad jūs 820 00:36:22,830 --> 00:36:25,960 runāt par garumu virknes tas ir Patiesībā cilvēka redzami burti. 821 00:36:25,960 --> 00:36:28,020 Tātad mamma, tāpēc tas dod man 3. 822 00:36:28,020 --> 00:36:31,170 Bet pagaidiet minūti, es esmu tagad pievienojot 1. 823 00:36:31,170 --> 00:36:34,861 Kāpēc es tiešām gribu piešķirt 4 baiti un ne tikai 3? 824 00:36:34,861 --> 00:36:35,360 Yeah? 825 00:36:35,360 --> 00:36:36,910 >> Mērķauditorija: Sentinel vērtību? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. Malan: Tieši tā, šajā pastiprinātas vērtību. 827 00:36:38,951 --> 00:36:40,840 Par slīpsvītru nulles, Man vajag 4 baiti pavisam. 828 00:36:40,840 --> 00:36:42,870 Tāpēc man vajag garumu no virknes plus 1. 829 00:36:42,870 --> 00:36:45,400 Un tad tikai par labu measure-- kaut arī par šo sistēmu, 830 00:36:45,400 --> 00:36:49,390 tas vienmēr būs 1-- es saku reizināt šo, lielumu char. 831 00:36:49,390 --> 00:36:51,552 Izrādās sizeof ir operators C, kas 832 00:36:51,552 --> 00:36:53,260 vienkārši stāsta jums baitu skaits, kas ir 833 00:36:53,260 --> 00:36:54,700 nepieciešams kādam datu tipu. 834 00:36:54,700 --> 00:36:57,740 Tas nedarbojas blokiem parasti, dažreiz tā dara. 835 00:36:57,740 --> 00:36:59,210 Bet vispārējā gadījumā, nē. 836 00:36:59,210 --> 00:37:02,330 Bet tas man pateikt, cik daudz baitu char ir, kas izrādās vienmēr ir 1. 837 00:37:02,330 --> 00:37:04,080 Tātad tas ir kā reizinot ar 1. 838 00:37:04,080 --> 00:37:05,900 >> Tātad super mistisks meklē līnija kodu. 839 00:37:05,900 --> 00:37:09,320 Bet viss tas ir dod man rieciens atmiņas. 840 00:37:09,320 --> 00:37:13,590 Bet tas, šķiet, ir kopēšanas kaut kas minētajā atmiņu? 841 00:37:13,590 --> 00:37:14,560 Vēl nē. 842 00:37:14,560 --> 00:37:22,040 Un tā, ko es varu uz līnijas 22, un 23, 24, 25, labi, es vienkārši izdarīt. 843 00:37:22,040 --> 00:37:23,760 Un tas ir sava veida vecās skolas sīkumi tagad. 844 00:37:23,760 --> 00:37:26,010 Tas ir tāpat kā PSET 2, kur jūs vienkārši pārvietojas lietas 845 00:37:26,010 --> 00:37:28,620 ap atmiņā, vai drīzāk stīgas. 846 00:37:28,620 --> 00:37:31,920 >> Tāpēc es esmu atkārtojot no 0 līdz garums virknes s. 847 00:37:31,920 --> 00:37:37,820 Un es esmu kopēšana i-raksturu S stāšanās i-tā rakstura t. 848 00:37:37,820 --> 00:37:41,820 Un tāpēc es, programmētājs, kas izgatavoti Noteikti piešķirt tieši tik daudz baitu 849 00:37:41,820 --> 00:37:44,600 kā man ir nepieciešams, tas ir ideāls viens pret vienu attiecību. 850 00:37:44,600 --> 00:37:47,060 Un es kopēt mamma mazie burti uz jauno. 851 00:37:47,060 --> 00:37:50,170 Un tad visbeidzot, es darīt šo līniju. 852 00:37:50,170 --> 00:37:54,637 Un tā efekts ir tikai kapitalizēt šo t šeit. 853 00:37:54,637 --> 00:37:56,470 Tik daudz, lai absorbētu, bet ja jūs vienkārši apsvērt 854 00:37:56,470 --> 00:37:58,220 to, kas īsti notiek par zem motora pārsega 855 00:37:58,220 --> 00:38:00,880 ir tikai pārvietojas šiem baiti apkārt, viss, kas 856 00:38:00,880 --> 00:38:06,617 ir nepieciešama, lai atrisinātu šo problēmu, ir tikai, lai dotu mums šo rieciens atmiņas. 857 00:38:06,617 --> 00:38:08,450 Tagad riskējot milzīgs, ļaujiet man parādīt 858 00:38:08,450 --> 00:38:13,200 viens cits piemērs, kas ir gandrīz identiski, izņemot šo vienu 859 00:38:13,200 --> 00:38:14,350 līnija kodu. 860 00:38:14,350 --> 00:38:18,870 Tātad šis ir hakeris versija Šīs programmas, ja Jums gribas. 861 00:38:18,870 --> 00:38:21,050 Bet pieņemsim tikai destilēt tas par to, kas notiek. 862 00:38:21,050 --> 00:38:28,920 Line 24 izmanto, lai būtu šis t kronšteins i izpaužas s kronšteinu i. 863 00:38:28,920 --> 00:38:33,370 Tagad, es esmu mainot to tik ļoti vairāk mistisks star t 864 00:38:33,370 --> 00:38:36,280 plus 1 vienāds star s plus 1. 865 00:38:36,280 --> 00:38:38,702 >> Tātad, kas notiek un kāpēc Vai mums ir zvaigzne raksturs? 866 00:38:38,702 --> 00:38:41,410 Mēs esam redzējuši zvaigzne pirms, un tas tiek izmantoti atšķirīgi šeit. 867 00:38:41,410 --> 00:38:45,490 Mēs jau iepriekš redzējām char *, tagad es esmu redzēt Zvaigzne sākumā, un tas ir OK. 868 00:38:45,490 --> 00:38:48,190 Jo izrādās, mēs var veida secināt tikai 869 00:38:48,190 --> 00:38:50,280 No tiem pirmais principi, kas notiek. 870 00:38:50,280 --> 00:38:53,860 Tik vienkārši, lai būtu skaidrs, kas ir s? 871 00:38:53,860 --> 00:38:55,052 Pagājušajā nedēļā, tas bija virkne. 872 00:38:55,052 --> 00:38:56,260 Ka nepietiek vairs. 873 00:38:56,260 --> 00:38:57,690 Kas ir S, konkrēti? 874 00:38:57,690 --> 00:38:58,590 >> Mērķauditorija: [dzirdams] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. Malan: Tas ir rādītājs. 876 00:38:59,881 --> 00:39:02,610 Tas ir adrese Pirmā rakstzīme mēs drukāti. 877 00:39:02,610 --> 00:39:04,780 OK, kas ir t? 878 00:39:04,780 --> 00:39:05,660 >> Mērķauditorija: [dzirdams] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. Malan: The adrese pirmā baits 880 00:39:07,950 --> 00:39:10,490 t, kas rieciens atmiņas pārdalīti. 881 00:39:10,490 --> 00:39:14,720 Tātad izrādās, ka tad, kad mēs atkārtot no 0 līdz pat string 882 00:39:14,720 --> 00:39:17,424 length-- pirmkārt, i aizsāk 0, jo 883 00:39:17,424 --> 00:39:18,840 Šīs vecās skolas cilpu lieta. 884 00:39:18,840 --> 00:39:22,400 Tātad tikai uz vienkāršību, pieņemsim Pieņemsim, ka pirmajā rindā kodu 885 00:39:22,400 --> 00:39:23,760 ir tiešām tikai tas, tiesības. 886 00:39:23,760 --> 00:39:26,080 Ja i ir nulle, pievienojot nulli lai kaut ko domājams 887 00:39:26,080 --> 00:39:27,540 nav gatavojas ietekmēt. 888 00:39:27,540 --> 00:39:28,560 >> Tātad, kas ir šis teiciens? 889 00:39:28,560 --> 00:39:31,600 Izrādās, ka zvaigzne operators šajā kontekstā 890 00:39:31,600 --> 00:39:33,700 ir dereference operators, kas ir tikai 891 00:39:33,700 --> 00:39:37,530 iedomātā veids, kā pateikt iet uz šādu adresi. 892 00:39:37,530 --> 00:39:42,080 Tātad, ja S ir adrese pirmā raksturu šajā rieciens atmiņas, 893 00:39:42,080 --> 00:39:43,630 * s līdzekļiem iet uz turieni. 894 00:39:43,630 --> 00:39:45,630 Un tāpēc, ka mēs esam sagatavoti aina šādā veidā, 895 00:39:45,630 --> 00:39:47,430 Jūs varat pieņemt pēc garīgo modeli. 896 00:39:47,430 --> 00:39:51,030 Ja tas ir s, un jūs sakāt * s, * s veida, piemēram, izejas un kāpnes, 897 00:39:51,030 --> 00:39:54,540 Ja jūs atceraties spēli no bērnības, ir kā sekot šai bultiņas un iet 898 00:39:54,540 --> 00:39:55,570 uz adresi. 899 00:39:55,570 --> 00:39:57,080 >> * t ir viens un tas pats. 900 00:39:57,080 --> 00:39:59,855 Tātad, sākt šeit, dodieties uz savu gabalu. 901 00:39:59,855 --> 00:40:03,350 Es nevaru vienkārši izmantot Šis ekrāns, ka veidā. 902 00:40:03,350 --> 00:40:05,560 * t nozīmē iet šeit. 903 00:40:05,560 --> 00:40:08,830 Un tad, lai cilpa ir tikai sakot pārvietot šo raksturu šeit, 904 00:40:08,830 --> 00:40:11,330 pārvietot šo raksturu šeit, pārvietot šo raksturu šeit. 905 00:40:11,330 --> 00:40:12,890 Bet kā es varu darīt, ka incrementation? 906 00:40:12,890 --> 00:40:15,430 Man vajag, lai atsauktu to, ko es tikko izdzēsa. 907 00:40:15,430 --> 00:40:18,140 Tas ir tas, ko parasti sauc par rādītājs aritmētika, kas 908 00:40:18,140 --> 00:40:20,040 nozīmē math ar adresēm. 909 00:40:20,040 --> 00:40:22,460 >> Ja šis cilpa, Es turpinu palielināšanai i, 910 00:40:22,460 --> 00:40:26,880 un s ir vesels adrese un t ir vesels adrese, ja es tikai glabāt pievienojot 1, 911 00:40:26,880 --> 00:40:31,406 tas tikai nozīmē saglabāt pārvietojas uz priekšu, un uz priekšu, un nosūta atmiņā. 912 00:40:31,406 --> 00:40:34,030 Tas ir tāpat kā Oxford Street, tad iela ka CS celtne ir par. 913 00:40:34,030 --> 00:40:36,490 CS ēkas ir 33 Oxford Street. 914 00:40:36,490 --> 00:40:39,870 Tātad, ja tu būtu to darīt 33 Oxford Street plus 1, 915 00:40:39,870 --> 00:40:42,870 kas parādīs jums 34 Oxford Street, tad 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 tad 36 Oxford Street, neatkarīgi no tās ēkas patiesībā ir - ja tie pastāv. 917 00:40:46,380 --> 00:40:50,540 Un tā, tas ir viss, ko mēs darām šeit ar rādītāju aritmētisko. 918 00:40:50,540 --> 00:40:53,820 >> Tātad tas ir super arcane veids izteikt sevi. 919 00:40:53,820 --> 00:40:56,160 Bet viss, kas notiek zem motora pārsega 920 00:40:56,160 --> 00:40:59,330 ir tikai pēc šīs adreses, tāpat pēc karti, ja jūs, 921 00:40:59,330 --> 00:41:02,692 vai pēc bultas, piemēram mēs esam novilkta uz ekrāna. 922 00:41:02,692 --> 00:41:04,910 OK, daudz sagremot. 923 00:41:04,910 --> 00:41:10,410 Jebkuru jautājumu par sintaksi, koncepcijas, norādes, malloc vai tamlīdzīgi. 924 00:41:10,410 --> 00:41:11,480 Jā, nekā šeit pirmo reizi. 925 00:41:11,480 --> 00:41:13,755 >> Mērķauditorija: Tātad, ja kas saka * t vienāds toupper * t, 926 00:41:13,755 --> 00:41:15,575 ir tas, ka gatavojas kapitalizēt visi burti vai just-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. Malan: Ah, tiešām labs jautājums. 928 00:41:17,283 --> 00:41:19,805 Tātad šajā līnijā šeit, 31, tas notiek kapitalizēt 929 00:41:19,805 --> 00:41:21,430 pirmais burts vai visi burti. 930 00:41:21,430 --> 00:41:23,460 Tātad pieņemsim atbildēt, ka, dodoties atpakaļ uz pirmajiem principiem. 931 00:41:23,460 --> 00:41:26,168 Un pirmais principi šeit es domāju dodieties uz pamata definīcijām 932 00:41:26,168 --> 00:41:27,000 par to, kas ir iesaistīti. 933 00:41:27,000 --> 00:41:29,770 Tātad toupper ir funkcija ka kapitalizē char. 934 00:41:29,770 --> 00:41:30,530 Tas ir viss. 935 00:41:30,530 --> 00:41:36,740 * t nozīmē iet uz first-- iet uz adresi t. 936 00:41:36,740 --> 00:41:40,350 Tātad, attēlā, ja tas ir rieciens Atmiņas mēs piešķirti ar malloc, 937 00:41:40,350 --> 00:41:43,310 un tas ir t, * t nozīmē iet šeit. 938 00:41:43,310 --> 00:41:46,710 >> Tikmēr, jūs iet ka vērtība, mazie m 939 00:41:46,710 --> 00:41:50,040 līdz toupper, jūs saņemat atpakaļ kapitāls M, kur jūs nodot to? 940 00:41:50,040 --> 00:41:52,410 Jūs esat ievietojot to šajā pašā vietā. 941 00:41:52,410 --> 00:41:55,540 Un tā, ko šī loģika tiem Pamata definīcijas tas ir tikai 942 00:41:55,540 --> 00:41:58,792 gūstot pirmo burtu ja vien jūs atkārtot ar I vai 943 00:41:58,792 --> 00:42:02,000 cilpa vai kamēr cilpa, tas nav dodas kaut kas vairāk, nekā jūs lūgt to darīt. 944 00:42:02,000 --> 00:42:02,583 Labs jautājums. 945 00:42:02,583 --> 00:42:03,237 Yeah? 946 00:42:03,237 --> 00:42:05,369 >> Mērķauditorija: Kāpēc jūs izmantojat dereference metode, nevis 947 00:42:05,369 --> 00:42:05,979 masīvs? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. Malan: Ah, labs jautājums. 949 00:42:07,395 --> 00:42:10,672 Kāpēc jūs izmantojat dereference metode, nevis masīva metodi? 950 00:42:10,672 --> 00:42:12,130 Bez īpaša iemesla, lai būtu godīgi. 951 00:42:12,130 --> 00:42:15,290 Un, patiesībā, jo tas veida, piemēram, tiesības, 952 00:42:15,290 --> 00:42:17,556 Es esmu tikai norādot, padarot Programma sarežģītāka, 953 00:42:17,556 --> 00:42:19,680 vairāk acis stiklojums vairāk, cilvēki ir pārbaudīt out 954 00:42:19,680 --> 00:42:22,830 jo tas izskatās super arcane, bet pat ja tas dara to pašu. 955 00:42:22,830 --> 00:42:26,695 Un tā, godīgi sakot, tas ir nevajadzīgi vizuāli komplekss risinājums 956 00:42:26,695 --> 00:42:27,320 problēmai. 957 00:42:27,320 --> 00:42:29,580 >> Tas joprojām ir labs dizains, pieci no pieciem projektēšanai, 958 00:42:29,580 --> 00:42:33,140 vai tas ir šajā grupā notācija vai rādītājs notācija. 959 00:42:33,140 --> 00:42:36,299 But-- jo īpaši, ja mēs vēlāk, veicot in PSET 5 960 00:42:36,299 --> 00:42:39,340 kad mēs īstenotu šo vārdnīcu, ka Es esmu minēts pāris times-- 961 00:42:39,340 --> 00:42:42,300 mēs tiešām rūp zema līmeņa atmiņas adreses 962 00:42:42,300 --> 00:42:44,140 ka mēs patiešām saprotam kas notiek. 963 00:42:44,140 --> 00:42:48,300 >> Bet, tagad, izrādās, ka šis līnija kodu šeit kvadrātiekavās 964 00:42:48,300 --> 00:42:49,900 nav īsti nepastāv. 965 00:42:49,900 --> 00:42:52,230 Tie ir tas, ko sauc sintaktisko cukurs, kas 966 00:42:52,230 --> 00:42:58,390 ir tikai weirdly foršs veids, kā sakot kompilators pārvērš kvadrātiekavas būt 967 00:42:58,390 --> 00:43:00,420 ka matemātiskā izteiksme. 968 00:43:00,420 --> 00:43:02,660 Tātad, tas ir cilvēks konvencija lai varētu vienkārši uzrakstīt 969 00:43:02,660 --> 00:43:04,220 šie ļoti draudzīgu lietotājam iekavās. 970 00:43:04,220 --> 00:43:06,850 Bet ko kompilators, šķindēt, ir patiešām dara jebkurā laikā 971 00:43:06,850 --> 00:43:10,970 jūs rakstīt to, kas ir iezīmēts līniju 24, zem motora pārsega tas ir patiešām 972 00:43:10,970 --> 00:43:12,330 pārveidojot to šis. 973 00:43:12,330 --> 00:43:16,200 Tas ir tikai vēl patīkamāku kā cilvēkam lasīt un rakstīt kodu, piemēram, līniju 24. 974 00:43:16,200 --> 00:43:18,530 Bet galu galā tie, mācību riteņi pārāk iztrūkt 975 00:43:18,530 --> 00:43:21,780 kad vienu pašu komfortu kļūst spēcīgāka. 976 00:43:21,780 --> 00:43:27,240 >> Labi, lai atgādināt, tad šo bija sava veida lielākā problēma 977 00:43:27,240 --> 00:43:27,807 mēs uzbrauca. 978 00:43:27,807 --> 00:43:30,640 Un tas, ko izraisīja šis viss damn saruna par norādes, 979 00:43:30,640 --> 00:43:32,340 un adreses, un kopēšanas lietas. 980 00:43:32,340 --> 00:43:35,410 Tas bija tāpēc, ka mēs paklupa pār šī stulba, stulba problēma, ar kuru 981 00:43:35,410 --> 00:43:38,830 Es īsteno logically-- ar Lauren šeit par demo un apelsīnu sulu 982 00:43:38,830 --> 00:43:43,770 šajā milk-- perfekti algoritmiski pareiza funkcija 983 00:43:43,770 --> 00:43:47,010 par pārnešana divi mainīgie " vērtības, bet nopelt lieta 984 00:43:47,010 --> 00:43:50,550 nebija nekādu noturīgas, vai pastāvīga, ietekme uz manu kodu. 985 00:43:50,550 --> 00:43:51,820 >> Un kāpēc tas bija? 986 00:43:51,820 --> 00:43:54,650 In Īsumā, kāpēc tas ir īstenošana mijmaiņas 987 00:43:54,650 --> 00:43:58,740 loģiski pareizs, taču nav ietekmes uz mainīgajiem, kas tiek nodots tā, 988 00:43:58,740 --> 00:44:01,119 piemēram, x un y par galveno? 989 00:44:01,119 --> 00:44:02,410 Kāds bija kopsavilkums jautājumā? 990 00:44:02,410 --> 00:44:02,909 Yeah? 991 00:44:02,909 --> 00:44:05,532 Mērķauditorija: Tā mainīgais veikti kopijas mainīgais caurlaides 992 00:44:05,532 --> 00:44:06,240 izmantojot funkciju. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. Malan: Tieši tā, kad jūs iet mainīgie uz funkciju, vai argumenti 994 00:44:09,060 --> 00:44:11,030 par funkciju, viņi garām kopiju, kas 995 00:44:11,030 --> 00:44:14,770 nozīmē, ka jums identisks meklē modelis no bitu gan x un y, 996 00:44:14,770 --> 00:44:15,955 sauc šeit a un b. 997 00:44:15,955 --> 00:44:18,080 Un jūs varat darīt jebko vēlaties ar šīm kopijām, 998 00:44:18,080 --> 00:44:20,657 bet viņi nāksies nē Ietekme uz izsaucēja funkcijas. 999 00:44:20,657 --> 00:44:22,990 Un, patiesībā, mēs vērsa ka attēlu uz ekrāna, atsaukšanu 1000 00:44:22,990 --> 00:44:25,520 pēdējo reizi, saskaņā ar kuru, ja jums patiešām domā par to, kas ir 1001 00:44:25,520 --> 00:44:28,570 notiek Zem hood-- ja Šis ir jūsu datora atmiņā, 1002 00:44:28,570 --> 00:44:31,650 un uz leju, šeit ir rieciens atmiņa tiek izmantota galvenais, 1003 00:44:31,650 --> 00:44:34,020 tas ir rieciens atmiņa tiek izmantota swap, 1004 00:44:34,020 --> 00:44:37,090 un tāpēc pat tad, ja galvenais ir divi mainīgie lielumi, x un y, 1005 00:44:37,090 --> 00:44:41,840 swap varētu būt identiski meklē vērtības, kas abi ir 1 un 2, 1006 00:44:41,840 --> 00:44:44,520 bet viņi pilnīgi dažādi gabalos atmiņas. 1007 00:44:44,520 --> 00:44:46,130 >> Tāpēc mums ir nepieciešams rast risinājumu šo. 1008 00:44:46,130 --> 00:44:51,580 Un godīgi sakot, šķiet, ka mēs tagad ir risinājums šai problēmai, labi. 1009 00:44:51,580 --> 00:44:55,760 Ja mums tagad ir spēja manipulēt lietas veidā adresēm 1010 00:44:55,760 --> 00:44:59,310 un, veida siles un kāpnes stils, veiciet šīs bultas 1011 00:44:59,310 --> 00:45:02,820 un iet visur mēs gribam atmiņā, mēs nevarējām 1012 00:45:02,820 --> 00:45:06,220 atrisināt šo problēmu, iet no galvenā apmainīt 1013 00:45:06,220 --> 00:45:09,650 nav vērtības, mēs vēlamies, lai swap, bet tikai intuitīvi 1014 00:45:09,650 --> 00:45:11,630 ko mēs varētu iet apmainīt vietā? 1015 00:45:11,630 --> 00:45:12,620 >> [Iestarpinot Voices] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. Malan: Kāpēc ne mēs tikai caurlaide tas adreses, vai ne? 1017 00:45:15,244 --> 00:45:17,470 Kāpēc mēs dodam mijmaiņas dārgumu karti, ja jūs, 1018 00:45:17,470 --> 00:45:20,950 kas noved to uz faktiskās vērtības x un y. 1019 00:45:20,950 --> 00:45:24,340 Pieņemsim swap, reāli mainīt šie oriģināli biti, nevis 1020 00:45:24,340 --> 00:45:26,797 tikai iet kopijas bitiem. 1021 00:45:26,797 --> 00:45:29,130 Un tā, patiesībā, tas ir tas, ko ir būs risinājums. 1022 00:45:29,130 --> 00:45:31,899 Šī versija šeit ir skaidri slikts un kļūdains. 1023 00:45:31,899 --> 00:45:35,190 Un tagad, pēc pirmā acu uzmetiena, tas tikai izskatās tāpat mēs pievienojām ķekars zvaigznēm nejauši 1024 00:45:35,190 --> 00:45:37,106 un šķērsoja mūsu pirksti ka tas varētu apkopot. 1025 00:45:37,106 --> 00:45:38,460 Bet, tas tagad būtu apkopot. 1026 00:45:38,460 --> 00:45:40,090 >> Bet pieņemsim redzēt, ko šīs lietas nozīmē. 1027 00:45:40,090 --> 00:45:43,990 Un, diemžēl, autori C varēja izvēlēties citu simbolu 1028 00:45:43,990 --> 00:45:46,380 lai padarītu šo mazliet skaidrāks, bet zvaigzne operators 1029 00:45:46,380 --> 00:45:48,610 ir atšķirīga nozīme divi dažādos kontekstos. 1030 00:45:48,610 --> 00:45:50,890 Un mēs esam redzējuši gan, bet pieņemsim atšķirt. 1031 00:45:50,890 --> 00:45:55,310 >> Tātad augšā tur, kad es esmu mainījusies a un b 1032 00:45:55,310 --> 00:46:00,470 no tā krama grāds slikti versija int zvaigznes A un B, 1033 00:46:00,470 --> 00:46:01,740 Agrāk bija veseli skaitļi. 1034 00:46:01,740 --> 00:46:05,752 Kas ir a un b tagad labs, zaļā versija? 1035 00:46:05,752 --> 00:46:06,900 Viņi adreses. 1036 00:46:06,900 --> 00:46:09,610 Adreses ko, lai būtu skaidrs? 1037 00:46:09,610 --> 00:46:10,770 Adreses veseli skaitļi. 1038 00:46:10,770 --> 00:46:12,520 Tātad fakts, ka es esmu sakot int zvaigzne līdzekļus 1039 00:46:12,520 --> 00:46:15,440 tas ir adrese vesels skaitlis, kas īpaši. 1040 00:46:15,440 --> 00:46:19,120 >> Tāpēc tagad paziņojuma līnijas kodu, kaut kas cits ir mainījies too. 1041 00:46:19,120 --> 00:46:22,770 TMP nemainās, jo tas ir tikai pagaidu skaitlis, 1042 00:46:22,770 --> 00:46:24,110 nē atmiņas maģija tur. 1043 00:46:24,110 --> 00:46:26,370 Bet tagad ir zvaigzne. 1044 00:46:26,370 --> 00:46:28,560 Un, patiesībā, katrs Citas norādes uz A un B, 1045 00:46:28,560 --> 00:46:31,780 ievērosiet, ka viss, kas ir mainās no sarkanas uz zaļu 1046 00:46:31,780 --> 00:46:34,209 ir tas, ka es esmu prefixing šie mainīgie ar zvaigznēm. 1047 00:46:34,209 --> 00:46:35,750 Jo es negribu kopēt a un b. 1048 00:46:35,750 --> 00:46:40,350 Jo, ja es tikai kopēt a un b un mijmaiņas a un b, ko es patiesībā pārnešana? 1049 00:46:40,350 --> 00:46:43,760 Tikai adreses, es gribu, lai mijmaiņas kas ir šajās adresēs. 1050 00:46:43,760 --> 00:46:44,860 Es gribu iet uz turieni. 1051 00:46:44,860 --> 00:46:48,000 Un tā zvaigzne operators iekšā manas funkcijas, 1052 00:46:48,000 --> 00:46:51,700 ne iekšpusē parametru sarakstā, nozīmē doties uz šīm adresēm 1053 00:46:51,700 --> 00:46:54,490 un reāli mainīt šīs vērtības. 1054 00:46:54,490 --> 00:46:56,500 >> Tātad, ko dara attēlu Tagad izskatās vietā. 1055 00:46:56,500 --> 00:47:03,250 Nu, ja tā vietā, es esmu iet kas par A un B nevis 1. un 2-- 1056 00:47:03,250 --> 00:47:05,790 Man tiešām ir nepieciešams, lai pievienotu viena cita definīcija šeit. 1057 00:47:05,790 --> 00:47:09,030 Tātad pieņemsim, ka šajā rieciens atmiņas ir vietā 10. 1058 00:47:09,030 --> 00:47:12,960 >> Tas ir vietā 11, bet tas ir mazliet vienkāršošanu, 1059 00:47:12,960 --> 00:47:18,900 Man tagad ir divas izvēles man iet x un y vai man nodot to adreses? 1060 00:47:18,900 --> 00:47:22,500 Ja es iet to adreses kā šis, es tikko 1061 00:47:22,500 --> 00:47:25,390 tagad ir nepieciešams, lai īstenotu swap par zaļo kodu 1062 00:47:25,390 --> 00:47:29,080 tā, ka tad, kad tas redz un kad to redz b, tas nav tikai kopēt A un B 1063 00:47:29,080 --> 00:47:30,540 un pārvietot pienu un apelsīnu sulu. 1064 00:47:30,540 --> 00:47:32,664 Piena un apelsīnu sula metafora tagad sabojājas, 1065 00:47:32,664 --> 00:47:35,060 jo tie ir kausi Šķidro un ne kartēm. 1066 00:47:35,060 --> 00:47:37,750 Mums nevis jāiet lai risinātu 10. un mēs 1067 00:47:37,750 --> 00:47:42,420 jādodas, lai risinātu 11, un tad veikt šo pārnešana loģiku. 1068 00:47:42,420 --> 00:47:45,580 >> Tātad loģika ir tas pats, bet mums vajag nedaudz citu ceļu 1069 00:47:45,580 --> 00:47:47,160 piekļūt minētos mainīgos lielumus. 1070 00:47:47,160 --> 00:47:52,400 Un tā galu galā, ko Programma ir izskatās tas ir. 1071 00:47:52,400 --> 00:47:56,610 In swap.c burtiski kopēts un ielīmēt zaļo versiju. 1072 00:47:56,610 --> 00:47:58,450 Bet man ir nepieciešams veikt vienu maiņu. 1073 00:47:58,450 --> 00:48:00,180 Tas nav pietiekami, tikai, lai mainītu swap. 1074 00:48:00,180 --> 00:48:03,830 Kādi citi līnija koda man ir nepieciešams, lai mainītu? 1075 00:48:03,830 --> 00:48:04,330 Yeah? 1076 00:48:04,330 --> 00:48:05,770 >> Mērķauditorija: Kur tas aizņem argumentus. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. Malan: Kur tā uzņemas savu argumentāciju. 1078 00:48:07,603 --> 00:48:09,985 Tātad, ja es ritiniet līdz galvenais, es nevar vienkārši iet uz x un y, 1079 00:48:09,985 --> 00:48:12,820 un, es apsolu, pēdējais gabals jaunās sintakses šodien. 1080 00:48:12,820 --> 00:48:17,200 Man vajag, lai iet ne x un y bet adrese x un y. 1081 00:48:17,200 --> 00:48:20,400 Un izrādās, simbols ka autori C izvēlējās 1082 00:48:20,400 --> 00:48:23,860 ir, ja jūs izmantojat aizvieto & zīmes šeit, nevis jaukt ar Bitu līmeņa Ampersand, 1083 00:48:23,860 --> 00:48:27,130 ja jūs izmantojat aizvieto & zīmes šeit un Ampersand šeit, 1084 00:48:27,130 --> 00:48:29,570 šis skaitļi par Jums, kāda ir adrese x, 1085 00:48:29,570 --> 00:48:31,740 varbūt tas ir 10, kāda ir adrese y, varbūt tas ir 1086 00:48:31,740 --> 00:48:35,400 11, un iet tiem, vietā. 1087 00:48:35,400 --> 00:48:37,210 >> Tik daudz, lai absorbētu visu uzreiz. 1088 00:48:37,210 --> 00:48:40,190 Bet pieņemsim redzēt tagad ātri Mūsu atlikušās četras minūtes 1089 00:48:40,190 --> 00:48:42,150 kur lietas var noiet greizi. 1090 00:48:42,150 --> 00:48:45,120 Un kā malā, patiesībā Paņēmu šo attēlu, 1091 00:48:45,120 --> 00:48:46,920 TF ņēma šo attēlu gadu vai divus atpakaļ. 1092 00:48:46,920 --> 00:48:49,190 Tātad šis ir atpakaļ stūris no Eliot ēdamzālē. 1093 00:48:49,190 --> 00:48:52,310 Norādes ir varbūt visgrūtāk temats, ka mēs segtu CS50. 1094 00:48:52,310 --> 00:48:54,810 Tātad, ja jums jāuztraucas kārtošanas slīpuma ir kā varbūt tas ir 1095 00:48:54,810 --> 00:48:56,770 vairāk par hokeja nūju piemēram, tas, saproti 1096 00:48:56,770 --> 00:49:00,160 mēs esam veida tuvojas maksimumu Noteikumi konceptuālā sarežģītības. 1097 00:49:00,160 --> 00:49:02,300 >> Un es audzināt šo foto, jo es zvēru 1098 00:49:02,300 --> 00:49:05,920 Dievam, kas 1996. rudenī, kad es ņēma CS50 ar manu mācību kolēģiem, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, viņš sēdēja man noteikti stūris Eliot D. zālē pusdienu laikā, 1100 00:49:09,620 --> 00:49:12,330 vai vakariņas, vai kaut kas, lai mēģinātu lai palīdzētu man saprast norādes. 1101 00:49:12,330 --> 00:49:16,520 Un tas ir, ja es biju nedēļas pēc tā tika ieviesta lekcijā kad 1102 00:49:16,520 --> 00:49:18,170 Es beidzot saprata norādes. 1103 00:49:18,170 --> 00:49:20,590 Un es esmu cer, ka šis klikšķi daudz ātrāk par jums. 1104 00:49:20,590 --> 00:49:23,540 Bet saprotu, tas absolūti vidū tad sarežģītākus tēmas 1105 00:49:23,540 --> 00:49:24,420 mēs esam paskatījās. 1106 00:49:24,420 --> 00:49:25,819 Bet tas ir viens no spēcīgākajiem. 1107 00:49:25,819 --> 00:49:28,860 Un, kad jums to, tas ir patiešām visu tikai gatavojas beidzot sanākt kopā. 1108 00:49:28,860 --> 00:49:31,460 Tik drošs, tas nav vajag visiem izlietnes šodien. 1109 00:49:31,460 --> 00:49:32,980 >> Tātad, šeit ir pēdējā programma mēs ejam apskatīt. 1110 00:49:32,980 --> 00:49:35,605 Un mēs ejam, lai izbeigtu ar ātri trīs minūtes Claymation 1111 00:49:35,605 --> 00:49:37,030 , ko mūsu draugs, Nick Parlante. 1112 00:49:37,030 --> 00:49:41,440 Lūk programma, ka top divi līnijas deklarē mainīgo x un y. 1113 00:49:41,440 --> 00:49:44,780 Abi ir adreses integers, aka norādes. 1114 00:49:44,780 --> 00:49:48,125 Mēs pēc tam piešķirt pietiekami atmiņa glabāt int 1115 00:49:48,125 --> 00:49:51,344 un saglabāt adresi Šīs atmiņas x. 1116 00:49:51,344 --> 00:49:53,260 Tātad, tas ir vēl vienkāršāk kā piemēru iepriekš. 1117 00:49:53,260 --> 00:49:56,100 Dodiet man četri baiti atmiņas, tas ir lielums int, 1118 00:49:56,100 --> 00:49:58,000 un nodot šo adresi x. 1119 00:49:58,000 --> 00:50:01,070 Šī līnija šeit nozīmē iet uz adresi x 1120 00:50:01,070 --> 00:50:05,270 un nodot nozīmi life skaits 42 tur. 1121 00:50:05,270 --> 00:50:07,710 Bet tas line mani uztrauc. 1122 00:50:07,710 --> 00:50:12,620 Star y nozīmē iet uz adresi y, un nodot nelaimīgs skaitlis 13 tur. 1123 00:50:12,620 --> 00:50:15,780 Kāpēc tas ir bīstami, šajā brīdī Jo story-- kaut arī strauji pastāstīja 1124 00:50:15,780 --> 00:50:17,980 mūsu Maz minūtēs here-- kāpēc tas ir slikti 1125 00:50:17,980 --> 00:50:19,660 man teikt, iet uz adresi y? 1126 00:50:19,660 --> 00:50:21,077 >> Mērķauditorija: Jums nav [nedzirdama]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. Malan: man nav likt neko y. 1128 00:50:22,910 --> 00:50:25,520 Tātad, kas ir vērtība y, šajā brīdī stāsts? 1129 00:50:25,520 --> 00:50:26,570 Mums nav ne jausmas. 1130 00:50:26,570 --> 00:50:29,190 Tas ir daži atkritumu vērtība un nav arī mīkstās zināt. 1131 00:50:29,190 --> 00:50:32,532 Ja mēs varētu nonākt pie šīs piezīmes. 1132 00:50:32,532 --> 00:50:34,832 >> [Video atskaņošana] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey, Mīkstās, mosties. 1134 00:50:36,500 --> 00:50:39,140 Ir pienācis laiks, lai rādītāju jautri. 1135 00:50:39,140 --> 00:50:40,210 >> -Kas tas ir? 1136 00:50:40,210 --> 00:50:41,690 Uzziniet par norādes? 1137 00:50:41,690 --> 00:50:43,570 Ak, našķis. 1138 00:50:43,570 --> 00:50:46,600 >> -Labi, Lai sāktu, es domāju, mēs esam būs nepieciešama pāris norādes. 1139 00:50:46,600 --> 00:50:47,380 >> -LABI. 1140 00:50:47,380 --> 00:50:51,120 Šis kods piešķir divas norādes kas var norādīt uz veseliem skaitļiem. 1141 00:50:51,120 --> 00:50:53,557 >> -OK, Arī es redzu divas norādes, taču tie 1142 00:50:53,557 --> 00:50:55,140 nešķiet, ka norādot uz kaut ko. 1143 00:50:55,140 --> 00:50:55,970 >> -That Ir labi. 1144 00:50:55,970 --> 00:50:58,100 Sākotnēji norādes nenorāda uz neko. 1145 00:50:58,100 --> 00:51:00,950 Lietas, tie norāda, ir šādi sauc pointees un to izveidošanas 1146 00:51:00,950 --> 00:51:02,330 ir atsevišķs pasākums. 1147 00:51:02,330 --> 00:51:03,210 >> OH, pa labi, pa labi. 1148 00:51:03,210 --> 00:51:03,940 Es zināju, ka. 1149 00:51:03,940 --> 00:51:05,730 Par pointees ir atsevišķi. 1150 00:51:05,730 --> 00:51:08,310 Tātad, kā jūs piešķirt pointee? 1151 00:51:08,310 --> 00:51:11,960 >> -OK, Arī šis kods piešķir jauna skaitlis pointee, 1152 00:51:11,960 --> 00:51:15,050 un Šajā daļā ir x, lai norādītu uz to. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey, Kas izskatās labāk. 1154 00:51:16,240 --> 00:51:17,743 Tātad, lai tas kaut ko darīt. 1155 00:51:17,743 --> 00:51:23,580 >> -OK, Es ņemšu dereference rādītāja x, lai saglabāt numuru 42 savā pointee. 1156 00:51:23,580 --> 00:51:27,130 Par šo triks, man būs nepieciešams mans burvju nūjiņa no dereferencing. 1157 00:51:27,130 --> 00:51:30,200 >> -Jūsu Burvju zizlis no dereferencing? 1158 00:51:30,200 --> 00:51:32,310 Uh, ka tas ir lieliski. 1159 00:51:32,310 --> 00:51:34,270 >> -Tas Ir tas kods izskatās. 1160 00:51:34,270 --> 00:51:35,970 Es ņemšu tikai izveidota skaitu and-- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SOUND] 1162 00:51:37,070 --> 00:51:39,140 >> -Hey, Izskatās tur tas notiek. 1163 00:51:39,140 --> 00:51:43,980 Tātad, darot dereference pret x šādi bultiņas, lai piekļūtu savu pointee. 1164 00:51:43,980 --> 00:51:46,150 Šajā gadījumā, lai saglabātu 42 tur. 1165 00:51:46,150 --> 00:51:50,700 Hey, mēģiniet izmantot to, lai saglabātu numuru 13 caur otras rādītājs, y. 1166 00:51:50,700 --> 00:51:51,840 >> -LABI. 1167 00:51:51,840 --> 00:51:56,270 Es ņemšu tikai iet pār šeit y, un saņemt numuru 13 iestatīšanu. 1168 00:51:56,270 --> 00:52:00,380 Un tad paņem zizlis dereferencing un just-- 1169 00:52:00,380 --> 00:52:01,646 >> [BUZZER SOUND] 1170 00:52:01,646 --> 00:52:04,080 >> OH, hey, kas nestrādāja. 1171 00:52:04,080 --> 00:52:06,470 Teiksim, uh, mīkstās, man nav domāju dereferencing 1172 00:52:06,470 --> 00:52:10,850 y ir laba ideja, jo nosakot up pointee ir atsevišķs pasākums. 1173 00:52:10,850 --> 00:52:12,480 Un es nedomāju, ka mēs kādreiz to darīja. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Labs punkts. 1175 00:52:14,620 --> 00:52:19,810 >> -Yeah, Mēs piešķirti rādītāju, y, bet mēs nekad iestatīt tā, lai norādītu uz pointee. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Ļoti vērīgs. 1177 00:52:21,590 --> 00:52:23,215 -Hey, Jūs meklējat labi tur, mīkstās. 1178 00:52:23,215 --> 00:52:26,390 Vai jūs varat salabot, lai y punkti ar to pašu pointee kā x. 1179 00:52:26,390 --> 00:52:29,290 >> -Sure, Es izmantot savu burvju nūjiņu no rādītāja cesiju. 1180 00:52:29,290 --> 00:52:31,970 >> -Vai Tas būs problēma, tāpat kā agrāk? 1181 00:52:31,970 --> 00:52:33,790 >> -Nē, Tas nepieskaras pointees. 1182 00:52:33,790 --> 00:52:35,840 Tas tikai maina vienu rādītāju norādīt uz to pašu thing-- 1183 00:52:35,840 --> 00:52:36,465 >> [Paukšķi] 1184 00:52:36,465 --> 00:52:37,450 --as citu. 1185 00:52:37,450 --> 00:52:38,440 >> -Ak, es redzu. 1186 00:52:38,440 --> 00:52:41,200 Tagad y norāda uz to pašu vietu kā x. 1187 00:52:41,200 --> 00:52:42,950 Tātad, jāgaida, tagad y ir fiksēts. 1188 00:52:42,950 --> 00:52:44,110 Tā ir pointee. 1189 00:52:44,110 --> 00:52:47,779 Tātad jūs varat izmēģināt zizli no dereferencing vēlreiz nosūtīt 13 pārvērtībām. 1190 00:52:47,779 --> 00:52:51,110 >> OH, OK, šeit iet. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey, Apskatīt to. 1192 00:52:52,330 --> 00:52:53,570 Tagad dereferencing darbus y. 1193 00:52:53,570 --> 00:52:57,900 Un tāpēc, ka norādes tiek daloties ka vienā pointee, viņi abi skatiet 13. 1194 00:52:57,900 --> 00:52:59,952 >> -Yeah, Koplietošana, uh, neatkarīgi. 1195 00:52:59,952 --> 00:53:01,535 Tātad, mēs gatavojamies, lai pārslēgtos vietām tagad? 1196 00:53:01,535 --> 00:53:03,730 >> OH, izskatās, mēs esam ārā no laika. 1197 00:53:03,730 --> 00:53:04,660 >> -But-- 1198 00:53:04,660 --> 00:53:06,520 >> -Just Atcerēties trīs rādītāju noteikumus. 1199 00:53:06,520 --> 00:53:09,550 Number 1, pamatstruktūra ir tas, ka jums ir rādītājs, 1200 00:53:09,550 --> 00:53:11,630 un tas norāda vairāk nekā uz pointee. 1201 00:53:11,630 --> 00:53:13,740 Bet rādītājs un pointee ir atsevišķi. 1202 00:53:13,740 --> 00:53:15,620 Un kopējā kļūda ir izveidot rādītāju 1203 00:53:15,620 --> 00:53:18,000 bet aizmirst to pointee. 1204 00:53:18,000 --> 00:53:21,170 >> Number 2, rādītājs dereferencing sākas rādītāja 1205 00:53:21,170 --> 00:53:24,020 un seko tās bultiņas pār Lai piekļūtu savu pointee. 1206 00:53:24,020 --> 00:53:27,815 Kā mēs visi zinām, tas darbojas tikai tad, ja pastāv ir pointee, kāda veida saņem atpakaļ 1207 00:53:27,815 --> 00:53:29,260 lemt numuru 1. 1208 00:53:29,260 --> 00:53:31,990 >> Number 3, rādītājs piešķiršana notiek vienu rādītāju 1209 00:53:31,990 --> 00:53:35,330 un maina to norādīt uz pats pointee kā cits rādītājs. 1210 00:53:35,330 --> 00:53:37,150 Tātad, pēc uzdevuma, divas norādes 1211 00:53:37,150 --> 00:53:40,927 norādīs uz to pašu pointee, dažreiz, ka sauc dalīšana. 1212 00:53:40,927 --> 00:53:42,510 Un tas viss notiek ar to, tiešām. 1213 00:53:42,510 --> 00:53:43,130 Bye-bye tagad. 1214 00:53:43,130 --> 00:53:43,475 >> [Beigtu atskaņošanu] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. Malan: Tas ir tas CS50. 1216 00:53:44,830 --> 00:53:46,246 Pateicoties profesoram Nick Parlante. 1217 00:53:46,246 --> 00:53:47,730 Redzēsim tevi nākamnedēļ. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELECTRONIC mūzikas atskaņošanai] 1220 00:53:56,435 --> 00:57:22,775