1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorna: Dobrodošli A5, svatko. 3 00:00:07,820 --> 00:00:11,270 Imamo uzbudljiv tjedan pred nama, uglavnom zato što postoji toliko mnogo novih 4 00:00:11,270 --> 00:00:12,350 lica u ovoj sobi. 5 00:00:12,350 --> 00:00:12,920 To je divno. 6 00:00:12,920 --> 00:00:15,740 Mnogo vas je ovdje slučajno, što je još bolje. 7 00:00:15,740 --> 00:00:18,220 Dakle, nadamo se da ćete zadržati pridružio nam se. 8 00:00:18,220 --> 00:00:20,220 >> Ovaj tjedan ćemo provesti Glavnina sekcije 9 00:00:20,220 --> 00:00:21,870 priprema za kviz. 10 00:00:21,870 --> 00:00:26,580 Dakle, što je po našem dnevnom redu, idemo razgovarati malo o resursima za klasu, 11 00:00:26,580 --> 00:00:30,350 ali za kviz, a zatim ponovno provode najveći dio klase pričaju 12 00:00:30,350 --> 00:00:31,390 O pitanjima. 13 00:00:31,390 --> 00:00:33,900 Nakon što smo učinili da odgovorite na pitanja, ili ako je vaša pitanja 14 00:00:33,900 --> 00:00:39,010 naravno, nas dovesti do neke kodiranje, ja ima uzorak problema iz midterms 15 00:00:39,010 --> 00:00:43,180 prošlosti da ćemo kodirati uživo u poglavlju zajedno koji također dovesti do neke druge 16 00:00:43,180 --> 00:00:45,420 dobre teme na naslovnici. 17 00:00:45,420 --> 00:00:48,280 >> Tako je prvi, kao što smo prošli za Ovih par tjedana da vas podsjetim 18 00:00:48,280 --> 00:00:51,700 Dečki, postoje tona resursa dostupni za ovaj tečaj. 19 00:00:51,700 --> 00:00:55,020 Mnogi od njih će biti nevjerojatno korisno za vas kao što ste i dalje 20 00:00:55,020 --> 00:00:57,280 studija za kviz 0, jer je u utorak poslijepodne. 21 00:00:57,280 --> 00:00:59,630 Dakle, svi vi bili studiranje za malo. 22 00:00:59,630 --> 00:01:02,640 >> Tu su bilješke s predavanja i izvor kod koji bi trebali 23 00:01:02,640 --> 00:01:04,050 svakako provjerite. 24 00:01:04,050 --> 00:01:05,019 Pogledajte kratke hlače. 25 00:01:05,019 --> 00:01:07,470 Provjerite study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 A onda, navedene u nastavku, broj drugih resursa. 27 00:01:11,770 --> 00:01:14,020 >> Opet, kviz 0 je sutra po jedan. 28 00:01:14,020 --> 00:01:18,230 Ako niste već učinili, provjerite out O Kviz 0 dokumenta o 29 00:01:18,230 --> 00:01:21,370 Naravno homepage shvatiti gdje ste uzimajući kviz. 30 00:01:21,370 --> 00:01:25,770 Kviz počinje u 1:10 i završava 70 minuta kasnije. 31 00:01:25,770 --> 00:01:29,610 Dakle, ako se pojavi nakon 1:10, ti si će se da je mnogo manje minuta 32 00:01:29,610 --> 00:01:30,940 od 70 da se kviz. 33 00:01:30,940 --> 00:01:33,570 Tako bi bili sigurni da ste na vrijeme. 34 00:01:33,570 --> 00:01:38,690 Ako ste student ili produženje ima neki drugi razlozi za ispitivanje, što 35 00:01:38,690 --> 00:01:40,400 Ne može biti u jednom sutra. 36 00:01:40,400 --> 00:01:43,540 Ali opet, provjerite O kviz 0 dokumentirati kako bi bili sigurni da znate kada 37 00:01:43,540 --> 00:01:44,760 ti si uzimajući kviz. 38 00:01:44,760 --> 00:01:46,440 Napisao sam 75 minuta ovdje. 39 00:01:46,440 --> 00:01:48,580 Mislim da je u pravu, a ne 70. 40 00:01:48,580 --> 00:01:53,420 >> Obuhvaća sav materijal od tjedan dana 0 na prošlotjednom predavanju u srijedu. 41 00:01:53,420 --> 00:01:59,350 I opet, po ovom kvizu, po koji Dokument, te dobiti jedan dvostrani i 8 42 00:01:59,350 --> 00:02:03,770 1/2 za 11 list papira koji ste dobili koristiti kao bilješke tijekom kviza. 43 00:02:03,770 --> 00:02:08,570 Mnogi ljudi, ako ne i većina ljudi, imaju otkrili da sam većina koristan način 44 00:02:08,570 --> 00:02:11,970 na studij za kviz je napraviti istraživanje lista, 45 00:02:11,970 --> 00:02:13,730 jedan-mo, od svoje vlastite. 46 00:02:13,730 --> 00:02:17,710 Pa pogledajte one posljednje, ako da ste vidjeli one prošle. 47 00:02:17,710 --> 00:02:19,960 Posegnite za prijatelje kako bi vidjeli što Stavljaju se na njih. 48 00:02:19,960 --> 00:02:23,610 >> No, hands-dolje, najbolji način možete Studija je proći kroz sve te 49 00:02:23,610 --> 00:02:26,530 strugati ga na ono što treba ili ne pripadaju tom listu 50 00:02:26,530 --> 00:02:30,570 papir, jer to je samo jako koristan način za vas da bi bili sigurni 51 00:02:30,570 --> 00:02:33,620 idete kroz sve i imaju neke upoznatost s njim. 52 00:02:33,620 --> 00:02:36,690 Većina ljudi, možemo naći, iako su su list papira sjedi 53 00:02:36,690 --> 00:02:39,840 uz njih se na test, ne okrenuti na njega, jer je, opet, to je vrlo 54 00:02:39,840 --> 00:02:43,290 Proces ide kroz informacije pomogao im da ga nauče. 55 00:02:43,290 --> 00:02:45,370 >> Da li itko ima bilo kakvih pitanja o kvizu 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Ima sve - 58 00:02:51,450 --> 00:02:53,230 Neću raditi predstavu od ruke. 59 00:02:53,230 --> 00:02:53,550 Ništa za to. 60 00:02:53,550 --> 00:02:54,790 Htjela sam pitati tko počeo studirati. 61 00:02:54,790 --> 00:02:58,360 Ali ja ne želim napraviti nije sve podići svoje ruke. 62 00:02:58,360 --> 00:03:01,290 Dakle, kao što sam rekao - da, AVI, samo naprijed. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Što će biti korisna stvar staviti na jednu pager? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: To je do vas. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorna: Dobivate koristiti svoj sud. 66 00:03:08,210 --> 00:03:13,220 Korisne stvari koje treba staviti na jednu pager, Ako ste zbunjeni o velikim O 67 00:03:13,220 --> 00:03:17,510 Trajanje različitih vrsta pretraživanja te vrste, pokrij se nalazi u 68 00:03:17,510 --> 00:03:18,760 ruci kicoš grafikon. 69 00:03:18,760 --> 00:03:22,250 Na taj način, ako ste se pitali kako na kviz, ne morate probati i lik 70 00:03:22,250 --> 00:03:23,560 je ili razlog kroz izvođenja. 71 00:03:23,560 --> 00:03:24,730 Vi samo možete ga kopirati dolje. 72 00:03:24,730 --> 00:03:28,320 Ako pogledate na kvizovima prošlosti, puno puta, tamo je Trajanje pitanja. 73 00:03:28,320 --> 00:03:34,150 Tako da će biti primjer dobre stvar staviti na jednu pager. 74 00:03:34,150 --> 00:03:37,450 >> Ostale dobre stvari staviti na, ako ste zbunjeni o tome kako da se proglasi 75 00:03:37,450 --> 00:03:40,570 funkcija ili što različiti dijelovi Funkcija deklaracije su, pisanje 76 00:03:40,570 --> 00:03:43,400 da tamo, generički verzija i onda možda primjer. 77 00:03:43,400 --> 00:03:47,290 Ako ste zbunjeni o tome naputke, dijagram kako pokazivače rad 78 00:03:47,290 --> 00:03:48,660 Vjerojatno jako korisno. 79 00:03:48,660 --> 00:03:52,440 Ako ste zbunjeni o rekurziju, a kušati rekurzivna funkcija na tu 80 00:03:52,440 --> 00:03:54,980 može i dokazati da se stvarno od pomoći. 81 00:03:54,980 --> 00:03:57,290 Znači li to da vam dati neke ideje? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Morate shvatiti Cijeli proces izrade, kao i 83 00:04:01,820 --> 00:04:03,220 kako se to sve radi? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorna: Sve koja je bila pokrivena mogli 85 00:04:06,620 --> 00:04:08,060 pojaviti na kvizu. 86 00:04:08,060 --> 00:04:08,930 Pitanja - 87 00:04:08,930 --> 00:04:11,300 ali opet, neke stvari će biti ponderirana jako od drugih. 88 00:04:11,300 --> 00:04:14,330 Neke stvari su se opet i opet u razredu, u 89 00:04:14,330 --> 00:04:15,590 Predavanje i sekcija. 90 00:04:15,590 --> 00:04:17,220 Ostale stvari koje nisu došao do koje često. 91 00:04:17,220 --> 00:04:22,900 >> Razgovarali smo puno o # uključiti i -Ja se nešto i što one znače u 92 00:04:22,900 --> 00:04:24,390 Proces kompilacija. 93 00:04:24,390 --> 00:04:29,120 Razgovarali smo puno o GDB, drže, one zastavama koje koristimo kada 94 00:04:29,120 --> 00:04:33,100 sastavimo nešto, a što make15, na primjer, jako 95 00:04:33,100 --> 00:04:34,510 znači i uistinu. 96 00:04:34,510 --> 00:04:38,110 Nismo govoriti što više o svaki korak u 97 00:04:38,110 --> 00:04:39,240 Proces kompilacija. 98 00:04:39,240 --> 00:04:40,410 Još uvijek smo razgovarali o tome. 99 00:04:40,410 --> 00:04:42,550 Dakle, to je još uvijek nešto što trebaju biti upoznati s. 100 00:04:42,550 --> 00:04:44,610 Ali opet, nećemo biti - 101 00:04:44,610 --> 00:04:49,140 stvari koje dolaze češće u razredu su više vjerojatno da će doći do više 102 00:04:49,140 --> 00:04:52,495 Često i biti jače vagan na kvizu. 103 00:04:52,495 --> 00:04:53,280 >> Cool. 104 00:04:53,280 --> 00:04:54,580 Bilo koja druga pitanja o kvizu 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> U redu, pa sam stavio popis teme na brodu. 107 00:05:00,050 --> 00:05:01,550 Prošao sam kroz nastavni plan i program. 108 00:05:01,550 --> 00:05:07,340 Prošao sam kroz pregled dionici sinoć i oni slajdovi smisliti 109 00:05:07,340 --> 00:05:13,710 s ne-iscrpan popis tema da smo do sada prekriven CS50 110 00:05:13,710 --> 00:05:16,800 i stvari koje bi mogle pojaviti na kvizu. 111 00:05:16,800 --> 00:05:19,900 Dakle, ja ne idem kroz svaki od njih. 112 00:05:19,900 --> 00:05:22,370 To bi se puno više vremena nego što imamo sada. 113 00:05:22,370 --> 00:05:26,880 Ali sam stavio ovo ovdje se nadamo gurkanje sjećanju kao na stvari koje mogu 114 00:05:26,880 --> 00:05:28,420 ili možda neće biti upoznat s tobom. 115 00:05:28,420 --> 00:05:32,850 >> I volio bih provesti većinu poglavlje odgovoriti na vaša pitanja o 116 00:05:32,850 --> 00:05:35,130 Ove teme, teme koje Ovdje nisu pokriveni. 117 00:05:35,130 --> 00:05:36,130 Možemo pisati pseudo kod. 118 00:05:36,130 --> 00:05:40,010 Možemo pisati pravi kod kako bi se osiguralo da ste - 119 00:05:40,010 --> 00:05:44,280 Ja mogu odgovoriti na vaše pitanje i pomoći svatko iz temelja razumiju 120 00:05:44,280 --> 00:05:48,330 Puno tih tema, tako da ćete se osjećati pripremljeni i ugodno ide u 121 00:05:48,330 --> 00:05:50,150 Sutra kviz. 122 00:05:50,150 --> 00:05:52,300 Tako je čitao preko popisa. 123 00:05:52,300 --> 00:05:54,780 Vi nadamo su došli u poglavlju s nekim pitanjima, kao dobro. 124 00:05:54,780 --> 00:05:58,480 Kada ste spremni, neka digne ruku pa ćemo početi. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Imajte na umu, da imate pitanja, ne postoje glupa pitanja. 127 00:06:05,200 --> 00:06:06,250 Čuli smo da je dosta. 128 00:06:06,250 --> 00:06:09,490 I pitanja koja imate, ja sam spreman kladiti, mnogi drugi ljudi i 129 00:06:09,490 --> 00:06:11,740 sjedim ovdje i gledam online ima kao dobro. 130 00:06:11,740 --> 00:06:13,770 Tako da samo može pomoći ljudima postavljajući pitanja. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> Marcus: Između dimnjaka i heap, postoji unaprijed dodijeljeno 133 00:06:18,040 --> 00:06:22,880 Postotak memorije koja se definira kao ovo je za stog ili za otpatke? 134 00:06:22,880 --> 00:06:25,010 Ili kako to ide, točno? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorna: Veliko pitanje. 136 00:06:26,230 --> 00:06:28,640 Idem natrag u tragovima malo. 137 00:06:28,640 --> 00:06:30,910 Da li se svi - 138 00:06:30,910 --> 00:06:31,660 budite iskreni. 139 00:06:31,660 --> 00:06:34,130 Znam ja te pitam za podizanje svoje ruku pred svojim vršnjacima. 140 00:06:34,130 --> 00:06:38,510 No, postoje ljudi koji se osjećaju neugodno s dimnjaka i hrpu 141 00:06:38,510 --> 00:06:42,980 , a željeli ići preko toga i što one znače? 142 00:06:42,980 --> 00:06:43,880 Podignite ruku ako je - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Hvala Vam. 145 00:06:45,120 --> 00:06:48,420 Tako ćemo ići preko dimnjaka i heap jako brzo, a zatim 146 00:06:48,420 --> 00:06:50,370 preseliti u odgovaranju na vaše pitanje. 147 00:06:50,370 --> 00:06:58,250 >> Dakle, ako ćemo izvući kutiju za zastupanje memorije na vašem računalu, što su neke 148 00:06:58,250 --> 00:07:02,160 stvari koje idu u ovoj kutiji? 149 00:07:02,160 --> 00:07:03,630 Glavni. 150 00:07:03,630 --> 00:07:04,020 Glavna funkcija. 151 00:07:04,020 --> 00:07:05,890 Odakle glavna ići? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [nečujan]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorna: pa ćemo stavi glavni ovdje. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Što još ide u ovu kutiju? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funkcije koje vi zovete. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorna: Funkcije koje mi zovemo. 159 00:07:19,020 --> 00:07:20,440 A gdje su nestali? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: U dimnjaku. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorna: Oni ići u snopu. 162 00:07:22,380 --> 00:07:27,350 Tako ćemo zvati stvar ovdje dolje stog. 163 00:07:27,350 --> 00:07:31,880 I do vrha, imamo hrpu. 164 00:07:31,880 --> 00:07:35,450 Dakle, memorija nije box baš kao što je ovaj. 165 00:07:35,450 --> 00:07:37,330 Ali, to je zapravo prilično slični. 166 00:07:37,330 --> 00:07:40,840 To će biti puno više od kutije i više, ovisno o tome koliko je velik vaš 167 00:07:40,840 --> 00:07:43,730 Računalo je ili koliko je velik vaš memorije. 168 00:07:43,730 --> 00:07:46,950 >> Na quote-Citat završen "dnu" je dimnjak. 169 00:07:46,950 --> 00:07:50,880 A tu su i više stvari da ide na stog. 170 00:07:50,880 --> 00:07:53,840 I oni ovise o funkcijama imate u svom kodu. 171 00:07:53,840 --> 00:07:57,780 Uvijek imate jednu funkciju u vašem Kod zove glavni, tako da se uvijek 172 00:07:57,780 --> 00:08:00,480 poglavlje ovdje u stog posvećen glavna. 173 00:08:00,480 --> 00:08:03,980 >> Ti dijelovi u dimnjaku se zove stack okviri. 174 00:08:03,980 --> 00:08:09,580 Kad nazovete drugu funkciju, kažu glavni naziva binarno funkciju pretraživanja, 175 00:08:09,580 --> 00:08:11,075 stavimo još jedan okvir na stog. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Konkretnije, mi smo idući u donirati komad memorije na našim 178 00:08:17,320 --> 00:08:22,960 Računalo za pohranu binarno pretraživanje lokalnom varijable i pokrenuti binarni 179 00:08:22,960 --> 00:08:24,150 traži kod. 180 00:08:24,150 --> 00:08:26,810 >> Tako mi zovemo binarno pretraživanje. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 U ovoj komad memorije, idemo pohraniti svoje lokalne varijable. 183 00:08:33,340 --> 00:08:35,270 Idemo se spremiti svoje printf pozive. 184 00:08:35,270 --> 00:08:38,159 Što god se dogodi, da je funkcija će biti pohranjena tamo. 185 00:08:38,159 --> 00:08:40,350 Binary search će izvršavati. 186 00:08:40,350 --> 00:08:42,210 To će završiti izvršenje. 187 00:08:42,210 --> 00:08:47,450 Ono što je riječ u C koji označava da funkcija treba 188 00:08:47,450 --> 00:08:49,306 dovršiti njegovo izvršenje? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Povratak. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorna: Povratak. 191 00:08:50,870 --> 00:08:53,230 Dakle, kad god vidim izjavu povratka, funkcijske završava 192 00:08:53,230 --> 00:08:54,350 kada pogodi koja. 193 00:08:54,350 --> 00:08:56,740 Dakle binarno pretraživanje će pogoditi njegov povratak. 194 00:08:56,740 --> 00:09:01,360 Ovaj dio memorije neće biti se oslobodio. 195 00:09:01,360 --> 00:09:03,510 A glavna će se vratiti na izvršenje. 196 00:09:03,510 --> 00:09:07,240 Dakle, glavna će pauzirati gdje god bio, poziv binarno pretraživanje, dobiti neki povratnu vrijednost, 197 00:09:07,240 --> 00:09:08,700 i nastaviti izvršenje. 198 00:09:08,700 --> 00:09:10,840 Ovaj stack frame će otići. 199 00:09:10,840 --> 00:09:14,810 >> Ako mi zovemo rekurzivna funkcija, koji je funkcija koja sebe naziva više 200 00:09:14,810 --> 00:09:18,480 i više, možemo dobiti - rekao nam učinio binarni pretragu rekurzivno. 201 00:09:18,480 --> 00:09:21,520 Možda se i binarno pretraživanje verziju jednu, pretraživanje po binarnom dva, binarno pretraživanje 202 00:09:21,520 --> 00:09:24,090 tri, pretraživanje po binarnom četiri, pretraživanje po binarnom pet. 203 00:09:24,090 --> 00:09:27,950 A onda je to konačna pretraživanje po binarnom pet će pogoditi osnovni scenarij, i snop 204 00:09:27,950 --> 00:09:31,010 okviri će se vratiti i zadržati zatvaranje dok se ne vratimo na glavni. 205 00:09:31,010 --> 00:09:32,530 Možemo ići preko rekurzije u malo. 206 00:09:32,530 --> 00:09:35,530 No, sve je to reći, ako ste pozivanje više funkcija u vrijeme, 207 00:09:35,530 --> 00:09:39,250 Bit će višestruki stack okviri na stogu. 208 00:09:39,250 --> 00:09:42,900 >> Heap, s druge strane, do ovdje, nije za funkcije, 209 00:09:42,900 --> 00:09:44,380 ne za lokalne varijable. 210 00:09:44,380 --> 00:09:48,920 To je za dinamički premješta varijabli. 211 00:09:48,920 --> 00:09:57,210 Dakle, to su varijable koje mogu biti inicijalizirati bilo glavno ili 212 00:09:57,210 --> 00:09:58,640 funkcija koja glavne pozive. 213 00:09:58,640 --> 00:10:00,790 Bilo gdje u kodu, oni može se ponište. 214 00:10:00,790 --> 00:10:04,360 I inicijalizirati dinamički dodijeljeno promjenjiva. 215 00:10:04,360 --> 00:10:06,970 Što je funkcija u C koristimo? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorna: malloc. 218 00:10:09,240 --> 00:10:10,800 Možete pozvati malloc. 219 00:10:10,800 --> 00:10:12,260 Možete dobiti prostor memorije. 220 00:10:12,260 --> 00:10:15,020 A taj prostor memorije je na hrpi. 221 00:10:15,020 --> 00:10:18,840 A taj prostor memorije ostaje tamo dok vi zovete besplatno. 222 00:10:18,840 --> 00:10:22,670 >> Dakle dinamički dodijeljene varijabli u heap će postojati dok god vama 223 00:10:22,670 --> 00:10:25,250 želim im da postoje, a oni neće odem dok je izričito 224 00:10:25,250 --> 00:10:26,760 reci im da odu. 225 00:10:26,760 --> 00:10:29,670 Možete ih napraviti u jednoj funkciji. 226 00:10:29,670 --> 00:10:31,930 Tu funkciju je stog Okvir će otići. 227 00:10:31,930 --> 00:10:35,490 Ali to promjenjiva i dalje će postojati u hrpi dok se ne oslobodi, 228 00:10:35,490 --> 00:10:39,650 potencijalno funkcijom koja se zove pretraživanje po binarnom ili što god. 229 00:10:39,650 --> 00:10:42,580 >> Pa ti hrpu varijabli ostati tamo koliko god želite 230 00:10:42,580 --> 00:10:43,490 im da ostanu tamo. 231 00:10:43,490 --> 00:10:46,090 I oni bi stavili ovdje. 232 00:10:46,090 --> 00:10:47,450 I onda sljedeći dobiva tamo stavio. 233 00:10:47,450 --> 00:10:50,210 Oni držati uzimajući popunjava, a oni ostati tamo sve dok ne zvati besplatno. 234 00:10:50,210 --> 00:10:52,870 >> A u biti, hrpa i stog, uzimajući Marcusu pitanje, 235 00:10:52,870 --> 00:10:54,500 rastu prema drugome. 236 00:10:54,500 --> 00:10:57,730 A ako su pokrenuti u jednu drugu, ste potrošili svu memoriju u 237 00:10:57,730 --> 00:11:01,330 računalo, a vaš program će prestati zato što nemam više memorije 238 00:11:01,330 --> 00:11:02,420 lijevo koristiti. 239 00:11:02,420 --> 00:11:07,290 Između njih postoji potencijalno druge stvari. 240 00:11:07,290 --> 00:11:10,980 No, za opseg ovog tečaja, te ne morate brinuti o tome. 241 00:11:10,980 --> 00:11:12,020 >> Dakle, to je bio odgovor na vaše pitanje. 242 00:11:12,020 --> 00:11:13,520 Ne brinite za to. 243 00:11:13,520 --> 00:11:15,550 Ali to je bilo davno odgovor. 244 00:11:15,550 --> 00:11:17,800 Sve što trebate znati je hrpu i hrpu - 245 00:11:17,800 --> 00:11:18,900 jedna počinje na dnu. 246 00:11:18,900 --> 00:11:19,570 Stog radi. 247 00:11:19,570 --> 00:11:20,790 Hrpa je tamo gore. 248 00:11:20,790 --> 00:11:21,990 Oni će rasti bliže jedan drugom. 249 00:11:21,990 --> 00:11:23,110 >> A ako se dotakne, to je problem. 250 00:11:23,110 --> 00:11:24,500 Pobjegao si iz memorije. 251 00:11:24,500 --> 00:11:28,760 No, isto tako, osim znajući gdje oni su, što je pohranjena u oba 252 00:11:28,760 --> 00:11:30,512 stog i hrpa. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> Curtis: Kad se sudare, je da stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorna: Kad se sudare, to nije stack overflow. 256 00:11:35,670 --> 00:11:38,340 Stack overflow je drugo područje da možemo ići preko ako želite. 257 00:11:38,340 --> 00:11:40,020 U redu, vratit ćemo se na to u malo. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Što je riječ zove kad su hit jedni druge, 259 00:11:42,730 --> 00:11:44,450 stog i hrpa? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorna: Za sada, ne brini se. 261 00:11:46,640 --> 00:11:47,750 Dovoljno je znati - 262 00:11:47,750 --> 00:11:50,530 Ja ću odgovoriti na to pitanje nakon predavanja. 263 00:11:50,530 --> 00:11:52,680 Ako im se miješaju, što ponestalo memorije, jer nema više 264 00:11:52,680 --> 00:11:53,330 Prostor postoji. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Nažalost, ono što je kriv seg? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorna: segment krivnja može biti pozvan na - 267 00:11:58,710 --> 00:12:02,240 to ovisi zašto zove se SEG krivica je. 268 00:12:02,240 --> 00:12:06,260 Ponekad, vaš stack overflow, to ću kažu seg fault kao pogreška. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Što o dereferencing null varijabla? 270 00:12:08,180 --> 00:12:10,040 Je li to krivnja seg? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorna: Dereferencing null pointer - 272 00:12:11,480 --> 00:12:17,850 U redu, tako da ako imate pointer koji vas izjednačenje na nulu, pokazivače, podsjetimo, 273 00:12:17,850 --> 00:12:20,270 Trgovina memorijske adrese kao svoje vrijednosti. 274 00:12:20,270 --> 00:12:23,660 I null pointer je u suštini skladištenje 0, 0-og 275 00:12:23,660 --> 00:12:26,670 rješavanje u toj varijabli. 276 00:12:26,670 --> 00:12:30,010 Dakle 0x, 0, 0, 0, 0, et cetera. 277 00:12:30,010 --> 00:12:35,030 Taj 0-og adresa u memoriji to nije u našoj slici, to je tamo gore 278 00:12:35,030 --> 00:12:38,800 negdje, koji je rezerviran za računala. 279 00:12:38,800 --> 00:12:40,130 Mi ne smijemo dirati. 280 00:12:40,130 --> 00:12:44,680 >> Dakle, kada je vaš program se izvršava, ako je nešto pokušava ići u memoriju 281 00:12:44,680 --> 00:12:48,990 adresa 0, ona zna da da je prazna vrijednost. 282 00:12:48,990 --> 00:12:50,820 Ona ne zna ništa trebao biti tamo. 283 00:12:50,820 --> 00:12:53,420 Dakle, ako ste probati i koristiti nešto postoji i liječiti nešto slično postoji ili 284 00:12:53,420 --> 00:12:58,355 Pokušavam ići na to mjesto, ti si će dobiti SEG kvar ili pogreška. 285 00:12:58,355 --> 00:13:00,520 Je li to odgovor na vaše pitanje? 286 00:13:00,520 --> 00:13:03,170 >> A sad ćemo se vratiti stog preljeva. 287 00:13:03,170 --> 00:13:09,560 Stvari u dimnjaku, što vi imate vidio prije, u - idemo izvući izbliza 288 00:13:09,560 --> 00:13:11,966 se u stogu okvira. 289 00:13:11,966 --> 00:13:15,050 Može li svatko vidjeti da? 290 00:13:15,050 --> 00:13:16,650 Dakle, mi imamo stog okvir. 291 00:13:16,650 --> 00:13:23,260 Štedimo niz u što lokalna varijabla u ovoj funkciji. 292 00:13:23,260 --> 00:13:29,510 Tako kažu naši polje ima pet mjesta. 293 00:13:29,510 --> 00:13:33,230 Svih pet onih koji će biti pohranjeni u tom stog okvir. 294 00:13:33,230 --> 00:13:37,540 >> Ako počnete pisati izvan Granica u ovom polju - 295 00:13:37,540 --> 00:13:43,990 pa ako ćemo početi pisati u, recimo da je 0. 296 00:13:43,990 --> 00:13:46,800 To su pet indeksa našeg niza. 297 00:13:46,800 --> 00:13:50,980 Ako počnete pisati u indeks 5, koji je nemamo kada imamo 298 00:13:50,980 --> 00:13:55,900 Niz veličine 5, možemo početi pisati u Indeks 6, 7, 8, 9, možemo dobiti Stack 299 00:13:55,900 --> 00:13:57,960 Overflow pogreška. 300 00:13:57,960 --> 00:14:00,510 >> Općenito to nije - 301 00:14:00,510 --> 00:14:04,910 vjerojatno ćete dobiti u nevolji ako idete preko po jedan. 302 00:14:04,910 --> 00:14:08,640 No, općenito, što će se u najveći problem, ako idete preko po mnogo 303 00:14:08,640 --> 00:14:12,770 i idete do sada preko toga što pišete preko povratnu adresu koja 304 00:14:12,770 --> 00:14:16,080 funkcija, koja se nalazi na dnu snopa okvira. 305 00:14:16,080 --> 00:14:16,520 >> Jer, zar ne? 306 00:14:16,520 --> 00:14:17,670 Ti - u - žao. 307 00:14:17,670 --> 00:14:18,550 Ne ", jer u pravu." 308 00:14:18,550 --> 00:14:20,470 >> U stog okvira, imate Vaši lokalnim varijablama. 309 00:14:20,470 --> 00:14:27,090 Na samom dnu snopa Okvir je povratna adresa. 310 00:14:27,090 --> 00:14:28,790 To je mjesto gdje je funkcija ide kad je gotovo. 311 00:14:28,790 --> 00:14:33,750 A ako prebrisati taj povratak adresa, onda kada se to stack frame, 312 00:14:33,750 --> 00:14:36,680 kad ideš kroz dimnjak kadriranje i izvršavanju svaku crtu, ti si 313 00:14:36,680 --> 00:14:40,350 ići na novu povratnu adresu koji je napisao tu umjesto 314 00:14:40,350 --> 00:14:40,910 Stvarna jedan. 315 00:14:40,910 --> 00:14:45,050 A to je kako smo vidjeli neki narušavanja sigurnosti 316 00:14:45,050 --> 00:14:46,780 može dogoditi s računalima. 317 00:14:46,780 --> 00:14:52,760 >> Dakle stack overflow, ukratko, kada je li prebrisati dio u snopu 318 00:14:52,760 --> 00:14:55,440 ti si trebao koristiti, lokalna promjenjiva ste trebali koristiti, a 319 00:14:55,440 --> 00:14:58,070 pogotovo kada počnete prepisati važne stvari kao što su 320 00:14:58,070 --> 00:14:59,100 povratak adresu. 321 00:14:59,100 --> 00:15:00,090 I to je mjesto gdje ćete dobiti greška. 322 00:15:00,090 --> 00:15:03,980 Ili možda čak mogli početi čak i pisanje u - 323 00:15:03,980 --> 00:15:05,370 kažu binarno pretraživanje je iznad glavne. 324 00:15:05,370 --> 00:15:07,790 Ako prepisani preko puno, ti mogao pisati u glavni. 325 00:15:07,790 --> 00:15:10,230 No, općenito, dobijete pogrešku prije zatim, jer računalo zna 326 00:15:10,230 --> 00:15:12,270 radite nešto što Ne bi trebao biti događaj. 327 00:15:12,270 --> 00:15:12,560 Da. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Koja je razlika između stack overflow 329 00:15:13,910 --> 00:15:16,940 i buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorna: Buffer overflow je više općenito vrsta 331 00:15:19,420 --> 00:15:20,395 ono što sam upravo opisao. 332 00:15:20,395 --> 00:15:22,610 >> UČENIK: Pa stack overflow je Primjer pufera preljeva. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorna: Točno. 334 00:15:23,420 --> 00:15:28,700 To je niz možemo zamisliti kao tampon, prostor za stvari koje idu u. 335 00:15:28,700 --> 00:15:30,600 To je stack buffer overflow. 336 00:15:30,600 --> 00:15:33,210 Mogli bismo imati gomilu buffer overflow. 337 00:15:33,210 --> 00:15:36,870 Ako postoji tampon, koji tamo često je niz gomila, a mi 338 00:15:36,870 --> 00:15:40,600 prepisani preko te granice, onda bismo imaju hrpu buffer overflow. 339 00:15:40,600 --> 00:15:44,870 >> I izvan opsega ovog tečaja, oni su otkrivena malo drugačije. 340 00:15:44,870 --> 00:15:48,040 Sastavljač ima poseban načini otkrivanja svaki. 341 00:15:48,040 --> 00:15:50,660 Ali buffer overflow je više općenito vrsta što sam opisao, 342 00:15:50,660 --> 00:15:54,090 što je stack buffer overflow. 343 00:15:54,090 --> 00:15:56,240 Je li to odgovor na vaše pitanje? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Je li bilo kakvih drugih pitanja koja se odnose na dimnjak ili u gomili? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Da. 348 00:16:05,510 --> 00:16:08,220 >> STUDENT: Znam da su na slobodne žice zato jer su u gomili 349 00:16:08,220 --> 00:16:09,305 a vi ne želite da se curenje memorije. 350 00:16:09,305 --> 00:16:12,240 Ali moraš osloboditi globalne varijable i takve stvari? 351 00:16:12,240 --> 00:16:14,335 Ili su oni automatski oslobođeni? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorna: Dobro pitanje. 353 00:16:15,700 --> 00:16:22,340 Tako je u CS50.H, mi stvaramo ovu stvar za vas zove niz. 354 00:16:22,340 --> 00:16:23,800 Niz je stvarno ono? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char zvijezda. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorna: char zvijezda, pokazivač do znaka pokazivač 357 00:16:29,180 --> 00:16:30,650 niz znakova. 358 00:16:30,650 --> 00:16:32,210 To je ono što je struna. 359 00:16:32,210 --> 00:16:36,050 Dakle, moramo ga osloboditi, jer getstring, koje smo koristili puno - 360 00:16:36,050 --> 00:16:38,370 Naziv niz jednako getstring - 361 00:16:38,370 --> 00:16:43,560 da mallocs za nas neke memorije na gomila, a zatim se vraća pokazivač na 362 00:16:43,560 --> 00:16:47,230 Prvi znak da je string, char zvijezda. 363 00:16:47,230 --> 00:16:52,760 >> Dakle, navodno, ako niste bili pisanje besplatno na bilo koji od vaših žice 364 00:16:52,760 --> 00:16:55,600 koje ste do sada zove, imate curi malo memorije. 365 00:16:55,600 --> 00:16:57,430 Naravno, nismo razgovarali o tome to, pa nitko nije stečen u 366 00:16:57,430 --> 00:16:58,520 Problem za to. 367 00:16:58,520 --> 00:16:59,980 No, ide naprijed, da. 368 00:16:59,980 --> 00:17:03,990 Kada zovete getstring, ti si mallocing neki prostor na hrpi. 369 00:17:03,990 --> 00:17:07,640 A ako ne nazovite besplatni kasnije da string, imate otjecanje memorije. 370 00:17:07,640 --> 00:17:09,440 To odgovoriti na vaše pitanje? 371 00:17:09,440 --> 00:17:10,606 >> Da 372 00:17:10,606 --> 00:17:15,020 >> UČENIK: Pa za to, mi koristimo besplatni neposredno prije povratka? 373 00:17:15,020 --> 00:17:18,510 Kao, u okviru, pretpostavljam, ako kažemo, kao što su, int main, u roku 374 00:17:18,510 --> 00:17:24,410 Opseg koda koji je u roku od onih vitičastim zagradama, neposredno prije - 375 00:17:24,410 --> 00:17:26,140 znate gdje biste obično stavljaju povratak. 376 00:17:26,140 --> 00:17:27,950 Da li staviti besplatno prije toga? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorna: Tako možete staviti besplatno gdje god želite staviti besplatno. 378 00:17:31,000 --> 00:17:33,810 Budući da ti dinamički alociraju varijabli, jer oni mogu 379 00:17:33,810 --> 00:17:39,170 žive izvan okvira posebice funkcija, ako poziv malloc u 380 00:17:39,170 --> 00:17:44,140 odvojeni funkcija, na primjer, getstring, možete nazvati besplatno u glavni. 381 00:17:44,140 --> 00:17:46,050 Vi ne morate ga zvati u određenu funkciju 382 00:17:46,050 --> 00:17:47,570 gdje malloc se zove. 383 00:17:47,570 --> 00:17:50,340 No, to ne treba da ga zovu Prije glavne vraća. 384 00:17:50,340 --> 00:17:51,120 >> I to stvarno ovisi. 385 00:17:51,120 --> 00:17:54,960 To ovisi o tome zašto ste malloced da prostor na prvom mjestu. 386 00:17:54,960 --> 00:17:57,320 Neki ljudi će pozvati osloboditi prilično brzo. 387 00:17:57,320 --> 00:17:59,220 Neki ljudi neće slobodno nazvati dok kraj svog programa. 388 00:17:59,220 --> 00:18:00,660 I oni će proći kroz i slobodno sve. 389 00:18:00,660 --> 00:18:03,597 To ovisi o tome zašto se zove malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: A što bi ti rekao ako nazvao koristiti getstring? 391 00:18:11,270 --> 00:18:13,320 Reći ćete besplatno što? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorna: Dakle sintaksa besplatno jednostavno je slobodna, otvorena zagrada, u neposrednoj blizini 393 00:18:20,040 --> 00:18:22,130 zagrada, i ime pokazivača. 394 00:18:22,130 --> 00:18:26,410 Dakle, ako ste napisali string ime dosegne getstring, stavite ime ovdje. 395 00:18:26,410 --> 00:18:27,760 To je naziv pokazivača. 396 00:18:27,760 --> 00:18:30,570 A zna se osloboditi tog sjećanja. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Dakle, kada se oslobađa tog sjećanja, pokazivač dalje ukazuje na to mjesto 398 00:18:33,920 --> 00:18:34,970 u sjećanju? 399 00:18:34,970 --> 00:18:39,020 Ili je pokazivač se isprazni od adresa koja ukazuje na. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorna: Trebali bi pokušati. 401 00:18:40,290 --> 00:18:41,430 Mi bi trebali kod koji. 402 00:18:41,430 --> 00:18:43,880 Ajmo se vratiti kad dođemo na kodiranja, i neka je kod koji. 403 00:18:43,880 --> 00:18:46,000 A ako želite shvatiti odgovor da da, možete i kod koji 404 00:18:46,000 --> 00:18:46,690 u međuvremenu. 405 00:18:46,690 --> 00:18:49,100 No, to je veliko pitanje. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Je li moguće besplatni nešto prerano? 407 00:18:53,480 --> 00:18:58,530 Znači li to i dalje potrebno za vaš program, i oslobodio taj prostor memorije? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorna: Da. 409 00:18:59,200 --> 00:19:03,020 To je moguće, ako se nešto besplatno i onda ga ponovno koristiti, od vas će 410 00:19:03,020 --> 00:19:06,890 upasti u pogrešku. 411 00:19:06,890 --> 00:19:10,810 No, to je na vama, jer ste oslobođeni nešto, a zatim ga nazvao kasnije. 412 00:19:10,810 --> 00:19:13,940 Tako da je programer je pogreška. 413 00:19:13,940 --> 00:19:14,780 No, da. 414 00:19:14,780 --> 00:19:17,760 Moglo bi se napisati da. 415 00:19:17,760 --> 00:19:19,240 >> Bilo više pitanja o - 416 00:19:19,240 --> 00:19:19,760 Da. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Dakle, ako ste trebali samo osloboditi ga uopće prije 418 00:19:22,820 --> 00:19:25,490 Program završava, znači li to da, ako Program završava, a vi to ne oslobodi, 419 00:19:25,490 --> 00:19:27,580 da je memorija još uvijek je dodijeljeno? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorna: Ako je vaš program završava a vi zaboravite nešto besplatno, a zatim 421 00:19:31,330 --> 00:19:34,390 da je memorija je dodijeljena tijekom trajanja vašeg programa. 422 00:19:34,390 --> 00:19:37,670 Kada vaš program zatvara u potpunosti, da memorija ne ide 423 00:19:37,670 --> 00:19:39,490 tamo ostati zauvijek. 424 00:19:39,490 --> 00:19:42,080 Računalo je dovoljno pametan da zna da kada program zatvori, to 425 00:19:42,080 --> 00:19:46,440 trebao riješiti sve memorije koja je povezan s tim programom. 426 00:19:46,440 --> 00:19:51,240 >> No, tu su i alati koje možete izvoditi na programu otkriti ako, kada 427 00:19:51,240 --> 00:19:54,720 Program je završio, zaboravio si osloboditi nekih stvari. 428 00:19:54,720 --> 00:19:57,960 A za svoj sljedeći problem postaviti gdje ćete koristiti malloc i pomoću 429 00:19:57,960 --> 00:20:02,610 naputke, što će se prikazivati ​​ovaj programirati na vašem programu da vidi je li, 430 00:20:02,610 --> 00:20:06,530 kada je glavni vrati, imali ste neke stvari koje su ostavili unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Dakle, oni se ne ide ostati malloced zauvijek u vašem računalu. 432 00:20:09,130 --> 00:20:11,720 Da bi razoran, jer Vrlo brzo, računala 433 00:20:11,720 --> 00:20:12,960 bi ponestane memorije. 434 00:20:12,960 --> 00:20:16,450 No, ako su pokrenuti do kraja svog programirati i oni ne oslobodi i vaš 435 00:20:16,450 --> 00:20:20,260 Program izlazi, to je još uvijek problem da je ovaj alat će vam pomoći da se obratim. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: Je li to Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorna: To je zove Valgrind. 438 00:20:22,910 --> 00:20:23,520 A vi ćete biti - 439 00:20:23,520 --> 00:20:25,780 >> UČENIK: Ali ne moramo znati da je za kviz, iako? 440 00:20:25,780 --> 00:20:27,600 Mislim, to je govorio o malo u predavanju. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorna: Pa Valgrind je naziv tog alata. 442 00:20:33,600 --> 00:20:37,180 Znajući što je to ipak dovoljno za kviz. 443 00:20:37,180 --> 00:20:40,200 Ali niste ga još koristio na vašem Problem postaviti jer nismo imali 444 00:20:40,200 --> 00:20:43,520 Problem set koji je izričito bavila s malloc ili koristite malloc. 445 00:20:43,520 --> 00:20:45,330 Dakle, niste koristili Valgrind još. 446 00:20:45,330 --> 00:20:47,760 No, što će ga koristiti prije nego kasnije. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Možete li ponoviti ono Valgrind je? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorna: Žao mi je? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Možete li ponoviti što Svrha Valgring je? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorna: Valgrind je naziv - 451 00:20:53,100 --> 00:20:59,890 kao GDB vam pomaže ispravljanje svoj program, Valgrind pomaže vam shvatiti ako 452 00:20:59,890 --> 00:21:03,210 stvari nisu oslobođeni kada vaš program zatvara. 453 00:21:03,210 --> 00:21:05,110 Tako ćete izvoditi na vašem programu. 454 00:21:05,110 --> 00:21:09,230 I vaš program izlazi, a to će reći: vaš program zove malloc to mnogi 455 00:21:09,230 --> 00:21:13,670 puta da bi ove bajtove, a vi samo da se zove slobodna je ovdje više puta. 456 00:21:13,670 --> 00:21:16,520 I tako ste napustili ove mnogo bajtova bez da su oslobođeni. 457 00:21:16,520 --> 00:21:18,050 Ili ćete reći da ste oslobođeni sve. 458 00:21:18,050 --> 00:21:19,070 Dobar posao. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: U redu. 460 00:21:19,480 --> 00:21:21,060 I to se zove Valgring? 461 00:21:21,060 --> 00:21:24,940 >> Jason Hirschhorn: V-l-G-R-N-I-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: pitanje o naputke. 463 00:21:25,970 --> 00:21:30,080 Dakle, reći da je n su zvijezde x iznosi nešto. 464 00:21:30,080 --> 00:21:33,330 To je jednako, bez obzira što stavljajući postoji, je li to ono što je se stavi u 465 00:21:33,330 --> 00:21:36,120 ono x upire prstom, ili pointer x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorna: Može li ponoviti pitanje? 467 00:21:37,690 --> 00:21:39,340 Možemo ga izvući, a vi to rekli? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: U kvizu, zapravo, ona koju nam je poslao, to je bilo kao, char 469 00:21:42,710 --> 00:21:46,520 Zvijezda istina jednaka CS50 stijena, zar ne? 470 00:21:46,520 --> 00:21:52,190 Dakle, to znači da ta CS50 stijena je ono što je istina je pokazujući na? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorna: Pa vi pričate o char zvijezda u nizu, kako 472 00:21:55,810 --> 00:21:56,460 koji radi? 473 00:21:56,460 --> 00:21:56,890 Da. 474 00:21:56,890 --> 00:21:57,700 OK. 475 00:21:57,700 --> 00:21:59,140 Idemo izvući ovo ovdje. 476 00:21:59,140 --> 00:22:07,100 >> [STRANA RAZGOVOR] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorna: Dakle ova varijabla će biti tipa char zvijezde. 478 00:22:11,130 --> 00:22:14,580 Kolika je promjenjiva tipa char zvijezde? 479 00:22:14,580 --> 00:22:15,510 Koliko bajta? 480 00:22:15,510 --> 00:22:16,450 >> STUDENTI: Četiri. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorna: To je četiri bajta. 482 00:22:18,210 --> 00:22:21,420 Koliko prava je varijabilna tipa int zvijezde? 483 00:22:21,420 --> 00:22:22,210 >> STUDENTI: Četiri. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorna: Četiri bajtova. 485 00:22:24,910 --> 00:22:28,280 Ako je pointer, onda je uvijek četiri bajta, jer pokazivače, njihova 486 00:22:28,280 --> 00:22:30,070 vrijednost memorijske adrese. 487 00:22:30,070 --> 00:22:35,160 I memorijske adrese na CS50 Uređaj su četiri bajta. 488 00:22:35,160 --> 00:22:42,900 Pa kad mi zovemo getstring, ili kad smo recimo, stringname jednako, a zatim u 489 00:22:42,900 --> 00:22:46,140 dvostruke navodnike staviti string, stavljamo - 490 00:22:46,140 --> 00:22:46,920 dobro, to je malo drugačije. 491 00:22:46,920 --> 00:22:48,630 Učinit ćemo getstring kao primjer. 492 00:22:48,630 --> 00:22:52,150 Ili char star nešto iznosi niz. 493 00:22:52,150 --> 00:22:54,360 Žao nam je, daj mi primjer koje ste pročitali? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: char zvijezda istina jednaka "CS50 stijena" u navodnicima. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorna: Dakle ova zvijezda, to ćemo nazvati ovu varijablu x za naše 496 00:23:02,260 --> 00:23:04,060 generička svrhe. 497 00:23:04,060 --> 00:23:05,970 Stvorili smo varijablu x. 498 00:23:05,970 --> 00:23:07,610 To je tip char zvijezda. 499 00:23:07,610 --> 00:23:10,950 To je kazaljka na nizu znakova. 500 00:23:10,950 --> 00:23:12,200 Dakle ovdje - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Pa to je, kako bi to raditi u sjećanju. 503 00:23:25,890 --> 00:23:27,410 To će pohraniti memorijsku adresu. 504 00:23:27,410 --> 00:23:31,770 To bi pohranjivati ​​memorijsku adresu Prvi znak u polju. 505 00:23:31,770 --> 00:23:33,830 I onda kad slijedi pointer, što bi 506 00:23:33,830 --> 00:23:35,200 dobili prvi znak. 507 00:23:35,200 --> 00:23:38,780 >> A ako čitate ovu stvar kao string, vaše računalo je pametna 508 00:23:38,780 --> 00:23:42,930 dovoljno da znam, pročitao cijelu stvar dok ne dođe do zatezanje 0. 509 00:23:42,930 --> 00:23:45,530 Ali, ako ste čitajući ga lik na vrijeme, tako da ste iterating kroz 510 00:23:45,530 --> 00:23:49,910 ovaj niz, onda ćete samo čitati lik u isto vrijeme dok ne dođete do 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 To ne bi mogli odgovoriti na vaše pitanje, ipak. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Da, ali nisi malloced taj prostor 514 00:23:55,610 --> 00:23:58,400 ali za taj pointer. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorna: Pa nisam baš siguran upravo ono što tražite u, 516 00:24:02,510 --> 00:24:03,640 jer nisam bi taj kviz. 517 00:24:03,640 --> 00:24:06,370 To je trebao biti od pomoći resursa iz drugog TF. 518 00:24:06,370 --> 00:24:11,380 Ako stvarate niz na stog ili kao lokalne varijable, to ću 519 00:24:11,380 --> 00:24:16,920 Samo se niz optužbi, a ne općenito char zvijezda ukazujući na 520 00:24:16,920 --> 00:24:18,600 još jedan niz. 521 00:24:18,600 --> 00:24:20,550 No, ja ne znam. 522 00:24:20,550 --> 00:24:25,065 To bi mogao biti pointer na drugi string na stog kao dobro. 523 00:24:25,065 --> 00:24:27,240 Da. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Znam da vam je potrebno da se alocirati memoriju, ako je pokazivač 525 00:24:31,116 --> 00:24:33,360 uzimajući proglasio unutar druge funkcije. 526 00:24:33,360 --> 00:24:36,740 Da li je potrebno učiniti istu stvar, ako je to proglašenja unutar glavna, 527 00:24:36,740 --> 00:24:39,570 ste ga koristite unutar glavna? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorna: Pa da. 529 00:24:43,590 --> 00:24:46,670 Možete proglasiti pointer na bilo memorijske adrese u memoriji. 530 00:24:46,670 --> 00:24:51,440 To može biti memorijske adrese lokalne promjenjiva, iako često, 531 00:24:51,440 --> 00:24:55,760 ljudi ne proglasi memorijske adrese lokalnim varijablama, jer oni idu 532 00:24:55,760 --> 00:24:59,890 daleko je jednom da je funkcija vraća, što Zato mi općenito malloc stvari. 533 00:24:59,890 --> 00:25:04,630 Ali, da, mogli proglasiti pokazivač na drugu lokalne varijable. 534 00:25:04,630 --> 00:25:06,360 To je samo općenito nije učinjeno. 535 00:25:06,360 --> 00:25:09,480 Ali mogu se pogledati na koji specifična stvar poslije sata. 536 00:25:09,480 --> 00:25:10,650 Da. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Mislim da je to neka vrsta onoga što se traži. 538 00:25:12,350 --> 00:25:16,930 To se čini čudno da se inicijalizacije pokazivač ne kao 539 00:25:16,930 --> 00:25:20,760 adresa, ali kao što Čini se kao vrijednost. 540 00:25:20,760 --> 00:25:25,970 Čini se kao CS50 je ono što je unutra stvar se ukazao i 541 00:25:25,970 --> 00:25:28,820 ne stvarna adresa, zar ne? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorna: Pa to je nije slučaj, iako. 543 00:25:30,520 --> 00:25:32,470 To nije ono što se događa. 544 00:25:32,470 --> 00:25:35,910 Kada proglasiti char zvijezdu, to je memorijska adresa. 545 00:25:35,910 --> 00:25:38,860 Kazaljke su sve memorijske adrese upućuju na nešto drugo. 546 00:25:38,860 --> 00:25:41,480 To nešto drugo moglo biti na stog, ali gotovo uvijek je na 547 00:25:41,480 --> 00:25:43,440 gomila na putu ćemo vidjeti što je nekad. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Ali stringname jednaka dvostruko citat "Getstring", možemo vidjeti da se i mi 550 00:25:53,500 --> 00:25:55,010 može gledati kroz to i kod koji. 551 00:25:55,010 --> 00:26:01,190 getstring pojam nije se spremaju u da je promjenjiva, ili što god string 552 00:26:01,190 --> 00:26:04,580 ime nije se sprema u koje promjenjiva, a ne zato što ih 553 00:26:04,580 --> 00:26:06,070 pokazivače raditi. 554 00:26:06,070 --> 00:26:06,770 Ima li to smisla? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Da. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorna: OK. 557 00:26:08,570 --> 00:26:11,690 Nadam se, da nije bilo zbunjujuće za svakoga. 558 00:26:11,690 --> 00:26:15,732 Ali, ako je to, možemo gledati na to opet u malo, jer mi zapravo ide 559 00:26:15,732 --> 00:26:19,240 da kod nešto što će, nadamo se raditi sa žicama i pomoći vam da se osjećate 560 00:26:19,240 --> 00:26:22,170 više ugodno s njima. 561 00:26:22,170 --> 00:26:24,869 >> Bilo koja druga pitanja vezana za njih teme ili druge teme koje 562 00:26:24,869 --> 00:26:26,119 Stavit ću natrag? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 I - 565 00:26:34,840 --> 00:26:36,310 upravo sada. 566 00:26:36,310 --> 00:26:37,630 Da, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Dakle, to je potpuno nevezano, , ali možemo samo ići preko 568 00:26:39,860 --> 00:26:42,760 jako brzo ono što trebamo znati o razlici između 32 i 569 00:26:42,760 --> 00:26:46,345 64-bitni stroj? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorna: Da. 571 00:26:47,740 --> 00:26:52,111 Pa 32 bita je koliko bajtova? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: To je četiri bajta. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorna: To je četiri bajta. 574 00:26:54,360 --> 00:26:58,420 I 64 bita je koliko bajtova? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Osam. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorna: Osam bajtova. 577 00:27:00,610 --> 00:27:03,980 Pa opet, osam bitova je jedan bajt. 578 00:27:03,980 --> 00:27:08,340 Vaš CS50 aparat 32-bitni stroj. 579 00:27:08,340 --> 00:27:13,650 Dakle memorijske adrese četiri bajta. 580 00:27:13,650 --> 00:27:17,460 Postoje 2 do 32 memorijske adrese. 581 00:27:17,460 --> 00:27:21,310 0 do 2 do 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 A ja nisam pozitivno, ali to je Vjerojatno opseg onoga što vam je potrebno da se 583 00:27:27,630 --> 00:27:35,230 Znam za 32-bitni stroj, da je memorija adrese su, opet, četiri bajta, 584 00:27:35,230 --> 00:27:39,620 i da je maksimalni iznos memorijskih adresa. 585 00:27:39,620 --> 00:27:41,680 >> Također, vrste podataka - 586 00:27:41,680 --> 00:27:45,020 to bi moglo biti nešto kao dobro da je vrijedno spomena. 587 00:27:45,020 --> 00:27:49,610 Veličina ovisi o tipu podataka stroj radite sa. 588 00:27:49,610 --> 00:27:56,760 Dakle char, jedan znak, kako mnogi bajtova na našoj CS50 aparat? 589 00:27:56,760 --> 00:27:57,980 Jedan bajt. 590 00:27:57,980 --> 00:28:02,310 I to je zapravo jedan bajt kao i na 64-bitnom stroju. 591 00:28:02,310 --> 00:28:05,920 >> I većina tipova podataka su isti broj bajtova na oba računala. 592 00:28:05,920 --> 00:28:11,620 No, neke vrste podataka će biti drugačije na oba računala. 593 00:28:11,620 --> 00:28:14,590 Dakle, to bi bilo potencijalno Jedina stvar koju trebate znati. 594 00:28:14,590 --> 00:28:16,710 >> No, čak i da je, mislim, je izvan granica - 595 00:28:16,710 --> 00:28:20,990 Gotovo sam pozitivno, ako se osvrnemo na starim testovima, ona kaže, pretpostaviti 596 00:28:20,990 --> 00:28:24,090 kodiranja probleme koje koristite 32-bitni stroj. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 No, tu su, kako bi se s tim u slučaju da ste zainteresirani, postoje 599 00:28:30,620 --> 00:28:35,920 vrste podataka koji su isti veličina na svim strojevima. 600 00:28:35,920 --> 00:28:42,670 >> Ako ste vidjeli nešto slično uint32_t, vi svibanj ili svibanj 601 00:28:42,670 --> 00:28:43,260 nisam vidio da je. 602 00:28:43,260 --> 00:28:44,290 To je tip podataka. 603 00:28:44,290 --> 00:28:47,570 To je rekao, biti 32 bita bez obzira ono što stroj to uključen. 604 00:28:47,570 --> 00:28:50,350 Dakle, kada su ljudi pisanje prenosivih code, oni vjerojatno neće koristiti Ints. 605 00:28:50,350 --> 00:28:53,260 Oni umjesto da ćemo koristiti ove i druge podatke Tipovi koji znaju da će biti isti 606 00:28:53,260 --> 00:28:54,780 veličina na svakog pojedinog stroja. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhua: Imao sam pitanje o Proces kompilacija. 610 00:29:00,150 --> 00:29:04,110 Dakle, ako ste pisanje programa koji koristi Knjižnica kao CS50 ili nešto 611 00:29:04,110 --> 00:29:06,840 kao što je to, znam da je ta knjižnica mora, u nekom trenutku, biti 612 00:29:06,840 --> 00:29:08,590 sastavio i povezane u. 613 00:29:08,590 --> 00:29:13,380 No, koliko se to dogodi za vrijeme kompilacija vašeg programa? 614 00:29:13,380 --> 00:29:15,880 Koji dio tog procesa knjižnice javlja kada ste 615 00:29:15,880 --> 00:29:18,560 sastavljanju vlastitog programa? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorna: Dakle, idemo preko općenito koraci ovog postupka. 617 00:29:24,020 --> 00:29:26,280 Možete napisati. C datoteku. 618 00:29:26,280 --> 00:29:33,530 U Vašem. C datoteku, # uključivati ​​Vaše zaglavlje knjižnice, na primjer, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Što znači da je oštra uključuju linije učiniti da vaš program? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Ona dodaje prototipove funkcije iz zaglavlja 622 00:29:43,350 --> 00:29:45,120 datoteke u knjižnicama. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorna: Točno. 624 00:29:45,600 --> 00:29:49,870 Ona dodaje ta funkcija prototipova na kodu. 625 00:29:49,870 --> 00:29:55,230 Dakle, kada je vaš broj se prikupljaju u ranim fazama, prevodilac zna 626 00:29:55,230 --> 00:29:59,250 da ove funkcije doista postoje, a da negdje su definirani. 627 00:29:59,250 --> 00:30:02,460 The. H slika ne uključuju definicije za te funkcije ili kako 628 00:30:02,460 --> 00:30:03,950 oni zapravo rade. 629 00:30:03,950 --> 00:30:07,960 Cs50.h samo uključuje nešto što kaže getstring je prava stvar da 630 00:30:07,960 --> 00:30:09,270 može dogoditi. 631 00:30:09,270 --> 00:30:14,240 I standardio.h kaže printf je Prava stvar koja se može dogoditi. 632 00:30:14,240 --> 00:30:23,190 >> Dakle, vaš c jezik s tim. Header datoteku dobiva pretvorio u neke 633 00:30:23,190 --> 00:30:27,750 strojno čitljiv kod, koji je na kraju dobiva pretvorio u binarnom 634 00:30:27,750 --> 00:30:30,030 code, 0-a i 1-a. 635 00:30:30,030 --> 00:30:33,590 I to je kod koji u konačnici dobiva pogubljen. 636 00:30:33,590 --> 00:30:38,550 -L CS50 linija - primjerice, kada pišete Dong - 637 00:30:38,550 --> 00:30:41,830 a onda su-l CS50, Možete da u. 638 00:30:41,830 --> 00:30:42,180 A vidiš da je. 639 00:30:42,180 --> 00:30:43,890 Kada pišete napraviti, vi ćete vidim tu crtu ovdje. 640 00:30:43,890 --> 00:30:47,740 I vidjet ćemo da se u trenu kada je smo kod ili nešto kasnije, kada smo kod. 641 00:30:47,740 --> 00:30:50,390 >> Ali to-l CS50 linija radi nešto malo drugačiji od 642 00:30:50,390 --> 00:30:52,440 je # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Što to-l CS50 linija učiniti? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Želim reći da je to povezuje Knjižnica na funkciji 646 00:31:00,310 --> 00:31:02,710 poziv, kao i potrebama. o datotekama. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorna: Dakle, vrlo blizu, ako ne i na licu mjesta. 648 00:31:08,200 --> 00:31:16,220 -L CS50 uzima binarnu datoteku i spaja ga sa svojim binarne datoteke. 649 00:31:16,220 --> 00:31:21,410 Dakle cs50.h, nema smisla u pretvaranju cs50.h iz C jezika u binarni svaki 650 00:31:21,410 --> 00:31:23,130 jedini puta da je se koristi. 651 00:31:23,130 --> 00:31:26,650 To bi bilo glupo, jer to će trošiti mnogo vremena. 652 00:31:26,650 --> 00:31:30,420 Tako je već sastavio i pretvorio u izvršnu. 653 00:31:30,420 --> 00:31:35,430 A sada će to biti pripojena s datoteci na kraju. 654 00:31:35,430 --> 00:31:38,370 Pa ti 1 i 0 je idući spojiti s onima 655 00:31:38,370 --> 00:31:39,150 i 0-a na kraju. 656 00:31:39,150 --> 00:31:43,670 Tako sada ćete imati zapravo stvarna 1 i 0 koji definiraju kako getstring, 657 00:31:43,670 --> 00:31:47,890 primjerice, radi, ili kako printf, na primjer, radi. 658 00:31:47,890 --> 00:31:52,750 >> A za više informacija, postoji kratke prevodiocima da Nate daje da 659 00:31:52,750 --> 00:31:55,410 trebali provjeriti da ide kroz ove korake. 660 00:31:55,410 --> 00:31:56,050 Ali - 661 00:31:56,050 --> 00:31:56,560 Da. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Jesu li oni uvijek u o datotekama. kad su u obliku knjižnice, 663 00:32:01,700 --> 00:32:06,764 spreman da se spojio, povezani - kao oni su u binarnom kodu? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorna: OK. 665 00:32:07,600 --> 00:32:08,420 Ono - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Je li to uvijek slučaj knjižnice kada ih povezati? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorna: Da. 668 00:32:12,500 --> 00:32:17,300 Tako postoji. Je slika, koja će biti Kod stroja, koji će također biti 669 00:32:17,300 --> 00:32:17,975 zagonetan za vas. 670 00:32:17,975 --> 00:32:19,410 Vi ne morate brinuti o onima. 671 00:32:19,410 --> 00:32:24,930 No, općenito, da, oni će biti u. o datoteke spreman ići. 672 00:32:24,930 --> 00:32:27,170 >> UČENIK: Pa kada se brod na knjižnica, ti samo brod 673 00:32:27,170 --> 00:32:28,880 . hi. o? 674 00:32:28,880 --> 00:32:32,210 Vi ne brod. C ili. S.. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorna: Dakle - 676 00:32:33,070 --> 00:32:36,260 i to je u ovom kratkom, kao i, ako je ova informacija čini se da dolazi 677 00:32:36,260 --> 00:32:36,700 malo brže. 678 00:32:36,700 --> 00:32:39,870 Ali na kratko prevodiocima govori o tome što je dobro. 679 00:32:39,870 --> 00:32:43,290 Kada brod knjižnicu, ako brod . h, zaglavlje datoteke, one 680 00:32:43,290 --> 00:32:46,290 funkcija prototipovi, i 1-a i 0-a, to je sve što vam je potrebno dati. 681 00:32:46,290 --> 00:32:50,640 Ne morate dati koliko funkcija radi,. c sliku. 682 00:32:50,640 --> 00:32:56,360 Jer točka apstrakcije, ili ukazuju API, točka na ovom SPL, 683 00:32:56,360 --> 00:32:59,650 Stanford prijenosni knjižnica, to je za koju se ne brinem o tome kako novi 684 00:32:59,650 --> 00:33:04,220 GRect radi, ili kako se presele djela, ili kako dodavati radove. 685 00:33:04,220 --> 00:33:06,520 Sve što trebate znati je da dodatak je funkcija koja možete 686 00:33:06,520 --> 00:33:08,880 koristiti, a ne ovo. 687 00:33:08,880 --> 00:33:12,760 Tako da stvarno ne treba znati kako to je zapisano u C. trebate samo 688 00:33:12,760 --> 00:33:15,460 Znam, ovdje su funkcije, što učiniti, a ovdje su 1 i 0 je 689 00:33:15,460 --> 00:33:18,870 kad stvarno želite ih koristiti. 690 00:33:18,870 --> 00:33:19,530 >> Cool. 691 00:33:19,530 --> 00:33:26,980 Bilo više pitanja o prevodiocima ili o drugim temama na brodu? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Imam pitanje provedbi rekurzivni funkcije. 693 00:33:30,300 --> 00:33:31,170 Pitanje o rekurzije. 694 00:33:31,170 --> 00:33:33,030 Imao sam osjećaj da će doći do. 695 00:33:33,030 --> 00:33:38,310 Tako ćemo brzo proći rekurzija sa specifičnim 696 00:33:38,310 --> 00:33:40,690 primjer, faktorjela funkcija. 697 00:33:40,690 --> 00:33:44,920 Budući da je ovo primjer koji Često dolazi ili se koristi 698 00:33:44,920 --> 00:33:46,170 za ilustraciju rekurziju. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Dakle, "4!" čita se 4. faktorjela. 701 00:33:56,410 --> 00:33:59,120 A što 4 faktorjela znači? 702 00:33:59,120 --> 00:34:00,696 Što da radim? 703 00:34:00,696 --> 00:34:02,235 Kako ste izračunali 4 faktorijel? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 puta 3 puta 2 puta 1. 706 00:34:07,960 --> 00:34:11,889 >> Tako je još jedan način za pisanje 4 faktorijel je napisati ovo. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 puta 3 faktorjela. 709 00:34:19,022 --> 00:34:22,080 Zbog 3 faktorjela je 3 puta 2 puta 1. 710 00:34:22,080 --> 00:34:27,580 Dakle 4 puta 3 faktorjela je 4 puta 3 puta 2 puta 1. 711 00:34:27,580 --> 00:34:32,679 To je razlog zašto faktorjela je super Kandidat za rekurzije, jer je 712 00:34:32,679 --> 00:34:36,630 jasno da ne postoji nešto što događa iznova i iznova i na 713 00:34:36,630 --> 00:34:39,820 Manji broj stvari dok dođete do kraja. 714 00:34:39,820 --> 00:34:42,570 Kada dođete do 1, 1 faktorjela je 1. 715 00:34:42,570 --> 00:34:43,719 Ne možete ići mnogo dalje. 716 00:34:43,719 --> 00:34:47,219 0 faktorijel također je definirana kao 1. 717 00:34:47,219 --> 00:34:50,679 Dakle, kad dođete do 1 ili 0, ti si na kraju, i možete 718 00:34:50,679 --> 00:34:53,219 početak ide natrag gore. 719 00:34:53,219 --> 00:34:59,540 Dakle, ako bismo htjeli napisati rekurzivna Funkcija za izračun faktora, 720 00:34:59,540 --> 00:35:02,170 ćemo napisati neke pseudocode za to sada. 721 00:35:02,170 --> 00:35:03,300 Prije nego što smo napisati da pseudocode - 722 00:35:03,300 --> 00:35:05,660 Ja ću vam dati dečki par minuta pisati pseudo koda ili samo misle 723 00:35:05,660 --> 00:35:09,600 o tome - postoje dvije stvari koje svaka rekurzivna funkcija treba. 724 00:35:09,600 --> 00:35:12,530 Što su te dvije stvari? 725 00:35:12,530 --> 00:35:13,220 >> JACK: To se mora zvati. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorna: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Samo naprijed. 729 00:35:15,100 --> 00:35:16,640 >> JACK: To se mora zvati. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorna: Dakle rekurzivna funkcija treba rekurzivni poziv, 731 00:35:19,220 --> 00:35:20,220 pozvati k sebi. 732 00:35:20,220 --> 00:35:20,770 To je jedno. 733 00:35:20,770 --> 00:35:21,510 I ono što je druga stvar? 734 00:35:21,510 --> 00:35:22,250 >> JACK: osnovni scenarij. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorna: osnovni scenarij. 736 00:35:23,780 --> 00:35:26,940 Osnovni scenarij je, evo, kada smo zaustavili. 737 00:35:26,940 --> 00:35:29,510 Dakle, vaš funkcija dobiva zove. 738 00:35:29,510 --> 00:35:31,410 Baza slučaj na prvom mjestu. 739 00:35:31,410 --> 00:35:33,710 Želite li znati ako ste na kraju. 740 00:35:33,710 --> 00:35:37,110 A ako niste na kraju, što bi vaš rekurzivni poziv. 741 00:35:37,110 --> 00:35:39,880 A ti proći kroz tu funkciju ponovno, Ponovno provjerite svoj osnovni scenarij. 742 00:35:39,880 --> 00:35:42,575 Ako niste na kraju, što bi još jedna rekurzivna poziva, 743 00:35:42,575 --> 00:35:44,130 i tako dalje, i tako dalje. 744 00:35:44,130 --> 00:35:47,110 >> Zato rekurzivna funkcija uvijek treba mi baza slučajeva i onih 745 00:35:47,110 --> 00:35:48,210 rekurzivni pozivi. 746 00:35:48,210 --> 00:35:51,280 Ako nemate rekurzivni poziv, da Ne bi se rekurzivna funkcija. 747 00:35:51,280 --> 00:35:53,210 Ako nije imao osnovni scenarij, što će ići zauvijek i 748 00:35:53,210 --> 00:35:54,780 ne bi bilo ni kraj. 749 00:35:54,780 --> 00:35:57,870 A osnovni scenarij je uvijek na prvom mjestu, jer ćete uvijek želite provjeriti 750 00:35:57,870 --> 00:36:00,420 ako ste na kraju prvog. 751 00:36:00,420 --> 00:36:04,770 Dakle, prije nego što smo napraviti neke pseudocode, zašto ne uzmete malo vremena za razmišljati o tome 752 00:36:04,770 --> 00:36:09,360 Kako rekurzivna funkcija faktorjela će biti napisan? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> Isto tako, koliko god radite, pisanje to na papiru je 755 00:36:26,010 --> 00:36:27,960 što ćete morati učiniti na test sutra. 756 00:36:27,960 --> 00:36:32,160 Dakle, vjerojatno je dobra praksa da bi sigurni kod pišete 757 00:36:32,160 --> 00:36:34,420 dolje na papiru - 758 00:36:34,420 --> 00:36:35,160 ili možete to učiniti. 759 00:36:35,160 --> 00:36:36,710 Vi znate gdje su zarezom. 760 00:36:36,710 --> 00:36:37,660 Sjećaš sintaksu. 761 00:36:37,660 --> 00:36:40,400 Budući da ne mogu imati prevodilac reći da je napravio pogrešku. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> Također, uz one linije, sutra, kad ste kodiranja probleme, ako 764 00:37:07,240 --> 00:37:11,490 su požurili na vrijeme, ili ako si jako zbunjen kako ste trebali 765 00:37:11,490 --> 00:37:16,030 napisati određenu stvar u Cu, će vam biti potreban pisati pseudo-koda 766 00:37:16,030 --> 00:37:18,160 ili pisati komentare u, kao dobro. 767 00:37:18,160 --> 00:37:21,940 Budući da postoji djelomična kredit za puno pitanja na kvizu. 768 00:37:21,940 --> 00:37:24,840 Dakle, možda ćete biti jurnu, ili ste Možda samo treba miješati. 769 00:37:24,840 --> 00:37:28,030 U članku objavljenom u komentarima ili pseudo-koda često su načina na koje 770 00:37:28,030 --> 00:37:29,360 mogu dobiti djelomična kredit. 771 00:37:29,360 --> 00:37:31,440 >> Dakle, ne ostaviti nešto prazno na kvizu. 772 00:37:31,440 --> 00:37:33,490 Nema kazne za stavljajući stvari u. 773 00:37:33,490 --> 00:37:37,650 Naime, stavljajući u pseudo-koda ili komentari će pomoći grejderom 774 00:37:37,650 --> 00:37:40,410 shvatiti ako stvarno znate što pričaš, a možda i nagradu 775 00:37:40,410 --> 00:37:42,030 što su neki parcijalni kredit za to. 776 00:37:42,030 --> 00:37:44,510 >> Također, uz one linije, pisati jasno. 777 00:37:44,510 --> 00:37:47,650 Ako ne možemo je stvarno ono što pišete, nećemo vas zvati 778 00:37:47,650 --> 00:37:49,900 u ponoć sutra na slici ono što ste napisali. 779 00:37:49,900 --> 00:37:51,520 Samo ćemo poletjeti bodova. 780 00:37:51,520 --> 00:37:56,570 Pisanje je jasno kako možemo čuti, ili bolje rečeno, možemo pročitati ono što je napisao. 781 00:37:56,570 --> 00:38:00,230 >> A ako on kaže dvije rečenice, nemojte napisati odlomak. 782 00:38:00,230 --> 00:38:02,280 Slijedite upute. 783 00:38:02,280 --> 00:38:03,500 Pisanje je jasno. 784 00:38:03,500 --> 00:38:07,720 I napisati u tim komentarima ili pseudocode za pitanja koja su mogla 785 00:38:07,720 --> 00:38:10,270 Nagrada djelomično točne. 786 00:38:10,270 --> 00:38:12,520 >> U redu, idemo na faktorjela. 787 00:38:12,520 --> 00:38:15,000 Tako imamo funkciju faktorijel. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Ako mi je to zapravo pisati ovo u C, Što mi treba staviti ispred imena 790 00:38:21,550 --> 00:38:22,800 funkcije? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Povratni tip, koji je, u to slučaj, mi ćemo mu dati int. 793 00:38:30,060 --> 00:38:35,450 I onda unutar vitičastih zagrada, je što se događa unutar vitičastih zagrada za 794 00:38:35,450 --> 00:38:36,850 funkcija? 795 00:38:36,850 --> 00:38:37,950 >> STUDENTI: Vrsta argument. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorna: Njegovi argumenti. 797 00:38:39,150 --> 00:38:42,680 Dakle faktorjela će vjerojatno uzeti argument. 798 00:38:42,680 --> 00:38:44,500 To će vjerojatno trajati samo jedan argument. 799 00:38:44,500 --> 00:38:49,450 I mi ćemo reći da ću uzeti cijeli zove x.. 800 00:38:49,450 --> 00:38:52,770 A opet, kada pišete u prototip funkcija ili pisanje funkciju 801 00:38:52,770 --> 00:38:57,110 u kodu prije ga definira, te pisati o vrsti podataka i ime 802 00:38:57,110 --> 00:39:01,370 da je varijabla za samo tu funkciju. 803 00:39:01,370 --> 00:39:06,350 Na taj način možete proći neki broj u ovo funkcija, to će se naziva x 804 00:39:06,350 --> 00:39:07,340 interno. 805 00:39:07,340 --> 00:39:08,755 >> Mi imamo faktorski funkciju. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Trebamo dvije stvari, a osnovni scenarij i rekurzivna poziva. 808 00:39:15,850 --> 00:39:20,900 Koji je osnovni scenarij za faktorjela? 809 00:39:20,900 --> 00:39:24,850 Netko tko ga je napisao out a tko nije govorio još, što je osnovni 810 00:39:24,850 --> 00:39:26,100 slučaj za faktorjela? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> UČENIK: Ako je n manje od 2, vratiti jedan. 813 00:39:30,930 --> 00:39:33,520 >> Jason Hirschhorn: Ako je n manje od 2, vratiti jedan. 814 00:39:33,520 --> 00:39:37,216 To mi se sviđa, jer je to vodi brigu o 0 i 1. 815 00:39:37,216 --> 00:39:45,290 Dakle, mi ćemo učiniti x <2, vratiti jedan. 816 00:39:45,290 --> 00:39:47,870 Ako se prošli smo 0, ako smo dobili prošlo 1, ova funkcija će 817 00:39:47,870 --> 00:39:49,790 odmah vratiti jedan. 818 00:39:49,790 --> 00:39:54,020 Ako bi mi donijela neki broj veći od ili jednaka 2, idemo u 819 00:39:54,020 --> 00:39:55,370 imamo rekurzivni poziv. 820 00:39:55,370 --> 00:39:57,855 >> I tako kako je da ide na posao? 821 00:39:57,855 --> 00:40:01,070 Može li netko drugi tko je radio na tome koji još nije govorio mi 822 00:40:01,070 --> 00:40:07,380 rekurzivna poziva za tu funkciju u pseudocode? 823 00:40:07,380 --> 00:40:10,770 Ako bi smo prošli u broj X i to je veće od 2, što 824 00:40:10,770 --> 00:40:13,370 Ne želimo učiniti? 825 00:40:13,370 --> 00:40:17,930 Također smo primjer napisano na strana koje bi vam dati savjet. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Poziv x puta faktorijel x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorna: Točno u pravu. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Mi ćemo se vratiti x puta faktorijel x minus jedan. 830 00:40:37,750 --> 00:40:41,810 I da, iako sam napisao gore, Uglavnom, ono što je rekao na engleskom jeziku, 831 00:40:41,810 --> 00:40:44,580 ovo faktorjela funkcija će se ponovno pozvao. 832 00:40:44,580 --> 00:40:46,320 To će izvršiti na x minus 1. 833 00:40:46,320 --> 00:40:49,320 To će se vratiti s nekim cijeli broj, a onda ćemo pomnožiti ova dva 834 00:40:49,320 --> 00:40:52,050 zajedno, te da vrijednost će biti vratio se god zove to 835 00:40:52,050 --> 00:40:55,010 faktorjela, koja možda biti još jedna instanca 836 00:40:55,010 --> 00:40:58,420 ovo faktorjela funkcija. 837 00:40:58,420 --> 00:41:01,360 >> Dakle, to je primjer rekurzivna funkcija, vrlo 838 00:41:01,360 --> 00:41:02,530 Jednostavan rekurzivna funkcija. 839 00:41:02,530 --> 00:41:04,530 No, većina njih će biti ovako. 840 00:41:04,530 --> 00:41:11,170 Ako želite dobar rekurzivna izazov za kviz, pokušajte kodiranja 841 00:41:11,170 --> 00:41:13,230 pretraživanje po binarnom rekurzivno. 842 00:41:13,230 --> 00:41:18,950 Jer ako je binarni potragu za Problem postaviti tri, vjerojatno je to učinio 843 00:41:18,950 --> 00:41:21,730 iterativno u while petlji. 844 00:41:21,730 --> 00:41:23,700 >> Ali također može biti napisana rekurzivno. 845 00:41:23,700 --> 00:41:26,310 Ti ćeš morati napisati svoj zasebna funkcija koja uzima neke 846 00:41:26,310 --> 00:41:29,020 različite argumente naredbenog retka - ili ne naredbenog retka argumente, neki 847 00:41:29,020 --> 00:41:30,910 različiti samo redoviti argumente. 848 00:41:30,910 --> 00:41:33,870 No, da bi mogao napisati binarno pretraživanje rekurzivno kao dobro. 849 00:41:33,870 --> 00:41:36,190 >> UČENIK: Pa mogao si i napisao, umjesto x minus 1, što 850 00:41:36,190 --> 00:41:39,502 mogao bi napisali x minus minus, ili ste mogli imati 851 00:41:39,502 --> 00:41:40,830 napisano minus minus x. 852 00:41:40,830 --> 00:41:44,740 Možeš li objasniti zašto se jako brzo oni će biti različite stvari, 853 00:41:44,740 --> 00:41:49,510 kao što je razlika između x minus minus i minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorna: Ne, ja nisam će ulaziti u to. 855 00:41:51,320 --> 00:41:55,500 No, ja ću razgovarati s vama o tome nakon što klase. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 dekrementirati x za 1. 857 00:41:57,780 --> 00:41:59,090 Ali oni to malo drugačije. 858 00:41:59,090 --> 00:42:00,340 Ali ja ne želim ulaziti u to. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Ostala pitanja o rekurzije ili ova funkcija? 861 00:42:09,090 --> 00:42:10,140 To zapravo nije ni pseudocode. 862 00:42:10,140 --> 00:42:15,060 To je u osnovi kod u C te će pisati za to. 863 00:42:15,060 --> 00:42:19,393 >> OK, bilo koja druga pitanja o temama ovdje? 864 00:42:19,393 --> 00:42:19,864 Da. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Imam brz rundown pomičnim zarezom i preciznost. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorna: Plutajući točku i preciznost. 867 00:42:24,260 --> 00:42:26,920 Može li netko stvarno brzo daj mi rundown 868 00:42:26,920 --> 00:42:28,210 pomičnim zarezom i preciznost? 869 00:42:28,210 --> 00:42:30,420 Vi svi morali to učiniti za svoju Problem set, tako da smo svi 870 00:42:30,420 --> 00:42:31,700 upoznati s njom. 871 00:42:31,700 --> 00:42:35,090 Ili možda ne svima vama. 872 00:42:35,090 --> 00:42:36,602 Svatko? 873 00:42:36,602 --> 00:42:39,530 Daj mi započeli mjesto. 874 00:42:39,530 --> 00:42:40,750 Pomičnim zarezom i preciznost. 875 00:42:40,750 --> 00:42:42,380 U čemu je problem? 876 00:42:42,380 --> 00:42:42,960 Da. 877 00:42:42,960 --> 00:42:43,680 Victoria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorna: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Oprostite. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Postoji samo konačan broj brojeva koji se mogu prikazati 882 00:42:51,550 --> 00:42:57,930 jer si na, u našoj slučaj, 32-bitni sustav. 883 00:42:57,930 --> 00:43:03,080 Tako da vrsta moraju čine neke brojeve. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorna: Pa to je točno u pravu. 885 00:43:03,910 --> 00:43:08,110 Postoji samo određena količina brojevi koji se mogu predstaviti. 886 00:43:08,110 --> 00:43:11,770 Ako pomnožite dvije vrlo velike brojeve, moglo bi se preliti na iznos 887 00:43:11,770 --> 00:43:13,950 od bilo koje imate za zastupanje cijeli broj. 888 00:43:13,950 --> 00:43:17,930 Zato ponekad koristimo long long umjesto u int. 889 00:43:17,930 --> 00:43:19,210 To ima više prostora. 890 00:43:19,210 --> 00:43:21,210 To može držati veći broj. 891 00:43:21,210 --> 00:43:24,310 >> Floating point preciznost ima veze s da, ali također ima veze s 892 00:43:24,310 --> 00:43:29,300 Činjenica da decimalni brojevi su nije uvijek zastupljena. 893 00:43:29,300 --> 00:43:29,540 Oprostite. 894 00:43:29,540 --> 00:43:31,280 Dopustite mi da stavi to back up. 895 00:43:31,280 --> 00:43:36,610 Decimalni broj 1.0 nije uvijek predstavljao kao što se i očekuje, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 Ponekad je predstavljen kao 1,000000001 ili 0,999999999. 898 00:43:50,360 --> 00:43:52,780 Moglo bi se čak 89 bačena tu negdje. 899 00:43:52,780 --> 00:43:56,560 Pa ti decimalnih brojevi nisu predstavljao baš kao što bi 900 00:43:56,560 --> 00:43:58,430 očekivati ​​da će biti zastupljeni. 901 00:43:58,430 --> 00:44:00,010 >> Tako je u problemu postaviti - 902 00:44:00,010 --> 00:44:00,860 Bio je to dvoje? - 903 00:44:00,860 --> 00:44:05,290 Problem postaviti dva, gdje smo se bavila pomičnim zarezom brojevi, kad smo htjeli 904 00:44:05,290 --> 00:44:08,690 ih predstavljaju upravo ono što smo htjeli ih zastupati, broj 905 00:44:08,690 --> 00:44:12,860 od penija, ili broj centi, smo ih pomnožite sa 100.. 906 00:44:12,860 --> 00:44:14,750 Ih zaobljeni smo. 907 00:44:14,750 --> 00:44:18,660 I onda smo odsječeni sve iza decimalne točke. 908 00:44:18,660 --> 00:44:22,020 To je kako bi se osiguralo da će zapravo jednako je točno ono što smo htjeli 909 00:44:22,020 --> 00:44:22,410 im jednaka. 910 00:44:22,410 --> 00:44:26,870 >> Jer kada se nešto što je plutaju i pretvoriti ga u int, što 911 00:44:26,870 --> 00:44:29,860 odsječen sve na desnoj strani od decimalne točke. 912 00:44:29,860 --> 00:44:33,900 Budući da postoji neki pomičnim zarezom nepreciznost, 100.000 bi moglo biti 913 00:44:33,900 --> 00:44:37,440 predstavljeni kao 99,999999999. 914 00:44:37,440 --> 00:44:40,350 A ako samo odrezati sve do Pravo odmah, ti ćeš 915 00:44:40,350 --> 00:44:41,600 dobiti krivi broj. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Da. 918 00:44:44,180 --> 00:44:45,290 >> STUDENT: Imao sam pitanje o lijevanje. 919 00:44:45,290 --> 00:44:47,500 Ono što bi se to dogoditi u? 920 00:44:47,500 --> 00:44:54,480 Ako želite napraviti plovak, nosači, 1 podijeljeni za 10, on radi 1 podijeljeno 10, 921 00:44:54,480 --> 00:44:58,910 onda dobiti 0,1, a zatim okrenuti je u float? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorna: Ako vam je činiti plutaju 1 podijeljeno 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Da, a onda jednako - 924 00:45:02,550 --> 00:45:04,240 Pa, bilo bi normalno su ga jednako u - 925 00:45:04,240 --> 00:45:04,690 Da. 926 00:45:04,690 --> 00:45:06,760 Vi želite da plutaju napraviti, zar ne? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorna: OK, pa ćemo iskoristiti da Segue u figuring out 928 00:45:12,790 --> 00:45:15,390 Odgovore na ova pitanja kroz kodiranje. 929 00:45:15,390 --> 00:45:18,180 Jer vjerojatno ćete imati puno ove minute pitanja, i dobar način 930 00:45:18,180 --> 00:45:19,100 za njihovo rješavanje je kroz kodiranje. 931 00:45:19,100 --> 00:45:21,320 Dakle, idemo da kod ovo sada, a onda ćemo se vratiti i 932 00:45:21,320 --> 00:45:24,020 kodirati na pitanje koje ste imali. 933 00:45:24,020 --> 00:45:24,950 >> Dakle, prva linija - 934 00:45:24,950 --> 00:45:29,390 Nisam trebao to napisao - što je Prva stvar koju želite učiniti kada smo 935 00:45:29,390 --> 00:45:32,250 otvaraju nove datoteke u gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Uključi. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorna: Uključi što? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: CS50 knjižnica. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorna: OK. 940 00:45:39,920 --> 00:45:42,590 Što još treba uključiti? 941 00:45:42,590 --> 00:45:46,820 Samo ćemo provjeriti što se događa kad baci nešto na plovak. 942 00:45:46,820 --> 00:45:48,605 No, ono što nam je potrebno uključiti ako smo će napisati C program? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standardni I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorna: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Mi zapravo ne trebaju, za to Program, cs50.h, iako je to 946 00:45:54,880 --> 00:45:55,920 uvijek je korisno da se uključi. 947 00:45:55,920 --> 00:45:58,260 No, mi smo uvijek trebamo stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Kad kodiranja u C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorna: Kada kodiranje u C. 950 00:46:15,770 --> 00:46:17,090 >> Tako sam ga spremiti kao ovaj. C datoteku. 951 00:46:17,090 --> 00:46:18,590 I dobili neki lijep sintakse. 952 00:46:18,590 --> 00:46:22,890 Napisao sam prazninu u glavni. 953 00:46:22,890 --> 00:46:24,792 Što void znači? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: ne snosi nikakvu naredbenog retka argumente. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorna: Void znači, da u slučaj, glavna ne poduzeti bilo 956 00:46:28,900 --> 00:46:29,700 naredbenog retka argumente. 957 00:46:29,700 --> 00:46:32,720 U drugim slučajevima, to znači funkciju ne uzima argumente naredbenog retka. 958 00:46:32,720 --> 00:46:36,560 Ili funkciju, da sam pisati prazninu main (void), da bi se reći glavna-a 959 00:46:36,560 --> 00:46:38,460 ne vraćaju ništa. 960 00:46:38,460 --> 00:46:39,960 Dakle void samo znači ništa. 961 00:46:39,960 --> 00:46:42,510 Što bih ja napisati da sam se uzeti argumente naredbenog retka? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> STUDENT: int arc c string arc v. 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorna: int argc niz argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Je li to točno? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: To je char zvijezda argv nosači. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorna: Tako da bi mogao pisati Niz argv zagrade ili char zvijezda argv 969 00:47:01,730 --> 00:47:03,710 nosači, ali morate nosače. 970 00:47:03,710 --> 00:47:06,290 Zbog argv je niz od žice, zapamtite. 971 00:47:06,290 --> 00:47:07,360 To je ne samo jedan niz. 972 00:47:07,360 --> 00:47:10,350 Tako niz argv je, evo jedan niz naziva argv. 973 00:47:10,350 --> 00:47:13,630 String argv nosači se, evo Niz od žice. 974 00:47:13,630 --> 00:47:17,865 Dakle int argc niz argv nosači će biti nešto što sam 975 00:47:17,865 --> 00:47:18,810 Vjerojatno će pisati. 976 00:47:18,810 --> 00:47:23,050 >> Tako da je htio spasiti u cijeli broj? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Da, cijeli broj. 978 00:47:24,285 --> 00:47:25,840 Ili na plovak. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorna: U plovak? 980 00:47:26,710 --> 00:47:30,790 Kao, float x jednak 1 podijeljeno 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorna: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Kako mogu ispisati plutaju u printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Što? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorna:% f. 988 00:47:48,300 --> 00:47:50,810 Što je cijeli broj? 989 00:47:50,810 --> 00:47:52,110 d ili ja. 990 00:47:52,110 --> 00:47:53,000 Što je niz? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: e. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorna: e. 993 00:47:56,140 --> 00:47:57,550 Kako mogu dobiti novu liniju? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Kosa crtica n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorna: Što ja vratiti ako je glavna staza ispravno? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Trebam li napisati tu liniju, iako? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Ne. 1000 00:48:10,170 --> 00:48:11,513 OK, nećemo ga napisati, onda. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Može li svatko pročitao da? 1003 00:48:17,190 --> 00:48:18,485 To izgleda malo mala. 1004 00:48:18,485 --> 00:48:20,160 Može li svatko vidi, ili bi trebala Ja bi to veći? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Mislim da je za kameru, mi ćemo napraviti je malo veći, ipak. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorna: Ako želim pretvoriti ovo . C datoteku u izvršnu, što 1009 00:48:38,410 --> 00:48:39,260 pišem? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: Napravite test. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorna: Žao mi je? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: Napravite test. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorna: Napravite test. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Razgovarali smo o ova linija ranije. 1016 00:48:48,410 --> 00:48:49,140 Dong. 1017 00:48:49,140 --> 00:48:51,270 Što je zveket? 1018 00:48:51,270 --> 00:48:52,200 Ime prevodilac. 1019 00:48:52,200 --> 00:48:53,920 Što je to granica? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: To postavlja za korištenje GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorna: Postavlja da se za korištenje GDB. 1022 00:48:59,230 --> 00:49:02,338 Ova linija, što je to? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Izvorni kod. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorna: To je source file,. c sliku. 1025 00:49:06,010 --> 00:49:08,150 Što se te dvije linije učiniti? 1026 00:49:08,150 --> 00:49:10,245 Ili ove dvije ne linije. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: To imena testirati ga. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorna: Dakle crtica o kaže: Nazovite je nešto drugačije. 1029 00:49:15,410 --> 00:49:16,790 I evo ti ga zovete testa. 1030 00:49:16,790 --> 00:49:18,900 Ako nisam imao da u, što bi to ime to? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorna: a.out. 1033 00:49:22,340 --> 00:49:25,366 Što učiniti? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Linkovi math knjižnicu. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorna: Povezuje u math knjižnici. 1036 00:49:29,550 --> 00:49:32,880 Nismo uključuju matematiku knjižnicu, ali budući da je tako čest, oni ' 1037 00:49:32,880 --> 00:49:35,780 napisano make da uvijek uključuje math knjižnica. 1038 00:49:35,780 --> 00:49:39,050 A isto tako, to uključuje CS50 knjižnica. 1039 00:49:39,050 --> 00:49:43,010 >> OK, pa ako smo popis, mi sada imamo izvršnu zove testa. 1040 00:49:43,010 --> 00:49:45,150 Za njezino izvršenje, pišem test. 1041 00:49:45,150 --> 00:49:48,330 Vidim da je moj pomičnim zarezom, kako se i očekivalo, jednak je 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Da li to - 1044 00:49:51,590 --> 00:49:52,060 tako - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Onda, ako ste stavili plutaju sada, kao da ga baci kao float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorna: Cast 1 na plovak? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Ne, baci punu stvar - 1048 00:49:59,180 --> 00:49:59,500 Da. 1049 00:49:59,500 --> 00:50:02,460 Ako ste upravo to učinio, ne bi da je 0,1 učiniti? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorna: U redu, tako da jako brzo, 1 podijeljeno 10, one su 1051 00:50:07,170 --> 00:50:08,690 cijeli brojevi podijeljeni. 1052 00:50:08,690 --> 00:50:13,580 Dakle, kada ste podijeliti cijele brojeve, oni su 0, a uštedjet ćete da je 0 u 1053 00:50:13,580 --> 00:50:17,170 plutaju, jer slash je baš cijeli odjel. 1054 00:50:17,170 --> 00:50:19,180 Dakle, sada smo nešto okreće u float. 1055 00:50:19,180 --> 00:50:21,650 >> Da vidimo što će se dogoditi. 1056 00:50:21,650 --> 00:50:22,900 Mi ćemo napraviti test. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Tako sada vidimo da je taj udarac nije bio cijeli odjel, plutao je 1059 00:50:31,090 --> 00:50:32,640 točka podjele. 1060 00:50:32,640 --> 00:50:35,700 Budući da je jedan od njegovih argumenata bio bačen na plovak. 1061 00:50:35,700 --> 00:50:38,380 Dakle, sada je to već rekao, liječenje to Podjela se kao da imamo posla s 1062 00:50:38,380 --> 00:50:40,140 plutajuće točke, a ne s brojeva. 1063 00:50:40,140 --> 00:50:42,760 I tako smo dobili odgovor očekujemo. 1064 00:50:42,760 --> 00:50:44,620 >> Da vidimo što će se dogoditi - 1065 00:50:44,620 --> 00:50:47,103 Ups. 1066 00:50:47,103 --> 00:50:51,646 Ako sam htio ispisati još decimale mrlje, kako sam mogao to učiniti? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: točka točka f, ili čak decimalnih mjesta koliko želite. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorna: Tako sam ispisati 10 decimalnih mjesta. 1070 00:51:04,440 --> 00:51:06,610 A sada vidimo da dobivamo neka čudna stvar. 1071 00:51:06,610 --> 00:51:09,650 I to ide natrag na svoje pitanje o pomičnim zarezom nepreciznost. 1072 00:51:09,650 --> 00:51:10,950 Tu je čudno stvari pohranjene ovdje. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, to odgovoriti na vaše pitanje? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Što još ste htjeli da kod brže? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Samo sam želio vidjeti hoće li ili Ne, ako ste slobodni neki pokazivač, 1078 00:51:25,470 --> 00:51:30,410 je li to još uvijek pointer je pohranjena u ona adresa što je bilo 1079 00:51:30,410 --> 00:51:32,170 ukazujući na prethodno. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorna: OK, pa neka je to učiniti. 1081 00:51:34,100 --> 00:51:38,030 Char zvijezda ptr, to stvara varijablu zove ptr tipa char zvijezde. 1082 00:51:38,030 --> 00:51:39,280 Kako mogu pisati malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Samo malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 No, onda to mora biti veličine, a u ovom slučaju, mislim da bih 1087 00:51:51,040 --> 00:51:52,465 se upućuju na char. 1088 00:51:52,465 --> 00:51:54,450 Dakle, to bi bilo char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorna: U redu, tako da više generički, Inside - 1090 00:51:57,520 --> 00:51:58,770 neka je urediti. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Unutar malloc, želite broj bajtova na hrpi. 1093 00:52:09,260 --> 00:52:12,320 Općenito, ono što smo vidjeli da smo radite je da ćemo malloc 1094 00:52:12,320 --> 00:52:14,940 žice, na primjer, ili nizovi brojeva. 1095 00:52:14,940 --> 00:52:21,600 Dakle, ako želimo 10 cijelih brojeva, odnosno 10 znakova, 10 će nam dati 10. 1096 00:52:21,600 --> 00:52:24,370 I onda veličina znakova će dati nam da je veličina znakova, koji u 1097 00:52:24,370 --> 00:52:25,120 ovaj slučaj je 1 bajt. 1098 00:52:25,120 --> 00:52:26,250 Mi smo dobili 10 bajtova. 1099 00:52:26,250 --> 00:52:28,540 Ako bismo napisati veličinu int, koji će nam dati 40 bajtova. 1100 00:52:28,540 --> 00:52:31,520 >> Dakle, više generički, unutar malloc je broj bajtova želite. 1101 00:52:31,520 --> 00:52:34,620 U ovom slučaju, mi smo dobivanje 1 bajt. 1102 00:52:34,620 --> 00:52:36,900 Što se čini kao čudan uporabu od malloc, ali za naše 1103 00:52:36,900 --> 00:52:38,470 svrhe ima smisla. 1104 00:52:38,470 --> 00:52:40,420 Dakle, tamo je. 1105 00:52:40,420 --> 00:52:43,420 >> Mi ćemo nazvati besplatan. 1106 00:52:43,420 --> 00:52:47,040 Mi smo dobili osloboditi od njega, a mi koristimo PTR opet. 1107 00:52:47,040 --> 00:52:48,750 I ono što si htjela provjeriti? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Samo sam htjela provjeriti je li ili ne postoji ništa 1109 00:52:50,550 --> 00:52:51,900 unutar nje. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorna: Znači li je istaknuo da se bilo što? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Da, točno, je li to je još uvijek imao memorijsku adresu. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorna: Dakle, želite provjeriti vrijednost ptr? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Da, točno. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorna: Što pišem ovdje ako želim provjeriti vrijednost 1116 00:53:10,160 --> 00:53:11,880 točka - što je, Jordan rekao, vrijednost? 1117 00:53:11,880 --> 00:53:13,720 Ili ono što je pohranjena u ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: memorijske adrese. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorna: memorijske adrese. 1120 00:53:16,330 --> 00:53:20,520 Dakle, ako sam napisati upravo to, to ću daj mi vrijednost ptr. 1121 00:53:20,520 --> 00:53:22,800 I kako sam ispisati memorijske adrese? 1122 00:53:22,800 --> 00:53:26,470 Što je format string za memorijsku adresu? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT: p%. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorna: p%. 1125 00:53:28,050 --> 00:53:29,500 % S je niz. 1126 00:53:29,500 --> 00:53:30,750 % P za pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Je li to točno? 1129 00:53:43,540 --> 00:53:44,790 To je u pravu. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Dakle ptr jednako - 1132 00:53:51,040 --> 00:53:53,350 još uvijek ima nešto u tome. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 To je vjerojatno više Zanimljivo pitanje. 1135 00:53:57,645 --> 00:53:59,198 Što to linija učiniti? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: SEG grešaka. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorna: Što? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Mislim da SEG grešaka. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorna: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Mislim da će SEG kvar. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorna: Dakle, ova linija koda, zvijezda ptr, što 1142 00:54:08,265 --> 00:54:10,152 nema zvijezda znači? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Sadržaj. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorna: Da. 1145 00:54:11,560 --> 00:54:13,910 Idi dobiti sadržaj. 1146 00:54:13,910 --> 00:54:16,830 Dakle, to će ići u memoriju adresu tamo i daj mi da. 1147 00:54:16,830 --> 00:54:21,030 Koristio sam% C ovdje, jer postoji su likovi tamo pohranjena. 1148 00:54:21,030 --> 00:54:23,390 Tako ćemo ići na tu adresu mi Upravo sam vidio - ili će vjerojatno biti 1149 00:54:23,390 --> 00:54:25,190 malo drugačije ovaj Vrijeme smo pokrenuti program. 1150 00:54:25,190 --> 00:54:28,010 No, mi ćemo ići na tu adresu što znamo i dalje postoji 1151 00:54:28,010 --> 00:54:29,260 i vidjeti što je tamo. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Dakle, to nije SEG kvar. 1154 00:54:37,110 --> 00:54:38,970 To jednostavno nije nam ništa. 1155 00:54:38,970 --> 00:54:43,350 Možda bi nam zapravo daje nešto, samo mi to ne mogu vidjeti. 1156 00:54:43,350 --> 00:54:45,110 I koja seže do ove ideje - 1157 00:54:45,110 --> 00:54:47,270 i nećemo dobiti previše u to, jer to je izvan 1158 00:54:47,270 --> 00:54:48,460 Opseg ovog tečaja. 1159 00:54:48,460 --> 00:54:51,260 No, razgovarali smo o tome ovdje, ako mi otišao izvan granica polja po 1160 00:54:51,260 --> 00:54:54,890 1, nismo mogli dobiti u nevolji. 1161 00:54:54,890 --> 00:54:58,550 >> Ponekad, kad se samo otići po jedan, radiš nešto krivo, a vi 1162 00:54:58,550 --> 00:54:59,220 mogao biti u nevolji. 1163 00:54:59,220 --> 00:55:00,820 Ali ne uvijek dobiti u nevolji. 1164 00:55:00,820 --> 00:55:05,170 To ovisi koliko je loša stvar koju Ne, ti si idući u dobiti u nevolji. 1165 00:55:05,170 --> 00:55:07,790 Koji se ne može reći, biti neuredan s kodom. 1166 00:55:07,790 --> 00:55:12,080 Ali, to je za reći, program neće Uvijek prestati, čak i ako idete negdje 1167 00:55:12,080 --> 00:55:14,130 što ne bi trebala ići. 1168 00:55:14,130 --> 00:55:18,170 >> Dobar primjer za to je, puno ljudi u njihovom problemu postaviti 3, koji 1169 00:55:18,170 --> 00:55:22,350 bio je 15, nije moglo proći Granica u brodu. 1170 00:55:22,350 --> 00:55:25,860 Tako ste gledali na lijevoj strani, gledao pravo, pogledao prema vrhu, izgledao 1171 00:55:25,860 --> 00:55:27,000 na dnu. 1172 00:55:27,000 --> 00:55:31,540 Ali niste provjeriti je li vrh je zapravo će biti na brodu. 1173 00:55:31,540 --> 00:55:35,220 A puno ljudi koji su radili to i ispostavilo da je u, njihov program radio 1174 00:55:35,220 --> 00:55:38,960 savršeno, jer gdje odbor je pohranjene u memoriji, ako je otišao jedan 1175 00:55:38,960 --> 00:55:42,300 iznad njega i provjerio da je memorija adresa, nije bilo ništa 1176 00:55:42,300 --> 00:55:44,870 Posebno strašno o tome, tako da program nije bio 1177 00:55:44,870 --> 00:55:45,970 će vikati na tebe. 1178 00:55:45,970 --> 00:55:48,870 >> No, još uvijek bi poletjeti bodove ako što nije moglo proći, jer vam 1179 00:55:48,870 --> 00:55:50,850 radili nešto što nisu bili trebao učiniti, a što bi moglo imati 1180 00:55:50,850 --> 00:55:51,860 stečen u nevolji. 1181 00:55:51,860 --> 00:55:54,040 Tečajevi su, ipak, vjerojatno nije. 1182 00:55:54,040 --> 00:55:57,790 Dakle, ovo je pokazati da, da, još uvijek možemo otići do njega. 1183 00:55:57,790 --> 00:55:59,010 A mi ne uzimajući u Problem u ovom slučaju. 1184 00:55:59,010 --> 00:56:04,000 Ako bismo pokušali učiniti pročitati Sljedećih 100 znakova, mi bismo 1185 00:56:04,000 --> 00:56:06,000 Vjerojatno se u nevolji. 1186 00:56:06,000 --> 00:56:09,400 A možete kodirati čitanje sljedećih 100 likovi ako želite obavljajući neke 1187 00:56:09,400 --> 00:56:10,110 vrsta za petlju. 1188 00:56:10,110 --> 00:56:10,850 Da. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Budući da smo bili dodijeljeni da Prostor stvarna vrijednost, ne bismo 1190 00:56:16,250 --> 00:56:17,050 zapravo biti u mogućnosti vidjeti ništa. 1191 00:56:17,050 --> 00:56:21,740 Trebamo li ga probati sa postavljanjem koji jednako kao što su C ili nešto? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorna: Veliko pitanje. 1193 00:56:22,640 --> 00:56:25,340 Kako mogu postaviti tu vrijednost - 1194 00:56:25,340 --> 00:56:28,980 što linija koda ne pišem na liniji sedam učiniti ono što je rekao? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: Star ptr iznosi jednu citat c završiti jednu ponudu. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorna: Tako da je stavljajući karakter, c, na tom mjestu, 1197 00:56:36,970 --> 00:56:40,200 jer opet, ta zvijezda znači ići tamo. 1198 00:56:40,200 --> 00:56:43,320 A kada se koristi na lijevoj strani Dodjela operator, koja je jednaka 1199 00:56:43,320 --> 00:56:47,270 potpisati, nećemo dobiti koja Vrijednost toliko postaviti tu vrijednost. 1200 00:56:47,270 --> 00:56:48,520 Sada ćemo vidjeti što će se dogoditi. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Mi smo stavili nešto postoji i to je bio tamo. 1203 00:56:56,770 --> 00:56:58,000 Nazvali smo slobodni. 1204 00:56:58,000 --> 00:57:00,100 Neke stvari se vjerojatno dogodilo na hrpi. 1205 00:57:00,100 --> 00:57:01,890 Pa to ne postoji više. 1206 00:57:01,890 --> 00:57:07,440 Ali opet, mi ne dobivamo u nevolji za odlazak tamo. 1207 00:57:07,440 --> 00:57:10,260 >> Ovo radim u kodu za ilustraciju da je puno njih 1208 00:57:10,260 --> 00:57:12,410 pitanja koja imate, oni su stvarno zanimljivo 1209 00:57:12,410 --> 00:57:13,650 odgovore puno vremena. 1210 00:57:13,650 --> 00:57:15,260 I oni su jako dobra pitanja. 1211 00:57:15,260 --> 00:57:19,010 I vi ih možete shvatiti na svoj vlastiti, ako, na primjer, 1212 00:57:19,010 --> 00:57:19,990 nismo u sekciji. 1213 00:57:19,990 --> 00:57:20,940 Da. 1214 00:57:20,940 --> 00:57:24,430 >> UČENIK: Zato što ne šaljete pokazivač nigdje, ne trebate 1215 00:57:24,430 --> 00:57:26,530 koristiti malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorna: Tako to ide natrag na svoje početno pitanje. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Je li to samo lokalna varijabla? 1219 00:57:29,980 --> 00:57:32,280 Malloc ovdje nije to uvjerljiv. 1220 00:57:32,280 --> 00:57:35,260 Upotreba malloc ovdje ne da uvjerljiv, jer to je 1221 00:57:35,260 --> 00:57:36,500 samo lokalna varijabla. 1222 00:57:36,500 --> 00:57:40,970 >> UČENIK: Pa mogli ste napraviti char Zvijezda ptr jednako halo? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorna: Oh. 1224 00:57:41,400 --> 00:57:43,300 Tako ćemo sada vratiti na svoje početno pitanje. 1225 00:57:43,300 --> 00:57:46,885 Mislim da nisu bili zadovoljni s mojim odgovorom. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Kao da je? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Da. 1229 00:57:49,682 --> 00:57:50,932 Čekaj. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorna: A gdje su želiš ispisati? 1232 00:57:57,850 --> 00:58:00,026 Tako ćemo ispisati string kao što je to? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Zanimljivo. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorna: Pa to kaze Argument je tip lika. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Dakle, to bi trebao biti znak. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: Samo treba prvi. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorna: Dakle, ovo je ono što sam rekao prije. 1242 00:58:28,610 --> 00:58:34,240 Kao što sam rekao, to nije pohranjivanje string unutar promjenjivog pointer. 1243 00:58:34,240 --> 00:58:35,120 To je spremanje - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: prva vrijednost u nizu. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorna: adresa Prva vrijednost niza. 1246 00:58:40,810 --> 00:58:46,940 Ako bismo ispisali toga, mi smo dobivanje vrijednosti unutar pokazivača. 1247 00:58:46,940 --> 00:58:51,005 , Pa ćemo vidjeti što je, doista, adresa memorije. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Ima li to smisla? 1250 00:58:56,440 --> 00:58:56,940 Oprostite. 1251 00:58:56,940 --> 00:58:58,996 Čekaj, ne da odgovor na Vaše Pitanje je, je li? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Da. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorna: Ova linija koda je stvarajući niz, a zatim još jedan 1254 00:59:05,830 --> 00:59:09,115 promjenjiva pointer koji je upućuju na taj niz, da polja. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Da. 1257 00:59:14,980 --> 00:59:19,200 >> UČENIK: Pa, ako smo otišli jedno sjećanje baviti i dalje, da bi dobili na sat? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Je li to bila pohranjena kao niz? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorna: Kao, što smo učinili - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 pa to je vrijedno raditi. 1263 00:59:30,790 --> 00:59:33,780 To je točka aritmetika, koji vas dečki Vidio prije i trebalo biti 1264 00:59:33,780 --> 00:59:35,550 relativno zadovoljni. 1265 00:59:35,550 --> 00:59:36,905 To je isto kao da se pisanje - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 ako smo napisati ovaj redak koda, vidjeli smo niza zapis prije. 1268 00:59:46,350 --> 00:59:55,900 To bi nam trebalo dati drugi Vrijednost u ovom polju, h. 1269 00:59:55,900 --> 01:00:05,010 >> Ako smo to učinili, to također treba dati nas druga vrijednost u tom polju. 1270 01:00:05,010 --> 01:00:08,320 Zato što se događa nije u memoriju adresu prva stvar, ali 1271 01:00:08,320 --> 01:00:10,530 Memorija adresa stvar jedan preko. 1272 01:00:10,530 --> 01:00:14,360 A onda su zvijezde operatera dereferences da pointer. 1273 01:00:14,360 --> 01:00:16,940 A opet, da vidimo. 1274 01:00:16,940 --> 01:00:18,664 Mi smo dobili h opet. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Što točno znači dereference znači? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorna: dereference je fancy riječ za otići u. 1277 01:00:23,650 --> 01:00:26,390 Idi na to i dobiti ono što je tamo je dereference pokazivača. 1278 01:00:26,390 --> 01:00:28,240 To je samo fancy riječ za to. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Da smo htjeli da se tiska cijeli niz, mogli bismo 1280 01:00:29,986 --> 01:00:31,930 učiniti ampersand pokazivač? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorna: OK, mi smo će pauzirati ovdje. 1282 01:00:33,490 --> 01:00:35,480 Mi ćemo završiti ovdje. 1283 01:00:35,480 --> 01:00:41,760 Ampersand vam daje adresu mjesto, pa kada se to od ampersand 1284 01:00:41,760 --> 01:00:44,080 varijabla, to vam daje adresu gdje je pohranjena ta varijabla. 1285 01:00:44,080 --> 01:00:48,580 Ampersand pokazivač će vam dati adresa ptr gdje ptr je u memoriji. 1286 01:00:48,580 --> 01:00:50,140 >> Nećemo ići na u ovom primjeru. 1287 01:00:50,140 --> 01:00:52,640 Možete to shvatiti stvari na svoju vlastitu. 1288 01:00:52,640 --> 01:00:55,740 Ali opet, to bi čak moglo biti verging Malo dalje od onoga što vam je potrebno znati za 1289 01:00:55,740 --> 01:00:58,000 Opseg ovog srednjoročnom razdoblju - 1290 01:00:58,000 --> 01:00:59,070 ili ovaj kviz, a ne. 1291 01:00:59,070 --> 01:01:00,270 Oprostite. 1292 01:01:00,270 --> 01:01:03,770 >> Mi ćemo krenuti dalje, jer bih željeli napraviti jednu kodiranja problema 1293 01:01:03,770 --> 01:01:05,100 prije vremena je gore. 1294 01:01:05,100 --> 01:01:09,340 I mi se događa da kod onoga što mislim je najuvjerljiviji od njih 1295 01:01:09,340 --> 01:01:11,020 primjeri, atoi. 1296 01:01:11,020 --> 01:01:14,520 Dakle, to je pitanje na kviz prije dvije godine. 1297 01:01:14,520 --> 01:01:17,810 I da ga imam na ploči ovdje. 1298 01:01:17,810 --> 01:01:20,680 >> Ljudi su se pitali na kvizu - 1299 01:01:20,680 --> 01:01:23,640 oni su imali malo više tesxt u pitanje, ali ja eliminirana 1300 01:01:23,640 --> 01:01:26,640 tekst, jer nije bilo potrebno za naše potrebe sada. 1301 01:01:26,640 --> 01:01:29,180 To je bio samo neki background na ono atoi učinio. 1302 01:01:29,180 --> 01:01:31,425 Ali svi znate i vrlo su upoznati s atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Predlažem vam da kodirati to na list papira. 1304 01:01:35,620 --> 01:01:39,310 Također predlažemo da koristite strategiju da smo otišli na 1305 01:01:39,310 --> 01:01:41,040 mnogo u našem dijelu. 1306 01:01:41,040 --> 01:01:44,130 Prvo, pobrinite se da razumijete ono atoi djelo. 1307 01:01:44,130 --> 01:01:47,580 Nacrtati sliku ili se s nekim mentalna slika njega u glavi. 1308 01:01:47,580 --> 01:01:51,120 Zatim, napisati pseudocode za to. 1309 01:01:51,120 --> 01:01:53,120 Na kvizu, ako sve što se je pseudocode, barem što 1310 01:01:53,120 --> 01:01:54,550 staviti nešto dolje. 1311 01:01:54,550 --> 01:02:00,070 A onda je karta koja pseudocode na C. Ako imate čeka u 1312 01:02:00,070 --> 01:02:03,760 pseudocode, kao i provjerite je li se nešto je 1, koja preslikava na ako 1313 01:02:03,760 --> 01:02:05,750 stanje i tako dalje. 1314 01:02:05,750 --> 01:02:07,850 I na kraju, kodirati program u C 1315 01:02:07,850 --> 01:02:15,000 >> Dakle, vratite se atoi i uzeti pet minuta da kod toga na list 1316 01:02:15,000 --> 01:02:19,480 papir, što je vjerojatno o Iznos od vrijeme te će se na 1317 01:02:19,480 --> 01:02:21,260 kviz kod atoi. 1318 01:02:21,260 --> 01:02:27,060 Pet do 15 minuta, pet do 12, pet do 10 minuta, je o iznosu od 1319 01:02:27,060 --> 01:02:30,150 put kad bih potrošiti na to Pitanje u kvizu. 1320 01:02:30,150 --> 01:02:31,670 Dakle, uzeti pet minuta, molim te. 1321 01:02:31,670 --> 01:02:35,957 A ako imate bilo kakvih pitanja, podizanje tvoja ruka, a ja ću doći oko. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [SIDE Razgovori] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorna: OK, pa to je bilo pet minuta. 1326 01:08:37,580 --> 01:08:39,880 To je vjerojatno o iznosu od put kad bih potrošiti na koji na kvizu, 1327 01:08:39,880 --> 01:08:42,120 Možda niska kraj tog vremena. 1328 01:08:42,120 --> 01:08:44,010 Mi ćemo rekapitulacija u malo. 1329 01:08:44,010 --> 01:08:45,740 Počnimo kodiranja ovo. 1330 01:08:45,740 --> 01:08:49,479 A ako ne dobijemo sve na putu kroz, Odgovore na ova i ova 1331 01:08:49,479 --> 01:08:54,189 kviz pitanje dostupni, opet, Fall 2011 je kada se to pitanje 1332 01:08:54,189 --> 01:08:54,913 pojavio na kvizu. 1333 01:08:54,913 --> 01:08:57,830 >> I to je bio vrijedan osam bodova na kvizu onda. 1334 01:08:57,830 --> 01:09:01,140 Osam bodova je na visokoj kraju Količina bodova nešto vrijedi. 1335 01:09:01,140 --> 01:09:04,790 Većina pitanja u rasponu od jednog do šest mjesta. 1336 01:09:04,790 --> 01:09:08,500 Dakle, to je veći izazov Pitanje, sigurno. 1337 01:09:08,500 --> 01:09:09,750 Može li itko da počnem? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> Općenito, što ćemo to želite učiniti s ovim 1340 01:09:15,380 --> 01:09:17,550 funkcionirati atoi, logično? 1341 01:09:17,550 --> 01:09:19,569 Što želimo učiniti? 1342 01:09:19,569 --> 01:09:22,279 Tako ćemo pisati Neki pseudocode. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Pretvori znakova u cijelih brojeva. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorna: Pretvori znakova u cijelih brojeva. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Dakle, koliko znakova smo Trebat će proći? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Svi oni. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Svi likovi u nizu. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorna: Sve Likovi u nizu. 1350 01:09:35,540 --> 01:09:42,180 Dakle, ako smo htjeli ići kroz svaki lik u nizu, što je stvar 1351 01:09:42,180 --> 01:09:44,560 u C vidjeli smo da je dozvoljeno nam je proći kroz svaki 1352 01:09:44,560 --> 01:09:45,939 lik u nizu? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENTI: za petlju. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorna: za petlju. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Dakle, idemo na petlji kroz svaki lik u sekundi. 1357 01:09:55,330 --> 01:10:00,940 >> Onda što ćemo htjeti raditi kada smo dobili određeni lik? 1358 01:10:00,940 --> 01:10:02,480 Recimo da smo uzimajući donijela 90. 1359 01:10:02,480 --> 01:10:03,460 Mi smo dobili devet. 1360 01:10:03,460 --> 01:10:04,240 To je znak. 1361 01:10:04,240 --> 01:10:07,440 Ono što želimo učiniti s taj lik 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Oduzmite ga od karaktera 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Dodaj 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorna: Oduzmite je iz karaktera 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Da. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorna: Zašto Želite li to učiniti? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [nečujan] 1368 01:10:16,560 --> 01:10:17,010 vrijednost. 1369 01:10:17,010 --> 01:10:18,380 Njegova int vrijednost. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorna: U redu, tako da uzmemo lik 9, oduzimati od 1371 01:10:21,580 --> 01:10:25,820 lik 0 dobiti Stvarni broj 9. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 A kako ti znaš da se karakter 9 minus 0 lik je 9? 1375 01:10:37,000 --> 01:10:39,222 Što chart si pogledati? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Postoje logično devet mjestima između 9 i 0. 1377 01:10:43,130 --> 01:10:44,620 Ili ste mogli gledati na ASCII tablice. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorna: ASCII tablica. 1379 01:10:45,120 --> 01:10:46,490 Ali, da, ti si točna kao dobro. 1380 01:10:46,490 --> 01:10:47,780 Dakle oduzmemo 0. 1381 01:10:47,780 --> 01:10:49,010 Tako sada imamo cijeli broj 9. 1382 01:10:49,010 --> 01:10:49,970 I ono što želimo učiniti s tim? 1383 01:10:49,970 --> 01:10:54,970 Ako imamo 90, to je prvi cijeli broj smo, što želimo učiniti? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Ja bih stavio u privremenu cijeli polje, a zatim učinite matematiku na njega 1385 01:10:58,180 --> 01:11:02,088 kasnije da bi ga u kraju. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorna: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Možete početi krajem polje, a zatim krenuti naprijed tako 1388 01:11:06,990 --> 01:11:10,350 da svaki put kad se krene naprijed, je pomnožite sa 10.. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorna: OK. 1390 01:11:10,830 --> 01:11:12,250 To zvuči kao prilično uvjerljiv ideja. 1391 01:11:12,250 --> 01:11:16,040 Možemo početi krajem naše polje, i možemo koristiti strleng. 1392 01:11:16,040 --> 01:11:17,030 Možemo koristiti strleng ovdje. 1393 01:11:17,030 --> 01:11:18,870 Mi ćemo dobiti duljinu našeg niza. 1394 01:11:18,870 --> 01:11:20,100 Krećemo na kraju. 1395 01:11:20,100 --> 01:11:29,170 A + prvi, samo mi to uzeti cijeli broj, a možda smo stvorili kao 1396 01:11:29,170 --> 01:11:32,270 nova varijabla cijeli broj do vrha gdje mi smo pohranjivanje sve. 1397 01:11:32,270 --> 01:11:37,340 Tako smo petlja kroz svaki znak u ss natrag na front, oduzmemo 0, a 1398 01:11:37,340 --> 01:11:42,790 onda smo ga uzeti, a ovisno o gdje je to, mi to pomnožite 1399 01:11:42,790 --> 01:11:45,860 od strane vlasti od 10.. 1400 01:11:45,860 --> 01:11:50,644 Budući da je prvo, što nam je činiti pomnožiti posljednji znak na desnoj strane? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 do 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorna: 10 do 0. 1403 01:11:53,170 --> 01:11:56,010 Što ćemo pomnožiti drugom najdesniji slovo po? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [nečujan]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorna: Što? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 do 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorna: 10 do 1. 1408 01:12:00,420 --> 01:12:03,754 Treće najdesniji lik? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 na 2.. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorna: 10 na 2.. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Žao mi je, ja ne razumijem ono što mi ovdje radimo. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorna: OK, idemo natrag, a zatim. 1413 01:12:08,640 --> 01:12:12,500 Tako ćemo dobiti donesen u nizu. 1414 01:12:12,500 --> 01:12:14,470 Jer želimo pisati atoi. 1415 01:12:14,470 --> 01:12:15,260 Tako smo dobili prošli u nizu. 1416 01:12:15,260 --> 01:12:17,640 Recimo da smo uzimajući prošli u nizu 90. 1417 01:12:17,640 --> 01:12:19,930 >> Prvo što ćemo učiniti je postaviti Novi broj varijabla koja smo 1418 01:12:19,930 --> 01:12:22,150 samo će stvoriti kao naš novi cijeli broj. 1419 01:12:22,150 --> 01:12:24,630 To je ono što ćemo da se vrati na kraju. 1420 01:12:24,630 --> 01:12:30,110 Moramo proći kroz svaki lik u Niz jer smo određena 1421 01:12:30,110 --> 01:12:34,430 da moramo dotaknuti svakoga i zatim ga dodati na naš novi cijeli broj. 1422 01:12:34,430 --> 01:12:36,330 >> No, ne možemo samo dodati kao broj. 1423 01:12:36,330 --> 01:12:38,270 Ne možemo samo uzeti 9 i dodaj 9 na naše cijeli broj. 1424 01:12:38,270 --> 01:12:40,560 To ovisi o tome što mjesto je u nizu. 1425 01:12:40,560 --> 01:12:42,960 Mi ćemo morati pomnožiti je po snazi ​​od 10.. 1426 01:12:42,960 --> 01:12:45,580 Jer to je kako baza 10 djela. 1427 01:12:45,580 --> 01:12:49,050 >> Tako ćemo dobiti stvarna likovima ili stvarni broj 1428 01:12:49,050 --> 01:12:53,860 broj, oduzimanjem karakter 0 od 9 karaktera kao što je učinio s 1429 01:12:53,860 --> 01:12:57,560 oduzimanjem znakova kapitalu iz god lik kojeg smo imali u jednom od 1430 01:12:57,560 --> 01:12:58,120 ti problemi. 1431 01:12:58,120 --> 01:13:04,190 Tako smo zapravo ćete dobiti broj od 0 do 9 spremaju kao pravi broj, a mi ćemo 1432 01:13:04,190 --> 01:13:07,590 pomnožite ga snage od 10, ovisno o tome gdje smo u nizu. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 A onda ćemo ga ponovno dodali u našu novu varijablu cjelobrojnog. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Pa što će to izgledati bi se - mi ćemo privući ovamo. 1437 01:13:37,890 --> 01:13:40,086 Ako bi smo prošli u nizu 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [nečujan]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorna: No atoi traje niz. 1441 01:13:45,540 --> 01:13:46,350 Tako ćemo proći kroz holding. 1442 01:13:46,350 --> 01:13:49,900 Mi ćemo dobiti prošao u 90. 1443 01:13:49,900 --> 01:13:51,540 Idemo s leđa prema naprijed. 1444 01:13:51,540 --> 01:13:53,920 Uzimamo 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Žao mi je. 1446 01:13:55,080 --> 01:13:55,880 Možda je to glupo. 1447 01:13:55,880 --> 01:13:59,440 Ako dosad niste prošli u nizu, Zato je 90 ono što smo 1448 01:13:59,440 --> 01:14:00,260 uzimajući prošao u? 1449 01:14:00,260 --> 01:14:03,160 Jer 90 je cijeli broj. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorna: Zbog atoi traje string i pretvara ga u cijeli broj 1451 01:14:06,820 --> 01:14:08,320 zastupljenost tog niza. 1452 01:14:08,320 --> 01:14:13,650 No, niz od 90 nije cijeli broj 90 ili broj 90. 1453 01:14:13,650 --> 01:14:17,920 Niz 90 je niz od dva ili tri znaka, a, 9 1454 01:14:17,920 --> 01:14:22,740 karakter, 0 karakter, a backslash 0 znakova. 1455 01:14:22,740 --> 01:14:26,260 >> I pišemo atoi jer, za Na primjer, kada se uzme naredbu 1456 01:14:26,260 --> 01:14:30,230 linija argument, a to je spremljena u argv, to se sprema kao string. 1457 01:14:30,230 --> 01:14:32,940 No, ako želite da ga tretiraju kao broj, morate ga pretvoriti u 1458 01:14:32,940 --> 01:14:34,700 Stvarni broj. 1459 01:14:34,700 --> 01:14:37,210 Koji smo mi jedan od naših problema setovima. 1460 01:14:37,210 --> 01:14:38,800 Koji smo učinili u nizu naših problema setovima. 1461 01:14:38,800 --> 01:14:41,690 Svatko koji je cijeli broj kao naredbenog retka argument za. 1462 01:14:41,690 --> 01:14:46,490 Dakle, to je razlog zašto naš atoi funkcija traje niz. 1463 01:14:46,490 --> 01:14:51,910 >> Pa opet, u našem primjeru ovdje, mi smo će uzeti zadnji. 1464 01:14:51,910 --> 01:14:55,050 Idemo oduzeti karakter 0 od nje, jer su likovi 0 1465 01:14:55,050 --> 01:14:58,810 oduzetom karakteru 0 vam daje Stvarni broj 0, prema 1466 01:14:58,810 --> 01:15:00,950 ASCII math da radimo. 1467 01:15:00,950 --> 01:15:04,870 >> Budući da su likovi predstavljeni kao razlikuje od njihove stvarne - 1468 01:15:04,870 --> 01:15:08,830 znakova, na primjer, mala je 97. 1469 01:15:08,830 --> 01:15:10,260 To nije - Ups! 1470 01:15:10,260 --> 01:15:13,290 To nije ono što ste očekivali da se, 0, na primjer. 1471 01:15:13,290 --> 01:15:16,200 Dakle imate za oduzimanje lik dobiti 0.. 1472 01:15:16,200 --> 01:15:18,950 >> Tako ćemo učiniti ovdje da se stvarni broj. 1473 01:15:18,950 --> 01:15:22,560 A onda ćemo ga pomnožite Snaga od 10, ovisno o tome gdje 1474 01:15:22,560 --> 01:15:27,030 je u nizu, a zatim uzeti i to dodati na naš nositelja mjesto 1475 01:15:27,030 --> 01:15:32,520 promjenjiva, tako da možemo doći do Naš konačni novi cijeli broj. 1476 01:15:32,520 --> 01:15:35,080 Da li to ima smisla za sve? 1477 01:15:35,080 --> 01:15:37,730 >> Dakle, mi ne idemo da kod toga upravo sada, jer smo 1478 01:15:37,730 --> 01:15:38,830 dobivanje na kratko vrijeme. 1479 01:15:38,830 --> 01:15:40,860 Ispričavam se na vrijeme od toga. 1480 01:15:40,860 --> 01:15:44,620 Ali to je ono što, nadamo se, što bi moći učiniti na test - na 1481 01:15:44,620 --> 01:15:47,710 najmanju ruku, dobiti ovu pseudocode ispisao. 1482 01:15:47,710 --> 01:15:50,840 >> A onda, ako smo pisati pseudocode, zapravo, možemo to učiniti 1483 01:15:50,840 --> 01:15:51,490 prilično brzo. 1484 01:15:51,490 --> 01:15:55,230 Svaki redak komentara smo mi pisali Ovdje prevodi na oko 1485 01:15:55,230 --> 01:15:56,970 jedna linija C koda. 1486 01:15:56,970 --> 01:16:01,780 Proglašavanje novu varijablu, pisanje petlje, neki oduzimanje, neki 1487 01:16:01,780 --> 01:16:07,070 množenja, a neki zadatak. 1488 01:16:07,070 --> 01:16:09,020 Mi bi vjerojatno također žele napisati povratni vod. 1489 01:16:09,020 --> 01:16:12,040 Mi također htjeti staviti neke čekove u ovdje. 1490 01:16:12,040 --> 01:16:12,655 Da. 1491 01:16:12,655 --> 01:16:15,720 >> UČENIK: Pa možemo liječiti e kao stvarni string? 1492 01:16:15,720 --> 01:16:18,730 Jer znam da je to samo adresa. 1493 01:16:18,730 --> 01:16:22,090 Kao, kako bi ste dobili duljinu Niz koji se prenose putem? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorna: Pa kako je Duljina niza? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> STUDENT: strlen, da. 1497 01:16:26,660 --> 01:16:30,550 No, možete staviti s kao Argument za to? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorna: Pa strlen Potrebno je char zvijezdu. 1499 01:16:34,620 --> 01:16:38,090 I slijedi da char zvijezdu, i to drži računajući sve dok ne dođe do 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen je zapravo jedan od drugih programa smo 1501 01:16:41,865 --> 01:16:42,850 su idući u kodu. 1502 01:16:42,850 --> 01:16:44,560 To je još jedan dobar jedan na kodu. 1503 01:16:44,560 --> 01:16:47,270 Taj jedan je malo lakše, jer ako ćeš razmišljati o tome 1504 01:16:47,270 --> 01:16:47,830 konceptualno - 1505 01:16:47,830 --> 01:16:51,620 Upravo sam to rekao naglas - strlen slijedi pokazivač i čuva ide i 1506 01:16:51,620 --> 01:16:54,210 računajući i praćenje dok se dođete lijevu kosu crtu 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, dobio ga. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorna: Pa najbolje sreće na kvizu 0 sutra. 1509 01:17:00,200 --> 01:17:03,170 Ako imate bilo kakvih pitanja, ja ću biti vani nakon ovoga. 1510 01:17:03,170 --> 01:17:05,610 Slobodno mi e-mail. 1511 01:17:05,610 --> 01:17:08,480 Posegnite za svoj TF, ako ste Ne u mom dijelu, ili dobiti moj 1512 01:17:08,480 --> 01:17:10,005 e-mail, ako vi to želite. 1513 01:17:10,005 --> 01:17:13,140 >> Ako želite da se izbezumila i samo poslati mi e-mail, Freakout e-mail, ja ću 1514 01:17:13,140 --> 01:17:16,710 poslati natrag, kao što je, smješko, ili, kao što je, šala. 1515 01:17:16,710 --> 01:17:18,190 Dakle, slobodno to učiniti kao dobro. 1516 01:17:18,190 --> 01:17:20,750 Sretno opet, i ja ću vidimo se cijeli sljedeći tjedan. 1517 01:17:20,750 --> 01:17:23,435