1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Bine ați venit la A5, toată lumea. 3 00:00:07,820 --> 00:00:11,270 Avem o săptămână interesantă în fața noastră, mai ales pentru că există atât de multe noi 4 00:00:11,270 --> 00:00:12,350 se confruntă în această cameră. 5 00:00:12,350 --> 00:00:12,920 E minunat. 6 00:00:12,920 --> 00:00:15,740 O mulțime dintre voi sunt aici de accident, care este chiar mai bine. 7 00:00:15,740 --> 00:00:18,220 Deci, sperăm că veți continua cu noi. 8 00:00:18,220 --> 00:00:20,220 >> În această săptămână am de gând să-și petreacă cea mai mare parte a secțiunii 9 00:00:20,220 --> 00:00:21,870 pregătirea pentru testul. 10 00:00:21,870 --> 00:00:26,580 Deci, pe agenda noastră, vom vorbi un pic despre resurse pentru clasa, 11 00:00:26,580 --> 00:00:30,350 dar și pentru testul, iar apoi, din nou, petrece cea mai mare parte de clasa a vorbi 12 00:00:30,350 --> 00:00:31,390 despre întrebări. 13 00:00:31,390 --> 00:00:33,900 După ce am terminat răspunde dvs. întrebări, sau în cazul în care întrebările dumneavoastră 14 00:00:33,900 --> 00:00:39,010 în mod natural ne duce la unele de codificare, am au probleme de probă de la examene 15 00:00:39,010 --> 00:00:43,180 pe care le vom cod direct în secțiunea împreună, care, de asemenea, aduce un alt 16 00:00:43,180 --> 00:00:45,420 Subiecte bune pentru a acoperi. 17 00:00:45,420 --> 00:00:48,280 >> Deci, în primul rând, așa cum am trecut prin pentru ultimii doi de săptămâni pentru a vă reaminti 18 00:00:48,280 --> 00:00:51,700 băieți, există o tona de resurse disponibilă pentru acest curs. 19 00:00:51,700 --> 00:00:55,020 Mulți dintre ei vor fi incredibil de util pentru tine, ca veți continua să 20 00:00:55,020 --> 00:00:57,280 studia pentru test 0, deoarece e marți după-amiază. 21 00:00:57,280 --> 00:00:59,630 Deci, tot de ce au fost studia pentru un pic. 22 00:00:59,630 --> 00:01:02,640 >> Există note de curs și sursă cod pe care ar trebui să 23 00:01:02,640 --> 00:01:04,050 verificați cu siguranta. 24 00:01:04,050 --> 00:01:05,019 Uita-te la pantaloni scurți. 25 00:01:05,019 --> 00:01:07,470 Check out study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 Apoi, mai jos, un număr de alte resurse. 27 00:01:11,770 --> 00:01:14,020 >> Din nou, testul 0 este ziua de mâine la ora 01. 28 00:01:14,020 --> 00:01:18,230 Dacă nu ați făcut-o deja, verificați din Despre Quiz 0 documentul privind 29 00:01:18,230 --> 00:01:21,370 pagina curs de a da seama în cazul în care sunteți de a lua testul. 30 00:01:21,370 --> 00:01:25,770 Testul începe la 1:10 și 70 minute mai târziu se termină. 31 00:01:25,770 --> 00:01:29,610 Deci, dacă apari după 01:10, sunteți mergi la a lua mai putine ca mai multe minute 32 00:01:29,610 --> 00:01:30,940 mult de 70 pentru a lua testul. 33 00:01:30,940 --> 00:01:33,570 Deci, asigurați-vă că sunteți acolo la timp. 34 00:01:33,570 --> 00:01:38,690 Dacă sunteți un student de extensie sau să aibă alte considerații de testare, aceasta 35 00:01:38,690 --> 00:01:40,400 nu ar putea fi la 01 mâine. 36 00:01:40,400 --> 00:01:43,540 Dar, din nou, verifica Despre Quiz 0 document pentru a asigurați-vă că știți atunci când 37 00:01:43,540 --> 00:01:44,760 sunteți luați testul. 38 00:01:44,760 --> 00:01:46,440 Am scris 75 minute aici. 39 00:01:46,440 --> 00:01:48,580 Cred că e bine, nu 70. 40 00:01:48,580 --> 00:01:53,420 >> Acesta acoperă toate materialele de la o saptamana 0 la curs de săptămâna trecută, miercuri. 41 00:01:53,420 --> 00:01:59,350 Și din nou, pentru acest test, pe care documentului, veți obține o față-verso și 8 42 00:01:59,350 --> 00:02:03,770 1/2 de 11 foaie de hârtie pe care îl obțineți de a folosi ca notițe în timpul testului. 43 00:02:03,770 --> 00:02:08,570 Mulți oameni, dacă nu cei mai mulți oameni, au a constatat că modul cel mai util singur 44 00:02:08,570 --> 00:02:11,970 pentru a studia pentru testul este de a face o foaie de studiu, o 45 00:02:11,970 --> 00:02:13,730 -unul sider, de-al lor. 46 00:02:13,730 --> 00:02:17,710 Deci, uita-te la cele din trecut, dacă le-ați văzut cele din trecut. 47 00:02:17,710 --> 00:02:19,960 Ajunge la prieteni pentru a vedea ce ei pun pe ale lor. 48 00:02:19,960 --> 00:02:23,610 >> Dar mâinile în jos, cel mai bun mod posibil de studiu este de a merge prin tot ceea ce și 49 00:02:23,610 --> 00:02:26,530 Whittle-l în jos la ceea ce ar trebui sau ar trebui să nu aparțin pe foaia de 50 00:02:26,530 --> 00:02:30,570 hârtie, pentru că asta e doar o foarte mod util pentru tine să vă asigurați 51 00:02:30,570 --> 00:02:33,620 te duci prin tot ceea ce și au unele familiaritate cu ea. 52 00:02:33,620 --> 00:02:36,690 Cei mai mulți oameni, vom găsi, chiar dacă ele au foaia de hârtie așezat corect 53 00:02:36,690 --> 00:02:39,840 alături de ei pe testul, nu se transforma la aceasta, pentru că, din nou, că foarte 54 00:02:39,840 --> 00:02:43,290 Procesul de a merge prin intermediul informațiilor a ajutat să-l învețe. 55 00:02:43,290 --> 00:02:45,370 >> Are cineva intrebari despre test 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Are toată lumea - 58 00:02:51,450 --> 00:02:53,230 Eu nu am de gând să fac un spectacol de mâini. 59 00:02:53,230 --> 00:02:53,550 Nu face nimic. 60 00:02:53,550 --> 00:02:54,790 Am fost de gând să întreb cine a inceput sa studieze. 61 00:02:54,790 --> 00:02:58,360 Dar nu vreau să-ți facă tot nu ridica mainile. 62 00:02:58,360 --> 00:03:01,290 Așa cum am spus - da, Avi, dă-i drumul. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Ce ar fi un lucru util pentru a pune pe un singur-pager? 64 00:03:04,205 --> 00:03:05,875 >> STUDENT: Asta depinde de tine. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Ai de a folosi judecata. 66 00:03:08,210 --> 00:03:13,220 Lucruri utile pentru a pune pe un singur-pager, Dacă sunteți confuz despre Big O 67 00:03:13,220 --> 00:03:17,510 rulare de diferite tipuri de căutări și soiuri, a pus că pe acolo într-o 68 00:03:17,510 --> 00:03:18,760 diagramă dandy la îndemână. 69 00:03:18,760 --> 00:03:22,250 În acest fel, în cazul în care vi se va cere ca pe test, nu aveți nevoie pentru a încerca și figura 70 00:03:22,250 --> 00:03:23,560 l sau motiv prin runtime. 71 00:03:23,560 --> 00:03:24,730 Puteți pur și simplu copia jos. 72 00:03:24,730 --> 00:03:28,320 Dacă te uiți la chestionare trecut, o mulțime de ori, nu rulează întrebări de timp. 73 00:03:28,320 --> 00:03:34,150 Astfel că ar fi un exemplu de un bun lucru pentru a pune pe dvs. o-pager. 74 00:03:34,150 --> 00:03:37,450 >> Alte lucruri bune pentru a pune pe, dacă ești confuz cu privire la modul de a declara o 75 00:03:37,450 --> 00:03:40,570 Funcția sau ce diferitele părți ale declarația funcției sunt, scrie 76 00:03:40,570 --> 00:03:43,400 că pe acolo, o versiune generic și apoi, poate, un exemplu. 77 00:03:43,400 --> 00:03:47,290 Dacă sunteți confuz despre indicii, o diagramă de modul în care indicii de lucru este 78 00:03:47,290 --> 00:03:48,660 probabil foarte util. 79 00:03:48,660 --> 00:03:52,440 Dacă sunteți confuz despre recursivitate, un gusta funcție recursive pe acolo 80 00:03:52,440 --> 00:03:54,980 ar putea, de asemenea, se dovedesc a fi foarte util. 81 00:03:54,980 --> 00:03:57,290 Nu ca să vă dau câteva idei? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Ai nevoie pentru a înțelege întregul proces de compilare, cum ar fi 83 00:04:01,820 --> 00:04:03,220 cum că toate lucrările? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: totul care a fost acoperit putea 85 00:04:06,620 --> 00:04:08,060 apar pe testul. 86 00:04:08,060 --> 00:04:08,930 Întrebări - 87 00:04:08,930 --> 00:04:11,300 dar din nou, unele lucruri vor fi ponderate puternic decât altele. 88 00:04:11,300 --> 00:04:14,330 Unele lucruri au venit din nou și din nou în clasă, în 89 00:04:14,330 --> 00:04:15,590 prelegere, și secțiunea. 90 00:04:15,590 --> 00:04:17,220 Alte lucruri care nu au venit care de multe ori. 91 00:04:17,220 --> 00:04:22,900 >> Am vorbit mult despre # include și -L ceva și ceea ce înseamnă, în cele 92 00:04:22,900 --> 00:04:24,390 procesul de compilare. 93 00:04:24,390 --> 00:04:29,120 Am vorbit mult despre GDB, se agață, aceste diferite drapele pe care le folosim atunci când 94 00:04:29,120 --> 00:04:33,100 am compila ceva, și ce make15, de exemplu, într-adevăr 95 00:04:33,100 --> 00:04:34,510 înseamnă și într-adevăr nu. 96 00:04:34,510 --> 00:04:38,110 Noi nu am vorbi la fel de mult despre fiecare pas unic în 97 00:04:38,110 --> 00:04:39,240 procesul de compilare. 98 00:04:39,240 --> 00:04:40,410 Am vorbit încă despre asta. 99 00:04:40,410 --> 00:04:42,550 Deci, este încă ceva care vă ar trebui să fie familiarizat cu. 100 00:04:42,550 --> 00:04:44,610 Dar, din nou, nu vom fi - 101 00:04:44,610 --> 00:04:49,140 lucruri care vin mai des în clasă sunt mult mai susceptibile de a veni mai mult 102 00:04:49,140 --> 00:04:52,495 de multe ori și să fie mai puternic ponderate la testul. 103 00:04:52,495 --> 00:04:53,280 >> Rece. 104 00:04:53,280 --> 00:04:54,580 Orice alte întrebări cu privire la test 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> OK, așa că am pus o listă de subiecte de pe bord. 107 00:05:00,050 --> 00:05:01,550 Am trecut prin programa. 108 00:05:01,550 --> 00:05:07,340 M-am dus prin intermediul sectiunii de revizuire de la noaptea trecută și aceste slide-uri pentru a veni 109 00:05:07,340 --> 00:05:13,710 cu o listă neexhaustivă de subiecte pe care le-am acoperit până acum în CS50 110 00:05:13,710 --> 00:05:16,800 și lucruri care s-ar putea apar pe testul. 111 00:05:16,800 --> 00:05:19,900 Deci, eu nu am de gând să treacă prin fiecare in parte dintre acestea. 112 00:05:19,900 --> 00:05:22,370 Care ar lua mult mai mult timp decât avem acum. 113 00:05:22,370 --> 00:05:26,880 Dar am pus asta aici pentru a sperăm jog memorie ca la lucruri care pot 114 00:05:26,880 --> 00:05:28,420 sau nu poate fi la fel de familiar cu tine. 115 00:05:28,420 --> 00:05:32,850 >> Și mi-ar plăcea să-și petreacă cea mai mare parte a secțiune răspunde la întrebările dumneavoastră despre 116 00:05:32,850 --> 00:05:35,130 aceste subiecte, subiecte care nu sunt acoperite aici. 117 00:05:35,130 --> 00:05:36,130 Putem scrie cod pseudo. 118 00:05:36,130 --> 00:05:40,010 Putem scrie cod reale pentru a vă asigura că - 119 00:05:40,010 --> 00:05:44,280 Nu pot răspunde la întrebarea dumneavoastră și de a ajuta toată lumea să înțeleagă în mod fundamental un 120 00:05:44,280 --> 00:05:48,330 Multe dintre aceste subiecte, astfel încât veți simți pregătite și confortabilă a intra în 121 00:05:48,330 --> 00:05:50,150 testul de mâine. 122 00:05:50,150 --> 00:05:52,300 Deci, citiți pe lista. 123 00:05:52,300 --> 00:05:54,780 Ai sperăm că ați venit la secțiunea cu câteva întrebări la fel de bine. 124 00:05:54,780 --> 00:05:58,480 Când sunteți gata, să ridice mâna și vom începe. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Păstrați în minte, întrebările pe care le au, nu există întrebări stupide. 127 00:06:05,200 --> 00:06:06,250 Am auzit că o mulțime. 128 00:06:06,250 --> 00:06:09,490 Și întrebările pe care le au, eu sunt dispus pentru a paria, multe alte persoane, atât 129 00:06:09,490 --> 00:06:11,740 stau aici și vizionarea online, la fel de bine. 130 00:06:11,740 --> 00:06:13,770 Astfel încât să puteți ajuta doar oameni punând întrebări. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Între stivă și morman, există o pre-alocate 133 00:06:18,040 --> 00:06:22,880 procentul de memorie care este definit ca acest lucru este pentru stiva sau pentru grămada? 134 00:06:22,880 --> 00:06:25,010 Sau cum funcționează asta, mai exact? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Marea întrebare. 136 00:06:26,230 --> 00:06:28,640 Am de gând să urmări înapoi un pic. 137 00:06:28,640 --> 00:06:30,910 Are toată lumea - 138 00:06:30,910 --> 00:06:31,660 vă rugăm să fie cinstit aici. 139 00:06:31,660 --> 00:06:34,130 Știu că vă cer să ridice dvs. mână în fața colegii dumneavoastră. 140 00:06:34,130 --> 00:06:38,510 Dar sunt acolo oameni care se simt inconfortabil cu stiva si heap 141 00:06:38,510 --> 00:06:42,980 și-ar dori pentru a trece peste asta și ceea ce înseamnă acestea? 142 00:06:42,980 --> 00:06:43,880 Ridică mâna dacă - 143 00:06:43,880 --> 00:06:44,420 OK. 144 00:06:44,420 --> 00:06:45,120 Mulțumesc. 145 00:06:45,120 --> 00:06:48,420 Așa că am de gând să meargă peste stiva și heap foarte repede și apoi 146 00:06:48,420 --> 00:06:50,370 se mute în a răspunde la întrebarea dumneavoastră. 147 00:06:50,370 --> 00:06:58,250 >> Deci, dacă am scoate-o cutie pentru a reprezenta memorie de pe computerul dumneavoastră, ce sunt unele 148 00:06:58,250 --> 00:07:02,160 lucruri care merg în această casetă? 149 00:07:02,160 --> 00:07:03,630 Principal. 150 00:07:03,630 --> 00:07:04,020 O funcție principală. 151 00:07:04,020 --> 00:07:05,890 În cazul în care se merge principal? 152 00:07:05,890 --> 00:07:08,090 >> STUDENT: [inaudibil]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Deci, vom pune principal aici. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Ce altceva merge în cutia asta? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> STUDENT: Funcțiile pe care le numesc. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Funcțiile pe care o numim. 159 00:07:19,020 --> 00:07:20,440 Și unde se duc? 160 00:07:20,440 --> 00:07:21,300 >> STUDENT: In stiva. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Ei du-te în stivă. 162 00:07:22,380 --> 00:07:27,350 Așa că am de gând să numim această lucru aici stivei. 163 00:07:27,350 --> 00:07:31,880 Și până sus, avem grămadă. 164 00:07:31,880 --> 00:07:35,450 Deci, memoria nu este o cutie ca asta. 165 00:07:35,450 --> 00:07:37,330 Dar este de fapt destul de similare. 166 00:07:37,330 --> 00:07:40,840 O să fie o mulțime de cutii de peste și peste, în funcție de cât de mare dvs. 167 00:07:40,840 --> 00:07:43,730 calculator este sau cât de mare de memorie este. 168 00:07:43,730 --> 00:07:46,950 >> La citat-citatul "de jos" este stiva. 169 00:07:46,950 --> 00:07:50,880 Și acolo sunt multe lucruri care merge pe stiva. 170 00:07:50,880 --> 00:07:53,840 Și cei care depind de funcțiile aveți în codul dumneavoastră. 171 00:07:53,840 --> 00:07:57,780 Veți avea întotdeauna o funcție în ta cod numit principal, astfel încât există întotdeauna o 172 00:07:57,780 --> 00:08:00,480 secțiune aici în stiva dedicat principal. 173 00:08:00,480 --> 00:08:03,980 >> Aceste secțiuni din stivă sunt numite cadre stiva. 174 00:08:03,980 --> 00:08:09,580 Atunci când apelați o altă funcție, spune principal solicită o funcție de căutare binară, 175 00:08:09,580 --> 00:08:11,075 am pus un alt cadru pe stiva. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Mai exact, vom dona o parte din memorie pe noastre 178 00:08:17,320 --> 00:08:22,960 calculator pentru a stoca binar de căutare a lui locală variabile și pentru a rula binar 179 00:08:22,960 --> 00:08:24,150 cod căutare. 180 00:08:24,150 --> 00:08:26,810 >> Deci, noi numim binar de căutare. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 În această bucată de memorie, vom pentru a stoca variabilele sale locale. 183 00:08:33,340 --> 00:08:35,270 Vom stoca apelurile sale printf. 184 00:08:35,270 --> 00:08:38,159 Indiferent ce se întâmplă, că funcția este vor fi stocate acolo. 185 00:08:38,159 --> 00:08:40,350 Binar de căutare se va executa. 186 00:08:40,350 --> 00:08:42,210 Se va finaliza execuție. 187 00:08:42,210 --> 00:08:47,450 Ce este cuvântul în C, care semnifică că o funcție ar trebui să 188 00:08:47,450 --> 00:08:49,306 finalizeze executarea ei? 189 00:08:49,306 --> 00:08:50,040 >> STUDENT: Return. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Înapoi. 191 00:08:50,870 --> 00:08:53,230 Deci, ori de câte ori veți vedea o declarație de întoarcere, capetele funcționale 192 00:08:53,230 --> 00:08:54,350 atunci când hit-uri ca. 193 00:08:54,350 --> 00:08:56,740 De căutare, astfel binar va lovi returnarea acestuia. 194 00:08:56,740 --> 00:09:01,360 Această parte din memorie va fi, în esență, să fie eliberat. 195 00:09:01,360 --> 00:09:03,510 Și principal va reveni la execuție. 196 00:09:03,510 --> 00:09:07,240 Astfel principal va întrerupe ori de câte ori a fost, de apel binar de căutare, pentru a primi o valoare de retur, 197 00:09:07,240 --> 00:09:08,700 și continua execuția. 198 00:09:08,700 --> 00:09:10,840 Acest cadru stivă va merge departe. 199 00:09:10,840 --> 00:09:14,810 >> Dacă numim o functie recursiv, care este o funcție care se numește peste 200 00:09:14,810 --> 00:09:18,480 și peste, am putea ajunge - spune noi a făcut căutare binar recursiv. 201 00:09:18,480 --> 00:09:21,520 S-ar putea obține binar de căutare versiune unul, binar de căutare doi, căutare binară 202 00:09:21,520 --> 00:09:24,090 trei, patru de căutare binară, căutare binar cinci. 203 00:09:24,090 --> 00:09:27,950 Și apoi această căutare binară finală cinci va lovi cazul de bază, și stiva 204 00:09:27,950 --> 00:09:31,010 rame va merge înapoi și să păstreze închidere până când vom ajunge înapoi la principal. 205 00:09:31,010 --> 00:09:32,530 Putem trece peste recursivitate într-un pic. 206 00:09:32,530 --> 00:09:35,530 Dar toate acestea este de a spune, daca esti de asteptare mai multe funcții la un moment dat, 207 00:09:35,530 --> 00:09:39,250 nu va mai fi stiva multiple cadre pe stivă. 208 00:09:39,250 --> 00:09:42,900 >> Heap, pe de altă parte, până aici, nu este pentru funcții, 209 00:09:42,900 --> 00:09:44,380 nu pentru variabile locale. 210 00:09:44,380 --> 00:09:48,920 Este pentru alocate dinamic variabile. 211 00:09:48,920 --> 00:09:57,210 Deci acestea sunt variabile care pot fi inițializată fie principal sau un 212 00:09:57,210 --> 00:09:58,640 funcționeze că apelurile principale. 213 00:09:58,640 --> 00:10:00,790 Oriunde în codul dvs., ele poate fi inițializat. 214 00:10:00,790 --> 00:10:04,360 Și pentru a inițializa o dinamic variabilă alocate. 215 00:10:04,360 --> 00:10:06,970 Ce funcție în C nu folosim? 216 00:10:06,970 --> 00:10:07,600 >> STUDENT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Ai sunat malloc. 219 00:10:10,800 --> 00:10:12,260 Ai un spațiu de memorie. 220 00:10:12,260 --> 00:10:15,020 Și ca spațiu de memorie este pe heap. 221 00:10:15,020 --> 00:10:18,840 Și ca spațiu de memorie rămâne acolo până te sun gratuit. 222 00:10:18,840 --> 00:10:22,670 >> Variabile astfel alocate dinamic în heap va exista atâta timp cât 223 00:10:22,670 --> 00:10:25,250 ca ei să existe, iar ei nu vor du-te departe, până când în mod explicit 224 00:10:25,250 --> 00:10:26,760 spune-le să plece. 225 00:10:26,760 --> 00:10:29,670 Aveți posibilitatea să le creați într-o singură funcție. 226 00:10:29,670 --> 00:10:31,930 Stiva ca funcția de cadru se va merge departe. 227 00:10:31,930 --> 00:10:35,490 Dar care variabila va exista în continuare în grămada până când este eliberat, 228 00:10:35,490 --> 00:10:39,650 potențial de funcția pe care o numește binar de căutare sau orice altceva. 229 00:10:39,650 --> 00:10:42,580 >> Deci, acele variabile morman sta acolo pentru atâta timp cât doriți 230 00:10:42,580 --> 00:10:43,490 le să rămână acolo. 231 00:10:43,490 --> 00:10:46,090 Și ei se pune aici. 232 00:10:46,090 --> 00:10:47,450 Și apoi următorul este pus acolo. 233 00:10:47,450 --> 00:10:50,210 Ei păstrează obtinerea completat, și-au stai acolo până te sun gratuit. 234 00:10:50,210 --> 00:10:52,870 >> Și, în esență, heap si stiva, obtinerea de la întrebarea lui Marcus, 235 00:10:52,870 --> 00:10:54,500 crește față de celălalt. 236 00:10:54,500 --> 00:10:57,730 Și dacă se execută într-un altul, care le-ați folosit toate memoria dvs. 237 00:10:57,730 --> 00:11:01,330 calculator, iar programul va renunta pentru că nu aveți nici mai mult de memorie 238 00:11:01,330 --> 00:11:02,420 lăsat să utilizeze. 239 00:11:02,420 --> 00:11:07,290 Intre ele, există eventual alte lucruri. 240 00:11:07,290 --> 00:11:10,980 Dar pentru domeniul de aplicare al acestui curs, tu nu trebuie să vă faceți griji despre asta. 241 00:11:10,980 --> 00:11:12,020 >> Astfel că a fost răspunsul la întrebarea dumneavoastră. 242 00:11:12,020 --> 00:11:13,520 Nu vă faceți griji. 243 00:11:13,520 --> 00:11:15,550 Dar asta a fost raspunsul lung. 244 00:11:15,550 --> 00:11:17,800 Tot ce trebuie să știți este heap si stiva va fi - 245 00:11:17,800 --> 00:11:18,900 se pornește de la partea de jos. 246 00:11:18,900 --> 00:11:19,570 Stiva face. 247 00:11:19,570 --> 00:11:20,790 Heap e acolo. 248 00:11:20,790 --> 00:11:21,990 Ei vor crește mai aproape unul de altul. 249 00:11:21,990 --> 00:11:23,110 >> Și dacă ei atinge, care este o problemă. 250 00:11:23,110 --> 00:11:24,500 Ai fugit din memorie. 251 00:11:24,500 --> 00:11:28,760 Dar, de asemenea, în plus față de a ști unde ele sunt, ceea ce este stocat în ambele 252 00:11:28,760 --> 00:11:30,512 stivă și grămadă. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Când se ciocnesc, este că un stack overflow? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Când se ciocnesc, asta nu e un stack overflow. 256 00:11:35,670 --> 00:11:38,340 Un stack overflow este un domeniu diferit că putem trece peste, dacă doriți să. 257 00:11:38,340 --> 00:11:40,020 OK, ne vom întoarce la care într-un pic. 258 00:11:40,020 --> 00:11:42,730 >> STUDENT: Care e cuvântul numit atunci când au lovit reciproc, 259 00:11:42,730 --> 00:11:44,450 stiva si heap? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Pentru moment, nu vă faceți griji cu privire la. 261 00:11:46,640 --> 00:11:47,750 Doar știu - 262 00:11:47,750 --> 00:11:50,530 Voi răspunde la această întrebare după clasă. 263 00:11:50,530 --> 00:11:52,680 În cazul în care rula în fiecare altele, ai fugit afară de memorie, pentru că nu există mai mult 264 00:11:52,680 --> 00:11:53,330 spațiu acolo. 265 00:11:53,330 --> 00:11:55,450 >> STUDENT: Îmi pare rău, ceea ce este un defect SEG? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Un segment vina poate fi numit pentru - 267 00:11:58,710 --> 00:12:02,240 aceasta depinde de ce numit vina SEG lui. 268 00:12:02,240 --> 00:12:06,260 Uneori, overflow stack-ul, acesta va spune vina seg ca eroarea. 269 00:12:06,260 --> 00:12:08,180 >> STUDENT: Ce despre dereferencing o variabilă nul? 270 00:12:08,180 --> 00:12:10,040 Este că un defect SEG? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: dereferencing un pointer nul - 272 00:12:11,480 --> 00:12:17,850 OK, deci, dacă aveți un pointer care vă egală cu null, indicii, rechemare, 273 00:12:17,850 --> 00:12:20,270 adrese de memorie magazin ca valorile lor. 274 00:12:20,270 --> 00:12:23,660 Și un pointer nul este, în esență, stocarea 0, 0-lea 275 00:12:23,660 --> 00:12:26,670 aborda în care variabila. 276 00:12:26,670 --> 00:12:30,010 Deci 0x, 0, 0, 0, 0, etc. 277 00:12:30,010 --> 00:12:35,030 Că adresa 0-lea în memorie care nu este în imaginea noastră, că e acolo sus 278 00:12:35,030 --> 00:12:38,800 undeva, care este rezervat pentru calculator. 279 00:12:38,800 --> 00:12:40,130 Nu avem voie să-l atingă. 280 00:12:40,130 --> 00:12:44,680 >> Deci, atunci când programul este de executare, în cazul în care ceva este încercarea de a merge la memorie 281 00:12:44,680 --> 00:12:48,990 adresa 0, se știe că care este o valoare goală. 282 00:12:48,990 --> 00:12:50,820 Acesta nu știe nimic ar trebui să fie acolo. 283 00:12:50,820 --> 00:12:53,420 Deci, dacă încercați și de a folosi ceva acolo și trata ceva de genul acolo sau 284 00:12:53,420 --> 00:12:58,355 încercarea de a merge la acea locație, ai gând pentru a obține un defect segmentul sau o eroare. 285 00:12:58,355 --> 00:13:00,520 Asta răspunde la întrebarea dvs.? 286 00:13:00,520 --> 00:13:03,170 >> Și acum ne întoarcem de a stiva de preaplin. 287 00:13:03,170 --> 00:13:09,560 Lucruri în stivă, ca voi avea văzut mai înainte, în - să elaboreze o strânsă 288 00:13:09,560 --> 00:13:11,966 dintr-un cadru de stivă. 289 00:13:11,966 --> 00:13:15,050 Se poate vedea că toată lumea? 290 00:13:15,050 --> 00:13:16,650 Deci avem cadru nostru stivă. 291 00:13:16,650 --> 00:13:23,260 Suntem economisire o matrice într-un local, variabilă în această funcție. 292 00:13:23,260 --> 00:13:29,510 Deci, spune gama noastră are cinci puncte. 293 00:13:29,510 --> 00:13:33,230 Toate cele cinci dintre acestea vor fi stocate în acest cadru stivă. 294 00:13:33,230 --> 00:13:37,540 >> Dacă vom începe scris dincolo de limitele de această matrice - 295 00:13:37,540 --> 00:13:43,990 așa că, dacă vom începe să scrie în, să spunem că este 0. 296 00:13:43,990 --> 00:13:46,800 Acestea sunt cele cinci indicii din gama noastră. 297 00:13:46,800 --> 00:13:50,980 Dacă vom începe scris în index 5, care nu avem atunci când avem o 298 00:13:50,980 --> 00:13:55,900 matrice de dimensiune 5, vom începe să scrie în index 6, 7, 8, 9, putem obține o stiva 299 00:13:55,900 --> 00:13:57,960 Eroare de depășire. 300 00:13:57,960 --> 00:14:00,510 >> În general, nu este - 301 00:14:00,510 --> 00:14:04,910 vei primi, probabil, în necazuri dacă te duci pe de o. 302 00:14:04,910 --> 00:14:08,640 Dar, în general, va intra în cele mai multe probleme dacă te duci pe de o mult 303 00:14:08,640 --> 00:14:12,770 și te duci până în prezent peste pe care le scrie pe adresa de returnare de care 304 00:14:12,770 --> 00:14:16,080 funcție, care se află la partea de jos a cadrului stivă. 305 00:14:16,080 --> 00:14:16,520 >> Pentru că, nu? 306 00:14:16,520 --> 00:14:17,670 Vă - în - Îmi pare rău. 307 00:14:17,670 --> 00:14:18,550 Nu ", pentru că trebuie." 308 00:14:18,550 --> 00:14:20,470 >> În cadrul stivă, aveți variabile locale. 309 00:14:20,470 --> 00:14:27,090 Chiar la baza stivei cadru este adresa expeditorului. 310 00:14:27,090 --> 00:14:28,790 Asta în cazul în funcția merge, atunci când sa terminat. 311 00:14:28,790 --> 00:14:33,750 Și dacă suprascrie că întoarcerea adresa, atunci când acest cadru stivă, 312 00:14:33,750 --> 00:14:36,680 atunci când te duci prin stivă cadru și executarea fiecare linie, esti 313 00:14:36,680 --> 00:14:40,350 de gând să meargă la noua adresă de retur că este scris acolo în loc de 314 00:14:40,350 --> 00:14:40,910 unul real. 315 00:14:40,910 --> 00:14:45,050 Și asta este modul în care ne-am văzut unor breșe de securitate 316 00:14:45,050 --> 00:14:46,780 se poate întâmpla cu calculatoare. 317 00:14:46,780 --> 00:14:52,760 >> Overflow atât de stack, în scurt, este atunci când vă suprascrie partea din stivă 318 00:14:52,760 --> 00:14:55,440 ce ar trebui să utilizați, la nivel local variabile ce ar trebui să utilizați, și 319 00:14:55,440 --> 00:14:58,070 în special atunci când începe suprascrierea lucruri importante cum ar fi 320 00:14:58,070 --> 00:14:59,100 reveni adresa. 321 00:14:59,100 --> 00:15:00,090 Și asta e în cazul în care veți obține o eroare. 322 00:15:00,090 --> 00:15:03,980 Sau poate chiar ai putea începe chiar și în scris - 323 00:15:03,980 --> 00:15:05,370 spune binar de căutare a fost chiar deasupra principal. 324 00:15:05,370 --> 00:15:07,790 Dacă ați suprascris mult, te ar putea scrie în principal. 325 00:15:07,790 --> 00:15:10,230 Dar, în general, veți obține o eroare înainte apoi, deoarece computerul știe 326 00:15:10,230 --> 00:15:12,270 faci ceva ce nu ar trebui să facă. 327 00:15:12,270 --> 00:15:12,560 Da. 328 00:15:12,560 --> 00:15:13,910 >> STUDENT: Care este diferența între un stack overflow 329 00:15:13,910 --> 00:15:16,940 și un buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Buffer overflow este un tip mai general de 331 00:15:19,420 --> 00:15:20,395 ceea ce tocmai am descris. 332 00:15:20,395 --> 00:15:22,610 >> STUDENT: Deci un stack overflow este un exemplu de buffer overflow. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Exact. 334 00:15:23,420 --> 00:15:28,700 Aceasta este o matrice ne putem gândi ca un tampon, un spațiu de lucruri pentru a merge inch 335 00:15:28,700 --> 00:15:30,600 Acesta este un buffer overflow stack. 336 00:15:30,600 --> 00:15:33,210 Am putea avea un buffer overflow grămadă. 337 00:15:33,210 --> 00:15:36,870 Dacă a existat un tampon, care au adesea este o matrice heap, și ne-am 338 00:15:36,870 --> 00:15:40,600 suprascris aceste limite, atunci ne-ar au un buffer overflow grămadă. 339 00:15:40,600 --> 00:15:44,870 >> Și dincolo de sfera de aplicare a acestui curs, acestea sunt detectate un pic diferit. 340 00:15:44,870 --> 00:15:48,040 Compilatorul are special mijloacele de detectare fiecare. 341 00:15:48,040 --> 00:15:50,660 Dar un buffer overflow este o mai generic tip de ceea ce am descris, 342 00:15:50,660 --> 00:15:54,090 care a fost un buffer overflow stack. 343 00:15:54,090 --> 00:15:56,240 Ai că răspunde la întrebarea dvs.? 344 00:15:56,240 --> 00:15:57,910 Dulce. 345 00:15:57,910 --> 00:16:01,850 >> Au fost acolo orice alte întrebări legate de la stiva sau grămada? 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: Știu că trebuie să siruri de caractere libere deoarece acestea sunt în grămada 349 00:16:08,220 --> 00:16:09,305 și nu doriți să scurgeri de memorie. 350 00:16:09,305 --> 00:16:12,240 Dar nu trebuie să elibereze variabile globale și chestii de genul asta? 351 00:16:12,240 --> 00:16:14,335 Sau sunt eliberați în mod automat? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Bună întrebare. 353 00:16:15,700 --> 00:16:22,340 Deci, în CS50.H, vom crea acest lucru pentru ai sunat un șir. 354 00:16:22,340 --> 00:16:23,800 Un șir este într-adevăr ceea ce? 355 00:16:23,800 --> 00:16:24,810 >> STUDENT: Char stele. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: O stea char, un pointer la un personaj, un pointer la 357 00:16:29,180 --> 00:16:30,650 o serie de caractere. 358 00:16:30,650 --> 00:16:32,210 Asta e ceea ce șirul este. 359 00:16:32,210 --> 00:16:36,050 Deci, avem nevoie să-l elibereze, pentru că getstring, pe care am folosit-o foarte mult - 360 00:16:36,050 --> 00:16:38,370 Numele string egal getstring - 361 00:16:38,370 --> 00:16:43,560 care mallocs pentru noi, unele de memorie de pe morman și apoi returnează un pointer la 362 00:16:43,560 --> 00:16:47,230 primul caracter de care șir, o stea char. 363 00:16:47,230 --> 00:16:52,760 >> Deci, aparent, dacă nu au fost scris gratuit pe oricare dintre siruri de caractere 364 00:16:52,760 --> 00:16:55,600 pe care le-ați chemat până acum, aveți a fost scurgeri de unele de memorie. 365 00:16:55,600 --> 00:16:57,430 Desigur, nu am vorbit despre ea, așa că nimeni nu a ajuns în 366 00:16:57,430 --> 00:16:58,520 probleme pentru a face aceasta. 367 00:16:58,520 --> 00:16:59,980 Dar merge mai departe, da. 368 00:16:59,980 --> 00:17:03,990 Când apelați getstring, esti mallocing spațiu pe heap. 369 00:17:03,990 --> 00:17:07,640 Și dacă nu suna gratuit mai târziu că șir, aveți o scurgere de memorie. 370 00:17:07,640 --> 00:17:09,440 Care răspunde la întrebarea dvs.? 371 00:17:09,440 --> 00:17:10,606 >> Da 372 00:17:10,606 --> 00:17:15,020 >> STUDENT: Deci, pentru a face acest lucru, nu vom folosi dreptul de liberă înainte de revenirea? 373 00:17:15,020 --> 00:17:18,510 Ca, în domeniul de aplicare a, cred că în cazul în care spunem, cum ar fi, int principal, în cadrul 374 00:17:18,510 --> 00:17:24,410 domeniul de aplicare a codului care este în cele acolade, chiar înainte de a - 375 00:17:24,410 --> 00:17:26,140 stii unde te-ai de obicei, pune întoarcere. 376 00:17:26,140 --> 00:17:27,950 Nu te pune gratuit înainte de asta? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Deci, vă puteți pune gratuit ori de câte ori doriți să puneți gratuit. 378 00:17:31,000 --> 00:17:33,810 Deoarece acestea sunt alocate dinamic variabile, deoarece acestea pot 379 00:17:33,810 --> 00:17:39,170 trăi dincolo de sfera de aplicare a unei anumite funcție, dacă te sun malloc într-un 380 00:17:39,170 --> 00:17:44,140 funcție separată, de exemplu, getstring, puteți apela gratuit în principal. 381 00:17:44,140 --> 00:17:46,050 Nu aveți nevoie să-l numim în funcție specifică 382 00:17:46,050 --> 00:17:47,570 unde malloc este numit. 383 00:17:47,570 --> 00:17:50,340 Dar tu nu trebuie să-i spunem înainte de a se întoarce principale. 384 00:17:50,340 --> 00:17:51,120 >> Și într-adevăr depinde. 385 00:17:51,120 --> 00:17:54,960 Aceasta depinde de ce malloced că spațiu în primul rând. 386 00:17:54,960 --> 00:17:57,320 Unii oameni vor apela elibera destul de repede. 387 00:17:57,320 --> 00:17:59,220 Unii oameni nu vor suna gratuit până sfârșitul programului lor. 388 00:17:59,220 --> 00:18:00,660 Și ei vor merge prin și gratuit totul. 389 00:18:00,660 --> 00:18:03,597 Aceasta depinde de ce ai sunat malloc. 390 00:18:03,597 --> 00:18:11,270 >> STUDENT: Și ce-ai spune dacă te-a sunat utilizare getstring? 391 00:18:11,270 --> 00:18:13,320 Ai spune liber ce? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Deci, sintaxa pentru gratuit este pur și simplu gratuit, paren deschise, aproape 393 00:18:20,040 --> 00:18:22,130 paren, și numele de indicatorul. 394 00:18:22,130 --> 00:18:26,410 Deci, dacă ați scrie șir de la egal la egal nume getstring, ai pus nume aici. 395 00:18:26,410 --> 00:18:27,760 Acesta este numele de indicatorul. 396 00:18:27,760 --> 00:18:30,570 Și se știe că pentru a elibera memorie. 397 00:18:30,570 --> 00:18:33,920 >> STUDENT: Deci, atunci când se eliberează că memorie, indicatorul încă mai arată în acel loc 398 00:18:33,920 --> 00:18:34,970 în memorie? 399 00:18:34,970 --> 00:18:39,020 Sau este indicatorul de asemenea, golit de adresa pe care o indică. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Ar trebui să încercăm asta. 401 00:18:40,290 --> 00:18:41,430 Ar trebui să cod care. 402 00:18:41,430 --> 00:18:43,880 Să vină înapoi, atunci când vom ajunge la codificare, și să cod care. 403 00:18:43,880 --> 00:18:46,000 Și dacă doriți să dau seama de răspunsul pentru că, puteți, de asemenea, cod care 404 00:18:46,000 --> 00:18:46,690 între timp. 405 00:18:46,690 --> 00:18:49,100 Dar asta este o întrebare mare. 406 00:18:49,100 --> 00:18:53,480 >> STUDENT: Este posibil să se ceva gratuit prea repede? 407 00:18:53,480 --> 00:18:58,530 Deci, ai nevoie de el pentru programul dvs., și te-a eliberat ca spațiu de memorie? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Da. 409 00:18:59,200 --> 00:19:03,020 Este posibil, dacă aveți ceva liber și apoi să-l utilizați din nou, veți 410 00:19:03,020 --> 00:19:06,890 a alerga într-o eroare. 411 00:19:06,890 --> 00:19:10,810 Dar asta e pe tine, pentru că te-a eliberat ceva și apoi a numit-o mai târziu. 412 00:19:10,810 --> 00:19:13,940 Astfel că a fost greșeală un programator. 413 00:19:13,940 --> 00:19:14,780 Dar da. 414 00:19:14,780 --> 00:19:17,760 Ai putea scrie asta. 415 00:19:17,760 --> 00:19:19,240 >> Orice mai multe întrebări cu privire la - 416 00:19:19,240 --> 00:19:19,760 Da. 417 00:19:19,760 --> 00:19:22,820 >> STUDENT: Deci, dacă ar trebui să doar liber se, în general, înainte de 418 00:19:22,820 --> 00:19:25,490 Programul se termină, nu înseamnă că, dacă Programul se termină și nu-l elibereze, 419 00:19:25,490 --> 00:19:27,580 care de memorie este încă alocată? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Dacă programul dvs. se termină și uitați pentru a elibera ceva, atunci 421 00:19:31,330 --> 00:19:34,390 care de memorie a fost alocată de-a lungul durata de viață a programului dumneavoastră. 422 00:19:34,390 --> 00:19:37,670 Când programul se închide complet, care de memorie nu se întâmplă 423 00:19:37,670 --> 00:19:39,490 să rămână acolo pentru totdeauna. 424 00:19:39,490 --> 00:19:42,080 Calculatorul este destul de inteligent să știe că atunci când programul se închide, se 425 00:19:42,080 --> 00:19:46,440 ar trebui să scape de toate de memorie care a fost asociat cu acest program. 426 00:19:46,440 --> 00:19:51,240 >> Cu toate acestea, există instrumente pe care le puteți rula pe un program pentru a detecta dacă, atunci când 427 00:19:51,240 --> 00:19:54,720 programul terminat, ai uitat pentru a elibera memorie. 428 00:19:54,720 --> 00:19:57,960 Și pentru următoarea problemă setat în cazul în care veți fi utilizați malloc și utilizarea 429 00:19:57,960 --> 00:20:02,610 indicii, veți fi difuzate acest programul de program pentru a vedea dacă, 430 00:20:02,610 --> 00:20:06,530 atunci când se întoarce principale, ai avut ceva lucruri care au rămas unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Deci, ei nu sunt de gând să rămână malloced pentru totdeauna în calculatorul dumneavoastră. 432 00:20:09,130 --> 00:20:11,720 Asta ar fi o risipă, deoarece foarte repede, calculatoare 433 00:20:11,720 --> 00:20:12,960 ar alerga afară de memorie. 434 00:20:12,960 --> 00:20:16,450 Dar dacă se execută până la sfârșitul anului dvs. programa și ei nu sunt eliberat și dumneavoastră 435 00:20:16,450 --> 00:20:20,260 Programul iese, asta e încă o problemă că acest instrument va ajuta să le abordeze. 436 00:20:20,260 --> 00:20:21,520 >> STUDENT: E Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: E numit Valgrind. 438 00:20:22,910 --> 00:20:23,520 Și veți fi - 439 00:20:23,520 --> 00:20:25,780 >> STUDENT: Dar noi nu trebuie să știe că pentru testul, deși? 440 00:20:25,780 --> 00:20:27,600 Adică, a fost vorbit despre un pic în curs. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Deci Valgrind este numele de acest instrument. 442 00:20:33,600 --> 00:20:37,180 Știind ceea ce face este suficient pentru testul. 443 00:20:37,180 --> 00:20:40,200 Dar tu nu l-au folosit încă pe dumneavoastră problema stabilit că nu am avut o 444 00:20:40,200 --> 00:20:43,520 set de probleme care sa ocupat în mod explicit cu malloc sau utilizați malloc. 445 00:20:43,520 --> 00:20:45,330 Deci, nu s-au folosit Valgrind încă. 446 00:20:45,330 --> 00:20:47,760 Dar va folosi mai devreme mai degrabă decât mai târziu. 447 00:20:47,760 --> 00:20:48,710 >> STUDENT: Poți să repeți ce Valgrind este? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Îmi pare rău? 449 00:20:49,190 --> 00:20:51,240 >> STUDENT: Poți să repeți ceea ce scopul Valgring este? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind este numele - 451 00:20:53,100 --> 00:20:59,890 ca GDB vă ajută să depanare programul tău, Valgrind ajută să îți dai seama dacă 452 00:20:59,890 --> 00:21:03,210 lucrurile nu au fost eliberați atunci când programul se închide. 453 00:21:03,210 --> 00:21:05,110 Deci, veți rula pe program. 454 00:21:05,110 --> 00:21:09,230 Și programul iese, și-l voi spune program numit malloc această multe 455 00:21:09,230 --> 00:21:13,670 ori pentru această multe bytes, și tu numai numit liber asta de multe ori. 456 00:21:13,670 --> 00:21:16,520 Și așa a lăsat aceste multe bytes fără a fi eliberat. 457 00:21:16,520 --> 00:21:18,050 Sau se va spune care le-ați eliberat totul. 458 00:21:18,050 --> 00:21:19,070 Bună treabă. 459 00:21:19,070 --> 00:21:19,480 >> STUDENT: OK. 460 00:21:19,480 --> 00:21:21,060 Și se numește Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-I-N-D. 462 00:21:24,940 --> 00:21:25,970 >> STUDENT: O întrebare despre indicii. 463 00:21:25,970 --> 00:21:30,080 Deci, spune n ați stea x este egal cu ceva. 464 00:21:30,080 --> 00:21:33,330 Care este egală, indiferent de ce pui acolo, este că ceea ce se pune în interiorul 465 00:21:33,330 --> 00:21:36,120 ceea ce x este îndreptat la, sau indicatorul de x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Poți repet întrebarea? 467 00:21:37,690 --> 00:21:39,340 Putem să-l trage în timp ce o spui? 468 00:21:39,340 --> 00:21:42,710 >> STUDENT: În testul, de fapt, una pe care ne-a trimis, a fost ca, char 469 00:21:42,710 --> 00:21:46,520 adevăr stele este egal cu pietre CS50, corect? 470 00:21:46,520 --> 00:21:52,190 Asta înseamnă că că roci CS50 este ceea ce adevărul este îndreptat la? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Deci vorbești despre o stea char într-un șir, cum 472 00:21:55,810 --> 00:21:56,460 care funcționează? 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 Să trage această aici. 476 00:21:59,140 --> 00:22:07,100 >> [SIDE CONVERSAȚII] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Deci, această variabilă va fi de tip char stele. 478 00:22:11,130 --> 00:22:14,580 Cât de mare este o variabilă de stele de tip char? 479 00:22:14,580 --> 00:22:15,510 Cât de multe bytes? 480 00:22:15,510 --> 00:22:16,450 >> STUDENȚII: Patru. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: E patru bytes. 482 00:22:18,210 --> 00:22:21,420 Cât de multe drepturi este o variabilă de stele de tip int? 483 00:22:21,420 --> 00:22:22,210 >> STUDENȚII: Patru. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Patru bytes. 485 00:22:24,910 --> 00:22:28,280 Dacă este un pointer, atunci este întotdeauna patru bytes, deoarece indicii, lor 486 00:22:28,280 --> 00:22:30,070 Valoarea este o adresă de memorie. 487 00:22:30,070 --> 00:22:35,160 Și adrese de memorie pe CS50 aparat sunt patru bytes. 488 00:22:35,160 --> 00:22:42,900 Așa că atunci când ne numim getstring, sau atunci când să zicem, stringname egal, și apoi în 489 00:22:42,900 --> 00:22:46,140 ghilimele duble pus un șir de caractere, punem - 490 00:22:46,140 --> 00:22:46,920 bine, că este un pic diferit. 491 00:22:46,920 --> 00:22:48,630 Vom face getString ca exemplu. 492 00:22:48,630 --> 00:22:52,150 Sau ceva stea char este egal cu șirul. 493 00:22:52,150 --> 00:22:54,360 Ne pare rău, da-mi un exemplu că ai citit? 494 00:22:54,360 --> 00:22:57,590 >> STUDENT: adevărul stea char egal "roci CS50" în ghilimele. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Deci această stea, această vom numi această variabilă x de nostru 496 00:23:02,260 --> 00:23:04,060 scopuri generice. 497 00:23:04,060 --> 00:23:05,970 Am creat o variabilă numită x. 498 00:23:05,970 --> 00:23:07,610 Este de tip char stele. 499 00:23:07,610 --> 00:23:10,950 Acesta este un pointer la o serie de caractere. 500 00:23:10,950 --> 00:23:12,200 Deci, aici - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Deci, acesta este modul în care aceasta ar fi lucrează în memorie. 503 00:23:25,890 --> 00:23:27,410 Acest lucru ar stoca o adresă de memorie. 504 00:23:27,410 --> 00:23:31,770 S-ar stoca adresa de memorie a primul caracter din matrice. 505 00:23:31,770 --> 00:23:33,830 Și atunci când te-a urmărit indicatorul, v-ar 506 00:23:33,830 --> 00:23:35,200 obține primul caracter. 507 00:23:35,200 --> 00:23:38,780 >> Și dacă sunteți de lectură acest lucru ca un șir, computerul este inteligent 508 00:23:38,780 --> 00:23:42,930 suficient să se știe, citi toată chestia asta până când se ajunge la o reacție 0. 509 00:23:42,930 --> 00:23:45,530 Dar dacă sunteți de lectură un caracter la un timp, așa că te iterarea prin 510 00:23:45,530 --> 00:23:49,910 acest șir, atunci veti citi doar o caracter la un moment dat până când veți ajunge la 511 00:23:49,910 --> 00:23:50,850 backslash 0. 512 00:23:50,850 --> 00:23:52,335 Că nu s-ar putea răspunde la dumneavoastră întrebare, totuși. 513 00:23:52,335 --> 00:23:55,610 >> STUDENT: Da, dar nu ai malloced acel spațiu 514 00:23:55,610 --> 00:23:58,400 dar pentru că pointer. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Deci, eu nu sunt destul de sigur exact ceea ce căutați la, 516 00:24:02,510 --> 00:24:03,640 pentru că nu am face acest test. 517 00:24:03,640 --> 00:24:06,370 Care trebuia să fie un ajutor resurse de la un alt TF. 518 00:24:06,370 --> 00:24:11,380 Dacă creați un șir pe stiva sau ca o variabilă locală, va 519 00:24:11,380 --> 00:24:16,920 fi la fel de matrice de taxe, mai degrabă decât în general, o stea caracter ce indică spre 520 00:24:16,920 --> 00:24:18,600 un alt șir. 521 00:24:18,600 --> 00:24:20,550 Dar eu nu știu. 522 00:24:20,550 --> 00:24:25,065 Asta ar putea fi un pointer la un alt șir pe stiva, de asemenea. 523 00:24:25,065 --> 00:24:27,240 Da. 524 00:24:27,240 --> 00:24:31,116 >> STUDENT: Știu că aveți nevoie pentru a aloca memorie în cazul în care indicatorul este 525 00:24:31,116 --> 00:24:33,360 obtinerea declarat în interiorul unei alte funcții. 526 00:24:33,360 --> 00:24:36,740 Ai nevoie pentru a face același lucru în cazul în care este fiind declarat în interiorul principal, 527 00:24:36,740 --> 00:24:39,570 îl utilizați în interiorul principal? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Deci, da. 529 00:24:43,590 --> 00:24:46,670 Puteți declara un pointer la orice adresă de memorie în memorie. 530 00:24:46,670 --> 00:24:51,440 Acesta poate fi adresa de memorie a unei locală variabilă, deși cele mai multe ori, 531 00:24:51,440 --> 00:24:55,760 oamenii nu declară adrese de memorie pentru variabile locale, deoarece ei merg 532 00:24:55,760 --> 00:24:59,890 departe odată ce funcție returnează, care De aceea, ne-am malloc în general lucrurile. 533 00:24:59,890 --> 00:25:04,630 Dar, da, ai putea declara un pointer într-o altă variabilă locală. 534 00:25:04,630 --> 00:25:06,360 Este pur și simplu, în general, nu se face. 535 00:25:06,360 --> 00:25:09,480 Dar pot arunca o privire la care lucru specific după clasă. 536 00:25:09,480 --> 00:25:10,650 Da. 537 00:25:10,650 --> 00:25:12,350 >> STUDENT: Cred că acest lucru este un fel de ceea ce se cere. 538 00:25:12,350 --> 00:25:16,930 Se pare ciudat să fie inițializarea un pointer nu ca un 539 00:25:16,930 --> 00:25:20,760 adresa, dar ca ceea ce se pare ca o valoare. 540 00:25:20,760 --> 00:25:25,970 Se pare ca CS50 este ceea ce este în interior lucru fiind subliniat și 541 00:25:25,970 --> 00:25:28,820 nu adresa reală, nu? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Deci asta e nu este cazul, totuși. 543 00:25:30,520 --> 00:25:32,470 Asta nu e ceea ce se întâmplă. 544 00:25:32,470 --> 00:25:35,910 Când declara o stea char, este o adresă de memorie. 545 00:25:35,910 --> 00:25:38,860 Indicii sunt toate adresele de memorie arătând spre altceva. 546 00:25:38,860 --> 00:25:41,480 Că altceva ar putea fi pe stack, dar aproape întotdeauna este pe 547 00:25:41,480 --> 00:25:43,440 morman în modul în care vom vedea folosit. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Dar stringname este egal cu dublu-citat "GetString," putem vedea că și noi 550 00:25:53,500 --> 00:25:55,010 pot uita prin care și codul de asta. 551 00:25:55,010 --> 00:26:01,190 string getString nu este salvat în că variabila, sau oricare ar fi șirul 552 00:26:01,190 --> 00:26:04,580 Numele nu este salvat în care variabilă, nu pentru că așa 553 00:26:04,580 --> 00:26:06,070 indicii de lucru. 554 00:26:06,070 --> 00:26:06,770 Asta face sens? 555 00:26:06,770 --> 00:26:07,170 >> STUDENT: Da. 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Sperăm, că nu a fost confuz pentru oricine. 558 00:26:11,690 --> 00:26:15,732 Dar dacă ar fi fost, ne putem uita la ea din nou într-un pic, pentru că suntem de fapt merge 559 00:26:15,732 --> 00:26:19,240 pentru a coda ceva care va sperăm de lucru cu siruri de caractere și de a ajuta sa te simti 560 00:26:19,240 --> 00:26:22,170 mai confortabil cu ei. 561 00:26:22,170 --> 00:26:24,869 >> Orice alte întrebări legate de aceste subiecte sau alte subiecte care 562 00:26:24,869 --> 00:26:26,119 Voi pune înapoi? 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 chiar acum. 566 00:26:36,310 --> 00:26:37,630 Da, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Deci, acest lucru este complet independent, dar putem pleca peste 568 00:26:39,860 --> 00:26:42,760 foarte repede ceea ce avem nevoie să știm despre diferenta dintre un 32 și 569 00:26:42,760 --> 00:26:46,345 64-bit mașină? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Da. 571 00:26:47,740 --> 00:26:52,111 Deci, 32 de biți este cât de multe bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: E patru bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: E patru bytes. 574 00:26:54,360 --> 00:26:58,420 Și 64 de biți este cât de multe bytes? 575 00:26:58,420 --> 00:26:59,112 >> STUDENT: Opt. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Opt bytes. 577 00:27:00,610 --> 00:27:03,980 Deci, din nou, opt biți este un octet. 578 00:27:03,980 --> 00:27:08,340 Aparatul CS50 este o mașină de 32 de biți. 579 00:27:08,340 --> 00:27:13,650 Deci, adrese de memorie sunt patru bytes. 580 00:27:13,650 --> 00:27:17,460 Există 2 la 32 adrese de memorie. 581 00:27:17,460 --> 00:27:21,310 0 la 2 la 32 minus 1. 582 00:27:21,310 --> 00:27:27,630 Și eu nu sunt pozitive, dar asta e probabil, domeniul de aplicare a ceea ce aveți nevoie pentru a 583 00:27:27,630 --> 00:27:35,230 știu pentru o mașină pe 32 de biți, care memorie adresele sunt, din nou, patru bytes lung, 584 00:27:35,230 --> 00:27:39,620 și care este suma maximă de adrese de memorie. 585 00:27:39,620 --> 00:27:41,680 >> De asemenea, tipuri de date - 586 00:27:41,680 --> 00:27:45,020 acest lucru ar putea fi ceva la fel de bine că e demn de remarcat. 587 00:27:45,020 --> 00:27:49,610 Dimensiunea de un tip de date depinde de aparatul cu care lucrați. 588 00:27:49,610 --> 00:27:56,760 Deci, un caracter, un singur caracter, este modul în care mulți bytes de pe aparat nostru CS50? 589 00:27:56,760 --> 00:27:57,980 Un octet. 590 00:27:57,980 --> 00:28:02,310 Și este de fapt un octet ca bine pe o mașină de 64 de biți. 591 00:28:02,310 --> 00:28:05,920 >> Și cele mai multe tipuri de date sunt același număr de bytes pe ambele masini. 592 00:28:05,920 --> 00:28:11,620 Dar unele tipuri de date vor fi diferite pe ambele masini. 593 00:28:11,620 --> 00:28:14,590 Astfel că ar putea fi, eventual, Singurul lucru pe care trebuie să știți. 594 00:28:14,590 --> 00:28:16,710 >> Dar chiar și asta, cred, este dincolo de limitele - 595 00:28:16,710 --> 00:28:20,990 Sunt aproape sigur, dacă te uiți înapoi la teste vechi, se spune, își asumă pentru 596 00:28:20,990 --> 00:28:24,090 codificare probleme pe care îl utilizați o mașină de 32 de biți. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Dar există, pentru a merge împreună cu faptul că, în cazul în care sunteți interesat, există 599 00:28:30,620 --> 00:28:35,920 tipuri de date, care sunt la fel dimensiune pe toate mașinile. 600 00:28:35,920 --> 00:28:42,670 >> Dacă ați văzut ceva de genul uint32_t, s-ar putea sau ar putea 601 00:28:42,670 --> 00:28:43,260 nu s-au văzut asta. 602 00:28:43,260 --> 00:28:44,290 Acesta este un tip de date. 603 00:28:44,290 --> 00:28:47,570 Care este de a spune, de 32 de biți, indiferent ceea ce mașină este asta. 604 00:28:47,570 --> 00:28:50,350 Deci, atunci când oamenii scriu portabil cod, ei, probabil, nu se va folosi int. 605 00:28:50,350 --> 00:28:53,260 Vor folosi în schimb alte date tipuri pe care le cunosc vor fi la fel 606 00:28:53,260 --> 00:28:54,780 Dimensiunea pe fiecare mașină. 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 >> MADHU: Am avut o întrebare despre procesul de compilare. 610 00:29:00,150 --> 00:29:04,110 Deci, dacă sunteți scris un program care utilizează o bibliotecă ca CS50 sau ceva 611 00:29:04,110 --> 00:29:06,840 așa, eu știu că biblioteca trebuie sa, la un moment dat, fie 612 00:29:06,840 --> 00:29:08,590 compilat și legat inch 613 00:29:08,590 --> 00:29:13,380 Dar cât de mult de ce se întâmplă în timpul elaborarea programului dumneavoastră? 614 00:29:13,380 --> 00:29:15,880 Ce parte a acestui proces de bibliotecă apare atunci când sunteți 615 00:29:15,880 --> 00:29:18,560 compilarea propriul program? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Deci, hai sa trecem peste în general, etapele acestui proces. 617 00:29:24,020 --> 00:29:26,280 Scrii fișierul c... 618 00:29:26,280 --> 00:29:33,530 În fișierul c., Tu # include dvs. biblioteci antet, de exemplu, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Ce înseamnă că includ ascuțit linie face pentru programul tău? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Se adaugă prototipurile de funcțiile din antetul 622 00:29:43,350 --> 00:29:45,120 fișierele din bibliotecile. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Exact. 624 00:29:45,600 --> 00:29:49,870 Se adaugă aceste prototipuri funcționale la codul. 625 00:29:49,870 --> 00:29:55,230 Deci, atunci când codul este compilat în stadii incipiente, compilatorul stie 626 00:29:55,230 --> 00:29:59,250 că există într-adevăr aceste funcții, și că undeva, ele au fost definite. 627 00:29:59,250 --> 00:30:02,460 Fișierele. H nu includ definiții pentru aceste funcții sau cum 628 00:30:02,460 --> 00:30:03,950 ele lucrează efectiv. 629 00:30:03,950 --> 00:30:07,960 Cs50.h include doar ceva care spune că getstring este un lucru real care 630 00:30:07,960 --> 00:30:09,270 se poate întâmpla. 631 00:30:09,270 --> 00:30:14,240 Și standardio.h spune printf este un lucru real, care se poate întâmpla. 632 00:30:14,240 --> 00:30:23,190 >> Header astfel limba c cu asta. fisier este transformat într-o anumită 633 00:30:23,190 --> 00:30:27,750 Codul poate fi citit de mașină, care în cele din urmă devine transformat în binar 634 00:30:27,750 --> 00:30:30,030 cod, 0 și 1 a lui. 635 00:30:30,030 --> 00:30:33,590 Și asta e codul care în cele din urmă este executat. 636 00:30:33,590 --> 00:30:38,550 -L Linia CS50 - de exemplu, atunci când scrii răsune - 637 00:30:38,550 --> 00:30:41,830 și apoi să includeți-l CS50, tastați că inch 638 00:30:41,830 --> 00:30:42,180 Și veți vedea că. 639 00:30:42,180 --> 00:30:43,890 Când scrieți face, veți vedea că linia de sus aici. 640 00:30:43,890 --> 00:30:47,740 Și vom vedea că într-o secundă, atunci când am cod sau mai târziu, când ne-am cod. 641 00:30:47,740 --> 00:30:50,390 >> Dar care-l linie CS50 face ceva un pic diferit decât 642 00:30:50,390 --> 00:30:52,440 # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Ce înseamnă linie care-l CS50 fac? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Vreau să spun că-l leagă biblioteca la funcția 646 00:31:00,310 --> 00:31:02,710 apel, cum ar fi. o fișierele. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Deci, foarte aproape, dacă nu spot-on. 648 00:31:08,200 --> 00:31:16,220 -L CS50 ia fișierul binar și fuzionează cu fișier binar. 649 00:31:16,220 --> 00:31:21,410 Deci cs50.h, nu exista nici un punct de cotitură în cs50.h de la limbajul C binar fiecare 650 00:31:21,410 --> 00:31:23,130 timp singur este folosit. 651 00:31:23,130 --> 00:31:26,650 Asta ar fi o prostie, pentru că ar deșeuri o mulțime de timp. 652 00:31:26,650 --> 00:31:30,420 Deci, acesta a fost deja întocmit și transformat într-un executabil. 653 00:31:30,420 --> 00:31:35,430 Iar acum urmează să fie îmbinate cu fișierul dvs. de la sfârșitul anului. 654 00:31:35,430 --> 00:31:38,370 Deci, acele de 1 și 0 sunt de gând să fuzioneze cu cei 655 00:31:38,370 --> 00:31:39,150 și 0 de la sfârșitul. 656 00:31:39,150 --> 00:31:43,670 Deci, acum vei avea de fapt real 1 si 0, care definesc modul în care getstring, 657 00:31:43,670 --> 00:31:47,890 de exemplu, de lucrări, sau cum printf, de exemplu, funcționează. 658 00:31:47,890 --> 00:31:52,750 >> Și pentru mai multe informații, există o compilatoare scurte care Nate oferă că 659 00:31:52,750 --> 00:31:55,410 ar trebui să verificați că merge prin acești pași. 660 00:31:55,410 --> 00:31:56,050 Dar - 661 00:31:56,050 --> 00:31:56,560 Da. 662 00:31:56,560 --> 00:32:01,700 >> STUDENT: Sunt mereu la o fișiere. atunci când acestea sunt sub formă de bibliotecă, 663 00:32:01,700 --> 00:32:06,764 gata pentru a fi îmbinate, legate - cum ar fi acestea sunt în codul binar? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 Ce - 666 00:32:08,420 --> 00:32:11,780 >> STUDENT: Este că întotdeauna cazul pentru bibliotecile când le link-ul? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Da. 668 00:32:12,500 --> 00:32:17,300 Deci nu e. E fișiere, care vor fi cod mașină, care va fi, de asemenea, 669 00:32:17,300 --> 00:32:17,975 criptic pentru tine. 670 00:32:17,975 --> 00:32:19,410 Nu aveți nevoie să vă faceți griji cu privire la acestea. 671 00:32:19,410 --> 00:32:24,930 Dar, în general, da, ei vor fie în. o fișiere gata de plecare. 672 00:32:24,930 --> 00:32:27,170 >> STUDENT: Deci, atunci când nava a o bibliotecă, te navă doar 673 00:32:27,170 --> 00:32:28,880 . h și o..? 674 00:32:28,880 --> 00:32:32,210 Tu nu sunt livrate c sau. S... 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: Deci - 676 00:32:33,070 --> 00:32:36,260 și acest lucru este în acest scurt, precum și, dacă aceste informații pare să vină un 677 00:32:36,260 --> 00:32:36,700 puțin repede. 678 00:32:36,700 --> 00:32:39,870 Dar pe termen scurt pe compilatoare vorbește despre acest lucru, de asemenea. 679 00:32:39,870 --> 00:32:43,290 Când nava o bibliotecă, dacă nava h., fișierul header, cele 680 00:32:43,290 --> 00:32:46,290 prototipuri funcționale, precum și 1 și 0 lui, asta-i tot ce ai nevoie pentru a da. 681 00:32:46,290 --> 00:32:50,640 Nu aveți nevoie pentru a da cum funcție de lucrări, dosarul c... 682 00:32:50,640 --> 00:32:56,360 Deoarece punctul de abstractizare, sau punctul API, punctul în această SPL, 683 00:32:56,360 --> 00:32:59,650 biblioteca portabil Stanford, este pentru tine, nu să vă faceți griji cu privire la modul în care noile 684 00:32:59,650 --> 00:33:04,220 GRect de lucrări, sau cum se misca de lucrări, sau cum se adaugă lucrări. 685 00:33:04,220 --> 00:33:06,520 Tot ce trebuie să știți este că add este o funcție care vă puteți 686 00:33:06,520 --> 00:33:08,880 utiliza, și-l face acest lucru. 687 00:33:08,880 --> 00:33:12,760 Deci, tu chiar nu au nevoie să știe cum este scris în C. Trebuie doar să 688 00:33:12,760 --> 00:33:15,460 stiu, aici sunt funcțiile, ceea ce face, și aici sunt anii 1 și 0 689 00:33:15,460 --> 00:33:18,870 atunci când într-adevăr doriți să le utilizați. 690 00:33:18,870 --> 00:33:19,530 >> Rece. 691 00:33:19,530 --> 00:33:26,980 Orice mai multe întrebări cu privire la compilatoare sau alte subiecte de pe bord? 692 00:33:26,980 --> 00:33:30,300 >> STUDENT: Am o întrebare de punerea în aplicare a funcțiilor recursive. 693 00:33:30,300 --> 00:33:31,170 O întrebare despre recursivitate. 694 00:33:31,170 --> 00:33:33,030 Am avut un sentiment care ar veni. 695 00:33:33,030 --> 00:33:38,310 Deci, haideți să mergem rapid prin recursivitate cu o anumită 696 00:33:38,310 --> 00:33:40,690 exemplu, o funcție factorial. 697 00:33:40,690 --> 00:33:44,920 Pentru ca acest lucru este un exemplu care de multe ori vine sau se utilizează 698 00:33:44,920 --> 00:33:46,170 pentru a ilustra recursivitate. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Deci, "4!" este citit ca 4 factorial. 701 00:33:56,410 --> 00:33:59,120 Și ce înseamnă 4 factorial? 702 00:33:59,120 --> 00:34:00,696 Ce face asta? 703 00:34:00,696 --> 00:34:02,235 Cum se calculează 4 factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 ori de 3 ori de 2 ori 1. 706 00:34:07,960 --> 00:34:11,889 >> Deci, un alt mod de a scrie 4 factorial este de a scrie acest lucru. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 ori 3 factorial. 709 00:34:19,022 --> 00:34:22,080 Deoarece 3 factorial este 3 ori 2 ori 1. 710 00:34:22,080 --> 00:34:27,580 Deci, de 4 ori 3 factorial este 4 ori de 3 ori de 2 ori 1. 711 00:34:27,580 --> 00:34:32,679 De aceea, este o mare factorial candidat pentru recursivitate, pentru că este 712 00:34:32,679 --> 00:34:36,630 clar că există ceva care se intampla de peste si peste si peste pe o 713 00:34:36,630 --> 00:34:39,820 număr mai mic de lucruri până vă ajunge la final. 714 00:34:39,820 --> 00:34:42,570 Când ajunge la 1, 1 factorial este 1. 715 00:34:42,570 --> 00:34:43,719 Nu puteți merge mult mai departe. 716 00:34:43,719 --> 00:34:47,219 0 factorial este de asemenea definit ca 1. 717 00:34:47,219 --> 00:34:50,679 Deci, atunci când ajunge la 1 sau 0, esti la sfârșitul anului, și puteți 718 00:34:50,679 --> 00:34:53,219 începe să mergi înapoi în sus. 719 00:34:53,219 --> 00:34:59,540 Deci, dacă am vrut să scrie o recursive funcție de calculare a factorială, 720 00:34:59,540 --> 00:35:02,170 am de gând să scrie unele pseudocod pentru asta acum. 721 00:35:02,170 --> 00:35:03,300 Înainte de a ne scrie că pseudocod - 722 00:35:03,300 --> 00:35:05,660 Voi da voi o pereche de minute pentru a scrie codul de pseudo-sau pur și simplu cred 723 00:35:05,660 --> 00:35:09,600 despre ea - sunt două lucruri la fiecare funcției recursive are nevoie. 724 00:35:09,600 --> 00:35:12,530 Care sunt cele două lucruri? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Trebuie să se numească. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noah? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Dă-i drumul. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Trebuie să se numească. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Deci un recursiv Funcția are nevoie de un apel recursiv, o 731 00:35:19,220 --> 00:35:20,220 apel la sine. 732 00:35:20,220 --> 00:35:20,770 Asta-i una. 733 00:35:20,770 --> 00:35:21,510 Și ceea ce este un alt lucru? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Un caz de bază. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: Un caz de bază. 736 00:35:23,780 --> 00:35:26,940 Un caz de bază este, aici, atunci ne oprim. 737 00:35:26,940 --> 00:35:29,510 Deci, funcția este chemat. 738 00:35:29,510 --> 00:35:31,410 Scenariul de bază este pe primul loc. 739 00:35:31,410 --> 00:35:33,710 Vrei să știi dacă ești la sfârșitul anului. 740 00:35:33,710 --> 00:35:37,110 Și dacă nu ești la final, face apel recursiv. 741 00:35:37,110 --> 00:35:39,880 Și te duci prin această funcție din nou, verificați din nou cazul dumneavoastră de bază. 742 00:35:39,880 --> 00:35:42,575 Dacă nu sunteți la sfârșit, voi face un alt apel recursiv, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> De aceea, funcții recursive mereu nevoie de aceste cazuri de bază și cele 745 00:35:47,110 --> 00:35:48,210 apeluri recursive. 746 00:35:48,210 --> 00:35:51,280 Dacă nu aveți un apel recursiv, se nu ar fi o funcție recursivă. 747 00:35:51,280 --> 00:35:53,210 Dacă nu ați avea un caz de bază, v-ar merge pentru totdeauna și 748 00:35:53,210 --> 00:35:54,780 nu ar fi nici sfârșit. 749 00:35:54,780 --> 00:35:57,870 Și cazul de bază vine întotdeauna în primul rând, pentru că veți dori întotdeauna să verificați 750 00:35:57,870 --> 00:36:00,420 daca esti la sfârșitul primei. 751 00:36:00,420 --> 00:36:04,770 Deci, înainte de a face ceva pseudocod, de ce Nu vă luați un minut să se gândească la 752 00:36:04,770 --> 00:36:09,360 cum o funcție recursivă factorial ar fi scris? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> De asemenea, la fel de multe ca tine fac, scris l pe o foaie de hârtie este 755 00:36:26,010 --> 00:36:27,960 ceea ce ai de gând să trebuie să face pe testul de mâine. 756 00:36:27,960 --> 00:36:32,160 Deci, probabil, o bună practică pentru a face sigur codul scrii 757 00:36:32,160 --> 00:36:34,420 jos de pe foaia de hârtie - 758 00:36:34,420 --> 00:36:35,160 sau poti sa faci asta. 759 00:36:35,160 --> 00:36:36,710 Știi unde sunt punct și virgulă. 760 00:36:36,710 --> 00:36:37,660 Vă amintiți sintaxa. 761 00:36:37,660 --> 00:36:40,400 Pentru că tu nu te fi capabil de a avea o compilator spune că a făcut o eroare. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> De asemenea, de-a lungul acestor linii, mâine, atunci când ai probleme de codificare, dacă 764 00:37:07,240 --> 00:37:11,490 sunt s-au grabit de timp, sau daca esti foarte confuz cu privire la modul în care ar trebui să 765 00:37:11,490 --> 00:37:16,030 scrie lucru special în c, ea v-ar fi de datoria cuiva să scrie pseudo-cod 766 00:37:16,030 --> 00:37:18,160 sau scrie comentarii in la fel de bine. 767 00:37:18,160 --> 00:37:21,940 Pentru că nu există credit parțial pentru o mulțime de întrebări cu privire la testul. 768 00:37:21,940 --> 00:37:24,840 Deci, s-ar putea să fie grăbit, sau ar putea fi la fel de confuz. 769 00:37:24,840 --> 00:37:28,030 Scrierea în comentarii sau pseudo-cod sunt de multe ori moduri în care 770 00:37:28,030 --> 00:37:29,360 pot obține credit parțial. 771 00:37:29,360 --> 00:37:31,440 >> Deci, nu lăsa ceva gol pe testul. 772 00:37:31,440 --> 00:37:33,490 Nu există sancțiuni pentru a pune lucrurile inch 773 00:37:33,490 --> 00:37:37,650 De fapt, punerea în pseudo-cod sau comentarii va ajuta grederul 774 00:37:37,650 --> 00:37:40,410 dau seama dacă știu de fapt ce vorbești, și poate acorda 775 00:37:40,410 --> 00:37:42,030 te unele de credit parțial pentru asta. 776 00:37:42,030 --> 00:37:44,510 >> De asemenea, de-a lungul acestor linii, scrie clar. 777 00:37:44,510 --> 00:37:47,650 Dacă nu putem într-adevăr ceea ce scrii, noi nu o să te sun 778 00:37:47,650 --> 00:37:49,900 la miezul nopții de mâine pentru a cifră ce ai scris. 779 00:37:49,900 --> 00:37:51,520 Mergem să decoleze de puncte. 780 00:37:51,520 --> 00:37:56,570 Scrie clar astfel încât să putem auzi, sau, mai degrabă, putem citi ceea ce ai scris. 781 00:37:56,570 --> 00:38:00,230 >> Și dacă se spune două propoziții, Nu scrie un paragraf. 782 00:38:00,230 --> 00:38:02,280 Urmați instrucțiunile. 783 00:38:02,280 --> 00:38:03,500 Scrie clar. 784 00:38:03,500 --> 00:38:07,720 Și scrie în aceste comentarii sau pseudocod pentru întrebări care ar putea 785 00:38:07,720 --> 00:38:10,270 premiu credit parțial. 786 00:38:10,270 --> 00:38:12,520 >> OK, hai să mergem la factoriale. 787 00:38:12,520 --> 00:38:15,000 Deci, avem un factorial funcție. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Daca as fi fost să scrie de fapt acest lucru în C, ceea ce am nevoie pentru a pune în fața numelui 790 00:38:21,550 --> 00:38:22,800 a funcției? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 Tipul de retur, care, în acest caz, vom da o int. 793 00:38:30,060 --> 00:38:35,450 Și apoi în interiorul acolade, este ceea ce se întâmplă în interiorul acolade pentru 794 00:38:35,450 --> 00:38:36,850 o funcție? 795 00:38:36,850 --> 00:38:37,950 >> STUDENȚI: tip Argument. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: argumentele sale. 797 00:38:39,150 --> 00:38:42,680 Deci, factorial va fi, probabil, ia un argument. 798 00:38:42,680 --> 00:38:44,500 Se va lua, probabil, doar un singur argument. 799 00:38:44,500 --> 00:38:49,450 Și vom spune că va lua un număr întreg numit x. 800 00:38:49,450 --> 00:38:52,770 Și din nou, atunci când scrie prototipul de o funcție sau scrie funcția 801 00:38:52,770 --> 00:38:57,110 în codul dvs. înainte de a defini el, scrie tipul de date și numele de 802 00:38:57,110 --> 00:39:01,370 ca variabilă de numai această funcție. 803 00:39:01,370 --> 00:39:06,350 Astfel încât să puteți trece unele număr în acest funcție, acesta va fi mentionat ca x 804 00:39:06,350 --> 00:39:07,340 pe plan intern. 805 00:39:07,340 --> 00:39:08,755 >> Avem funcția noastră factorial. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Avem nevoie de doua lucruri, un caz de bază și un apel recursiv. 808 00:39:15,850 --> 00:39:20,900 Care este scenariul de bază pentru factorial? 809 00:39:20,900 --> 00:39:24,850 Cineva care a scris-o afară și care nu are vorbit încă, ceea ce este baza 810 00:39:24,850 --> 00:39:26,100 caz pentru factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> STUDENT: Dacă n este mai puțin decât 2, se întoarcă 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Dacă n este mai puțin de 2, întoarce 1. 814 00:39:33,520 --> 00:39:37,216 Îmi place, pentru că are grijă de 0 și 1. 815 00:39:37,216 --> 00:39:45,290 Deci, vom face x <2, se întoarcă 1. 816 00:39:45,290 --> 00:39:47,870 Dacă vom fi trecut de 0, dacă vom obține a trecut 1, această funcție va 817 00:39:47,870 --> 00:39:49,790 reveni imediat 1. 818 00:39:49,790 --> 00:39:54,020 Dacă vom fi trecut de un numar mai mare mare sau egal cu 2, vom 819 00:39:54,020 --> 00:39:55,370 au apelul nostru recursiv. 820 00:39:55,370 --> 00:39:57,855 >> Și astfel cum este faptul că va merge? 821 00:39:57,855 --> 00:40:01,070 Poate cineva care a lucrat la acest care nu a vorbit încă mi-a dat 822 00:40:01,070 --> 00:40:07,380 apel recursiv pentru această funcție în pseudocod? 823 00:40:07,380 --> 00:40:10,770 Dacă vom fi trecut într-un număr de x și este mai mare de 2, ceea ce 824 00:40:10,770 --> 00:40:13,370 vrem sa facem? 825 00:40:13,370 --> 00:40:17,930 De asemenea, am un exemplu scris pe partea care le-ar putea da un indiciu. 826 00:40:17,930 --> 00:40:20,770 >> STUDENT: Apel de x ori factorial de x minus 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Exact dreapta. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Vom reveni x ori factorialul x minus 1. 830 00:40:37,750 --> 00:40:41,810 Și că, chiar dacă am scris sus, de fapt, ceea ce ați spus în limba engleză, 831 00:40:41,810 --> 00:40:44,580 această funcție factorial vor fi numit din nou. 832 00:40:44,580 --> 00:40:46,320 Se va executa pe x minus 1. 833 00:40:46,320 --> 00:40:49,320 Se va reveni cu unele întreg, și atunci acesta va multiplica aceste două 834 00:40:49,320 --> 00:40:52,050 împreună, iar această valoare va fi a revenit la ceea ce a numit aceasta 835 00:40:52,050 --> 00:40:55,010 funcția factorial, care s-ar putea fi un alt exemplu de 836 00:40:55,010 --> 00:40:58,420 această funcție factorial. 837 00:40:58,420 --> 00:41:01,360 >> Deci, care este un exemplu de recursive funcție, o foarte 838 00:41:01,360 --> 00:41:02,530 funcția recursiv simplu. 839 00:41:02,530 --> 00:41:04,530 Dar cele mai multe dintre ele vor fi ca aceasta. 840 00:41:04,530 --> 00:41:11,170 Dacă doriți un recursiv bun provocare pentru testul, încercați de codificare 841 00:41:11,170 --> 00:41:13,230 căutare binar recursiv. 842 00:41:13,230 --> 00:41:18,950 Pentru că dacă ai făcut-o căutare binară pentru problema stabilit trei, probabil că a făcut-o 843 00:41:18,950 --> 00:41:21,730 iterativ într-o buclă în timp. 844 00:41:21,730 --> 00:41:23,700 >> Dar poate fi, de asemenea, scris recursiv. 845 00:41:23,700 --> 00:41:26,310 Ai de gând să nevoie pentru a scrie propria funcție separată care are unele 846 00:41:26,310 --> 00:41:29,020 diferite argumente în linia de comandă - sau nu argumente în linia de comandă, unele 847 00:41:29,020 --> 00:41:30,910 diferite argumente doar regulate. 848 00:41:30,910 --> 00:41:33,870 Dar ai putea scrie binar de căutare recursiv, de asemenea. 849 00:41:33,870 --> 00:41:36,190 >> STUDENT: Deci, ai putea fi scris, de asemenea, în loc de x minus 1, vă 850 00:41:36,190 --> 00:41:39,502 ar fi scris, de asemenea, x minus minus, sau ai putea avea 851 00:41:39,502 --> 00:41:40,830 scris x minus minus. 852 00:41:40,830 --> 00:41:44,740 Poți să explici foarte repede de ce acestea ar fi lucruri diferite, 853 00:41:44,740 --> 00:41:49,510 ca ceea ce este diferența dintre x minus minus și minus minus x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: Nu, eu nu sunt de gând să meargă în asta. 855 00:41:51,320 --> 00:41:55,500 Dar voi vorbi cu tine despre asta după clasă. x minus minus, minus minus x 856 00:41:55,500 --> 00:41:57,780 decrement x cu 1. 857 00:41:57,780 --> 00:41:59,090 Dar ei o fac un pic diferit. 858 00:41:59,090 --> 00:42:00,340 Dar nu vreau să intru în asta. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Alte întrebări despre recursivitate sau această funcție? 861 00:42:09,090 --> 00:42:10,140 Asta nu e chiar pseudocod. 862 00:42:10,140 --> 00:42:15,060 Asta e de fapt codul în C-ar scrie pentru acest lucru. 863 00:42:15,060 --> 00:42:19,393 >> OK, orice alte intrebari despre subiecte aici? 864 00:42:19,393 --> 00:42:19,864 Da. 865 00:42:19,864 --> 00:42:23,130 >> STUDENT: Eu am o consultare rapidă a punct și precizie plutitoare. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Floating punct și precizie. 867 00:42:24,260 --> 00:42:26,920 Poate cineva foarte repede da-mi o trecere in revista a 868 00:42:26,920 --> 00:42:28,210 virgulă mobilă și precizie? 869 00:42:28,210 --> 00:42:30,420 Ai toate au avut de a face acest lucru pentru dvs. problema stabilit, astfel încât ești 870 00:42:30,420 --> 00:42:31,700 familiarizat cu ea. 871 00:42:31,700 --> 00:42:35,090 Sau poate că nu toți. 872 00:42:35,090 --> 00:42:36,602 Oricine? 873 00:42:36,602 --> 00:42:39,530 Dă-mi un loc de început. 874 00:42:39,530 --> 00:42:40,750 Virgulă mobilă și precizie. 875 00:42:40,750 --> 00:42:42,380 Care este problema? 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 Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Scuze. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Există doar un număr finit de numere care pot fi reprezentate 882 00:42:51,550 --> 00:42:57,930 pentru că sunteți pe un, în nostru caz, un sistem de 32 de biți. 883 00:42:57,930 --> 00:43:03,080 Deci, un fel de trebuie să face niște numere. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Deci asta e exact dreapta. 885 00:43:03,910 --> 00:43:08,110 Există doar o anumită cantitate de numere care pot fi reprezentate. 886 00:43:08,110 --> 00:43:11,770 Dacă vă înmulțiți două numere foarte mari, s-ar putea îneca suma 887 00:43:11,770 --> 00:43:13,950 spațiilor trebuie să reprezinte un număr întreg. 888 00:43:13,950 --> 00:43:17,930 De aceea, uneori, vom folosi un lung lung în loc de un int. 889 00:43:17,930 --> 00:43:19,210 Care are mai multe spații. 890 00:43:19,210 --> 00:43:21,210 Care poate deține un număr mai mare. 891 00:43:21,210 --> 00:43:24,310 >> Virgulă mobilă de precizie are de a face cu , dar, de asemenea, are de a face cu 892 00:43:24,310 --> 00:43:29,300 fapt ce numere zecimale sunt nu întotdeauna reprezentat. 893 00:43:29,300 --> 00:43:29,540 Scuze. 894 00:43:29,540 --> 00:43:31,280 Lasă-mă să pun asta înapoi. 895 00:43:31,280 --> 00:43:36,610 Numărul zecimal 1.0 nu este întotdeauna reprezentat ca și cum v-ați aștepta, 896 00:43:36,610 --> 00:43:40,770 1.000000000. 897 00:43:40,770 --> 00:43:50,360 Uneori este reprezentat ca 1.000000001 0.999999999 sau. 898 00:43:50,360 --> 00:43:52,780 Ar putea fi chiar 89 aruncat acolo undeva. 899 00:43:52,780 --> 00:43:56,560 Deci, aceste numere zecimale nu sunt reprezentat exact ca tine ar fi 900 00:43:56,560 --> 00:43:58,430 aștepta ca ele să fie reprezentate. 901 00:43:58,430 --> 00:44:00,010 >> Deci, în problema set - 902 00:44:00,010 --> 00:44:00,860 a fost doi? - 903 00:44:00,860 --> 00:44:05,290 problema set de două, în cazul în care ne-am ocupat cu numere în virgulă mobilă, atunci când ne-am dorit 904 00:44:05,290 --> 00:44:08,690 i să reprezinte exact ceea ce ne-am dorit să reprezinte, numărul 905 00:44:08,690 --> 00:44:12,860 de bani, sau numărul de cenți, le multiplica cu 100. 906 00:44:12,860 --> 00:44:14,750 Le-am rotunjit. 907 00:44:14,750 --> 00:44:18,660 Și apoi ne-am tăiat tot în spatele punctul zecimal. 908 00:44:18,660 --> 00:44:22,020 Asta a fost pentru a se asigura că acestea ar fi de fapt, egal exact ceea ce ne-am dorit 909 00:44:22,020 --> 00:44:22,410 le la egal. 910 00:44:22,410 --> 00:44:26,870 >> Pentru că, atunci când ia ceva care este un float și de al transforma într-un int, te 911 00:44:26,870 --> 00:44:29,860 tăiat tot la dreapta din punctul zecimal. 912 00:44:29,860 --> 00:44:33,900 Pentru că există unele în virgulă mobilă imprecizie, 100.000 s-ar putea fi 913 00:44:33,900 --> 00:44:37,440 reprezentat ca 99.999999999. 914 00:44:37,440 --> 00:44:40,350 Și dacă tocmai ați tăiat totul pentru a dreapta imediat, ai de gând să 915 00:44:40,350 --> 00:44:41,600 a obține un număr greșit. 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: Am avut o întrebare de turnare. 919 00:44:45,290 --> 00:44:47,500 Ce ordine se produce in? 920 00:44:47,500 --> 00:44:54,480 Dacă ai face float, între paranteze, 1 împărțit de 10, nu-l face un împărțit la 10, 921 00:44:54,480 --> 00:44:58,910 apoi obține 0,1, apoi porniți l într-un flotor? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Dacă nu float 1 împărțit la 10 - 923 00:45:01,470 --> 00:45:02,550 >> STUDENT: Da, si apoi este egal - 924 00:45:02,550 --> 00:45:04,240 bine, aceasta ar fi în mod normal l-au egal în - 925 00:45:04,240 --> 00:45:04,690 Da. 926 00:45:04,690 --> 00:45:06,760 Vrei să-l un flotor face, nu? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, deci vom folosi pentru a segue în imaginind 928 00:45:12,790 --> 00:45:15,390 răspunsurile la aceste întrebări prin codificare. 929 00:45:15,390 --> 00:45:18,180 Pentru că veți avea, probabil, o mulțime de aceste întrebări minute, și o modalitate buna 930 00:45:18,180 --> 00:45:19,100 pentru a le rezolva este prin codificare. 931 00:45:19,100 --> 00:45:21,320 Așa că am de gând să codul de asta acum, și apoi ne vom întoarce și 932 00:45:21,320 --> 00:45:24,020 cod întrebarea ai avut. 933 00:45:24,020 --> 00:45:24,950 >> Deci, prima linie - 934 00:45:24,950 --> 00:45:29,390 N-ar fi trebuit să-l scris - ceea ce este primul lucru pe care vrem să facem atunci când ne-am 935 00:45:29,390 --> 00:45:32,250 deschide un nou dosar în gedit? 936 00:45:32,250 --> 00:45:34,190 >> STUDENT: Includeți. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Includeți ce? 938 00:45:35,920 --> 00:45:37,952 >> STUDENT: bibliotecă CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Ce altceva ar trebui să includă? 941 00:45:42,590 --> 00:45:46,820 Mergem pentru a verifica ceea ce se întâmplă atunci când aruncat ceva la un float. 942 00:45:46,820 --> 00:45:48,605 Dar de ce avem nevoie pentru a include, dacă suntem de gând să scrie un program C? 943 00:45:48,605 --> 00:45:49,300 >> STUDENT: Standard I / O. 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 Noi de fapt nu au nevoie, pentru acest Programul, cs50.h, chiar dacă e 946 00:45:54,880 --> 00:45:55,920 întotdeauna util să-l includă. 947 00:45:55,920 --> 00:45:58,260 Dar avem nevoie mereu stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> STUDENT: Când codificare în C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: Când codificare în C. 950 00:46:15,770 --> 00:46:17,090 >> Așa că am salvați-l ca acest fișier c... 951 00:46:17,090 --> 00:46:18,590 Am obține unele sintaxa iluminată frumos. 952 00:46:18,590 --> 00:46:22,890 I-am scris gol în interior principal. 953 00:46:22,890 --> 00:46:24,792 Ce înseamnă gol? 954 00:46:24,792 --> 00:46:26,740 >> STUDENT: Nu e nevoie de nici o argumente în linia de comandă. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: mijloace nu apare, în acest caz, principal nu ia nici o 956 00:46:28,900 --> 00:46:29,700 argumente în linia de comandă. 957 00:46:29,700 --> 00:46:32,720 In alte cazuri, aceasta înseamnă funcția nu ia argumente în linia de comandă. 958 00:46:32,720 --> 00:46:36,560 Sau funcția, dacă ar fi să scriu nule main (void), care s-ar spune lui principale 959 00:46:36,560 --> 00:46:38,460 Nu se întoarce nimic. 960 00:46:38,460 --> 00:46:39,960 Astfel nule înseamnă pur și simplu nimic. 961 00:46:39,960 --> 00:46:42,510 Ce scriu, dacă ar fi să ia argumente în linia de comandă? 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 Hirschhorn: int argc șir argv. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 Este corect? 967 00:46:55,572 --> 00:46:58,720 >> STUDENT: Este char paranteze argv stele. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Deci, ai putea scrie paranteze șir argv sau argv stea char 969 00:47:01,730 --> 00:47:03,710 paranteze, dar ai nevoie de paranteze. 970 00:47:03,710 --> 00:47:06,290 Deoarece argv este o matrice de siruri de caractere, amintiți-vă. 971 00:47:06,290 --> 00:47:07,360 Nu este doar un șir. 972 00:47:07,360 --> 00:47:10,350 Deci, string argv este, aici e un șir numit argv. 973 00:47:10,350 --> 00:47:13,630 Paranteze șir argv este, aici e o matrice de siruri de caractere. 974 00:47:13,630 --> 00:47:17,865 Paranteze argc șir argv astfel int ar fi ceva ce am 975 00:47:17,865 --> 00:47:18,810 probabil va scrie. 976 00:47:18,810 --> 00:47:23,050 >> Deci, ai vrut pentru a salva într-un întreg? 977 00:47:23,050 --> 00:47:24,285 >> STUDENT: Da, întreg. 978 00:47:24,285 --> 00:47:25,840 Sau într-un flotor. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: Într-un flotor? 980 00:47:26,710 --> 00:47:30,790 Cum ar fi, float x este egal cu 1 împărțit la 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Cum pot imprima o pluti în printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Ce? 986 00:47:46,714 --> 00:47:47,560 >> STUDENT:% F. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% F. 988 00:47:48,300 --> 00:47:50,810 Ce este un număr întreg? 989 00:47:50,810 --> 00:47:52,110 d sau i. 990 00:47:52,110 --> 00:47:53,000 Ce este un șir de caractere? 991 00:47:53,000 --> 00:47:54,240 >> STUDENT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s.. 993 00:47:56,140 --> 00:47:57,550 Cum pot obține o nouă linie? 994 00:47:57,550 --> 00:47:58,800 >> STUDENT: Backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Ce-mi întoarce în cazul în care principalele rulează corect? 997 00:48:07,100 --> 00:48:08,360 >> STUDENT: 0. 998 00:48:08,360 --> 00:48:09,430 Nu am nevoie pentru a scrie această linie, deși? 999 00:48:09,430 --> 00:48:10,170 >> STUDENT: Nu. 1000 00:48:10,170 --> 00:48:11,513 OK, nu se va scrie, apoi. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Poate toata lumea citit asta? 1003 00:48:17,190 --> 00:48:18,485 Se pare un pic mic. 1004 00:48:18,485 --> 00:48:20,160 Se poate vedea toata lumea, sau ar trebui să Eu fac mai mare? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Cred că pentru aparatul de fotografiat, vom face un pic mai mare, totuși. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Dacă vreau să transforme acest . C depune într-un executabil, ceea ce 1009 00:48:38,410 --> 00:48:39,260 scriu? 1010 00:48:39,260 --> 00:48:41,610 >> STUDENT: face testul. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Îmi pare rău? 1012 00:48:42,080 --> 00:48:42,790 >> STUDENT: face testul. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: face testul. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Vorbeam despre această linie mai devreme. 1016 00:48:48,410 --> 00:48:49,140 Răsune. 1017 00:48:49,140 --> 00:48:51,270 Ce-i zăngănit? 1018 00:48:51,270 --> 00:48:52,200 Numele compilatorului. 1019 00:48:52,200 --> 00:48:53,920 Ce este această linie? 1020 00:48:53,920 --> 00:48:55,580 >> STUDENT: Setează-l pentru a fi utilizate de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Seturi -l pentru utilizare de GDB. 1022 00:48:59,230 --> 00:49:02,338 Această linie, ce e asta? 1023 00:49:02,338 --> 00:49:03,290 >> STUDENT: Codul sursă. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Asta e fișierul sursă, fișierul c... 1025 00:49:06,010 --> 00:49:08,150 Ce fac aceste două linii? 1026 00:49:08,150 --> 00:49:10,245 Sau aceste două nu linii. 1027 00:49:10,245 --> 00:49:12,300 >> STUDENT: nume îl testeze. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Deci O liniuță spune, nume ceva diferit. 1029 00:49:15,410 --> 00:49:16,790 Și aici tu numindu-l de testare. 1030 00:49:16,790 --> 00:49:18,900 Dacă nu am avea asta în, ceea ce ar numi asta? 1031 00:49:18,900 --> 00:49:20,260 >> STUDENT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Ce face asta? 1034 00:49:25,366 --> 00:49:27,670 >> STUDENT: Link-uri biblioteca matematica. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Este link-uri în biblioteca matematica. 1036 00:49:29,550 --> 00:49:32,880 Nu am inclus biblioteca matematica, dar din moment ce este atât de comună, le-am 1037 00:49:32,880 --> 00:49:35,780 face în scris pentru a include întotdeauna biblioteca matematica. 1038 00:49:35,780 --> 00:49:39,050 Și, de asemenea, aceasta include biblioteca CS50. 1039 00:49:39,050 --> 00:49:43,010 >> OK, așa că, dacă am lista, avem acum un executabil numit de testare. 1040 00:49:43,010 --> 00:49:45,150 Pentru a se executa, eu scriu de testare. 1041 00:49:45,150 --> 00:49:48,330 Văd că punctul meu de plutitor, cum era de așteptat, este egal cu 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Asta - 1044 00:49:51,590 --> 00:49:52,060 așa - 1045 00:49:52,060 --> 00:49:55,210 >> STUDENT: Atunci, dacă ai pus plutesc acum, ca și cum l-ați aruncat la fel de float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Distribuție 1 la un flotor? 1047 00:49:56,870 --> 00:49:59,180 >> STUDENT: Nu, a aruncat lucru full - 1048 00:49:59,180 --> 00:49:59,500 Da. 1049 00:49:59,500 --> 00:50:02,460 Dacă tocmai ați făcut-o, ar fi care face 0.1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, deci foarte repede, 1 împărțit la 10, acestea sunt 1051 00:50:07,170 --> 00:50:08,690 numere întregi divizată. 1052 00:50:08,690 --> 00:50:13,580 Deci, atunci când împărți numere întregi, ele sunt 0, și sunteți de economisire că 0 într-un 1053 00:50:13,580 --> 00:50:17,170 float, pentru că slash este doar divizie întreg. 1054 00:50:17,170 --> 00:50:19,180 Deci, acum suntem de cotitură ceva într-un float. 1055 00:50:19,180 --> 00:50:21,650 >> Să vedem ce se întâmplă. 1056 00:50:21,650 --> 00:50:22,900 Vom face testul. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Deci, acum vedem că slash nu a fost divizare întreg, a fost plutitoare 1059 00:50:31,090 --> 00:50:32,640 Punct de divizare. 1060 00:50:32,640 --> 00:50:35,700 Deoarece unul dintre argumentele sale a fost aruncat la un float. 1061 00:50:35,700 --> 00:50:38,380 Deci, acum se spunea, trata această divizie ca avem de a face cu 1062 00:50:38,380 --> 00:50:40,140 puncte plutitoare, nu cu numere întregi. 1063 00:50:40,140 --> 00:50:42,760 Și astfel vom obține răspunsul ne așteptăm. 1064 00:50:42,760 --> 00:50:44,620 >> Să vedem ce se întâmplă - 1065 00:50:44,620 --> 00:50:47,103 oops. 1066 00:50:47,103 --> 00:50:51,646 Dacă aș fi vrut să imprimați mai zecimal pete, cum aș putea face asta? 1067 00:50:51,646 --> 00:50:55,550 >> STUDENT: Punctul punct F, sau cât mai multe zecimale, după cum doriți. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Deci, eu imprima 10 locuri zecimale. 1070 00:51:04,440 --> 00:51:06,610 Și acum vedem ne apropiem niște chestii ciudate. 1071 00:51:06,610 --> 00:51:09,650 Și care merge înapoi la întrebarea dvs. despre virgulă mobilă imprecizie. 1072 00:51:09,650 --> 00:51:10,950 Sunt lucruri ciudate stocate aici. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> OK, nu ca răspuns la întrebarea dvs.? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Ce altceva ai vrea la codul repede? 1077 00:51:20,200 --> 00:51:25,470 >> STUDENT: Am vrut doar să văd dacă sau nu, dacă te-a eliberat unele pointer, 1078 00:51:25,470 --> 00:51:30,410 dacă acest pointer încă au stocat în o adresa a ceea ce a fost 1079 00:51:30,410 --> 00:51:32,170 arătând spre anterior. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, așa că hai să facem asta. 1081 00:51:34,100 --> 00:51:38,030 Ptr Char stele, acest lucru creează o variabilă numit ptr de tip char stele. 1082 00:51:38,030 --> 00:51:39,280 Cum scriu malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Doar malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Dar apoi trebuie să fie dimensiunea și în acest caz, cred că te-ai 1087 00:51:51,040 --> 00:51:52,465 să fie îndreptată la char. 1088 00:51:52,465 --> 00:51:54,450 Deci, ar fi char. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, deci mai mult generic, Inside - 1090 00:51:57,520 --> 00:51:58,770 să editați. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 În interiorul malloc, vrei numărul de bytes pe heap. 1093 00:52:09,260 --> 00:52:12,320 În general, ceea ce am văzut că suntem facem este vom malloc 1094 00:52:12,320 --> 00:52:14,940 corzi, de exemplu, sau matrice de numere întregi. 1095 00:52:14,940 --> 00:52:21,600 Deci, dacă vrem 10 întregi, sau 10 caractere, 10 ne va da 10. 1096 00:52:21,600 --> 00:52:24,370 Și apoi dimensiunea de caractere ar da ne că dimensiunea de caractere, care în 1097 00:52:24,370 --> 00:52:25,120 acest caz este de 1 octet. 1098 00:52:25,120 --> 00:52:26,250 Avem 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Dacă ar fi să scrie dimensiune de Int, care ne-ar da 40 de bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Cu atât mai mult generic, în interiorul de malloc este numarul de bytes pe care doriți. 1101 00:52:31,520 --> 00:52:34,620 În acest caz, ne apropiem de 1 octet. 1102 00:52:34,620 --> 00:52:36,900 Ceea ce pare a fi o utilizare ciudat de malloc, dar pentru noi 1103 00:52:36,900 --> 00:52:38,470 scopuri are sens. 1104 00:52:38,470 --> 00:52:40,420 Deci nu e asta. 1105 00:52:40,420 --> 00:52:43,420 >> Vom apela gratuit. 1106 00:52:43,420 --> 00:52:47,040 Scăpăm de ea și vom folosi din nou ptr. 1107 00:52:47,040 --> 00:52:48,750 Și ce-ai vrea să verificați? 1108 00:52:48,750 --> 00:52:50,550 >> STUDENT: Am vrut doar pentru a verifica dacă sau nu a existat nimic 1109 00:52:50,550 --> 00:52:51,900 în interiorul de ea. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Deci, dacă ea a subliniat ceva? 1111 00:52:53,050 --> 00:52:57,740 >> STUDENT: Da, exact, dacă a avut încă o adresă de memorie. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: Deci, vrei pentru a verifica valoarea PTR? 1113 00:53:02,220 --> 00:53:03,470 >> STUDENT: Da, exact. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Ce scriu aici dacă vreau pentru a verifica valoarea a 1116 00:53:10,160 --> 00:53:11,880 punct - ceea ce este, Iordania a declarat, valoarea? 1117 00:53:11,880 --> 00:53:13,720 Sau ceea ce este stocat în interiorul ptr? 1118 00:53:13,720 --> 00:53:14,620 >> STUDENT: O adresa de memorie. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: O adresa de memorie. 1120 00:53:16,330 --> 00:53:20,520 Deci, dacă am scrie doar acest lucru, acesta va da-mi valoarea ptr. 1121 00:53:20,520 --> 00:53:22,800 Și cum pot imprima o adresă de memorie? 1122 00:53:22,800 --> 00:53:26,470 Care este șirul de format pentru o adresă de memorie? 1123 00:53:26,470 --> 00:53:27,430 >> STUDENT: p%. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn: p%. 1125 00:53:28,050 --> 00:53:29,500 % S este un șir. 1126 00:53:29,500 --> 00:53:30,750 % P pentru pointer. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 Este corect? 1129 00:53:43,540 --> 00:53:44,790 Acesta este dreptul. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Deci ptr egal - 1132 00:53:51,040 --> 00:53:53,350 încă mai are ceva în ea. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Aceasta este, probabil, o mai întrebare interesantă. 1135 00:53:57,645 --> 00:53:59,198 Ce are asta de linie face? 1136 00:53:59,198 --> 00:54:00,830 >> STUDENT: defecte Seg. 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Ce? 1138 00:54:01,310 --> 00:54:02,678 >> STUDENT: Cred că SEG defecte. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> STUDENT: Cred că va SEG vina. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Deci, această linie de ptr cod, stele, ceea ce 1142 00:54:08,265 --> 00:54:10,152 inseamna steaua? 1143 00:54:10,152 --> 00:54:11,240 >> STUDENT: Conținutul. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Da. 1145 00:54:11,560 --> 00:54:13,910 Du-te pentru a obține conținutul. 1146 00:54:13,910 --> 00:54:16,830 Deci, acest lucru este de gând să meargă în memoria aborda acolo și dă-mi asta. 1147 00:54:16,830 --> 00:54:21,030 Am folosit% c chiar aici, pentru că acolo sunt caractere stocate acolo. 1148 00:54:21,030 --> 00:54:23,390 Așa că am de gând să merg la care ne-am adresa tocmai am văzut - sau va fi, probabil, un 1149 00:54:23,390 --> 00:54:25,190 pic diferit acest timp vom rula programul. 1150 00:54:25,190 --> 00:54:28,010 Dar vom merge la acea adresă care știm că încă mai există 1151 00:54:28,010 --> 00:54:29,260 și să vedem ce e acolo. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Deci, nu a SEG vina. 1154 00:54:37,110 --> 00:54:38,970 Pur si simplu nu ne-a dat nimic. 1155 00:54:38,970 --> 00:54:43,350 S-ar putea ne-au dat de fapt, ceva, ne-am nu-l vedea. 1156 00:54:43,350 --> 00:54:45,110 Și care merge înapoi la această idee - 1157 00:54:45,110 --> 00:54:47,270 și noi nu mergi la a lua prea mult în acest lucru, pentru că asta e dincolo de 1158 00:54:47,270 --> 00:54:48,460 domeniul de aplicare al acestui curs. 1159 00:54:48,460 --> 00:54:51,260 Dar am vorbit despre aici, dacă ne-am a mers dincolo de limitele matricei de 1160 00:54:51,260 --> 00:54:54,890 1, nu am putea avea probleme. 1161 00:54:54,890 --> 00:54:58,550 >> Uneori, atunci când te duci în afara de 1, faci ceva greșit, și tu 1162 00:54:58,550 --> 00:54:59,220 ar putea avea probleme. 1163 00:54:59,220 --> 00:55:00,820 Dar nu întotdeauna probleme. 1164 00:55:00,820 --> 00:55:05,170 Depinde cât de mult un lucru rău te Nu, ai de gând pentru a obține în necazuri. 1165 00:55:05,170 --> 00:55:07,790 Care nu este de a spune, fie desfundat cu codul. 1166 00:55:07,790 --> 00:55:12,080 Dar aceasta este de a spune, programul nu va renuntat întotdeauna, chiar dacă te duci undeva 1167 00:55:12,080 --> 00:55:14,130 tu nu ar trebui să meargă. 1168 00:55:14,130 --> 00:55:18,170 >> Un bun exemplu de care este, o mulțime de oameni în problema lor set 3, care 1169 00:55:18,170 --> 00:55:22,350 a fost de 15, nu a verificat limitele de bord. 1170 00:55:22,350 --> 00:55:25,860 Deci, te-ai uitat în stânga, sa uitat la dreapta, sa uitat la partea de sus, sa uitat 1171 00:55:25,860 --> 00:55:27,000 la partea de jos. 1172 00:55:27,000 --> 00:55:31,540 Dar nu ai verifica pentru a vedea dacă în partea de sus a fost de fapt de gând să fie la bord. 1173 00:55:31,540 --> 00:55:35,220 Și o mulțime de oameni care au făcut ca și dovedit că în, programul lor a lucrat 1174 00:55:35,220 --> 00:55:38,960 perfect, pentru că în cazul în care placa a fost stocate în memorie, dacă te-ai dus-o 1175 00:55:38,960 --> 00:55:42,300 de mai sus, sau verificat că memoria adresa, nu a fost nimic 1176 00:55:42,300 --> 00:55:44,870 în special oribil despre asta, deci programul nu a fost 1177 00:55:44,870 --> 00:55:45,970 O să țip la tine. 1178 00:55:45,970 --> 00:55:48,870 >> Dar ne-ar lua tot de pe puncte dacă nu ai verifica că, pentru că 1179 00:55:48,870 --> 00:55:50,850 s-au a face ceva ce nu au fost ar trebui să facă, și ai putea avea 1180 00:55:50,850 --> 00:55:51,860 ajuns în necaz. 1181 00:55:51,860 --> 00:55:54,040 Cote sunt, totuși, probabil că nu. 1182 00:55:54,040 --> 00:55:57,790 Deci, acest lucru este de a arăta că, da, putem merge în continuare la ea. 1183 00:55:57,790 --> 00:55:59,010 Și nu ne stea în probleme în acest caz. 1184 00:55:59,010 --> 00:56:04,000 Dacă am încercat să facem a citi următorii 100 de caractere, ne-am 1185 00:56:04,000 --> 00:56:06,000 probabil avea probleme. 1186 00:56:06,000 --> 00:56:09,400 Și tu poți cod lectură următoarea 100 caractere, dacă doriți de a face ceva 1187 00:56:09,400 --> 00:56:10,110 un fel de pentru buclă. 1188 00:56:10,110 --> 00:56:10,850 Da. 1189 00:56:10,850 --> 00:56:16,250 >> STUDENT: Din moment ce ne-au fost atribuite care spațiu de o valoare reală, nu ar fi 1190 00:56:16,250 --> 00:56:17,050 fi de fapt posibilitatea de a vedea nimic. 1191 00:56:17,050 --> 00:56:21,740 Ar trebui să-l încercați cu setarea care egală place c sau ceva? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Marea întrebare. 1193 00:56:22,640 --> 00:56:25,340 Cum pot seta ca valoare - 1194 00:56:25,340 --> 00:56:28,980 ce linie de cod scriu pe linie șapte de a face ceea ce ai spus? 1195 00:56:28,980 --> 00:56:34,040 >> STUDENT: stele ptr egal singur citat c termina singur citat. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Deci, care este punerea un personaj, c, la acea locație, 1197 00:56:36,970 --> 00:56:40,200 pentru că, din nou, că stele înseamnă du-te la acolo. 1198 00:56:40,200 --> 00:56:43,320 Iar atunci când sunt utilizate pe partea stângă a un operator de atribuire, care este egală cu 1199 00:56:43,320 --> 00:56:47,270 semn, noi nu vom obține că valoare atât de mult ca și stabilește valoarea. 1200 00:56:47,270 --> 00:56:48,520 Acum, să vedem ce se întâmplă. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Am pus ceva acolo și a fost acolo. 1203 00:56:56,770 --> 00:56:58,000 Am sunat gratuit. 1204 00:56:58,000 --> 00:57:00,100 Unele lucruri, probabil, sa întâmplat pe heap. 1205 00:57:00,100 --> 00:57:01,890 Deci, nu mai e acolo. 1206 00:57:01,890 --> 00:57:07,440 Dar, din nou, nu vei primi probleme pentru a merge acolo. 1207 00:57:07,440 --> 00:57:10,260 >> Fac asta în cod pentru a ilustra că o mulțime de aceste 1208 00:57:10,260 --> 00:57:12,410 întrebări pe care le au, sunt foarte interesant 1209 00:57:12,410 --> 00:57:13,650 răspunde la o mulțime de timp. 1210 00:57:13,650 --> 00:57:15,260 Și acestea sunt întrebări foarte bune. 1211 00:57:15,260 --> 00:57:19,010 Și le puteți da seama pe cont propriu, dacă, de exemplu, 1212 00:57:19,010 --> 00:57:19,990 nu suntem în secțiune. 1213 00:57:19,990 --> 00:57:20,940 Da. 1214 00:57:20,940 --> 00:57:24,430 >> STUDENT: Pentru că nu trimiteți pointer oriunde, aveți nevoie pentru a 1215 00:57:24,430 --> 00:57:26,530 folosi malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Deci asta merge înapoi la întrebarea inițială. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 Este doar o variabilă locală? 1219 00:57:29,980 --> 00:57:32,280 Malloc aici nu este convingătoare. 1220 00:57:32,280 --> 00:57:35,260 Utilizarea malloc aici nu este că convingătoare pentru că este 1221 00:57:35,260 --> 00:57:36,500 doar o variabilă locală. 1222 00:57:36,500 --> 00:57:40,970 >> STUDENT: Deci, ai putea face char ptr stele este egal salut? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Așa că am de gând să obțineți acum înapoi la întrebarea inițială. 1225 00:57:43,300 --> 00:57:46,885 Cred că nu au fost îndeplinite cu răspunsul meu. 1226 00:57:46,885 --> 00:57:48,220 OK? 1227 00:57:48,220 --> 00:57:49,226 Ca asta? 1228 00:57:49,226 --> 00:57:49,682 >> STUDENT: Da. 1229 00:57:49,682 --> 00:57:50,932 Așteaptă. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: Și unde vrei să imprimați? 1232 00:57:57,850 --> 00:58:00,026 Deci, vom imprima un șir de genul asta? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> STUDENT: Interesant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Deci, aceasta spune că acest lucru argument are tipul de caracter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Deci, acest lucru ar trebui să fie un personaj. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> STUDENT: ia doar primul. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Deci asta este ceea ce am spus mai înainte. 1242 00:58:28,610 --> 00:58:34,240 Cum am spus, nu e stocarea șir în interiorul pointer variabilă. 1243 00:58:34,240 --> 00:58:35,120 Este de stocare - 1244 00:58:35,120 --> 00:58:36,350 >> STUDENT: Prima valoare șirului. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: Adresa de prima valoare din șir. 1246 00:58:40,810 --> 00:58:46,940 Dacă ar fi să imprima aceasta, suntem obtinerea de valoare în interiorul pointer. 1247 00:58:46,940 --> 00:58:51,005 Și vom vedea, este, într-adevăr, o adresă de memorie. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Asta face sens? 1250 00:58:56,440 --> 00:58:56,940 Scuze. 1251 00:58:56,940 --> 00:58:58,996 Așteaptă, nu că răspunde dvs. întrebare, deși? 1252 00:58:58,996 --> 00:58:59,790 >> STUDENT: Da. 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Această linie de cod este crearea unui șir și apoi un alt 1254 00:59:05,830 --> 00:59:09,115 pointer variabilă care este îndreptat pentru că șir, ca matrice. 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 >> STUDENT: Deci, dacă ne-am dus-o memorie abordeze în continuare, ne-ar ajunge h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 Le-a fost depozitată ca un șir de caractere? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Cum ar fi, am făcut - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 astfel încât acesta este valoros pentru a face. 1263 00:59:30,790 --> 00:59:33,780 Acesta este punctul de aritmetică, pe care voi s-au văzut înainte și ar trebui să fie 1264 00:59:33,780 --> 00:59:35,550 relativ confortabil cu. 1265 00:59:35,550 --> 00:59:36,905 Acest lucru este asemănător cu scris - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 dacă ar fi să scriu această linie de cod, am văzut notație matrice înainte. 1268 00:59:46,350 --> 00:59:55,900 Acest lucru ar trebui să ne dea de-a doua valoare în această matrice, h. 1269 00:59:55,900 --> 01:00:05,010 >> Dacă am făcut acest lucru, acest lucru ar trebui, de asemenea, da ne-a doua valoare în matrice. 1270 01:00:05,010 --> 01:00:08,320 Pentru că nu este de gând să memoria Adresa de primul lucru, dar 1271 01:00:08,320 --> 01:00:10,530 adresă de memorie de lucru de un peste. 1272 01:00:10,530 --> 01:00:14,360 Și apoi dereferences operatorului stele care pointer. 1273 01:00:14,360 --> 01:00:16,940 Și din nou, să vedem. 1274 01:00:16,940 --> 01:00:18,664 Ajungem din nou ore. 1275 01:00:18,664 --> 01:00:20,980 >> STUDENT: Ce înseamnă exact dereference înseamnă? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: dereference este un cuvânt fantezist pentru a merge la. 1277 01:00:23,650 --> 01:00:26,390 Du-te la asta și de a obține ceea ce-i acolo este de a dereference un pointer. 1278 01:00:26,390 --> 01:00:28,240 E doar un cuvânt fantezist pentru asta. 1279 01:00:28,240 --> 01:00:29,986 >> STUDENT: Dacă ne-am dorit să imprimare întregul șir, am putea 1280 01:00:29,986 --> 01:00:31,930 face pointer ampersand? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, suntem O să oprim aici. 1282 01:00:33,490 --> 01:00:35,480 Am de gând să se încheie aici. 1283 01:00:35,480 --> 01:00:41,760 Ampersand vă oferă adresa unui Locul de amplasare, astfel încât atunci când faci ampersand de 1284 01:00:41,760 --> 01:00:44,080 o variabilă, ea vă oferă adresa în cazul în care variabila este stocat. 1285 01:00:44,080 --> 01:00:48,580 Pointer ampersand vă va da adresa ptr unde ptr este în memorie. 1286 01:00:48,580 --> 01:00:50,140 >> Noi nu vom merge mai departe cu acest exemplu. 1287 01:00:50,140 --> 01:00:52,640 Vă puteți da seama aceste lucruri pe cont propriu. 1288 01:00:52,640 --> 01:00:55,740 Dar, din nou, acest lucru ar putea fi chiar apropiindu-o bit dincolo de ceea ce trebuie să știți pentru 1289 01:00:55,740 --> 01:00:58,000 domeniul de aplicare al acestui termen mediu - 1290 01:00:58,000 --> 01:00:59,070 sau acest test, mai degrabă. 1291 01:00:59,070 --> 01:01:00,270 Scuze. 1292 01:01:00,270 --> 01:01:03,770 >> Am de gând să se mute pe, pentru că mi-ar vrea să facă o problemă de codificare 1293 01:01:03,770 --> 01:01:05,100 înainte de ora este de până. 1294 01:01:05,100 --> 01:01:09,340 Și vom cod ce cred este mai convingătoare dintre acestea 1295 01:01:09,340 --> 01:01:11,020 exemple, atoi. 1296 01:01:11,020 --> 01:01:14,520 Deci, aceasta a fost o întrebare pe un test de acum doi ani. 1297 01:01:14,520 --> 01:01:17,810 Și l-am avea pe placa aici. 1298 01:01:17,810 --> 01:01:20,680 >> Oamenii au fost întrebați cu privire la testul - 1299 01:01:20,680 --> 01:01:23,640 ei s-au dat un pic mai mult în tesxt problema, dar am eliminat 1300 01:01:23,640 --> 01:01:26,640 text, pentru că nu era necesar pentru scopurile noastre acum. 1301 01:01:26,640 --> 01:01:29,180 A fost doar unele de fundal în ceea ce atoi făcut. 1302 01:01:29,180 --> 01:01:31,425 Dar știți cu toții și sunt foarte familiarizat cu atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Vă sugerez să codul această pe o foaie de hârtie. 1304 01:01:35,620 --> 01:01:39,310 De asemenea, vă sugerez să utilizați strategia că am trecut peste 1305 01:01:39,310 --> 01:01:41,040 o mulțime în secțiunea noastră. 1306 01:01:41,040 --> 01:01:44,130 În primul rând, asigurați-vă că ați înțeles ce atoi lui face. 1307 01:01:44,130 --> 01:01:47,580 Desenați o imagine sau a veni cu unele imagine mentală de ea în cap. 1308 01:01:47,580 --> 01:01:51,120 Apoi, scrie pseudocod pentru aceasta. 1309 01:01:51,120 --> 01:01:53,120 Pe testul, dacă tot ce obține este pseudocod, cel puțin te 1310 01:01:53,120 --> 01:01:54,550 pune ceva jos. 1311 01:01:54,550 --> 01:02:00,070 Și apoi harta că pseudocod pe C. Dacă aveți un cec în ta 1312 01:02:00,070 --> 01:02:03,760 pseudocod, ca verifica dacă ceva este 1, care hărți pe o dacă 1313 01:02:03,760 --> 01:02:05,750 starea și așa mai departe. 1314 01:02:05,750 --> 01:02:07,850 Și, în sfârșit, cod program în C. 1315 01:02:07,850 --> 01:02:15,000 >> Deci, du-te înapoi la atoi și ia cinci minute la codul de acest lucru pe o foaie de 1316 01:02:15,000 --> 01:02:19,480 hârtie, care este, probabil, despre cantitatea de timp le-ar lua pe o 1317 01:02:19,480 --> 01:02:21,260 test pentru atoi cod. 1318 01:02:21,260 --> 01:02:27,060 Cinci până la 15 minute, de cinci până la 12, cinci la 10 minute, este cu privire la suma de 1319 01:02:27,060 --> 01:02:30,150 timp ai cheltui pe acest întrebare în testul. 1320 01:02:30,150 --> 01:02:31,670 Deci, ia cinci minute acum, te rog. 1321 01:02:31,670 --> 01:02:35,957 Și dacă aveți întrebări, ridica mâna și voi veni în jur. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [Conversații ADVERSE] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, deci care a fost de cinci minute. 1326 01:08:37,580 --> 01:08:39,880 Asta a fost, probabil, cu privire la suma de timp ai cheltui pe care la un test, 1327 01:08:39,880 --> 01:08:42,120 poate la sfârșitul scăzut de acel timp. 1328 01:08:42,120 --> 01:08:44,010 Vom recapitula într-un pic. 1329 01:08:44,010 --> 01:08:45,740 Să ne începe de codificare acest lucru. 1330 01:08:45,740 --> 01:08:49,479 Și dacă nu primim tot drumul prin, răspunsurile la aceasta și aceasta 1331 01:08:49,479 --> 01:08:54,189 întrebare test sunt disponibile, din nou, Fall 2011 este atunci cand aceasta intrebare 1332 01:08:54,189 --> 01:08:54,913 a apărut pe testul. 1333 01:08:54,913 --> 01:08:57,830 >> Și a fost în valoare de opt puncte pe testul atunci. 1334 01:08:57,830 --> 01:09:01,140 Opt puncte este la limita superioară a în sumă de puncte ceva este în valoare. 1335 01:09:01,140 --> 01:09:04,790 Cele mai multe întrebări sunt în intervalul unul până la șase puncte. 1336 01:09:04,790 --> 01:09:08,500 Deci, aceasta este o provocare mai întrebare, pentru sigur. 1337 01:09:08,500 --> 01:09:09,750 Poate cineva mi-a început? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> În general, ce-o să vrei să faci cu acest 1340 01:09:15,380 --> 01:09:17,550 funcționeze atoi, în mod logic? 1341 01:09:17,550 --> 01:09:19,569 Ce vrem să facem? 1342 01:09:19,569 --> 01:09:22,279 Așa că am de gând să scrie unele pseudocod. 1343 01:09:22,279 --> 01:09:24,090 >> STUDENT: Conversia caractere în numere întregi. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Conversia caractere în numere întregi. 1345 01:09:26,700 --> 01:09:27,479 OK. 1346 01:09:27,479 --> 01:09:30,870 Deci, cum de multe caractere suntem Va trebui să treacă prin? 1347 01:09:30,870 --> 01:09:32,295 >> STUDENT: Toate acestea. 1348 01:09:32,295 --> 01:09:34,100 >> STUDENT: Toate personajele în șir. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Toate cele de mai caractere în șir. 1350 01:09:35,540 --> 01:09:42,180 Deci, dacă am vrut să treacă prin fiecare caracter dintr-un șir de caractere, ceea ce este un lucru 1351 01:09:42,180 --> 01:09:44,560 în C, am văzut că a permis ne pentru a trece prin fiecare 1352 01:09:44,560 --> 01:09:45,939 caracter dintr-un șir? 1353 01:09:45,939 --> 01:09:46,819 >> STUDENȚI: A pentru buclă. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: A pentru buclă. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Așa că am de gând să buclă prin fiecare personaj în s.. 1357 01:09:55,330 --> 01:10:00,940 >> Atunci ce vom vrei să faci atunci când vom ajunge la un anumit caracter? 1358 01:10:00,940 --> 01:10:02,480 Spune-ne obtinerea trecut de 90. 1359 01:10:02,480 --> 01:10:03,460 Ne-am 9. 1360 01:10:03,460 --> 01:10:04,240 Este un personaj. 1361 01:10:04,240 --> 01:10:07,440 Ceea ce vrem să facem cu că personajul 9? 1362 01:10:07,440 --> 01:10:10,082 >> STUDENT: Scădeți-o din caracter 0? 1363 01:10:10,082 --> 01:10:11,860 >> STUDENT: Adauga 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Scădere se de la caracter 0? 1365 01:10:13,350 --> 01:10:13,800 >> STUDENT: Da. 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: De ce vrei sa faci asta? 1367 01:10:15,573 --> 01:10:16,560 >> STUDENT: [inaudibil] 1368 01:10:16,560 --> 01:10:17,010 valoare. 1369 01:10:17,010 --> 01:10:18,380 Valoarea sa Int. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, deci vom lua caracter 9, aceasta scade de la 1371 01:10:21,580 --> 01:10:25,820 caracter 0 pentru a obține o număr întreg real 9. 1372 01:10:25,820 --> 01:10:27,070 Dulce. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 Și de unde știi că personajul 9 minus 0 personaj este de 9? 1375 01:10:37,000 --> 01:10:39,222 Ce diagramă te-ai uita la? 1376 01:10:39,222 --> 01:10:43,130 >> STUDENT: Există logic nouă locuri între 9 și 0. 1377 01:10:43,130 --> 01:10:44,620 Sau ai putea uita-te la masa ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: masă ASCII. 1379 01:10:45,120 --> 01:10:46,490 Dar, da, ai dreptate, de asemenea. 1380 01:10:46,490 --> 01:10:47,780 Așa că am scade 0. 1381 01:10:47,780 --> 01:10:49,010 Deci, acum avem întreg 9. 1382 01:10:49,010 --> 01:10:49,970 Și ce vrei să faci cu asta? 1383 01:10:49,970 --> 01:10:54,970 Dacă avem 90, este primul număr întreg am, ceea ce vrem să facem? 1384 01:10:54,970 --> 01:10:58,180 >> STUDENT: Mi-ar pune într-un întreg temporar matrice, apoi face matematica pentru a 1385 01:10:58,180 --> 01:11:02,088 mai târziu să-l facă într-un final. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> STUDENT: Puteți începe de la sfârșitul anului matrice și apoi merge mai departe așa 1388 01:11:06,990 --> 01:11:10,350 că de fiecare dată când merge mai departe, îl înmulțește cu 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Asta sună ca o destul de idee convingătoare. 1391 01:11:12,250 --> 01:11:16,040 Putem începe la sfârșitul matrice noastre, și putem folosi strleng. 1392 01:11:16,040 --> 01:11:17,030 Putem folosi strleng aici. 1393 01:11:17,030 --> 01:11:18,870 Vom lua lungimea șirului noastre. 1394 01:11:18,870 --> 01:11:20,100 Pornim de la sfârșitul anului. 1395 01:11:20,100 --> 01:11:29,170 Și + primul, ne-am lua ca întreg, și, poate, vom crea ca un 1396 01:11:29,170 --> 01:11:32,270 nouă variabilă întreg până sus, unde suntem stocarea totul. 1397 01:11:32,270 --> 01:11:37,340 Așa că am bucla prin fiecare caracter în s de la înapoi la față, ne scade 0, și 1398 01:11:37,340 --> 01:11:42,790 apoi l-am lua, și în funcție de unde este, l-am multiplica 1399 01:11:42,790 --> 01:11:45,860 cu o putere de 10. 1400 01:11:45,860 --> 01:11:50,644 Deoarece primul, ceea ce face noi multiplica personajul din dreapta de? 1401 01:11:50,644 --> 01:11:51,440 >> STUDENT: 10 la 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 la 0. 1403 01:11:53,170 --> 01:11:56,010 Ce ne multiplica de-al doilea dreapta caracter de? 1404 01:11:56,010 --> 01:11:57,450 >> STUDENT: [inaudibil]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Ce? 1406 01:11:57,960 --> 01:11:59,150 >> STUDENT: 10 la 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 la 1. 1408 01:12:00,420 --> 01:12:03,754 Caracterul treia din dreapta? 1409 01:12:03,754 --> 01:12:04,580 >> STUDENT: 10 la 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 la 2. 1411 01:12:05,350 --> 01:12:07,200 >> STUDENT: Îmi pare rău, eu nu înțeleg ceea ce facem noi aici. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, Să mergem înapoi, atunci. 1413 01:12:08,640 --> 01:12:12,500 Așa că am de gând să obțineți a trecut într-un șir. 1414 01:12:12,500 --> 01:12:14,470 Pentru că suntem scris atoi. 1415 01:12:14,470 --> 01:12:15,260 Deci, vom fi trecut într-un șir. 1416 01:12:15,260 --> 01:12:17,640 Spune-ne obtinerea trecut în șirul 90. 1417 01:12:17,640 --> 01:12:19,930 >> Primul lucru pe care am de gând să faceți este să stabiliți o nouă variabilă întreagă care suntem 1418 01:12:19,930 --> 01:12:22,150 doar de gând să creeze ca noul nostru întreg. 1419 01:12:22,150 --> 01:12:24,630 Asta e ceea ce vom pentru a reveni la final. 1420 01:12:24,630 --> 01:12:30,110 Avem nevoie pentru a merge prin fiecare personaj în șirul pentru că ne-am stabilit 1421 01:12:30,110 --> 01:12:34,430 de care avem nevoie pentru a atinge fiecare în parte și apoi adăugați-l la noul nostru întreg. 1422 01:12:34,430 --> 01:12:36,330 >> Dar nu putem doar să adăugați ca un număr. 1423 01:12:36,330 --> 01:12:38,270 Noi nu putem lua doar 9 și se adaugă 9 la întreg nostru. 1424 01:12:38,270 --> 01:12:40,560 Aceasta depinde de ceea ce loc ea este în șirul. 1425 01:12:40,560 --> 01:12:42,960 Vom avea nevoie pentru a se multiplica acesta de o putere de 10. 1426 01:12:42,960 --> 01:12:45,580 Pentru că așa de bază de 10 de lucrări. 1427 01:12:45,580 --> 01:12:49,050 >> Așa că am de gând pentru a obține reale caracter, sau întreg real 1428 01:12:49,050 --> 01:12:53,860 număr, prin scăderea caracter 0 din caracterul 9 așa cum am făcut cu 1429 01:12:53,860 --> 01:12:57,560 scăderea de capital de caractere de la A indiferent de caracterul am avut într-una din 1430 01:12:57,560 --> 01:12:58,120 aceste probleme. 1431 01:12:58,120 --> 01:13:04,190 Asa ca vom lua de fapt, un număr de la 0 la 9 salvat ca un număr real, și vom 1432 01:13:04,190 --> 01:13:07,590 înmulțiți-l cu o putere de 10, în funcție pe unde suntem în șir. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 Și apoi vom adauga înapoi în noul nostru variabil întreg. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Deci, ceea ce ar arata ca ar fi fi - vom trage aici. 1437 01:13:37,890 --> 01:13:40,086 Dacă vom fi trecut în șirul de 90 - 1438 01:13:40,086 --> 01:13:41,336 >> STUDENT: [inaudibil]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Dar atoi ia un șir de caractere. 1441 01:13:45,540 --> 01:13:46,350 Așa că am de gând să treacă prin exploatației. 1442 01:13:46,350 --> 01:13:49,900 Vom fi trecut la 90. 1443 01:13:49,900 --> 01:13:51,540 Noi mergem de la spate în față. 1444 01:13:51,540 --> 01:13:53,920 Ne ia 0. 1445 01:13:53,920 --> 01:13:55,080 >> STUDENT: Îmi pare rău. 1446 01:13:55,080 --> 01:13:55,880 Poate că acest lucru este o prostie. 1447 01:13:55,880 --> 01:13:59,440 Dacă suntem obtinerea trecut într-un șir, de ce este de 90 ceea ce suntem 1448 01:13:59,440 --> 01:14:00,260 obtinerea trecut în? 1449 01:14:00,260 --> 01:14:03,160 Deoarece 90 este un număr întreg. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Pentru ca atoi ia o șir și îl transformă în întreg 1451 01:14:06,820 --> 01:14:08,320 reprezentare de care șir. 1452 01:14:08,320 --> 01:14:13,650 Dar șirul 90 nu este numărul întreg 90 sau numărul 90. 1453 01:14:13,650 --> 01:14:17,920 Șirul 90 este o serie de două, sau trei personaje, mai degrabă, 9 1454 01:14:17,920 --> 01:14:22,740 caracter, 0 caracterul, și backslash 0 personajul. 1455 01:14:22,740 --> 01:14:26,260 >> Și suntem scris atoi, deoarece, pentru exemplu, atunci când ia comanda 1456 01:14:26,260 --> 01:14:30,230 argument linie, și este salvat în argv, acesta este salvat ca un șir de caractere. 1457 01:14:30,230 --> 01:14:32,940 Dar dacă doriți să-l trateze ca pe un număr, aveți nevoie să-l convertească la un 1458 01:14:32,940 --> 01:14:34,700 întreg actual. 1459 01:14:34,700 --> 01:14:37,210 Pe care am făcut-o unul din seturile noastre de probleme. 1460 01:14:37,210 --> 01:14:38,800 Pe care am făcut-o într-un număr de seturi noastre probleme. 1461 01:14:38,800 --> 01:14:41,690 Toată lumea care a avut un număr întreg ca un argument în linia de comandă. 1462 01:14:41,690 --> 01:14:46,490 Deci, de aceea funcția noastră atoi ia un șir. 1463 01:14:46,490 --> 01:14:51,910 >> Deci, din nou, în exemplul nostru aici, suntem de gând să ia ultima. 1464 01:14:51,910 --> 01:14:55,050 Vom scădea caracterul 0 de la ea, pentru că personajele 0 1465 01:14:55,050 --> 01:14:58,810 scade de caracterul 0 vă oferă numărul real 0, conform 1466 01:14:58,810 --> 01:15:00,950 matematica ASCII pe care o facem. 1467 01:15:00,950 --> 01:15:04,870 >> Deoarece caracterele sunt reprezentate ca diferit de cel real lor - 1468 01:15:04,870 --> 01:15:08,830 caracter o, de exemplu, minuscule o este de 97. 1469 01:15:08,830 --> 01:15:10,260 Nu e - Oops! 1470 01:15:10,260 --> 01:15:13,290 Nu e ceea ce te-ai aștepta aceasta să fie, 0, de exemplu. 1471 01:15:13,290 --> 01:15:16,200 Deci, va trebui pentru a scădea caracter o pentru a obține 0. 1472 01:15:16,200 --> 01:15:18,950 >> Așa că am de gând să faci asta aici pentru a obține numărul real. 1473 01:15:18,950 --> 01:15:22,560 Și apoi vom inmulteste cu o putere de 10 în funcție de locul 1474 01:15:22,560 --> 01:15:27,030 este în șir, și apoi să ia că si adauga la titular locul nostru 1475 01:15:27,030 --> 01:15:32,520 variabile astfel încât să putem veni cu nostru întreg nou final. 1476 01:15:32,520 --> 01:15:35,080 Are care are sens pentru toată lumea? 1477 01:15:35,080 --> 01:15:37,730 >> Deci, noi nu vom codul această chiar acum, pentru că suntem 1478 01:15:37,730 --> 01:15:38,830 obtinerea pe scurt timp. 1479 01:15:38,830 --> 01:15:40,860 Îmi cer scuze pentru momentul de care. 1480 01:15:40,860 --> 01:15:44,620 Dar asta este ceea ce, sperăm, v-ar putea face pe testul - la 1481 01:15:44,620 --> 01:15:47,710 foarte puțin, pentru a primi acest pseudocod scrise. 1482 01:15:47,710 --> 01:15:50,840 >> Și apoi, dacă ar fi să scrie pseudocod, de fapt, am putea face acest lucru 1483 01:15:50,840 --> 01:15:51,490 destul de repede. 1484 01:15:51,490 --> 01:15:55,230 Fiecare linie de comentarii noi am scris aici se traduce la aproximativ 1485 01:15:55,230 --> 01:15:56,970 o linie de cod C. 1486 01:15:56,970 --> 01:16:01,780 Declararea unui nou variabil, scris o buclă, unele scădere, unele 1487 01:16:01,780 --> 01:16:07,070 multiplicare, și unele atribuire. 1488 01:16:07,070 --> 01:16:09,020 Ne-am, probabil, de asemenea, doresc să scrie o linie de retur. 1489 01:16:09,020 --> 01:16:12,040 S-ar putea dori, de asemenea, să pună unele verificări de aici. 1490 01:16:12,040 --> 01:16:12,655 Da. 1491 01:16:12,655 --> 01:16:15,720 >> STUDENT: Deci, putem trata e ca șirul real? 1492 01:16:15,720 --> 01:16:18,730 Pentru că știu că e doar o adresă. 1493 01:16:18,730 --> 01:16:22,090 Cum ar fi, cum ar fi să obțineți lungimea șirul fiind trecut prin? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Deci, cum a făcut lungimea unui șir? 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 Dar puteți pune e ca argument pentru asta? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Deci strlen are o stea char. 1499 01:16:34,620 --> 01:16:38,090 Și rezultă că stele char, și-l ține de numărare până când se ajunge la o 1500 01:16:38,090 --> 01:16:41,865 backslash 0. strlen a fost de fapt unul dintre celelalte programe noi 1501 01:16:41,865 --> 01:16:42,850 au de gând să cod. 1502 01:16:42,850 --> 01:16:44,560 Acesta este un alt unul bun pentru cod. 1503 01:16:44,560 --> 01:16:47,270 Asta e un pic mai ușor, pentru că în cazul în care ai de gând să te gândești că 1504 01:16:47,270 --> 01:16:47,830 conceptual - 1505 01:16:47,830 --> 01:16:51,620 Tocmai l-am spus cu voce tare - strlen urmează un pointer și păstrează merge și 1506 01:16:51,620 --> 01:16:54,210 numărarea și urmărirea până când ajunge la un backslash 0. 1507 01:16:54,210 --> 01:16:56,530 >> STUDENT: OK, am înțeles. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Deci, cel mai bun de noroc la testul 0 mâine. 1509 01:17:00,200 --> 01:17:03,170 Dacă aveți orice întrebări, voi fie în afara dupa acest lucru. 1510 01:17:03,170 --> 01:17:05,610 Simțiți-vă liber să-mi e-mail. 1511 01:17:05,610 --> 01:17:08,480 Ajunge la propria TF daca esti nu în secțiunea mea, sau a lua meu 1512 01:17:08,480 --> 01:17:10,005 e-mail dacă doriți. 1513 01:17:10,005 --> 01:17:13,140 >> Daca vrei sa sperii și doar trimite mi un e-mail, un e-mail freakout, voi 1514 01:17:13,140 --> 01:17:16,710 te trimite înapoi, cum ar fi, o fata zambitoare, sau, cum ar fi, o glumă sau ceva. 1515 01:17:16,710 --> 01:17:18,190 Deci, nu ezitați să facă la fel de bine. 1516 01:17:18,190 --> 01:17:20,750 Mult noroc din nou, și eu voi veți vedea toată săptămâna viitoare. 1517 01:17:20,750 --> 01:17:23,435