1 00:00:00,000 --> 00:00:00,960 2 00:00:00,960 --> 00:00:03,360 >> [MUSIC JOC] 3 00:00:03,360 --> 00:00:11,050 4 00:00:11,050 --> 00:00:12,065 >> Davin: Bine, băieți. 5 00:00:12,065 --> 00:00:13,642 6 00:00:13,642 --> 00:00:15,350 Deci, aceasta este revizuirea pentru primul test. 7 00:00:15,350 --> 00:00:17,751 E toată lumea gata pentru testul de miercuri? 8 00:00:17,751 --> 00:00:18,292 ALLISON: Woo! 9 00:00:18,292 --> 00:00:18,743 STUDENT: Woo! 10 00:00:18,743 --> 00:00:19,242 Davin: Da. 11 00:00:19,242 --> 00:00:19,920 ALLISON: Da! 12 00:00:19,920 --> 00:00:20,920 Davin: Tipul ăla e gata. 13 00:00:20,920 --> 00:00:22,200 Tipul ăla, două mâini, frumos. 14 00:00:22,200 --> 00:00:23,234 15 00:00:23,234 --> 00:00:25,900 Așa că recenzie test astăzi, va să fie aproximativ o oră și jumătate. 16 00:00:25,900 --> 00:00:27,940 Ne vom trece peste toate marile concepte trebuie să știți pentru testul. 17 00:00:27,940 --> 00:00:31,434 Ne vom trece peste unele de codificare de exemple de utilaje, care sunt pe fiecare test. 18 00:00:31,434 --> 00:00:34,350 Și, dacă aveți întrebări, nu ezitați pentru a ridica mâna și totul 19 00:00:34,350 --> 00:00:34,945 ca asta. 20 00:00:34,945 --> 00:00:36,695 Ei bine, logistică despre testul online. 21 00:00:36,695 --> 00:00:38,450 Așa că am de gând să împartă oameni în sus, în camere diferite. 22 00:00:38,450 --> 00:00:39,491 Este bazat pe numele lor. 23 00:00:39,491 --> 00:00:43,630 Deci, dacă aveți orice întrebări despre unde pentru a merge sau despre ceea ce este semnificativ, cum ar fi, 24 00:00:43,630 --> 00:00:46,810 cuvântul oficial cu privire la ceea ce se întâmplă pentru a fi pe testul, verifica on-line. 25 00:00:46,810 --> 00:00:48,420 Și asta e tot la zi. 26 00:00:48,420 --> 00:00:51,280 Deci, dacă nu există întrebări adresate începe cu, vom începe. 27 00:00:51,280 --> 00:00:52,790 28 00:00:52,790 --> 00:00:53,710 Și aici e Allison. 29 00:00:53,710 --> 00:00:56,060 30 00:00:56,060 --> 00:00:57,000 >> [Bate] 31 00:00:57,000 --> 00:00:59,300 >> ALLISON: OK, mulțumesc, Rob. 32 00:00:59,300 --> 00:01:00,280 Aprecia. 33 00:01:00,280 --> 00:01:01,350 34 00:01:01,350 --> 00:01:03,050 Davin ar fi lovit ușor la acest lucru. 35 00:01:03,050 --> 00:01:07,240 Aceasta este lista non-exhaustivă de subiecte, ca întotdeauna, așa cum Davin tocmai a spus. 36 00:01:07,240 --> 00:01:10,860 Consultați documentația on-line despre test de zero. 37 00:01:10,860 --> 00:01:13,680 Dar acest lucru este destul de much-- e pe programei 38 00:01:13,680 --> 00:01:15,550 Este tot ceea ce am trecut peste până acum. 39 00:01:15,550 --> 00:01:18,290 Totul aici este un joc cinstit, precum și orice altceva 40 00:01:18,290 --> 00:01:21,380 care au fost menționate în curs. 41 00:01:21,380 --> 00:01:25,070 >> Secțiune mea, aici, este doar o mulțime de revizuire. 42 00:01:25,070 --> 00:01:27,775 Există câteva exerciții de ca voi ar putea să funcționeze pe. 43 00:01:27,775 --> 00:01:30,650 Dar pentru cea mai mare parte, cu adevarat doriți să obțineți să Davin cu cele de cod 44 00:01:30,650 --> 00:01:31,710 prin exerciții de mână. 45 00:01:31,710 --> 00:01:33,940 >> Așa că am de gând să zboare prin aceasta. 46 00:01:33,940 --> 00:01:36,330 Dacă aveți întrebări, nu mă mai. 47 00:01:36,330 --> 00:01:37,270 Ridică mâna. 48 00:01:37,270 --> 00:01:39,250 Promit că voi probabil te văd. 49 00:01:39,250 --> 00:01:41,042 Dacă nu, doar val în jurul valorii. 50 00:01:41,042 --> 00:01:42,250 Am de gând să fie vorbesc repede. 51 00:01:42,250 --> 00:01:43,950 Sper că toată lumea e în regulă cu asta. 52 00:01:43,950 --> 00:01:48,020 >> OK, cuvânt special, Davin, evident, ați uitat pentru a parcurge aceste slide-uri. 53 00:01:48,020 --> 00:01:51,880 [Râde] Ai probleme, omule. 54 00:01:51,880 --> 00:01:55,770 Deci, sfaturi pentru test de zero, practica de codificare pe hârtie. 55 00:01:55,770 --> 00:01:58,950 Voi sunt mergi la a lua niște practica cu care acum cu Davin, 56 00:01:58,950 --> 00:02:00,655 așa că nu va fi complet de unul singur. 57 00:02:00,655 --> 00:02:03,030 Cred că ne intampla de fapt prin aceste două funcții. 58 00:02:03,030 --> 00:02:04,500 Deci, veți fi bine pregătit acolo. 59 00:02:04,500 --> 00:02:05,958 >> Să fie familiarizat cu seturi de probleme. 60 00:02:05,958 --> 00:02:08,150 Au fost întrebări pe teste anterioare 61 00:02:08,150 --> 00:02:12,680 care vă va cere, de exemplu, pentru a coda ceva foarte similar cu Mario. 62 00:02:12,680 --> 00:02:15,060 Deci, fiind foarte familiarizat cu seturi de problema ta, precum și 63 00:02:15,060 --> 00:02:17,827 ca întrebările vă rugăm la început pe formularul 64 00:02:17,827 --> 00:02:19,660 pe care le completați, va va serveste foarte bine. 65 00:02:19,660 --> 00:02:20,940 66 00:02:20,940 --> 00:02:23,380 >> Face un test anterior sub constrângerile de timp. 67 00:02:23,380 --> 00:02:25,430 Aceste teste sunt lungi. 68 00:02:25,430 --> 00:02:26,850 Timpul trece foarte repede. 69 00:02:26,850 --> 00:02:30,480 Și de multe ori, nu îți dai seama cât de rapid merge până când de fapt 70 00:02:30,480 --> 00:02:32,180 pune-te în aceste constrângeri. 71 00:02:32,180 --> 00:02:36,500 Deci, dacă vă puteți tăia pur și simplu afară, știi, 75 de minute, fie în seara asta sau mâine 72 00:02:36,500 --> 00:02:41,020 pentru a lua una dintre aceste teste în temeiul că, veți fi într-o formă mult mai bună. 73 00:02:41,020 --> 00:02:43,060 >> Și, de asemenea, crearea de foaia de referință. 74 00:02:43,060 --> 00:02:45,290 Amintiți-vă, veți obține o Pagina fata si spate 75 00:02:45,290 --> 00:02:47,040 ca referință pentru testul pe miercuri. 76 00:02:47,040 --> 00:02:49,074 Crearea că este o modalitate foarte bună de a studia. 77 00:02:49,074 --> 00:02:51,990 Orice lucru care întâmpinați probleme cu doriți să includeți pe acolo. 78 00:02:51,990 --> 00:02:55,627 Orice lucru care TFS dumneavoastră au fost, cum ar fi, acest lucru este foarte important. 79 00:02:55,627 --> 00:02:57,960 Ar trebui să știi acest lucru, sunt poate că lucrurile pe care le avea pe acolo 80 00:02:57,960 --> 00:02:59,931 dacă nu le-au memorat. 81 00:02:59,931 --> 00:03:02,680 Chiar dacă nu le cunoști cu adevărat bine, uneori având pe acolo 82 00:03:02,680 --> 00:03:07,030 este doar un fel de confort pentru tine, care știu teste sunt stresante. 83 00:03:07,030 --> 00:03:09,260 Deci, orice confort te poate ajuta. 84 00:03:09,260 --> 00:03:13,072 Bine, de asemenea, pentru a primi de somn și mânca și plac lucrurile normale 85 00:03:13,072 --> 00:03:14,280 pe care am să vă spun pentru teste. 86 00:03:14,280 --> 00:03:16,320 87 00:03:16,320 --> 00:03:18,890 >> Deci, incepand de off ușor, tipuri de date și dimensiuni. 88 00:03:18,890 --> 00:03:22,720 Așa cum am spus, aceasta este doar de gând care urmează să fie aruncat-mi o mulțime de lucruri 89 00:03:22,720 --> 00:03:24,320 aici că ar trebui să știi. 90 00:03:24,320 --> 00:03:27,600 Deci, avem caractere noastre că sunt unul bytes, int 91 00:03:27,600 --> 00:03:30,390 că sunt patru bytes, lung lung, care sunt opt ​​octeți. 92 00:03:30,390 --> 00:03:33,280 Practic, e doar doresc să dețină numere întregi mai mari. 93 00:03:33,280 --> 00:03:35,490 Flotoare, care sunt patru, duble, care sunt opt. 94 00:03:35,490 --> 00:03:38,150 Din nou, doar îți dă mai mult spațiu pentru flotoare tale. 95 00:03:38,150 --> 00:03:41,290 Și apoi tastați stele, astfel încât orice Indicatorul de pe o mașină pe 32 de biți, 96 00:03:41,290 --> 00:03:44,650 care este tot voi avea nevoie de să știu, este de patru bytes. 97 00:03:44,650 --> 00:03:46,542 >> Deci, toate lucrurile trebuie Știi, poate că lucrurile 98 00:03:46,542 --> 00:03:48,250 vrei sa ai pe foaie de referință. 99 00:03:48,250 --> 00:03:50,350 100 00:03:50,350 --> 00:03:53,520 OK, de conversie binar la binar, conversie 101 00:03:53,520 --> 00:03:56,860 la hexazecimal, înainte și înapoi, toate lucrurile pe care ar trebui să știți. 102 00:03:56,860 --> 00:03:59,480 Deci, de la binar în zecimal. 103 00:03:59,480 --> 00:04:03,309 Vreți să luați un minut rapid și să încerce și dau seama de fiecare dintre acestea 104 00:04:03,309 --> 00:04:04,600 și apoi spune-mi care sunt acestea? 105 00:04:04,600 --> 00:04:06,500 106 00:04:06,500 --> 00:04:10,240 >> Am, de asemenea, bomboane în geanta mea, astfel încât oricine care răspunde devine bomboane, apropo. 107 00:04:10,240 --> 00:04:13,560 108 00:04:13,560 --> 00:04:14,480 Și am o mulțime de ea. 109 00:04:14,480 --> 00:04:15,760 110 00:04:15,760 --> 00:04:16,870 Lasă-mă să iau asta. 111 00:04:16,870 --> 00:04:18,480 Am de gând să dau asta Gabe. 112 00:04:18,480 --> 00:04:21,829 Astfel încât să puteți înmâna bomboane la oricine e frumos și de cooperare. 113 00:04:21,829 --> 00:04:23,490 >> OK, am văzut o mână acolo în spate. 114 00:04:23,490 --> 00:04:26,418 115 00:04:26,418 --> 00:04:28,370 >> STUDENT: Da, prima este de 42. 116 00:04:28,370 --> 00:04:30,280 >> ALLISON: Da, în primul rând unul este de 42, corect. 117 00:04:30,280 --> 00:04:31,163 118 00:04:31,163 --> 00:04:32,038 STUDENT: [inaudibil]. 119 00:04:32,038 --> 00:04:34,810 [Râsete] 120 00:04:34,810 --> 00:04:37,030 ALLISON: În al doilea rând unul, acolo înapoi în galben? 121 00:04:37,030 --> 00:04:38,910 STUDENT: 110010. 122 00:04:38,910 --> 00:04:43,410 ALLISON: Corect, și acest lucru ultima, aici pe jos? 123 00:04:43,410 --> 00:04:44,570 De asemenea, Da, știi vrei? 124 00:04:44,570 --> 00:04:45,550 Doar aruncă bomboane. 125 00:04:45,550 --> 00:04:46,483 Ce zici de bomboane pentru toată lumea? 126 00:04:46,483 --> 00:04:47,510 >> STUDENT: [inaudibil] când am terminat. 127 00:04:47,510 --> 00:04:48,051 >> ALLISON: Shh. 128 00:04:48,051 --> 00:04:49,380 129 00:04:49,380 --> 00:04:50,910 Și apoi ultima. 130 00:04:50,910 --> 00:04:52,000 Cine vrea să răspundă? 131 00:04:52,000 --> 00:04:52,744 Chiar acolo. 132 00:04:52,744 --> 00:04:54,480 >> STUDENT: 11100. 133 00:04:54,480 --> 00:04:56,820 >> ALLISON: 11100, uita-te la asta. 134 00:04:56,820 --> 00:04:58,790 Felicitări, mare de locuri de muncă, toată lumea. 135 00:04:58,790 --> 00:05:03,370 OK, toată lumea fel de a înțelege procesul de a face acest lucru? 136 00:05:03,370 --> 00:05:08,700 Ați, mergând de la binar în zecimal modul în care am tendința de a face acest lucru, este scris în 137 00:05:08,700 --> 00:05:09,920 atribuțiile 2. 138 00:05:09,920 --> 00:05:18,350 Așa că am spus, OK, 0 ori 2-0, astfel e 0, 1 ori 2 cu primul, 139 00:05:18,350 --> 00:05:21,400 este de 2 merge mai departe în acest fel. 140 00:05:21,400 --> 00:05:25,790 Are cineva mi-a explicit anunt du-te printr-un exemplu de binar? 141 00:05:25,790 --> 00:05:26,840 142 00:05:26,840 --> 00:05:28,140 OK, rece. 143 00:05:28,140 --> 00:05:30,390 >> Zecimal în binar este foarte asemănătoare. 144 00:05:30,390 --> 00:05:31,550 145 00:05:31,550 --> 00:05:33,630 Am tendința de a scrie în puterile 2. 146 00:05:33,630 --> 00:05:38,660 Începeți cu cel pe care este cea mai mare, dar nu sa dribleze pe zecimal 147 00:05:38,660 --> 00:05:39,710 că sunteți în căutarea pentru. 148 00:05:39,710 --> 00:05:42,870 Și apoi un fel de modul de lucru înapoi adăugând lucrurile după cum este necesar. 149 00:05:42,870 --> 00:05:45,200 >> Și apoi cu plus, este la fel ca adăugarea normal. 150 00:05:45,200 --> 00:05:51,110 Dacă aveți vreodată cazul în care sunteți adăugarea a două 1s, devine evident 2. 151 00:05:51,110 --> 00:05:56,875 2 în binar este acum de 1 0, deci va trebui pentru a transporta dvs. 1 în coloana următoare. 152 00:05:56,875 --> 00:05:57,375 Rece. 153 00:05:57,375 --> 00:05:59,220 154 00:05:59,220 --> 00:06:03,240 >> Hexadecimal, acest lucru ar putea fi ceva care este mai puțin familiar. 155 00:06:03,240 --> 00:06:06,600 Deci, ca Rob a fost pur și simplu mi-a spus în prealabil, truc său pentru acest 156 00:06:06,600 --> 00:06:10,210 este de doar despărțim în patru bucăți octet, OK? 157 00:06:10,210 --> 00:06:11,050 Bits, îmi pare rău. 158 00:06:11,050 --> 00:06:11,720 Vezi? 159 00:06:11,720 --> 00:06:12,220 Mulțumesc Rob. 160 00:06:12,220 --> 00:06:15,874 Acesta este de ce ești aici. [NOISE] OK, deci ne-am rupe în sus 161 00:06:15,874 --> 00:06:16,790 în patru biți bucăți. 162 00:06:16,790 --> 00:06:21,570 Deci, cu binare în hexazecimal, ne uităm la primul 4, 163 00:06:21,570 --> 00:06:25,573 care este dacă avem patru 1s într-un rând, ce număr are asta simbolizează? 164 00:06:25,573 --> 00:06:26,540 >> STUDENT: F. 165 00:06:26,540 --> 00:06:32,751 >> ALLISON: Deci, în acest caz, ceea ce este 11111111 or-- da? 166 00:06:32,751 --> 00:06:33,250 STUDENT: FF. 167 00:06:33,250 --> 00:06:34,600 ALLISON: Perfect, FF. 168 00:06:34,600 --> 00:06:36,900 Atât de mare, bomboane pentru tine. 169 00:06:36,900 --> 00:06:41,100 Acum, pentru modul în hexazecimal în binar, ne-am doar gândiți-vă un fel de în sens invers. 170 00:06:41,100 --> 00:06:46,420 Pentru fiecare număr sau literă care avem în hexazecimal noastră, 171 00:06:46,420 --> 00:06:53,930 doar se transforma pentru ei patru biți [Râde] pentru transformarea sa patru biți. 172 00:06:53,930 --> 00:06:58,696 Deci, 5, în acest caz, ceea ce este 5 daca suntem o reprezintă cu patru biți? 173 00:06:58,696 --> 00:06:59,608 >> STUDENT: 010? 174 00:06:59,608 --> 00:07:00,520 Mm-hm. 175 00:07:00,520 --> 00:07:03,605 Și apoi A, care este de fapt 10, ar fi? 176 00:07:03,605 --> 00:07:06,230 177 00:07:06,230 --> 00:07:08,040 1010. 178 00:07:08,040 --> 00:07:09,670 Deci avem că, aici. 179 00:07:09,670 --> 00:07:13,990 Deci, de conversie între hexazecimal și binar de fapt nu este așa de rău. 180 00:07:13,990 --> 00:07:16,565 Dacă te uiți la ea în patru biți bucăți, o să fie de aur. 181 00:07:16,565 --> 00:07:18,330 182 00:07:18,330 --> 00:07:19,300 Everyone-- da? 183 00:07:19,300 --> 00:07:21,903 >> ROB: Aceasta este o prostie, dar îmi amintesc mereu 184 00:07:21,903 --> 00:07:23,500 A, deoarece A lui ar trebui să fie de 10. 185 00:07:23,500 --> 00:07:26,230 Și binar doar 10 10, deci-- 186 00:07:26,230 --> 00:07:27,310 >> ALLISON: Ah, acolo mergem. 187 00:07:27,310 --> 00:07:28,615 >> ROB: Hei. 188 00:07:28,615 --> 00:07:30,020 >> ALLISON: Hei, bomboane de Rob. 189 00:07:30,020 --> 00:07:31,707 190 00:07:31,707 --> 00:07:33,290 Există chestii de bază non-ciocolată acolo. 191 00:07:33,290 --> 00:07:34,180 Astfel încât să puteți avea unele. 192 00:07:34,180 --> 00:07:35,790 193 00:07:35,790 --> 00:07:36,760 Matematica așa ASCII. 194 00:07:36,760 --> 00:07:38,206 195 00:07:38,206 --> 00:07:38,705 Se comporta. 196 00:07:38,705 --> 00:07:40,630 197 00:07:40,630 --> 00:07:44,720 Deci ASCII matematica, ca voi probabil bine aminte 198 00:07:44,720 --> 00:07:48,480 p set 2 cu Visioneer și Cezar, ai făcut o mulțime de acest lucru. 199 00:07:48,480 --> 00:07:49,610 200 00:07:49,610 --> 00:07:51,980 Amintiți-vă, personajele sunt fundamental doar numere. 201 00:07:51,980 --> 00:07:54,780 Astfel încât să putem face matematica cu ei, la fel cum am face matematica cu int. 202 00:07:54,780 --> 00:07:58,090 >> Deci, avem doar un pic simplu lucru aici. 203 00:07:58,090 --> 00:08:00,940 Avem unele în A, care este inițializat la 65 de ani. 204 00:08:00,940 --> 00:08:07,440 Și B este egală cu valoarea ASCII a A plus 1, char C egal cu D minus 1, 205 00:08:07,440 --> 00:08:09,060 și char D egal cu 68. 206 00:08:09,060 --> 00:08:13,130 Deci, atunci vom imprimare toate acestea, așa cum vom vedea aici. 207 00:08:13,130 --> 00:08:15,650 Și poate cineva sa-mi spune- ceea ce va imprima? 208 00:08:15,650 --> 00:08:17,335 209 00:08:17,335 --> 00:08:18,210 STUDENT: [inaudibil]. 210 00:08:18,210 --> 00:08:20,540 ALLISON: Exact, așa un lucru de observat este 211 00:08:20,540 --> 00:08:22,900 pe care le imprimați afară de caractere de fiecare dată, aici. 212 00:08:22,900 --> 00:08:28,290 Suntem desemnarea, chiar dacă A și B sunt int, atunci când le-am declarat mai sus. 213 00:08:28,290 --> 00:08:32,870 Suntem imprimați-le ca personaje de la sută C și situația noastră printf, 214 00:08:32,870 --> 00:08:34,610 astfel încât acestea vor imprima toate ca de caractere. 215 00:08:34,610 --> 00:08:40,730 Și, desigur, valoarea ASCII 65 voinței imprima ca A. Valoarea ASCII a A plus 1 216 00:08:40,730 --> 00:08:43,669 ar fi 66, care ar mândru de B. Deci, în fapt, 217 00:08:43,669 --> 00:08:49,107 obține A B C D Jucătorii bun acolo? 218 00:08:49,107 --> 00:08:49,690 Orice întrebări? 219 00:08:49,690 --> 00:08:50,721 220 00:08:50,721 --> 00:08:51,220 Minunat. 221 00:08:51,220 --> 00:08:52,500 222 00:08:52,500 --> 00:08:53,455 >> OK, domeniul de aplicare. 223 00:08:53,455 --> 00:08:55,090 224 00:08:55,090 --> 00:08:59,950 Deci, domeniul de aplicare este, evident, o foarte lucru important să se înțeleagă, aici. 225 00:08:59,950 --> 00:09:03,250 O mulțime de voi, dacă au erori de compilare, 226 00:09:03,250 --> 00:09:06,085 și spune că nu aveți acces la unele variabile, 227 00:09:06,085 --> 00:09:08,540 este, probabil, pentru că definit acesta în o buclă 228 00:09:08,540 --> 00:09:12,210 și apoi a încercat să-l acceseze din ea, sau viceversa. 229 00:09:12,210 --> 00:09:16,410 >> Deci, domeniul de aplicare la miezul ei, doar în cazul în care determină 230 00:09:16,410 --> 00:09:20,800 spunem există o variabilă, în cazul în care ne-am se poate schimba, în cazul în care o putem accesa. 231 00:09:20,800 --> 00:09:24,550 E doar un fel de a spune acestea sunt singurele locuri în care aveți acces 232 00:09:24,550 --> 00:09:26,060 pentru această variabilă. 233 00:09:26,060 --> 00:09:30,080 >> Deci, cele două domenii despre care vorbim în timpul clasă sunt globale și locale. 234 00:09:30,080 --> 00:09:35,080 Variabile astfel încât globale vorbim despre atunci când sunt definindu-le de mai sus principal. 235 00:09:35,080 --> 00:09:38,390 Aceasta înseamnă că întreaga dumneavoastră Programul are acces la ea, 236 00:09:38,390 --> 00:09:42,090 și că există atâta timp ca ruleaza programe, OK? 237 00:09:42,090 --> 00:09:45,100 Local înseamnă că este mai limitate la o regiune. 238 00:09:45,100 --> 00:09:50,520 Deci, ori de câte ori au funcții specifice cum ar fi swap, noi mereu vorbim despre. 239 00:09:50,520 --> 00:09:54,380 Noi întotdeauna vorbim despre schimb cu A și B. A și B, există în această funcție. 240 00:09:54,380 --> 00:09:55,690 Ele nu există în altă parte. 241 00:09:55,690 --> 00:09:56,860 242 00:09:56,860 --> 00:10:00,610 >> De asemenea, atunci când aveți dacă declarații sau pentru bucle. 243 00:10:00,610 --> 00:10:04,670 Ori de câte ori avem, de exemplu, în o pentru buclă ne-am int I este egal cu 0. 244 00:10:04,670 --> 00:10:06,630 Avem niște condiții și l-am actualizat. 245 00:10:06,630 --> 00:10:10,270 Am există doar în cadrul bretele de faptul că pentru bucla. 246 00:10:10,270 --> 00:10:13,270 Dacă încercați să-l accesați în altă parte, compilator ta ar țipa la tine. 247 00:10:13,270 --> 00:10:14,560 Ar fi ca și cum, ce vrei să faci? 248 00:10:14,560 --> 00:10:15,400 Acest lucru nu există. 249 00:10:15,400 --> 00:10:16,644 250 00:10:16,644 --> 00:10:18,435 Deci, asta e doi diferite tipuri de domeniul de aplicare. 251 00:10:18,435 --> 00:10:19,486 252 00:10:19,486 --> 00:10:20,860 Asta face sens pentru toată lumea? 253 00:10:20,860 --> 00:10:23,870 254 00:10:23,870 --> 00:10:27,890 >> Deci, de exemplu aici, acest este doar un simplu program. 255 00:10:27,890 --> 00:10:29,120 256 00:10:29,120 --> 00:10:32,890 Ce nu voi cred că este o să se întâmple la fiecare punct 257 00:10:32,890 --> 00:10:34,210 care vom încerca să imprimați? 258 00:10:34,210 --> 00:10:40,150 Deci, asta de aici, ce se va întâmpla? 259 00:10:40,150 --> 00:10:43,047 260 00:10:43,047 --> 00:10:44,255 STUDENT: Se va imprima trei. 261 00:10:44,255 --> 00:10:44,880 ALLISON: Corect. 262 00:10:44,880 --> 00:10:45,930 Va imprima trei. 263 00:10:45,930 --> 00:10:47,272 Ce zici de aici? 264 00:10:47,272 --> 00:10:48,230 STUDENT: Nu va funcționa. 265 00:10:48,230 --> 00:10:48,910 ALLISON: Nu va funcționa. 266 00:10:48,910 --> 00:10:50,290 Ești afara domeniului de aplicare, nu? 267 00:10:50,290 --> 00:10:55,160 Variabilă locale nu există în afara acestor bretele, bine? 268 00:10:55,160 --> 00:10:56,462 Și apoi ce aici? 269 00:10:56,462 --> 00:10:57,850 >> STUDENT: [inaudibil]. 270 00:10:57,850 --> 00:10:59,210 >> ALLISON: Ce? 271 00:10:59,210 --> 00:10:59,900 Rob, du-te. 272 00:10:59,900 --> 00:11:00,854 >> ROB: tocmai am spus. 273 00:11:00,854 --> 00:11:04,200 Variabilele globale ar trebui să fie variabilă de subliniere la nivel mondial. 274 00:11:04,200 --> 00:11:05,660 >> ALLISON: Ah, da, îmi pare rău. 275 00:11:05,660 --> 00:11:06,200 Mulțumesc, Rob. 276 00:11:06,200 --> 00:11:07,480 277 00:11:07,480 --> 00:11:10,170 Rob ca compilator nostru rezident. 278 00:11:10,170 --> 00:11:12,684 O să țipe doar la noi atunci când ne nevoie de ea. [Râde] Da, 279 00:11:12,684 --> 00:11:14,225 ar trebui să fie variabilă de subliniere la nivel mondial. 280 00:11:14,225 --> 00:11:15,760 281 00:11:15,760 --> 00:11:18,430 Astfel presupunând că această a fost subliniere global 282 00:11:18,430 --> 00:11:20,260 variabilă, ce se va întâmpla aici? 283 00:11:20,260 --> 00:11:21,260 STUDENT: Aceasta va funcționa. 284 00:11:21,260 --> 00:11:22,093 ALLISON: Se va lucra. 285 00:11:22,093 --> 00:11:24,655 Deci, acesta va imprima, asa ca un exemplu foarte simplu. 286 00:11:24,655 --> 00:11:27,650 287 00:11:27,650 --> 00:11:29,870 OK, prototipuri. 288 00:11:29,870 --> 00:11:33,680 Deci, în mod evident, consideram cu adevarat sublinia pentru voi 289 00:11:33,680 --> 00:11:36,460 pentru a face funcții în cazul în care sens în programele dumneavoastră. 290 00:11:36,460 --> 00:11:38,460 Dar, desigur, atunci când face propriile funcții, 291 00:11:38,460 --> 00:11:40,930 de obicei, le veti defini după principal. 292 00:11:40,930 --> 00:11:42,430 Și vei încerca să le numim în principal. 293 00:11:42,430 --> 00:11:46,030 Și dacă nu utilizați un prototip, compilatorul va tipa la tine. 294 00:11:46,030 --> 00:11:49,590 >> Prototip este, în principiu doar spune compilatorului dvs. 295 00:11:49,590 --> 00:11:52,400 că am această funcție de mai jos principală. 296 00:11:52,400 --> 00:11:54,970 Am de gând să-l sun înainte să-l definesc. 297 00:11:54,970 --> 00:11:56,360 Ține-. 298 00:11:56,360 --> 00:12:00,660 Promit că e definit, și tu va avea tot ceea ce ai nevoie. 299 00:12:00,660 --> 00:12:05,900 >> Deci, modul în care o face este doar întoarcerea ta tipul, numele dumneavoastră funcția, datele introduse de dvs. 300 00:12:05,900 --> 00:12:06,400 listă. 301 00:12:06,400 --> 00:12:09,760 Este practic prima linie de declarația dumneavoastră funcției. 302 00:12:09,760 --> 00:12:11,510 E într-adevăr tot ce este. 303 00:12:11,510 --> 00:12:14,440 Dar aceasta este doar o natură generală de format. 304 00:12:14,440 --> 00:12:17,220 >> Deci, în exemplul nostru aici, care voi ar trebui 305 00:12:17,220 --> 00:12:19,700 au văzut în secțiune la un moment dat, ne-am 306 00:12:19,700 --> 00:12:23,220 unii cub int că ia unele int de intrare. 307 00:12:23,220 --> 00:12:25,870 Și avem principal nostru funcție, prin care se solicită cub. 308 00:12:25,870 --> 00:12:28,670 Și cub este definită după fapt. 309 00:12:28,670 --> 00:12:34,450 >> Deci, dacă nu am avea de intrare cub int în partea de sus, când am sunat cub 310 00:12:34,450 --> 00:12:36,620 în principal, compilator nostru s-ar supăra pe noi. 311 00:12:36,620 --> 00:12:38,890 Ar fi ca și cum, ceea ce vorbești despre? 312 00:12:38,890 --> 00:12:40,360 Cub nu există. 313 00:12:40,360 --> 00:12:41,910 Nu știu ce-mi ceri pentru. 314 00:12:41,910 --> 00:12:43,490 Și Mă duc oprire. 315 00:12:43,490 --> 00:12:47,330 >> Ci pentru că am făcut prototip nostru în partea de sus, le-am spus, 316 00:12:47,330 --> 00:12:49,800 Știi, când vezi cub, nu-ți face griji. 317 00:12:49,800 --> 00:12:51,990 Promit este definit mai târziu. 318 00:12:51,990 --> 00:12:53,750 Și-l voi lăsa să faci ce vrei. 319 00:12:53,750 --> 00:12:57,750 Deci, dacă aveți vreodată o funcție care este declarată după ce-l sun 320 00:12:57,750 --> 00:13:00,570 pentru prima dată, trebuie să l-au prototyped în partea de sus. 321 00:13:00,570 --> 00:13:01,640 322 00:13:01,640 --> 00:13:02,720 >> Da? 323 00:13:02,720 --> 00:13:04,412 >> ROB: Este pătrat, nu cubaj. 324 00:13:04,412 --> 00:13:05,855 >> ALLISON: Oh, Doamne. 325 00:13:05,855 --> 00:13:09,435 Nu am have-- Gabe, m-am gândit ai fost corector nostru. 326 00:13:09,435 --> 00:13:10,740 327 00:13:10,740 --> 00:13:12,760 Baieti OK, să poarte cu mine, aici. 328 00:13:12,760 --> 00:13:14,440 Sper ca toată lumea din ce in ce ideea. 329 00:13:14,440 --> 00:13:15,560 330 00:13:15,560 --> 00:13:20,380 OK, deci aceasta ar trebui să aibă fost pătrat, nu tocata. 331 00:13:20,380 --> 00:13:22,700 Dar ideea rămâne aceeași. 332 00:13:22,700 --> 00:13:23,702 333 00:13:23,702 --> 00:13:26,660 Orice funcție care suntem de asteptare dupa faptul ar trebui să aibă un prototip. 334 00:13:26,660 --> 00:13:27,730 335 00:13:27,730 --> 00:13:28,970 Toată lumea bună cu asta? 336 00:13:28,970 --> 00:13:30,730 337 00:13:30,730 --> 00:13:32,310 Orice alte erorile de scriere,? 338 00:13:32,310 --> 00:13:32,810 OK. 339 00:13:32,810 --> 00:13:34,730 340 00:13:34,730 --> 00:13:36,230 Orice erorile de scriere, de aici înainte de a începe, Rob? 341 00:13:36,230 --> 00:13:37,356 342 00:13:37,356 --> 00:13:42,380 [Râde] OK, așa structs. 343 00:13:42,380 --> 00:13:45,040 Practic, structs permiteți pentru a crea propriul tip de date. 344 00:13:45,040 --> 00:13:49,264 Atât de mult ca un int sau un char sau un flotor, e doar un alt tip. 345 00:13:49,264 --> 00:13:51,680 Îmi place să mă gândesc la ea ca, cum ar fi, crea propriul tip de date. 346 00:13:51,680 --> 00:13:53,740 Tu așa permite să faci asta. 347 00:13:53,740 --> 00:13:56,160 Și deține diverse tipuri de date. 348 00:13:56,160 --> 00:14:01,030 >> Deci, dacă vă aduceți aminte, într-o matrice, ne-am poate deține doar lucruri de tip similar. 349 00:14:01,030 --> 00:14:04,660 Structs ne permit să dețină mai multe lucruri de diferite tipuri. 350 00:14:04,660 --> 00:14:08,944 Deci, în acest caz aici, au o struct numit Student, 351 00:14:08,944 --> 00:14:10,650 numit aici în partea de jos. 352 00:14:10,650 --> 00:14:13,540 Și avem unele id int și unele nume de coarde. 353 00:14:13,540 --> 00:14:14,620 354 00:14:14,620 --> 00:14:17,300 Deci, aceasta este doar un alt tip de date. 355 00:14:17,300 --> 00:14:18,950 Avem acum un tip de date numit Student. 356 00:14:18,950 --> 00:14:20,330 357 00:14:20,330 --> 00:14:24,750 >> Deci, pentru că ne putem gândi l ca doar un alt tip de date, 358 00:14:24,750 --> 00:14:27,760 putem declara variabile așa cum ne-ar oricare alta. 359 00:14:27,760 --> 00:14:32,680 Deci, în loc de doar avea, cum ar fi, un elev int, avem doar un student, 360 00:14:32,680 --> 00:14:33,390 elev 1. 361 00:14:33,390 --> 00:14:33,560 Oh, uite. 362 00:14:33,560 --> 00:14:34,059 E Rob. 363 00:14:34,059 --> 00:14:35,750 364 00:14:35,750 --> 00:14:38,880 Deci, aici suntem de declarare unei structuri, sau o variabilă 365 00:14:38,880 --> 00:14:40,940 numit elev 1 student tip. 366 00:14:40,940 --> 00:14:45,370 Așa că va trebui id și numele asociate cu ea. 367 00:14:45,370 --> 00:14:48,430 >> Și modul în care acestea accesa elemente din cadrul struct nostru 368 00:14:48,430 --> 00:14:50,100 este cu operatorul punct, aici. 369 00:14:50,100 --> 00:14:51,910 370 00:14:51,910 --> 00:14:54,660 Deci, în acest caz, ne vom a declarat unii elev 1. 371 00:14:54,660 --> 00:14:57,080 Am alocat ID-ul să fie de 1. 372 00:14:57,080 --> 00:14:58,840 Și am atribuit numele de a fi Rob. 373 00:14:58,840 --> 00:15:03,010 374 00:15:03,010 --> 00:15:04,960 OK, toată lumea bună cu asta? 375 00:15:04,960 --> 00:15:06,787 Folositi-l doar like-- da? 376 00:15:06,787 --> 00:15:09,530 >> STUDENT: Da, typedef-- când avem nevoie pentru a utiliza typedef? 377 00:15:09,530 --> 00:15:13,190 >> ALLISON: Deci typedef doar spune that-- Rob, tu 378 00:15:13,190 --> 00:15:16,990 mă poate corecta pe acest dacă am wrong-- dar typedef este doar de fapt de declarare 379 00:15:16,990 --> 00:15:19,330 ea ca un tip pe care le puteți folosi, nu? 380 00:15:19,330 --> 00:15:22,550 >> ROB: Da, e practic, asa ca este doar crearea de 381 00:15:22,550 --> 00:15:24,215 un alias, sau o poreclă pentru un tip. 382 00:15:24,215 --> 00:15:25,590 Deci, aveți posibilitatea să tastați ca [inaudibil]. 383 00:15:25,590 --> 00:15:27,140 384 00:15:27,140 --> 00:15:30,350 Deci, [inaudibil] există, iar acum tocmai ne-am 385 00:15:30,350 --> 00:15:32,090 [Inaudibil] mijloace exact același lucru. 386 00:15:32,090 --> 00:15:37,210 Și așa aici, suntem tastat, cred, unele struct tip 2 [inaudibil]. 387 00:15:37,210 --> 00:15:40,680 Deci, e doar un pseudonim pentru un anumit tip. 388 00:15:40,680 --> 00:15:44,344 >> STUDENT: String [inaudibil] bibliotecă a fost introdus ca niște stele char. 389 00:15:44,344 --> 00:15:51,380 390 00:15:51,380 --> 00:15:54,390 >> ALLISON: Pentru scopurile noastre aici, dacă sunteți de declarare a unei struct, 391 00:15:54,390 --> 00:15:55,600 doar face typedef struct. 392 00:15:55,600 --> 00:15:57,680 393 00:15:57,680 --> 00:16:04,490 OK, deci înainte, acest lucru este doar o variabilă normală aici. 394 00:16:04,490 --> 00:16:06,390 Noi accesa cu un punct. 395 00:16:06,390 --> 00:16:08,580 dacă avem un pointer la un struct, putem de fapt 396 00:16:08,580 --> 00:16:10,700 utilizați o săgeată, care este destul de rece. 397 00:16:10,700 --> 00:16:17,130 >> Deci, în acest caz, avem un pointer la un elev 1, care este student tip. 398 00:16:17,130 --> 00:16:19,020 Amintiți-vă, împreună cu constructii pointer, 399 00:16:19,020 --> 00:16:23,710 vrei indiferent de tipul pointer-ul indică pentru a fi la început. 400 00:16:23,710 --> 00:16:25,960 Deci, avem o studentă 1, aici. 401 00:16:25,960 --> 00:16:27,370 402 00:16:27,370 --> 00:16:31,050 Si din moment ce acest student 1 este acum un ascuțit, 403 00:16:31,050 --> 00:16:36,520 putem merge de fapt, elev nume 1 arrow în loc de puncte, pentru că este un pointer, 404 00:16:36,520 --> 00:16:37,640 și să alocați Rob. 405 00:16:37,640 --> 00:16:40,720 Și acum, dacă vrem să schimba Rob la Davin, 406 00:16:40,720 --> 00:16:43,570 aceasta este doar vă arată un alt mod de a face acest lucru. 407 00:16:43,570 --> 00:16:48,850 >> Deci, în loc de a folosi săgeată, pe care pot also-- voi încheia acest lucru și apoi 408 00:16:48,850 --> 00:16:52,860 ia că question-- ai putea face, de asemenea elev de referință 1. 409 00:16:52,860 --> 00:16:56,170 Asta spune ca du-te la tot ce este la elev 1, care 410 00:16:56,170 --> 00:16:58,840 ar fi struct student nostru. 411 00:16:58,840 --> 00:17:03,910 Accesati-l cu un punct și elementul pe care doriți, și apoi le retrocedeze. 412 00:17:03,910 --> 00:17:05,326 Nu a fost o întrebare. 413 00:17:05,326 --> 00:17:08,034 STUDENT: Da, așa cum se face că aveți de a utiliza [inaudibil] dacă sunteți 414 00:17:08,034 --> 00:17:10,367 face stea elev fără [Inaudibil] elev? 415 00:17:10,367 --> 00:17:12,200 ALLISON: Pentru ca acest este de a crea un pointer. 416 00:17:12,200 --> 00:17:13,616 ROB: Vom vorbi despre asta. 417 00:17:13,616 --> 00:17:16,119 ALLISON: Vom vorbi despre asta mai târziu în cadrul reexaminării. 418 00:17:16,119 --> 00:17:17,660 Deci, țineți doar pe acel gând. 419 00:17:17,660 --> 00:17:20,560 În cazul în care încă te deranjează de la capăt, vin să vorbesc cu unul dintre noi. 420 00:17:20,560 --> 00:17:23,380 >> Deci, acestea fac exact același lucru. 421 00:17:23,380 --> 00:17:25,579 Noi doar vă arată două moduri diferite de a face acest lucru. 422 00:17:25,579 --> 00:17:29,470 Student 1 este acum un pointer, deci puteți accesa elementul Nume 423 00:17:29,470 --> 00:17:30,960 în cadrul struct cu o săgeată. 424 00:17:30,960 --> 00:17:36,440 Sau puteți dereference indicatorul, și apoi a accesa în mod normal ar fi. 425 00:17:36,440 --> 00:17:38,430 Are care are sens pentru fiecare? 426 00:17:38,430 --> 00:17:39,480 427 00:17:39,480 --> 00:17:43,890 În cazul în care întreaga lucrurile sunt un pic indicatorul confuz, Gabe va vorbi despre asta, 428 00:17:43,890 --> 00:17:45,740 iar apoi poate că acest lucru va face mai mult sens. 429 00:17:45,740 --> 00:17:46,240 Da? 430 00:17:46,240 --> 00:17:48,387 >> STUDENT: Da, așa cum este aceasta diferit de? 431 00:17:48,387 --> 00:17:49,470 ALLISON: cel precedent? 432 00:17:49,470 --> 00:17:52,330 Deci, elevul 1 din prezentul caz nu este un pointer. 433 00:17:52,330 --> 00:17:54,380 E doar struct ta actuale. 434 00:17:54,380 --> 00:17:55,400 >> STUDENT: OK. 435 00:17:55,400 --> 00:17:57,645 >> ALLISON: întrucât acesta este un pointer la o struct. 436 00:17:57,645 --> 00:17:58,910 437 00:17:58,910 --> 00:18:02,060 >> STUDENT: OK, dar nu un fel de ajunge să lucreze în același [neauzit]. 438 00:18:02,060 --> 00:18:03,310 >> ALLISON: Se lucrează efectiv la fel. 439 00:18:03,310 --> 00:18:04,560 Sintaxa este doar diferit. 440 00:18:04,560 --> 00:18:05,185 STUDENT: OK. 441 00:18:05,185 --> 00:18:07,600 >> ALLISON: Da, ei sunt efectiv aceeași. 442 00:18:07,600 --> 00:18:11,321 E doar în funcție de context, poate doriți una peste alta. 443 00:18:11,321 --> 00:18:11,820 Da? 444 00:18:11,820 --> 00:18:13,956 >> STUDENT: Când faci referiri la 1-- 445 00:18:13,956 --> 00:18:14,580 ALLISON: Mm-hm? 446 00:18:14,580 --> 00:18:16,880 STUDENT: De ce au parantezele? 447 00:18:16,880 --> 00:18:19,575 ALLISON: Pentru ca elev 1 este indicatorul. 448 00:18:19,575 --> 00:18:22,200 Deci, aveți nevoie pentru a vă asigura că sunteți doar dereferencing indicatorul. 449 00:18:22,200 --> 00:18:23,380 >> STUDENT: OK. 450 00:18:23,380 --> 00:18:26,700 >> ALLISON: Deci, în acest caz aici, parantezele din jurul ei 451 00:18:26,700 --> 00:18:29,875 înseamnă că sunteți dereferencing elev 1. 452 00:18:29,875 --> 00:18:35,390 Deci, ai de gând să în cazul în care elev 1 puncte, care este struct ta. 453 00:18:35,390 --> 00:18:38,010 Deci, acum vă puteți gândi din ea ca și struct, 454 00:18:38,010 --> 00:18:39,785 astfel încât să putem folosi funcționarea noastră normală punct. 455 00:18:39,785 --> 00:18:42,752 456 00:18:42,752 --> 00:18:43,585 Orice alte intrebari? 457 00:18:43,585 --> 00:18:45,840 458 00:18:45,840 --> 00:18:48,120 Rece, minunat. 459 00:18:48,120 --> 00:18:51,359 >> Așa că ultimul lucru pe care, cred eu este ultima mea tobogan, Woo! 460 00:18:51,359 --> 00:18:52,775 OK, deci virgulă mobilă imprecizie. 461 00:18:52,775 --> 00:18:54,090 462 00:18:54,090 --> 00:18:56,820 Am vorbit pe scurt despre acest lucru în timpul curs. 463 00:18:56,820 --> 00:19:00,030 Practic, ne-am un număr infinit de numere reale. 464 00:19:00,030 --> 00:19:02,237 Și dacă oricare dintre voi iubesc matematica, nu e 465 00:19:02,237 --> 00:19:03,570 tot felul de chestii misto cu noi. 466 00:19:03,570 --> 00:19:05,010 467 00:19:05,010 --> 00:19:07,190 >> Dar există infinit multe numere reale. 468 00:19:07,190 --> 00:19:09,850 Dar sunt doar finit multi biti pe care le avem. 469 00:19:09,850 --> 00:19:13,240 Deci, ai întotdeauna o să au imprecizie, este tot. 470 00:19:13,240 --> 00:19:16,269 Și asta e doar un fel de ca ceva ce ar trebui să știi. 471 00:19:16,269 --> 00:19:19,060 Asta ca și cum am s-ar putea întreba de ce nu floating point imprecizie exista? 472 00:19:19,060 --> 00:19:20,004 473 00:19:20,004 --> 00:19:21,420 Deci, doar ceva ce ar trebui să știi. 474 00:19:21,420 --> 00:19:23,770 Și cu asta, eu sunt de cotitură l pe Pointeri. 475 00:19:23,770 --> 00:19:27,720 476 00:19:27,720 --> 00:19:28,520 >> Binky: Buna ziua, băieți. 477 00:19:28,520 --> 00:19:29,616 Numele meu este Binky. 478 00:19:29,616 --> 00:19:30,990 Am de gând să vorbesc despre indicii. 479 00:19:30,990 --> 00:19:33,247 480 00:19:33,247 --> 00:19:35,830 Da, asa este, de fapt indicii partea mea favorită în acest curs. 481 00:19:35,830 --> 00:19:39,740 Deci, doar pentru a face clar ceea ce Allison vorbea despre aici, asa ca motivul 482 00:19:39,740 --> 00:19:43,810 why-- singura diferenta aici, diferenta mare a fost modul în care 483 00:19:43,810 --> 00:19:44,760 ne pronunțăm lucruri. 484 00:19:44,760 --> 00:19:47,560 Deci, stele elev înseamnă acest lucru este un pointer la un student. 485 00:19:47,560 --> 00:19:52,960 Întrucât diapozitiv înainte, elev este un struct real, ca un elev real, 486 00:19:52,960 --> 00:19:54,400 care conțin oricare din aceste lucruri. 487 00:19:54,400 --> 00:19:57,050 >> Și motivul pentru care ne-am vreau sa-- da, Davin? 488 00:19:57,050 --> 00:19:58,630 >> Davin: Ce săgeata înseamnă? 489 00:19:58,630 --> 00:20:04,240 >> Binky: Sageata Mijloacele exact la fel ca aceasta. 490 00:20:04,240 --> 00:20:06,150 Deci, nu aveți cu adevărat nevoie de săgeată. 491 00:20:06,150 --> 00:20:11,060 Ca, daca esti doar de program în C, puteți folosi doar acest lucru. 492 00:20:11,060 --> 00:20:12,850 Ne pare rău, eu nu ce este. 493 00:20:12,850 --> 00:20:14,920 Puteți utiliza doar acest sintaxă. 494 00:20:14,920 --> 00:20:17,430 >> Dar unii oameni, atunci când acestea au fost proiectarea C, 495 00:20:17,430 --> 00:20:19,870 au gândit că oamenii folosit ca sintaxa atât de mult, 496 00:20:19,870 --> 00:20:23,970 că ei vor dori veni cu o structură sintaxă pentru ea. 497 00:20:23,970 --> 00:20:26,820 Și acest lucru a avut loc în forma acestei săgeată. 498 00:20:26,820 --> 00:20:29,210 Și e foarte frumos, pentru că simbolizeaza ceva 499 00:20:29,210 --> 00:20:33,670 ca și cum suntem de fapt în urma acest sageata, acest indicator, 500 00:20:33,670 --> 00:20:35,300 față de un spațiu în memorie. 501 00:20:35,300 --> 00:20:40,410 Și când vom ajunge acolo, ne-am dori să uita-te la numele pe care elev, 502 00:20:40,410 --> 00:20:42,150 în cazul în care are sens. 503 00:20:42,150 --> 00:20:43,000 OK? 504 00:20:43,000 --> 00:20:44,290 >> Deci, aceasta este exact la fel. 505 00:20:44,290 --> 00:20:46,310 Aceasta este exact acelasi lucru ca acesta. 506 00:20:46,310 --> 00:20:48,130 Ei se compilat exact la fel, OK? 507 00:20:48,130 --> 00:20:50,100 508 00:20:50,100 --> 00:20:55,580 Și motivul pentru care aici de ce ne-am malloc ceva, este pentru că în acest caz, 509 00:20:55,580 --> 00:20:59,120 variabila noastră este, de fapt doar o variabila pointer. 510 00:20:59,120 --> 00:21:02,900 Deci, avem doar un spațiu în memorie care a deține un pointer. 511 00:21:02,900 --> 00:21:06,570 Nu avem într-adevăr orice spatiu care deține struct actuale. 512 00:21:06,570 --> 00:21:08,660 >> Deci, acest lucru trebuie să se facă în două etape. 513 00:21:08,660 --> 00:21:11,545 Trebuie să creăm memorie pentru a pune în struct. 514 00:21:11,545 --> 00:21:14,445 Și noi trebuie să creăm memorie pentru a pune indicatorul în. 515 00:21:14,445 --> 00:21:16,570 Deci sunt de fapt doi diferite variabile, aici. 516 00:21:16,570 --> 00:21:19,730 Una dintre ele este de tip elev, doar că nu are într-adevăr un nume. 517 00:21:19,730 --> 00:21:21,900 Iar celălalt este de tip elev stele. 518 00:21:21,900 --> 00:21:24,900 Și apoi de student 1 puncte acolo, în cazul în care face sens. 519 00:21:24,900 --> 00:21:25,871 520 00:21:25,871 --> 00:21:26,370 OK? 521 00:21:26,370 --> 00:21:28,160 522 00:21:28,160 --> 00:21:31,860 >> Deci, motivul pentru care am folosi indicii se datorează faptului că tot 523 00:21:31,860 --> 00:21:35,510 într-un calculator, fiecare variabilă într-un calculator are două lucruri. 524 00:21:35,510 --> 00:21:36,580 Ea are valoarea sa. 525 00:21:36,580 --> 00:21:38,420 Și are sediul. 526 00:21:38,420 --> 00:21:41,390 Și o modalitate buna de a conceptualiza acest lucru este acolo 527 00:21:41,390 --> 00:21:44,230 multe probleme atunci când încercați să utilizați funcții. 528 00:21:44,230 --> 00:21:47,200 Și vom încerca să uita-te într-una din cele. 529 00:21:47,200 --> 00:21:50,370 Și anume, o să cred că de memorie ca cutii. 530 00:21:50,370 --> 00:21:52,810 >> Întotdeauna te-ai gândit de variabile cand spui na este egal cu 5. 531 00:21:52,810 --> 00:21:54,430 Crezi că a inscrie 5 într-o cutie. 532 00:21:54,430 --> 00:21:55,520 533 00:21:55,520 --> 00:22:00,030 Deci, ce se întâmplă dacă vrei să treci care int într-o funcție? 534 00:22:00,030 --> 00:22:03,230 Trebuie doar pass-- eu nu fac know-- x într-o funcție. 535 00:22:03,230 --> 00:22:06,090 Dar ce se întâmplă este în mod normal, ca oameni, tu 536 00:22:06,090 --> 00:22:09,050 ar crede ceva de genul că sunt trece caseta unei persoane. 537 00:22:09,050 --> 00:22:12,070 Și nu o face într-adevăr se întâmplă în computere. 538 00:22:12,070 --> 00:22:17,770 Ce se întâmplă este de a copia valoarea din caseta de careul persoanei. 539 00:22:17,770 --> 00:22:22,440 >> Deci, ceea ce am încercat să spun este că, dacă Ai un function-- sorry-- aici, 540 00:22:22,440 --> 00:22:27,700 dacă avem o funcție ca la cinci în sus acolo, dacă încercați să treci o variabilă, 541 00:22:27,700 --> 00:22:29,450 este doar de gând să copiați. 542 00:22:29,450 --> 00:22:35,771 În cazul în care un nx Inițializare este egal cu 3, va pentru a copia această valoare până la variabila A 543 00:22:35,771 --> 00:22:36,270 acolo. 544 00:22:36,270 --> 00:22:37,005 545 00:22:37,005 --> 00:22:39,630 OK, iar acest lucru este un fel de motiv de ce ne-am dori să utilizeze indicii. 546 00:22:39,630 --> 00:22:42,550 Deoarece în loc de oferind doar valoarea, 547 00:22:42,550 --> 00:22:44,850 în loc de doar in trecere doar valoarea la o funcție, 548 00:22:44,850 --> 00:22:46,530 dorim să treacă de referință. 549 00:22:46,530 --> 00:22:50,630 Ceea ce noi numim adversari de referință este un fel de a da caseta din funcție, 550 00:22:50,630 --> 00:22:53,890 astfel încât funcția poate, de asemenea, schimba valorile în care caseta. 551 00:22:53,890 --> 00:22:57,280 >> OK, deci doar câteva indicatorul de bază lucruri este de a crea indicii, 552 00:22:57,280 --> 00:23:00,300 doar tu declare un tip, și ai pus o stea imediat după aceasta. 553 00:23:00,300 --> 00:23:02,307 Iar tipul este doar ceea ce indică la. 554 00:23:02,307 --> 00:23:04,390 Deci, dacă este o stea int, te arătând spre un int. 555 00:23:04,390 --> 00:23:05,940 Daca este o stea char, esti arătând spre o diagramă. 556 00:23:05,940 --> 00:23:07,790 Și dacă este o stea de student, esti arătând spre un elev. 557 00:23:07,790 --> 00:23:08,770 OK? 558 00:23:08,770 --> 00:23:10,510 >> Și sunt toate cele 4 bytes. 559 00:23:10,510 --> 00:23:13,010 Deoarece această variabilă ea nu are de fapt 560 00:23:13,010 --> 00:23:15,380 trebuie să dețină un char, un int, sau un student. 561 00:23:15,380 --> 00:23:16,890 Ea doar trebuie să dețină o adresă. 562 00:23:16,890 --> 00:23:21,390 De aceea sunt toate cele 4 bytes mult timp într-o mașină normală pe 32 de biți. 563 00:23:21,390 --> 00:23:21,890 OK? 564 00:23:21,890 --> 00:23:25,600 Deci, aici, x este o variabilă care indică la un int. Puncte y la un char. puncte z 565 00:23:25,600 --> 00:23:26,580 la un float. 566 00:23:26,580 --> 00:23:27,480 Orice întrebări aici? 567 00:23:27,480 --> 00:23:29,841 568 00:23:29,841 --> 00:23:30,340 Rece. 569 00:23:30,340 --> 00:23:32,550 Și acolo sunt două simboluri diferite pe care le au 570 00:23:32,550 --> 00:23:34,341 de a păstra în minte atunci când vin la indicatorul. 571 00:23:34,341 --> 00:23:36,540 Astfel referire și dereferencing sunt cele mari. 572 00:23:36,540 --> 00:23:38,100 573 00:23:38,100 --> 00:23:41,602 Deci, ampersand a Numele variabilă, da? 574 00:23:41,602 --> 00:23:42,310 STUDENT: Adresa. 575 00:23:42,310 --> 00:23:43,380 Binky: Adresa. 576 00:23:43,380 --> 00:23:47,330 Deci, dacă declara int-o este egal cu 5, atunci ampersand 577 00:23:47,330 --> 00:23:49,214 de o este de gând să vă dau adresa. 578 00:23:49,214 --> 00:23:51,130 Și puteți încerca de fapt pentru a imprima ca și a vedea 579 00:23:51,130 --> 00:23:54,640 ceea ce adresă în memorie variabila are. 580 00:23:54,640 --> 00:23:57,380 Și apoi dereferencing-- astfel că a fost corelarea, 581 00:23:57,380 --> 00:24:00,380 obtinerea de dereferencing address-- este exact opusul. 582 00:24:00,380 --> 00:24:04,120 OK, la fel ca ori este vizavi de o divizie, 583 00:24:04,120 --> 00:24:06,060 stele este opusul ampersand. 584 00:24:06,060 --> 00:24:09,710 Deci, mijloace dereferencing du-te acolo. 585 00:24:09,710 --> 00:24:14,280 Deci, dacă vă dau eu star-- nu stiu-- 50, asta e 586 00:24:14,280 --> 00:24:20,320 O să încercați să mergeți la adresa de Numărul 50 în interiorul computerului. 587 00:24:20,320 --> 00:24:22,840 OK, și de ce vom vedea că ele sunt opuse? 588 00:24:22,840 --> 00:24:27,320 Pentru că ceea ce se întâmplă dacă faci ceva de genul stea ampersand o? 589 00:24:27,320 --> 00:24:28,470 590 00:24:28,470 --> 00:24:33,460 Ei bine, ampersand vă oferă o adresa unei variabile, adresa unui. 591 00:24:33,460 --> 00:24:35,830 Dar stele înseamnă a merge acolo. 592 00:24:35,830 --> 00:24:38,930 >> Deci, ce se întâmplă dacă du-te la adresa unui? 593 00:24:38,930 --> 00:24:40,400 Trebuie doar ajunge la o, nu? 594 00:24:40,400 --> 00:24:41,410 595 00:24:41,410 --> 00:24:43,600 Deci, merg la adresa o este același lucru ca și o. 596 00:24:43,600 --> 00:24:47,580 De aceea ei sunt, de obicei, sa referit la same-- acest 597 00:24:47,580 --> 00:24:50,480 iar acest sunt denumite Operatorii ca opuse. 598 00:24:50,480 --> 00:24:50,980 OK? 599 00:24:50,980 --> 00:24:52,780 600 00:24:52,780 --> 00:24:53,790 Atât de cool. 601 00:24:53,790 --> 00:24:57,240 >> Sub capota, de exemplu, dacă vom declara int x este egal cu 5, 602 00:24:57,240 --> 00:24:58,040 avem o variabilă. 603 00:24:58,040 --> 00:25:00,790 Și amintiți-vă că am spus fiecare variable-- și acesta este un lucru bun 604 00:25:00,790 --> 00:25:03,820 să păstreze în mind-- are două lucruri diferite asociate cu. 605 00:25:03,820 --> 00:25:06,460 Acesta are o și o valoare adresat. 606 00:25:06,460 --> 00:25:07,140 OK? 607 00:25:07,140 --> 00:25:09,180 >> Astfel încât valoarea în acest caz este de 5. 608 00:25:09,180 --> 00:25:12,140 Și adresa este-- să zicem, eu sunt face ceva up-- e 0x04. 609 00:25:12,140 --> 00:25:13,180 610 00:25:13,180 --> 00:25:17,200 Și singurul motiv pentru care noi, de obicei, reprezintă adrese din hexazecimal 611 00:25:17,200 --> 00:25:19,770 este una, pentru că e ca și cum bine. 612 00:25:19,770 --> 00:25:21,600 Se merge bine cu binar. 613 00:25:21,600 --> 00:25:23,500 Este ușor să se convertească la și de la binar. 614 00:25:23,500 --> 00:25:26,890 Și nu prea mare, dacă aveți un număr foarte mare. 615 00:25:26,890 --> 00:25:29,990 Așa că ne-am dori să folosească hexazecimal în adresele de imprimare. 616 00:25:29,990 --> 00:25:31,890 Dar am putea reprezenta aceasta ca un întreg. 617 00:25:31,890 --> 00:25:32,750 E în regulă. 618 00:25:32,750 --> 00:25:35,450 >> Și așa că are o adresă 4 și o valoare de 5. 619 00:25:35,450 --> 00:25:38,080 Și apoi i-am spus pointer stea int. 620 00:25:38,080 --> 00:25:40,070 Deci, acesta este un tip diferit, aviz. 621 00:25:40,070 --> 00:25:43,220 Int pointer stele este egal adresa lui x. 622 00:25:43,220 --> 00:25:46,425 Deci, ce va fi valoarea PTR? 623 00:25:46,425 --> 00:25:47,710 624 00:25:47,710 --> 00:25:51,600 O să fie Adresa de x, aici. 625 00:25:51,600 --> 00:25:54,190 OK, deci valoarea este de gând să să fie aceeași cu adresa. 626 00:25:54,190 --> 00:25:56,130 Asta e atribuirea opera fac. 627 00:25:56,130 --> 00:25:59,380 Și apoi ptr va avea propria adresa, care se dovedește, 628 00:25:59,380 --> 00:26:02,050 în acest caz, 8, OK? 629 00:26:02,050 --> 00:26:03,850 630 00:26:03,850 --> 00:26:05,900 >> Și apoi am crea o nouă copie întreg. 631 00:26:05,900 --> 00:26:08,790 Și eu spun copie int este egal cu du-te acolo. 632 00:26:08,790 --> 00:26:11,140 Deci, du-te la ceea ce ptr indică spre. 633 00:26:11,140 --> 00:26:13,940 Ei bine, ceea ce acest PTR avea? 634 00:26:13,940 --> 00:26:14,740 Ptr are 0x04. 635 00:26:14,740 --> 00:26:16,060 636 00:26:16,060 --> 00:26:18,400 Ce se întâmplă dacă am încerca să mergem acolo? 637 00:26:18,400 --> 00:26:23,650 Voi găsi pe cel care are adresa X și care își are domiciliul 4. 638 00:26:23,650 --> 00:26:25,970 Și care își are domiciliul patru este de x. 639 00:26:25,970 --> 00:26:26,950 Asta face sens? 640 00:26:26,950 --> 00:26:28,295 641 00:26:28,295 --> 00:26:28,795 Da? 642 00:26:28,795 --> 00:26:32,060 >> STUDENT: În acest caz, este indicatorul într-o stivă? 643 00:26:32,060 --> 00:26:36,024 >> Binky: În acest caz, it's-- bine întrebare. 644 00:26:36,024 --> 00:26:38,690 Eu nu cred că într-adevăr despre acest atunci când se face la aceste adrese. 645 00:26:38,690 --> 00:26:42,570 Dar dacă acest lucru este, cum ar fi, toate acestea sunt variabile locale, 646 00:26:42,570 --> 00:26:46,372 atunci x este de gând să trăiască in-- tot este de gând să trăiască în stivă. 647 00:26:46,372 --> 00:26:48,330 Deci, totul se petrece să fie îndreptat la stiva. 648 00:26:48,330 --> 00:26:49,360 649 00:26:49,360 --> 00:26:52,700 Ai doar la grămadă, atunci când de a începe să utilizați malloc, nu? 650 00:26:52,700 --> 00:26:59,430 >> Deci, dacă vă amintiți stivă este de fiecare dată te sun o funcție în programul tău, 651 00:26:59,430 --> 00:27:02,800 cum ar fi, de exemplu principal, sau orice alte funcții, cum ar fi printf. 652 00:27:02,800 --> 00:27:06,334 Toate variabilele locale sunt mergi la a lua pune într-un cadru stivă. 653 00:27:06,334 --> 00:27:08,500 Și ei vor să se cum ar fi îngrămădite în stivă. 654 00:27:08,500 --> 00:27:09,930 Asta e ceea ce se numește o stivă. 655 00:27:09,930 --> 00:27:12,200 Și toate aceste variabile locale vor fi acolo. 656 00:27:12,200 --> 00:27:14,940 Și heap-- și noi te vom pentru a vorbi mai mult despre acest later-- 657 00:27:14,940 --> 00:27:19,050 heap este locul unde toate alocate dinamic vieți de memorie. 658 00:27:19,050 --> 00:27:20,270 Rece? 659 00:27:20,270 --> 00:27:21,680 >> Mergem la acest diapozitiv. 660 00:27:21,680 --> 00:27:22,800 Da? 661 00:27:22,800 --> 00:27:25,490 >> STUDENT: De ce nu este int copie întoarce 0x04? 662 00:27:25,490 --> 00:27:27,870 663 00:27:27,870 --> 00:27:30,066 >> Binky: De ce nu este int copie întoarce 0x04? 664 00:27:30,066 --> 00:27:32,450 >> STUDENT: De ce nu este că [inaudibil]? 665 00:27:32,450 --> 00:27:35,530 >> Binky: Pentru că ceea ce este o valoare de PTR? 666 00:27:35,530 --> 00:27:37,394 667 00:27:37,394 --> 00:27:38,370 >> STUDENT: 0x04. 668 00:27:38,370 --> 00:27:38,960 >> Binky: 0x04. 669 00:27:38,960 --> 00:27:40,910 Ce se întâmplă dacă te duci la 0x04? 670 00:27:40,910 --> 00:27:41,620 Ce ai? 671 00:27:41,620 --> 00:27:42,371 >> STUDENT: Oh, OK. 672 00:27:42,371 --> 00:27:42,995 Binky: Tu vezi? 673 00:27:42,995 --> 00:27:43,536 STUDENT: Da. 674 00:27:43,536 --> 00:27:44,890 Binky: Deci ai 5. 675 00:27:44,890 --> 00:27:49,170 Deci, copie va avea 5, în cazul în care are sens. 676 00:27:49,170 --> 00:27:49,809 Da? 677 00:27:49,809 --> 00:27:52,803 >> STUDENT: Poate am ajuns 5 în caseta de valoare [inaudibil] 678 00:27:52,803 --> 00:27:55,300 dacă ne-am pus int copia [inaudibil]. 679 00:27:55,300 --> 00:27:56,710 >> Binky: Int-- noi ar fi, da. 680 00:27:56,710 --> 00:27:59,080 Care ar fi făcut destul de mult același lucru. 681 00:27:59,080 --> 00:28:02,080 Dar în acest fel, putem trece adresa de funcții. 682 00:28:02,080 --> 00:28:05,050 Și asta e un lucru rece am de gând să fac chiar acum. 683 00:28:05,050 --> 00:28:06,770 684 00:28:06,770 --> 00:28:13,090 >> Deci, acest tip de exercițiu vine mereu în sus on-- foarte de obicei, vine pe chestionare. 685 00:28:13,090 --> 00:28:15,870 Deci, este foarte bun pentru a încerca să face așa ceva te. 686 00:28:15,870 --> 00:28:21,210 Deci, încercați pentru a urmări ceea ce adresei este și doresc valorile variabilelor 687 00:28:21,210 --> 00:28:22,620 sunt în fiecare punct. 688 00:28:22,620 --> 00:28:24,370 Deci, acest lucru este exact ceea ce vom face. 689 00:28:24,370 --> 00:28:26,988 Aici, avem pași, o, doi, trei, patru, cinci. 690 00:28:26,988 --> 00:28:30,530 Unul, doi, trei, patru, cinci. 691 00:28:30,530 --> 00:28:33,330 Și vom urmări valorilor lui x și o. 692 00:28:33,330 --> 00:28:34,650 693 00:28:34,650 --> 00:28:40,530 >> Deci, ceea ce face această, în cazul în care acest lucru este o Codul de buggy, noi încercăm să facem la cinci. 694 00:28:40,530 --> 00:28:43,610 Deci, suntem încercarea de a obține într-un variabilă și modifica valoarea de 5. 695 00:28:43,610 --> 00:28:44,630 696 00:28:44,630 --> 00:28:49,900 Și amintiți-vă analogie mea de a avea un Box si predarea caseta cineva? 697 00:28:49,900 --> 00:28:51,515 Deci, principal are această casetă numit de x. 698 00:28:51,515 --> 00:28:52,570 699 00:28:52,570 --> 00:28:54,170 Și ea conține valoarea 3. 700 00:28:54,170 --> 00:28:55,230 701 00:28:55,230 --> 00:28:57,455 Și eu încerc să predea această casetă pentru a cinci. 702 00:28:57,455 --> 00:28:58,560 703 00:28:58,560 --> 00:29:01,510 >> Și vreau să cinci să se schimbe valoarea acestei casete de 5. 704 00:29:01,510 --> 00:29:03,080 705 00:29:03,080 --> 00:29:05,120 Și apoi am imprima valoarea lui x. 706 00:29:05,120 --> 00:29:06,475 707 00:29:06,475 --> 00:29:08,850 Aceasta este ceea ce function-- meu asta este ceea ce încerc să fac. 708 00:29:08,850 --> 00:29:12,450 Încerc doar pentru a actualiza valoarea lui x la 5. 709 00:29:12,450 --> 00:29:13,512 710 00:29:13,512 --> 00:29:14,970 Este clar ce face funcția? 711 00:29:14,970 --> 00:29:16,210 712 00:29:16,210 --> 00:29:21,440 >> OK, deci ce vor fi valori ale lui x și un drept aici, 713 00:29:21,440 --> 00:29:27,734 prima linie, chiar înainte de primul line-- Mi-ar say-- a programului? 714 00:29:27,734 --> 00:29:28,940 >> STUDENT: Probabil gunoi. 715 00:29:28,940 --> 00:29:30,023 >> Binky: Doar chestii gunoi. 716 00:29:30,023 --> 00:29:32,590 Așa că am pus doar N / A. Astfel noi nu prea știu. 717 00:29:32,590 --> 00:29:37,400 Ca, o nu mai există încă, pentru că nu am sunat la cinci. 718 00:29:37,400 --> 00:29:38,980 Int o nu este declarată. 719 00:29:38,980 --> 00:29:40,030 720 00:29:40,030 --> 00:29:42,920 Si x este de gând să mai existe aici, dar noi nu avem cu adevărat 721 00:29:42,920 --> 00:29:45,370 atribuie orice valoare pentru ea, așa bine? 722 00:29:45,370 --> 00:29:46,570 723 00:29:46,570 --> 00:29:52,340 >> Și apoi, ce vor fi valori ale lui x și un număr din două? 724 00:29:52,340 --> 00:29:54,530 725 00:29:54,530 --> 00:29:55,410 >> STUDENT: [inaudibil]. 726 00:29:55,410 --> 00:29:57,540 >> Binky: Deci, X va fi de 3. 727 00:29:57,540 --> 00:29:59,650 Asta e ușor, pentru că suntem atribuirea 3 la ea. 728 00:29:59,650 --> 00:30:03,500 Și un încă nu există pentru că o doar trăiește în cinci. 729 00:30:03,500 --> 00:30:05,800 Așa că am de gând să aibă 3 și nimic. 730 00:30:05,800 --> 00:30:08,590 sau ca un gunoi, indiferent de, nu prea definit. 731 00:30:08,590 --> 00:30:11,640 732 00:30:11,640 --> 00:30:13,140 Și acum, aceasta este importantă linie. 733 00:30:13,140 --> 00:30:14,931 Aici, vom apel de fapt la cinci. 734 00:30:14,931 --> 00:30:17,140 735 00:30:17,140 --> 00:30:18,680 Și amintiți-vă ce am spus. 736 00:30:18,680 --> 00:30:20,240 Noi nu trece pe centru. 737 00:30:20,240 --> 00:30:23,110 Noi copiați doar valoarea caseta pentru o altă casetă. 738 00:30:23,110 --> 00:30:27,000 Asta-i toate computerele nu, copiați lucrurile la un loc la altul. 739 00:30:27,000 --> 00:30:33,550 >> Deci, la cinci, ceea ce face de fapt este exemplare valoarea lui x la un. 740 00:30:33,550 --> 00:30:35,130 Deci, ce va fi aici? 741 00:30:35,130 --> 00:30:36,210 Valorile x și a. 742 00:30:36,210 --> 00:30:38,670 743 00:30:38,670 --> 00:30:43,360 3 și 3, vom copia pur și simplu peste de la x la un. 744 00:30:43,360 --> 00:30:44,710 745 00:30:44,710 --> 00:30:45,320 Rece. 746 00:30:45,320 --> 00:30:46,140 >> Acum suntem aici. 747 00:30:46,140 --> 00:30:47,610 748 00:30:47,610 --> 00:30:49,430 Și acum mergem pentru a actualiza un egal cu 5. 749 00:30:49,430 --> 00:30:50,900 750 00:30:50,900 --> 00:30:53,070 Ce se va întâmpla în linia patru? 751 00:30:53,070 --> 00:30:55,120 752 00:30:55,120 --> 00:30:56,010 >> STUDENT: [inaudibil]. 753 00:30:56,010 --> 00:30:59,685 >> Binky: o va fi actualizată, dar X nu sa actualizat. 754 00:30:59,685 --> 00:31:02,050 755 00:31:02,050 --> 00:31:05,250 Deoarece x locuiește încă în principal, este un complet diferit bloc de memorie. 756 00:31:05,250 --> 00:31:06,970 Este o variabilă diferită. 757 00:31:06,970 --> 00:31:07,900 o este o altă variabilă. 758 00:31:07,900 --> 00:31:10,000 Acestea se întâmplă să aibă aceeași valoare, deoarece am 759 00:31:10,000 --> 00:31:13,980 copiate valoarea lui x la un. 760 00:31:13,980 --> 00:31:20,070 Dar acum, când fac un egal 5, aceasta nu afectează într-adevăr x în nici un fel. 761 00:31:20,070 --> 00:31:21,450 Aceasta este partea mai complicată. 762 00:31:21,450 --> 00:31:23,380 Are sens pentru toata lumea? 763 00:31:23,380 --> 00:31:24,093 Da? 764 00:31:24,093 --> 00:31:25,717 STUDENT: Încă o întrebare, ai 3. 765 00:31:25,717 --> 00:31:27,741 De ce este o already-- oh, nu, e 3. 766 00:31:27,741 --> 00:31:28,490 Ne pare rău, nu contează. 767 00:31:28,490 --> 00:31:29,310 Am citit 5. 768 00:31:29,310 --> 00:31:30,415 >> Binky: Da, 3, 3. 769 00:31:30,415 --> 00:31:31,540 >> STUDENT: [inaudibil], da. 770 00:31:31,540 --> 00:31:35,290 Binky: Și atunci ne-am atribui 5 până la o, dar nu diminuează x. 771 00:31:35,290 --> 00:31:36,369 Bun? 772 00:31:36,369 --> 00:31:36,910 STUDENT: Da. 773 00:31:36,910 --> 00:31:37,410 Binky: Da? 774 00:31:37,410 --> 00:31:42,330 Îmi puteți explica din nou cum un devine copiat [inaudibil]? 775 00:31:42,330 --> 00:31:48,480 >> Binky: OK, deci atunci când apelați la cinci de x, astfel încât această linie de cod aici. 776 00:31:48,480 --> 00:31:50,100 777 00:31:50,100 --> 00:31:52,340 la cinci dintre x, ceea ce este x? 778 00:31:52,340 --> 00:31:55,160 779 00:31:55,160 --> 00:31:58,340 x este la doar 3 în acest moment, nu? 780 00:31:58,340 --> 00:32:03,320 Deci, ați putea gândi doar de a pune 3 aici și a uita despre de x. 781 00:32:03,320 --> 00:32:04,410 Doar încearcă o 3 aici. 782 00:32:04,410 --> 00:32:10,880 Cum ar fi, vom copiați valoarea lui x la int A, care-i treaba acolo. 783 00:32:10,880 --> 00:32:12,310 784 00:32:12,310 --> 00:32:13,630 OK? 785 00:32:13,630 --> 00:32:14,780 >> Deci valoarea lui x este 3. 786 00:32:14,780 --> 00:32:17,680 Mergem să copiați 3 pe la a. 787 00:32:17,680 --> 00:32:20,040 Și toate acestea celelalte bloc de memorie, acest alte variabile 788 00:32:20,040 --> 00:32:22,640 numit va avea 3, precum și. 789 00:32:22,640 --> 00:32:23,580 Asta face sens? 790 00:32:23,580 --> 00:32:24,780 791 00:32:24,780 --> 00:32:25,794 Da? 792 00:32:25,794 --> 00:32:31,008 >> STUDENT: Dacă da cinci ca îl ai ca număr întreg x în loc de a, 793 00:32:31,008 --> 00:32:32,910 ar stabili că totul? 794 00:32:32,910 --> 00:32:36,290 >> Binky: Dacă este un integer-- nu, care nu ar rezolva totul. 795 00:32:36,290 --> 00:32:37,590 Deci, asta este o întrebare foarte bună. 796 00:32:37,590 --> 00:32:40,480 Nu contează cu adevărat ce te sun aceste variabile. 797 00:32:40,480 --> 00:32:44,510 Din nou, aceasta va fi o chestiune de domeniul de aplicare, pentru că ei nu sunt în același x. 798 00:32:44,510 --> 00:32:46,526 Sunt complet diferite spații din memorie. 799 00:32:46,526 --> 00:32:47,400 STUDENT: [inaudibil]. 800 00:32:47,400 --> 00:32:49,020 Binky: Deci nu prea conteaza ceea ce le numim. 801 00:32:49,020 --> 00:32:50,480 Care nu se rezolvă lucrurile, bine? 802 00:32:50,480 --> 00:32:53,390 803 00:32:53,390 --> 00:32:54,430 Mai multe intrebari? 804 00:32:54,430 --> 00:32:55,762 Da? 805 00:32:55,762 --> 00:32:58,498 >> STUDENT: Cum este înapoi la Numărul cinci [inaudibil]? 806 00:32:58,498 --> 00:32:59,661 807 00:32:59,661 --> 00:33:01,160 Binky: OK, nu am făcut asta încă. 808 00:33:01,160 --> 00:33:03,432 Să mergem la numărul cinci, atunci. 809 00:33:03,432 --> 00:33:04,650 >> STUDENT: [inaudibil]? 810 00:33:04,650 --> 00:33:05,565 >> Binky: Ce? 811 00:33:05,565 --> 00:33:08,179 >> STUDENT: Ai un retur la toate? 812 00:33:08,179 --> 00:33:09,970 Binky: Noi nu avem o întoarcere, nu de principal. 813 00:33:09,970 --> 00:33:12,940 Dar principalele întoarce 0 în mod automat dacă nu se întorc nimic. 814 00:33:12,940 --> 00:33:14,400 815 00:33:14,400 --> 00:33:15,188 Da? 816 00:33:15,188 --> 00:33:22,658 >> STUDENT: Ai putea face main-- sau ai putea face la cinci întoarcere o? 817 00:33:22,658 --> 00:33:24,170 818 00:33:24,170 --> 00:33:27,990 >> Binky: Am putea avea la cinci returna o, da. 819 00:33:27,990 --> 00:33:32,527 Dar atunci ar trebui să atribui x este egal cu valoarea de returnare de la cinci, 820 00:33:32,527 --> 00:33:34,360 ceea ce ar fi o ușoară diferit de program. 821 00:33:34,360 --> 00:33:35,440 Aceasta ar funcționa. 822 00:33:35,440 --> 00:33:38,730 Dar ceea ce vrem să facem este ceea ce este numita schimbare ceva în loc. 823 00:33:38,730 --> 00:33:41,690 Așa că vrem să efectiv schimba cutia și nu vă faceți griji 824 00:33:41,690 --> 00:33:44,390 despre a fi nevoie să se întoarcă valorile sau orice. 825 00:33:44,390 --> 00:33:44,890 OK? 826 00:33:44,890 --> 00:33:46,490 827 00:33:46,490 --> 00:33:50,150 >> Acest lucru este la fel ca funcția de swap David a arătat în curs, cu excepția eu sunt 828 00:33:50,150 --> 00:33:51,740 numai de-a face cu o variabilă. 829 00:33:51,740 --> 00:33:55,960 Și el a folosit două, deci int a și b și apoi variabilă și fleacuri temporar. 830 00:33:55,960 --> 00:33:57,020 OK? 831 00:33:57,020 --> 00:33:58,070 Deci, care este ultima linie? 832 00:33:58,070 --> 00:34:04,400 După ce a cinci întoarce, e pur și simplu a este de gând să plece. 833 00:34:04,400 --> 00:34:06,120 834 00:34:06,120 --> 00:34:10,179 Noi nu va mai avea o, și numai x va trăi în continuare pe. 835 00:34:10,179 --> 00:34:12,130 >> Și ghici ce? X nu a schimbat valoarea sa, 836 00:34:12,130 --> 00:34:15,520 la urma urmei, pentru că suntem numai modificarea valorii unui. 837 00:34:15,520 --> 00:34:17,370 De aceea a fost de 3 x pe tot parcursul. 838 00:34:17,370 --> 00:34:17,870 OK? 839 00:34:17,870 --> 00:34:20,195 840 00:34:20,195 --> 00:34:21,130 Bun. 841 00:34:21,130 --> 00:34:23,560 Deci, acest program nu realiza ceea ce ne-am dorit. 842 00:34:23,560 --> 00:34:24,760 Acum, haideți să-l repara. 843 00:34:24,760 --> 00:34:27,440 >> Și programul fix este folosind indicatori. 844 00:34:27,440 --> 00:34:32,300 Ceea ce facem este, avem trei linii care sunt diferite. 845 00:34:32,300 --> 00:34:34,020 Primii este nu ne trece de x. 846 00:34:34,020 --> 00:34:35,535 Ne trece adresa lui x. 847 00:34:35,535 --> 00:34:37,330 848 00:34:37,330 --> 00:34:40,876 Deci, în loc să copiem valoarea centru, 849 00:34:40,876 --> 00:34:42,500 Sunt încă de gând să copiați ceva. 850 00:34:42,500 --> 00:34:45,380 Dar eu sunt copierea peste adresa de la cutie. 851 00:34:45,380 --> 00:34:48,780 >> Deci, dacă am trece adresa caseta de la cinci, apoi la cinci 852 00:34:48,780 --> 00:34:51,560 va fi capabil să găsească că în memorie și modifica valoarea. 853 00:34:51,560 --> 00:34:53,980 854 00:34:53,980 --> 00:34:59,580 >> Deci, și apoi acolo, am că un nu mai este o int. 855 00:34:59,580 --> 00:35:00,882 o este o stea int. 856 00:35:00,882 --> 00:35:02,090 Este un pointer la un întreg. 857 00:35:02,090 --> 00:35:03,790 858 00:35:03,790 --> 00:35:07,310 Și apoi, pentru că eu sunt asociate aborda aici, iar apoi ceea ce fac 859 00:35:07,310 --> 00:35:10,530 nu este o este egal cu 5, deoarece o deține o adresă. 860 00:35:10,530 --> 00:35:16,710 Deci, ceea ce vreau să fac este să mergeți acolo și actualiza conținutul acestei adrese 861 00:35:16,710 --> 00:35:18,305 cu 5. 862 00:35:18,305 --> 00:35:21,130 >> OK, deci hai să mergem prin toate liniile unul câte unul. 863 00:35:21,130 --> 00:35:22,410 864 00:35:22,410 --> 00:35:26,024 Așa că atunci când am început aici, m-am încă mai păstrează N / A, N / A, N / A 865 00:35:26,024 --> 00:35:28,440 pentru tot ceea ce în primul line, pentru că nu avea într-adevăr 866 00:35:28,440 --> 00:35:29,390 a declarat chestii încă. 867 00:35:29,390 --> 00:35:30,980 868 00:35:30,980 --> 00:35:35,110 Și apoi linia doi, am x este egal cu 3. 869 00:35:35,110 --> 00:35:38,020 O stea int-o nu există, același lucru ca și mai înainte. 870 00:35:38,020 --> 00:35:39,160 871 00:35:39,160 --> 00:35:40,640 >> Acum devine interesant. 872 00:35:40,640 --> 00:35:42,300 Așa că am de gând să treacă. 873 00:35:42,300 --> 00:35:45,720 Și să presupunem că adresa de x este de 12 în hexazecimal. 874 00:35:45,720 --> 00:35:46,880 875 00:35:46,880 --> 00:35:48,420 Să presupunem asta. 876 00:35:48,420 --> 00:35:49,221 L-am alcătuit. 877 00:35:49,221 --> 00:35:51,680 878 00:35:51,680 --> 00:35:53,500 Deci, ce caut eu aici este un mod de a cinci. 879 00:35:53,500 --> 00:35:54,460 Am trece de 12. 880 00:35:54,460 --> 00:35:56,390 881 00:35:56,390 --> 00:35:58,610 >> Deci, ce valoare are o avea? 882 00:35:58,610 --> 00:36:04,785 883 00:36:04,785 --> 00:36:06,210 >> STUDENT: [inaudibil]. 884 00:36:06,210 --> 00:36:06,950 >> Binky: Îmi pare rău? 885 00:36:06,950 --> 00:36:08,145 >> STUDENT: [inaudibil]. 886 00:36:08,145 --> 00:36:10,520 Binky: Da, cum ar fi, de a permite presupunem că suntem aici, acum. 887 00:36:10,520 --> 00:36:11,540 888 00:36:11,540 --> 00:36:12,040 Eu cer. 889 00:36:12,040 --> 00:36:12,915 >> STUDENT: [inaudibil]. 890 00:36:12,915 --> 00:36:13,590 891 00:36:13,590 --> 00:36:14,890 >> Binky: Acesta a fost inițiat. 892 00:36:14,890 --> 00:36:15,860 >> STUDENT: [inaudibil]. 893 00:36:15,860 --> 00:36:17,985 Binky: Pentru că am trecut ceva la funcția. 894 00:36:17,985 --> 00:36:19,431 895 00:36:19,431 --> 00:36:19,930 Da? 896 00:36:19,930 --> 00:36:20,899 >> STUDENT: Adresa de x. 897 00:36:20,899 --> 00:36:22,690 Binky: O să au adresa lui x. 898 00:36:22,690 --> 00:36:25,800 Și adresa lui x este de 12, bine. 899 00:36:25,800 --> 00:36:30,990 Deci, X va fi de 3, pentru că nu ne-am schimbat cu adevărat x încă. 900 00:36:30,990 --> 00:36:36,700 Și apoi o va fi 0x12, așa adresa de x, pentru că asta e 901 00:36:36,700 --> 00:36:38,840 ceea ce am trecut de la cinci. 902 00:36:38,840 --> 00:36:40,940 >> Și apoi ce se întâmplă dacă vom încerca să mergem acolo? 903 00:36:40,940 --> 00:36:42,145 Ce vom găsi? 904 00:36:42,145 --> 00:36:47,120 Deci, dacă încercați să imprimați stea un, vom urma această adresă 905 00:36:47,120 --> 00:36:48,620 și pentru a obține valoarea înăuntru. 906 00:36:48,620 --> 00:36:50,470 Iar valoarea este doar aceeași valoare ca x 907 00:36:50,470 --> 00:36:53,980 are pentru că asta e adresa x, care va fi de 3. 908 00:36:53,980 --> 00:36:55,440 909 00:36:55,440 --> 00:36:56,930 Suntem bine? 910 00:36:56,930 --> 00:36:59,990 >> OK, iar apoi acum, vom merge de fapt acolo. 911 00:36:59,990 --> 00:37:05,510 Și noi actualiza orice este în acest adresă 12. 912 00:37:05,510 --> 00:37:07,390 Am 5 face. 913 00:37:07,390 --> 00:37:10,560 Deci, acum, atât x și stea o sunt de 5. 914 00:37:10,560 --> 00:37:13,170 915 00:37:13,170 --> 00:37:13,680 >> De ce este asta? 916 00:37:13,680 --> 00:37:17,070 Deoarece adresa lui x este 12. 917 00:37:17,070 --> 00:37:20,920 Și o are, de asemenea, de 12 ca valoarea sa. 918 00:37:20,920 --> 00:37:23,780 Deci, dacă urmăm 12, suntem doar de gând să găsească de x. 919 00:37:23,780 --> 00:37:27,400 Deci, orice am face cu stea o să se întâmple 920 00:37:27,400 --> 00:37:30,790 pentru x, deoarece o conține adresa lui x. 921 00:37:30,790 --> 00:37:31,918 922 00:37:31,918 --> 00:37:32,418 OK? 923 00:37:32,418 --> 00:37:34,090 924 00:37:34,090 --> 00:37:37,750 >> Și acest lucru este ca esența fix. 925 00:37:37,750 --> 00:37:41,500 Deci, acum suntem capabili, de la până la cinci, de fapt, 926 00:37:41,500 --> 00:37:43,840 memorie cu acces care a trăit în principal. 927 00:37:43,840 --> 00:37:47,980 Deci, această memorie nu trăiește în a cinci, la fel ca înainte, această adresă 12. 928 00:37:47,980 --> 00:37:50,980 Și noi am fost capabil de a merge acolo și schimbați valoarea la 5. 929 00:37:50,980 --> 00:37:53,990 >> Și apoi, când ne vom întoarce, am uitat despre o. 930 00:37:53,990 --> 00:37:55,720 Am uita de stea o. 931 00:37:55,720 --> 00:37:57,020 Și x este încă cinci. 932 00:37:57,020 --> 00:37:58,327 933 00:37:58,327 --> 00:38:00,160 Deci, dacă doriți să să pună în aplicare o funcție de schimb, 934 00:38:00,160 --> 00:38:05,010 v-ar face doar exact același lucru, cu excepția aveți nevoie pentru a int stars aici, 935 00:38:05,010 --> 00:38:06,140 și așa mai departe și așa mai departe. 936 00:38:06,140 --> 00:38:06,976 OK? 937 00:38:06,976 --> 00:38:07,475 Suntem bine? 938 00:38:07,475 --> 00:38:09,860 939 00:38:09,860 --> 00:38:10,610 Rece. 940 00:38:10,610 --> 00:38:12,410 >> Deci, pointer aritmetică. 941 00:38:12,410 --> 00:38:13,960 Acesta este un subiect ușor complicat. 942 00:38:13,960 --> 00:38:16,554 Deci, se dovedește că indicii sunt doar numere întregi. 943 00:38:16,554 --> 00:38:17,970 Vă puteți gândi la ele ca numere întregi. 944 00:38:17,970 --> 00:38:21,080 Pentru că în memorie, trebuie ca memorie adresă zero, unu, doi, trei, 945 00:38:21,080 --> 00:38:21,900 patru, cinci. 946 00:38:21,900 --> 00:38:23,900 Deci, putem rezuma adrese de memorie. 947 00:38:23,900 --> 00:38:27,230 >> Și asta este, de obicei, ceea ce faci, atunci când ești și matrice, de exemplu. 948 00:38:27,230 --> 00:38:30,540 O matrice este la fel ca un contiguă bloc de memorie, de o mulțime de caractere, 949 00:38:30,540 --> 00:38:31,840 de exemplu, o mulțime de int. 950 00:38:31,840 --> 00:38:34,420 Deci, dacă vrei să mergi la doilea int sau a treia int, 951 00:38:34,420 --> 00:38:37,830 puteți rezuma doar ceva la prima adresă, și vei ajunge acolo. 952 00:38:37,830 --> 00:38:39,620 Deci, acest lucru este foarte util pentru asta. 953 00:38:39,620 --> 00:38:41,850 >> Și de lucru pentru a păstra în minte, deși, este 954 00:38:41,850 --> 00:38:45,140 că nu e la fel ca aritmetică normală în sensul 955 00:38:45,140 --> 00:38:50,304 că dacă ai de a face cu, să zicem, o stea int, și adăugați 1 la acesta, 956 00:38:50,304 --> 00:38:52,220 atunci nu vei pentru a adăuga 1 la adresa, 957 00:38:52,220 --> 00:38:53,950 ai de gând să adăugați 4 la adresa. 958 00:38:53,950 --> 00:38:55,030 959 00:38:55,030 --> 00:38:56,670 Pentru ca un int este de 4 octeți. 960 00:38:56,670 --> 00:38:57,720 961 00:38:57,720 --> 00:38:59,540 >> Deci, acest lucru este la fel ca mersul pe jos pe o matrice. 962 00:38:59,540 --> 00:39:05,260 Dacă avem o serie de o mulțime de int și apoi vom încerca să mergem la cea de a doua, 963 00:39:05,260 --> 00:39:08,790 este practic doar însumarea Adresa de primul plus 1. 964 00:39:08,790 --> 00:39:10,040 965 00:39:10,040 --> 00:39:13,425 Dar care nu va be-- doar să spunem că adresa primului este de 4. 966 00:39:13,425 --> 00:39:14,560 967 00:39:14,560 --> 00:39:16,250 Aici, în acest caz. 968 00:39:16,250 --> 00:39:19,780 969 00:39:19,780 --> 00:39:22,850 Și dacă ne-am rezuma, astfel încât aceasta este ceea ce se întâmplă. 970 00:39:22,850 --> 00:39:23,530 Avem un întreg. 971 00:39:23,530 --> 00:39:25,640 Int x este egal cu 5. 972 00:39:25,640 --> 00:39:26,950 X are o valoare de 5. 973 00:39:26,950 --> 00:39:31,240 Și am inițializa acest pointer, int y y stea int este egală cu adresa de x. 974 00:39:31,240 --> 00:39:33,660 >> Să presupunem adresa lui x este 4. 975 00:39:33,660 --> 00:39:36,960 Ce se va întâmpla acum dacă aș sumă se adaugă 1 la y? 976 00:39:36,960 --> 00:39:39,110 977 00:39:39,110 --> 00:39:44,790 O să efectiv sumă 4 în loc de doar 1. 978 00:39:44,790 --> 00:39:50,920 Așa că am adăuga un 1, dar de fapt adăugat 4, deoarece computerul lui inteligent. 979 00:39:50,920 --> 00:39:55,275 Deci, se va adăuga de fapt, de i ori mărimea tipul pointerului. 980 00:39:55,275 --> 00:39:56,340 981 00:39:56,340 --> 00:39:56,840 OK? 982 00:39:56,840 --> 00:39:58,030 983 00:39:58,030 --> 00:40:02,440 >> Deci, dacă ar fi fost un char, de exemplu, în cazul în care aceasta a fost o stea y char, 984 00:40:02,440 --> 00:40:07,141 și dacă am adaugat 1, atunci acest lucru ar fie de 5, pentru că char este de 1 octet lung. 985 00:40:07,141 --> 00:40:07,640 Bun? 986 00:40:07,640 --> 00:40:10,560 987 00:40:10,560 --> 00:40:13,190 >> Și, în sfârșit, am ajuns la indicii și tablouri. 988 00:40:13,190 --> 00:40:16,451 Se pare că de fiecare dată ai de a face cu o serie, 989 00:40:16,451 --> 00:40:18,075 esti de fapt de-a face cu un pointer. 990 00:40:18,075 --> 00:40:19,720 991 00:40:19,720 --> 00:40:24,777 Foarte frumos motiv conceptual pentru acest lucru este faptul că matricile sunt foarte mari. 992 00:40:24,777 --> 00:40:27,360 Deci, amintiți-vă că am spus că de fiecare dată când treci lucruri în jurul valorii de, 993 00:40:27,360 --> 00:40:29,097 copiați totul. 994 00:40:29,097 --> 00:40:31,180 Deci, dacă aveți un tablou asta e foarte, foarte mare, 995 00:40:31,180 --> 00:40:32,990 nu vrei cu adevărat să copia tot de fiecare dată 996 00:40:32,990 --> 00:40:35,710 voi să-l dați în jurul valorii de la un alt funcție, pentru că asta e doar 997 00:40:35,710 --> 00:40:37,190 cantități masive de muncă. 998 00:40:37,190 --> 00:40:39,710 Deci, ceea ce faci este doar dribleze adresa primului octet. 999 00:40:39,710 --> 00:40:40,969 1000 00:40:40,969 --> 00:40:44,010 Și atunci funcția va avea acces pentru toate elementele din care matrice. 1001 00:40:44,010 --> 00:40:48,670 Deci ai trecut de matrice de adresa sa, astfel adresa primului octet. 1002 00:40:48,670 --> 00:40:53,010 >> Deci, dacă ne-am declara int matrice 3, aici, știm 1003 00:40:53,010 --> 00:40:57,470 cum pentru a accesa primul element folosind notația suport. 1004 00:40:57,470 --> 00:41:02,410 Dacă vă amintiți suportul notație, suport matrice 0 este egal cu 1. 1005 00:41:02,410 --> 00:41:06,330 Ei bine, acest lucru ar fi exact la fel ca du-te acolo și a pus 1. 1006 00:41:06,330 --> 00:41:07,370 1007 00:41:07,370 --> 00:41:09,110 OK, este exact același lucru. 1008 00:41:09,110 --> 00:41:13,010 Deci, notația suport aici va fi la fel ca această linie. 1009 00:41:13,010 --> 00:41:18,600 >> Si ghici ce notația suport pentru suportul matrice 1 va fi? 1010 00:41:18,600 --> 00:41:20,440 Acesta va fi doar același lucru ca și aceasta. 1011 00:41:20,440 --> 00:41:22,500 Deci, adaugă unul la matrice. 1012 00:41:22,500 --> 00:41:24,370 Muta o de-a lungul în memorie. 1013 00:41:24,370 --> 00:41:26,310 Du-te acolo, și a pus-o de 2. 1014 00:41:26,310 --> 00:41:28,050 1015 00:41:28,050 --> 00:41:28,579 OK? 1016 00:41:28,579 --> 00:41:29,870 Și aceasta linie e același lucru. 1017 00:41:29,870 --> 00:41:34,860 Vrem să mergem la a treia box, așa matrice plus 2. 1018 00:41:34,860 --> 00:41:37,465 Du-te acolo, și a pus un 3. 1019 00:41:37,465 --> 00:41:39,340 Deci, în memorie, ceea ce este o să se întâmple este că suntem 1020 00:41:39,340 --> 00:41:44,400 Va trebui 1, 2, și 3, trei elemente ale acestui tablou. 1021 00:41:44,400 --> 00:41:46,970 >> Am fi putut face acest lucru cu ajutorul nostru notație suport familiar. 1022 00:41:46,970 --> 00:41:49,410 Vreau doar ca voi să știți că ele sunt același lucru. 1023 00:41:49,410 --> 00:41:50,530 1024 00:41:50,530 --> 00:41:53,010 OK, întrebări cu privire la acest lucru? 1025 00:41:53,010 --> 00:41:56,115 1026 00:41:56,115 --> 00:41:56,615 Frumos. 1027 00:41:56,615 --> 00:41:57,990 1028 00:41:57,990 --> 00:41:59,880 Acum, am de gând să predea l pe Hannah, 1029 00:41:59,880 --> 00:42:00,330 >> HANNAH: Yay, yee-haw. 1030 00:42:00,330 --> 00:42:02,246 >> Binky: Vorbind despre memorie și articol chestii. 1031 00:42:02,246 --> 00:42:06,554 [Aplauze] 1032 00:42:06,554 --> 00:42:10,150 >> HANNAH: Bună, rece, deci suntem de gând să vorbesc un pic mai mult 1033 00:42:10,150 --> 00:42:13,090 despre memorie, pe care tocmai am adresat folosind indicii. 1034 00:42:13,090 --> 00:42:16,060 Deci, există două părți principale ale de memorie care suntem preocupați de. 1035 00:42:16,060 --> 00:42:18,830 Avem stivei, care crește în partea de jos, și grămada, care 1036 00:42:18,830 --> 00:42:20,600 se duce în jos din partea de sus. 1037 00:42:20,600 --> 00:42:24,690 Iar stiva este de gând să dețină toate variabilele instanță. 1038 00:42:24,690 --> 00:42:28,860 Deci, fiecare cheamă la o funcție devine propriul cadru mic pe stiva. 1039 00:42:28,860 --> 00:42:32,160 Deci, ca Gabe menționat mai devreme, dacă ne-am suna din nou și din nou funcția, 1040 00:42:32,160 --> 00:42:34,180 vom stiva lucrurile pe stivă. 1041 00:42:34,180 --> 00:42:35,220 1042 00:42:35,220 --> 00:42:38,570 >> Și în mod similar, heap, care începe de la partea de sus 1043 00:42:38,570 --> 00:42:42,660 va deține întreg spaþiul de memorie pe care le aloca dinamic. 1044 00:42:42,660 --> 00:42:45,110 Și așa cum am dinamic aloca memorie, 1045 00:42:45,110 --> 00:42:47,580 acest lucru va veni în jos spre partea de jos. 1046 00:42:47,580 --> 00:42:51,340 Lucrurile cuplu să fie conștienți de când suntem utilizând stiva si heap, 1047 00:42:51,340 --> 00:42:55,200 cu stiva, dacă avem prea many-- să say-- apeluri recursive, 1048 00:42:55,200 --> 00:42:58,392 și ne suni din nou o funcție, și din nou, și din nou, și din nou, 1049 00:42:58,392 --> 00:43:00,350 și este stivuirea în sus, stivuirea în sus, stivuire sus. 1050 00:43:00,350 --> 00:43:01,570 Și o să se prăbușească în grămada. 1051 00:43:01,570 --> 00:43:03,040 Ne vom alerga afară de memorie. 1052 00:43:03,040 --> 00:43:05,100 Asta va duce la o problemă pentru calculator. 1053 00:43:05,100 --> 00:43:06,770 Și asta se numește overflow stack. 1054 00:43:06,770 --> 00:43:09,728 Deci, asta e cu siguranta ai ceva ar trebui să fie conștienți și să încerce să evite. 1055 00:43:09,728 --> 00:43:10,228 1056 00:43:10,228 --> 00:43:14,050 Și heap, trebuie să vă amintiți nu la scurgeri accidental de memorie. 1057 00:43:14,050 --> 00:43:17,950 Orice dată când utilizați malloc, nu face uita pentru a elibera acea memorie. 1058 00:43:17,950 --> 00:43:20,040 În caz contrar, ea va doar fie pe grămada de pierdut, 1059 00:43:20,040 --> 00:43:23,230 iar calculatorul nu va ști că este libertatea de a folosi acea memorie. 1060 00:43:23,230 --> 00:43:25,810 Deci, acestea sunt câteva lucruri să fie foarte atenți atunci când cu 1061 00:43:25,810 --> 00:43:28,580 ai de a face cu stiva si heap. 1062 00:43:28,580 --> 00:43:30,412 Orice întrebări cu asta? 1063 00:43:30,412 --> 00:43:31,304 Minunat. 1064 00:43:31,304 --> 00:43:31,900 >> OK, rece. 1065 00:43:31,900 --> 00:43:32,940 1066 00:43:32,940 --> 00:43:36,810 Deci, acest tip de are aceeași Ideea ca overflow stack, în cazul în care 1067 00:43:36,810 --> 00:43:39,850 mergem dincolo limitele a ceea ce memorie 1068 00:43:39,850 --> 00:43:41,960 este că ar trebui să fie în măsură de a utiliza. 1069 00:43:41,960 --> 00:43:45,077 Astfel încât să ia, de exemplu, un tampon, sau ar putea gândi doar la ea ca la o matrice. 1070 00:43:45,077 --> 00:43:47,660 Iar noi am spus, OK, vom a crea acest tablou drăguț. 1071 00:43:47,660 --> 00:43:49,140 O să fie un șir. 1072 00:43:49,140 --> 00:43:50,630 Sau se va stoca caractere. 1073 00:43:50,630 --> 00:43:51,720 Și este doar de gând să salute. 1074 00:43:51,720 --> 00:43:52,678 Și este nedeterminată. 1075 00:43:52,678 --> 00:43:53,990 Asta e tot. 1076 00:43:53,990 --> 00:43:58,240 >> Dar dacă aș fi fost cineva rău și a vrut să face ceva rău cu această matrice, ceea ce 1077 00:43:58,240 --> 00:44:02,310 Aș putea face este să încerce să scrie trecutul sfârșitul șirului. 1078 00:44:02,310 --> 00:44:04,490 Și, după cum veți vedea, dacă Eu scriu destul de departe, 1079 00:44:04,490 --> 00:44:06,980 Eu pot afecta de fapt adresa de întoarcere. 1080 00:44:06,980 --> 00:44:09,530 Și dacă am începe să afecteze adresa de întoarcere, 1081 00:44:09,530 --> 00:44:11,730 Am afectează modul în care programul se execută de fapt. 1082 00:44:11,730 --> 00:44:15,900 Și în loc de a se întoarce, voi Știi, un șir fericit ca salut, am 1083 00:44:15,900 --> 00:44:19,460 ar putea face ceva rău, ca du-te la în altă parte în calculatorul dumneavoastră, încă 1084 00:44:19,460 --> 00:44:22,146 memorie, schimba, tot ce vreau să fac. 1085 00:44:22,146 --> 00:44:25,020 Deci, asta e ceea ce acest lucru ar arăta este, dacă am doar un fel de a umplut sus 1086 00:44:25,020 --> 00:44:27,400 cu valoare gunoi aleatoare, în acest caz, doar o. 1087 00:44:27,400 --> 00:44:30,490 Și apoi, când de fapt am Trebuie să adresa de memorie, 1088 00:44:30,490 --> 00:44:33,740 Am început să-l umple cu ceva că a făcut ceea ce am vrut să fac. 1089 00:44:33,740 --> 00:44:34,952 1090 00:44:34,952 --> 00:44:36,410 Orice întrebări cu buffer overflow? 1091 00:44:36,410 --> 00:44:38,450 1092 00:44:38,450 --> 00:44:40,730 Minunat, chiar zboară prin chestia asta. 1093 00:44:40,730 --> 00:44:43,530 >> OK, așa că am vorbit foarte mult de despre pointer cu Gabe. 1094 00:44:43,530 --> 00:44:45,790 Cum ajungem de fapt un pointer? 1095 00:44:45,790 --> 00:44:48,070 Cum putem obține o adresă în memorie? 1096 00:44:48,070 --> 00:44:51,040 Ei bine, putem folosi acest frumos Funcția malloc apel, care 1097 00:44:51,040 --> 00:44:53,370 este mergi la a lua o bucățică de memorie, 1098 00:44:53,370 --> 00:44:55,480 în mod special în grămadă, așa cum am discutat, 1099 00:44:55,480 --> 00:44:59,780 și o să vă dau înapoi un pointer la acea adresă în memorie. 1100 00:44:59,780 --> 00:45:01,950 Și argumentul pe care le trebuie să dea la malloc 1101 00:45:01,950 --> 00:45:04,280 este cât de mult spațiu în memorie ne-o dorim. 1102 00:45:04,280 --> 00:45:06,100 >> Deci, puteți vedea dimensiunea în octet. 1103 00:45:06,100 --> 00:45:08,670 Să spunem, de exemplu, sau de fapt, în acest exemplu, 1104 00:45:08,670 --> 00:45:12,040 ne-am aloca suficient spațiu pentru 10 de numere întregi. 1105 00:45:12,040 --> 00:45:15,640 Deci, probabil, ceea ce vom dori pentru a pune aici este o serie de 10 de numere întregi. 1106 00:45:15,640 --> 00:45:19,641 Deci, ne-am da o dimensiune de int, care ne-am învățat a fost cum de multe bytes? 1107 00:45:19,641 --> 00:45:20,140 STUDENT: 4. 1108 00:45:20,140 --> 00:45:22,920 HANNAH: 4, frumos, și noi anunt 10 din cei într-un rând, 1109 00:45:22,920 --> 00:45:28,050 astfel încât să avem suficient spațiu pentru a stoca toate cele 10 numere întregi, în acest caz. 1110 00:45:28,050 --> 00:45:31,290 Ceva super-importante, orice moment te sun malloc, 1111 00:45:31,290 --> 00:45:32,880 va trebui să verificați pentru nul. 1112 00:45:32,880 --> 00:45:37,310 Daca nu verifica pentru nul, ei bine, malloc în cazul în care rămâne fără spațiu 1113 00:45:37,310 --> 00:45:40,400 și nu vă mai poate da nici o mai mult de memorie, se va intoarce null. 1114 00:45:40,400 --> 00:45:42,060 1115 00:45:42,060 --> 00:45:45,630 Deci, dacă nu verifica, malloc poate reveni nul. 1116 00:45:45,630 --> 00:45:51,265 Și apoi, dacă vom încerca să dereference un pointer nul, 1117 00:45:51,265 --> 00:45:54,960 vom obține o eroare de segmentare, care vom vorbi despre acum. 1118 00:45:54,960 --> 00:45:56,150 1119 00:45:56,150 --> 00:45:56,650 Minunat. 1120 00:45:56,650 --> 00:45:58,300 >> OK, întrebări cu malloc? 1121 00:45:58,300 --> 00:46:00,044 1122 00:46:00,044 --> 00:46:00,544 Da? 1123 00:46:00,544 --> 00:46:05,460 >> STUDENT: Are control null [Inaudibil] nu-l fac pe testul de? 1124 00:46:05,460 --> 00:46:08,100 >> HANNAH: Sigur, întrebarea a fost nu-l matter-- pe test, 1125 00:46:08,100 --> 00:46:10,420 vei primi puncte de pe dacă tu nu verifica pentru nul? 1126 00:46:10,420 --> 00:46:12,794 Da, veți primi puncte de pe dacă nu verificați pentru nul. 1127 00:46:12,794 --> 00:46:16,030 De fiecare data cand suna malloc, atât pe test și psets si in viata reala, 1128 00:46:16,030 --> 00:46:17,155 va trebui să verificați pentru nul. 1129 00:46:17,155 --> 00:46:18,330 Bună întrebare. 1130 00:46:18,330 --> 00:46:19,689 >> Gabe: Ce se întâmplă dacă nu-mi desprindă? 1131 00:46:19,689 --> 00:46:21,730 HANNAH: Gabe vrea să știe ce se întâmplă dacă nu o facem gratuit. 1132 00:46:21,730 --> 00:46:25,030 Atunci vom avea o scurgere de memorie în heap nostru. 1133 00:46:25,030 --> 00:46:26,140 Orice alte intrebari? 1134 00:46:26,140 --> 00:46:27,550 Da? 1135 00:46:27,550 --> 00:46:30,120 >> STUDENT: Poate Tu-- trece peste buffer overflow foarte repede din nou? 1136 00:46:30,120 --> 00:46:30,530 >> HANNAH: Sigur. 1137 00:46:30,530 --> 00:46:33,071 Întrebarea era putem trece peste buffer overflow foarte repede. 1138 00:46:33,071 --> 00:46:35,050 Să ne întoarcem la acele slide-uri. 1139 00:46:35,050 --> 00:46:37,430 Deci, un tampon, puteți pur și simplu cred ca e un tablou, nu? 1140 00:46:37,430 --> 00:46:39,360 Ai un spațiu în memorie. 1141 00:46:39,360 --> 00:46:43,580 Și când vom crea în primul rând oferta noastră, știm tablouri au dimensiune fixă, 1142 00:46:43,580 --> 00:46:45,470 sau tampon noastră are o dimensiune fixă. 1143 00:46:45,470 --> 00:46:51,360 >> Deci, să spunem că, în acest caz, avem doar suficient spațiu pentru a scrie șirul de salut. 1144 00:46:51,360 --> 00:46:57,340 Dacă ne sa dribleze pe care legat, dacă mergem dribleze ce oferta noastră ne-au spus că ar putea deține, 1145 00:46:57,340 --> 00:46:59,780 am putea începe de fapt scris în memorie 1146 00:46:59,780 --> 00:47:01,780 care computerul nu ca noi să scrie în. 1147 00:47:01,780 --> 00:47:02,810 1148 00:47:02,810 --> 00:47:05,580 Și în mod special, dacă ne-am lovit ceva de genul revenirea 1149 00:47:05,580 --> 00:47:08,700 Adresa funcție, care, la fel ca orice altă piesă de memorie, 1150 00:47:08,700 --> 00:47:11,420 este doar undeva în ta calculator, puteți de fapt 1151 00:47:11,420 --> 00:47:14,080 schimba asta și începe să facă lucruri rele. 1152 00:47:14,080 --> 00:47:15,272 Răspunde la întrebarea dumneavoastră? 1153 00:47:15,272 --> 00:47:16,230 Awesome, altceva? 1154 00:47:16,230 --> 00:47:17,466 Da? 1155 00:47:17,466 --> 00:47:21,948 >> STUDENT: Deci stivă [inaudibil], tu a declarat merge de la partea de jos a merge în sus. 1156 00:47:21,948 --> 00:47:25,434 În raza de stivă, nu memoria merge de la, cum ar fi, 1157 00:47:25,434 --> 00:47:27,230 de sus în jos referitoare la fiecare pauză? 1158 00:47:27,230 --> 00:47:28,646 1159 00:47:28,646 --> 00:47:32,100 >> HANNAH: Cum Tu-- amâna pentru Rob pe asta. 1160 00:47:32,100 --> 00:47:35,370 1161 00:47:35,370 --> 00:47:38,213 >> ROB: Aceasta va crește în aceeași direcție ca stiva creste. 1162 00:47:38,213 --> 00:47:38,712 HANNAH: OK. 1163 00:47:38,712 --> 00:47:40,967 ROB: Așa că am obține confuz. 1164 00:47:40,967 --> 00:47:42,331 Acest lucru va fi abstractizare. 1165 00:47:42,331 --> 00:47:42,831 HANNAH: OK. 1166 00:47:42,831 --> 00:47:44,000 ROB: Acest lucru este corect. 1167 00:47:44,000 --> 00:47:49,420 Deci, dacă stiva este în creștere în sus, apoi generally-- 1168 00:47:49,420 --> 00:47:52,380 nu trebuie să fie așa. dar se poate declara int x. 1169 00:47:52,380 --> 00:47:54,120 Apoi, declara int y. 1170 00:47:54,120 --> 00:47:57,300 Apoi, int x va fi, în general, mai mici de pe stiva decât int y. 1171 00:47:57,300 --> 00:47:59,300 Dar asta e doar un fapt. 1172 00:47:59,300 --> 00:48:02,410 Asta nu e ca un lucru important de semințe. 1173 00:48:02,410 --> 00:48:06,800 >> ROB: Deci, întrebarea din nou a fost doar ceea ce se întâmplă în fiecare cadru se acumulează. 1174 00:48:06,800 --> 00:48:08,960 Deci, fiecare funcție primește o mică bucată de stivei. 1175 00:48:08,960 --> 00:48:13,030 Și cum te duci în sus, în care bucățică, în acest cadru, 1176 00:48:13,030 --> 00:48:16,710 vom spune că variabilele în acest interval, de asemenea, a te deplasa. 1177 00:48:16,710 --> 00:48:17,473 Întrebare? 1178 00:48:17,473 --> 00:48:18,688 >> ROB: Doar pentru a fi la microfon. 1179 00:48:18,688 --> 00:48:19,396 HANNAH: Oh, da. 1180 00:48:19,396 --> 00:48:20,440 ROB: Voi vorbi în voi. 1181 00:48:20,440 --> 00:48:21,410 HANNAH: Oh, da, OK. 1182 00:48:21,410 --> 00:48:24,150 ROB: Excepția este pentru tablouri și structs, 1183 00:48:24,150 --> 00:48:27,470 în cazul în care tablouri, o mai mică index în matrice, 1184 00:48:27,470 --> 00:48:29,930 și în structs la mare câmp în structs 1185 00:48:29,930 --> 00:48:35,040 sunt garantate pentru a fi la adrese mai mici decât o valoare mai târziu în matrice. 1186 00:48:35,040 --> 00:48:36,720 Deci, cei care sunt garantate. 1187 00:48:36,720 --> 00:48:40,310 Dar variabile speciale, în, cum ar fi int x și y int într-o funcție, 1188 00:48:40,310 --> 00:48:43,030 nu există nici o relație necesară între adresele lor. 1189 00:48:43,030 --> 00:48:44,882 1190 00:48:44,882 --> 00:48:46,340 HANNAH: O altă întrebare pe aici? 1191 00:48:46,340 --> 00:48:51,620 STUDENT: Deci, în tampon flux, tampon numai preaplin 1192 00:48:51,620 --> 00:48:54,980 numai sa întâmplat atunci când au, cum ar fi, alocate 1193 00:48:54,980 --> 00:49:01,056 o cantitate dintr-un tablou că atunci este mai mare? 1194 00:49:01,056 --> 00:49:03,230 Ca, nu-i așa? 1195 00:49:03,230 --> 00:49:05,435 Deci, dacă sunteți cer ceva de la user-- 1196 00:49:05,435 --> 00:49:06,018 >> HANNAH: Mm-hm. 1197 00:49:06,018 --> 00:49:08,600 STUDENT: Poate ei cu forța îți dau ceva înapoi 1198 00:49:08,600 --> 00:49:11,777 care este mai mare decât orice le-ați alocat pentru ei? 1199 00:49:11,777 --> 00:49:13,610 HANNAH: Sigur, așa Întrebarea a fost practic, 1200 00:49:13,610 --> 00:49:16,217 poate utilizatorul să vă dau mai mult decât vă întreb pentru? 1201 00:49:16,217 --> 00:49:16,800 STUDENT: Da. 1202 00:49:16,800 --> 00:49:18,480 HANNAH: Ei bine, ai putea împiedica utilizatorul de la a face asta. 1203 00:49:18,480 --> 00:49:21,350 Ai putea spune specific nu da-mi mai mult de x numărul de bytes 1204 00:49:21,350 --> 00:49:24,330 Ți-am dat doar o cameră pentru număr x de bytes, x număr de caractere. 1205 00:49:24,330 --> 00:49:25,700 Deci, asta e ceva ce vrei pentru a preveni. 1206 00:49:25,700 --> 00:49:26,199 Da? 1207 00:49:26,199 --> 00:49:30,270 Care este diferența dintre Stack Overflow și buffer overflow? 1208 00:49:30,270 --> 00:49:32,140 >> HANNAH: OK, deci stiva overflow-- oh, ce 1209 00:49:32,140 --> 00:49:34,790 este diferența dintre stivă overflow și buffer overflow? 1210 00:49:34,790 --> 00:49:37,581 Așa că vrem să ne gândim de depășire stivă se întâmplă atunci când suntem de fapt 1211 00:49:37,581 --> 00:49:39,530 stivuire la aceste apeluri de funcții. 1212 00:49:39,530 --> 00:49:42,991 Să presupunem că aveți o funcție recursive, pentru că știm că de fiecare dată când 1213 00:49:42,991 --> 00:49:45,240 apela o funcție, e devine propriul cadru pe stivă. 1214 00:49:45,240 --> 00:49:47,950 >> Așa că am stivă prea mare, și apoi vom începe să se reverse. 1215 00:49:47,950 --> 00:49:50,530 Și vom folosi prea multă memorie, și nu ne-am lăsat nicăieri. 1216 00:49:50,530 --> 00:49:51,590 Ne-am această eroare. 1217 00:49:51,590 --> 00:49:53,930 >> Buffer overflow este în cadrul unui program. 1218 00:49:53,930 --> 00:49:57,180 Ne dorim să nu aibă neapărat a alerga afară de memorie în același fel 1219 00:49:57,180 --> 00:50:00,080 că am putea, dacă suntem stivuire up atât de multe apeluri de funcții, 1220 00:50:00,080 --> 00:50:04,540 dar am scrie singur cu memoria care stim ca putem folosi. 1221 00:50:04,540 --> 00:50:06,170 Și care ne permite să facem lucruri rele. 1222 00:50:06,170 --> 00:50:08,060 1223 00:50:08,060 --> 00:50:08,560 Da? 1224 00:50:08,560 --> 00:50:10,950 >> ROB: Da, ați putea dori să repete doar acest lucru, 1225 00:50:10,950 --> 00:50:12,699 dar puteți, de asemenea, gândi de o depășire stivă 1226 00:50:12,699 --> 00:50:15,374 ca ca un tip specific de buffer overflow. 1227 00:50:15,374 --> 00:50:17,665 Sau credeți că doar de dvs. stiva ca un tampon foarte mare. 1228 00:50:17,665 --> 00:50:20,724 Atunci când îneca ați stivă, e un fel de buffer overflow. 1229 00:50:20,724 --> 00:50:23,390 Dar o depășire stack este doar un termen specific utilizat atunci când stiva 1230 00:50:23,390 --> 00:50:24,310 se revarsă. 1231 00:50:24,310 --> 00:50:27,500 >> HANNAH: Dreptul, astfel încât să se repetă pentru video, 1232 00:50:27,500 --> 00:50:31,756 vă puteți gândi la Stack Overflow ca un tip specific de buffer overflow. 1233 00:50:31,756 --> 00:50:33,040 Rece? 1234 00:50:33,040 --> 00:50:34,562 Orice mai multe întrebări înainte de a merge mai departe? 1235 00:50:34,562 --> 00:50:35,380 1236 00:50:35,380 --> 00:50:35,880 Minunat. 1237 00:50:35,880 --> 00:50:37,130 1238 00:50:37,130 --> 00:50:39,727 >> OK, rece, deci hai sa vorbim despre unele mesaje de eroare comune. 1239 00:50:39,727 --> 00:50:42,060 Acest lucru este ceva care are apărut pe mai multe teste, 1240 00:50:42,060 --> 00:50:44,740 astfel ceva care este în valoare de a lua un al doilea privire la. 1241 00:50:44,740 --> 00:50:46,860 Sunt sigur că le-ați întâlnit cel puțin unele dintre acestea 1242 00:50:46,860 --> 00:50:48,690 cum faci problema ta seturi. 1243 00:50:48,690 --> 00:50:50,980 Deci, asigurați-vă că puteți vorbi despre ele pe testul. 1244 00:50:50,980 --> 00:50:52,990 >> Deci, prima este o eroare de segmentare. 1245 00:50:52,990 --> 00:50:55,250 Și asta e orice moment noi incercati sa accesati in memorie 1246 00:50:55,250 --> 00:50:57,130 că nu avem voie să acces. 1247 00:50:57,130 --> 00:51:00,280 Deci ai migh au văzut acest lucru, de exemplu, în ramificații. 1248 00:51:00,280 --> 00:51:03,390 În cazul în care detectează coliziune intoarce null, și apoi 1249 00:51:03,390 --> 00:51:05,500 a încercat să facă ceva cu care valoarea zero, 1250 00:51:05,500 --> 00:51:08,147 calculatorul ar da ai o eroare de segmentare. 1251 00:51:08,147 --> 00:51:10,730 Deci, un, un lucru important pentru face în scopul de a încerca să evite această 1252 00:51:10,730 --> 00:51:12,000 este de a verifica mereu pentru nul. 1253 00:51:12,000 --> 00:51:13,300 1254 00:51:13,300 --> 00:51:16,180 >> S-ar putea fi văzut, de asemenea, declarație implicită a funcției. 1255 00:51:16,180 --> 00:51:18,370 Deci, asta este ceea ce se întâmplă când Allison ți-a arătat 1256 00:51:18,370 --> 00:51:20,150 cum o face un prototip, nu? 1257 00:51:20,150 --> 00:51:23,440 Așa că haideți să spunem că avem niște Funcția pe care le definesc. 1258 00:51:23,440 --> 00:51:24,440 Să spunem cub. 1259 00:51:24,440 --> 00:51:27,120 Și trece în partea de jos de funcția noastră, în principal. 1260 00:51:27,120 --> 00:51:35,205 >> Dacă ne uităm să-i spuneți calculator despre cub, atunci când principalul încearcă pentru a apela cub, 1261 00:51:35,205 --> 00:51:36,830 computerul va fi, cum ar fi, oh, Doamne. 1262 00:51:36,830 --> 00:51:38,300 Nu am nici o idee ce înseamnă asta. 1263 00:51:38,300 --> 00:51:39,760 Nu știu ce să fac, aici. 1264 00:51:39,760 --> 00:51:41,594 Deci, prototipul spune nu vă faceți griji. 1265 00:51:41,594 --> 00:51:42,510 Am de gând să-ți spun. 1266 00:51:42,510 --> 00:51:43,132 >> Va veni. 1267 00:51:43,132 --> 00:51:43,840 Nu țipa la mine. 1268 00:51:43,840 --> 00:51:46,697 Nu-mi da un implicită declarație de funcție. 1269 00:51:46,697 --> 00:51:49,280 Deci, dacă aveți această eroare, o lucru ai de gând să vrei să faci 1270 00:51:49,280 --> 00:51:50,821 este asigurați-vă că aveți prototip ta. 1271 00:51:50,821 --> 00:51:52,320 1272 00:51:52,320 --> 00:51:53,230 OK? 1273 00:51:53,230 --> 00:51:55,680 >> Și nu în ultimul rând, identificator nedeclarate 1274 00:51:55,680 --> 00:52:00,570 este, în esență, atunci când încercați să utilizați un variabilă care nu le-ați declarat. 1275 00:52:00,570 --> 00:52:03,449 Deci, dintr-o dată începe să spunand ca n plus, plus. 1276 00:52:03,449 --> 00:52:04,740 Și computerul spune ce e n? 1277 00:52:04,740 --> 00:52:06,660 Niciodată nu mi-a spus n a fost un lucru. 1278 00:52:06,660 --> 00:52:10,930 >> Deci, un lucru pe care trebuie să asigurați-vă că a făcut este să spuneți calculatorului ce n este. 1279 00:52:10,930 --> 00:52:13,320 Deci, de exemplu, n-ar putea să fie un întreg. 1280 00:52:13,320 --> 00:52:14,999 Și atunci veți evita această eroare. 1281 00:52:14,999 --> 00:52:16,290 Orice întrebări cu privire la erorile comune? 1282 00:52:16,290 --> 00:52:17,260 Da? 1283 00:52:17,260 --> 00:52:19,344 >> STUDENT: Pentru implicită declarație de funcție, 1284 00:52:19,344 --> 00:52:22,343 ar putea fi, de asemenea, că ați omis o din bibliotecile pe care ar fi trebuit 1285 00:52:22,343 --> 00:52:24,400 pentru a include, în loc să prototipul? 1286 00:52:24,400 --> 00:52:26,359 >> HANNAH: dreapta, așa Întrebarea a fost, ai putea 1287 00:52:26,359 --> 00:52:28,650 primi, de asemenea, această eroare dacă a uitat să includă o bibliotecă. 1288 00:52:28,650 --> 00:52:29,085 >> STUDENT: Da. 1289 00:52:29,085 --> 00:52:30,876 >> HANNAH: Absolut, deoarece în același mod 1290 00:52:30,876 --> 00:52:33,540 pe care ne-o dorim pentru a pune prototipurile noastre înainte de funcția principală, 1291 00:52:33,540 --> 00:52:37,717 dacă avem o bibliotecă, cei care merg pentru a include, în esență, prototipurile, 1292 00:52:37,717 --> 00:52:39,425 include definiții a funcțiilor. 1293 00:52:39,425 --> 00:52:40,585 Mare întrebare. 1294 00:52:40,585 --> 00:52:43,230 >> STUDENT: Pentru o segmentare vina, ar fi că, de asemenea, 1295 00:52:43,230 --> 00:52:47,350 întâmpla dacă noi, cum ar fi, a încercat pentru a accesa o variabilă, 1296 00:52:47,350 --> 00:52:51,947 cum ar fi, într-un alt [inaudibil] decât a fost declarată în? 1297 00:52:51,947 --> 00:52:54,030 HANNAH: Sigur, așa-i așa a obține o eroare de segmentare 1298 00:52:54,030 --> 00:52:56,270 dacă am încercat să acceseze un variabilă afara domeniului de aplicare? 1299 00:52:56,270 --> 00:52:57,104 A fost că o întrebare? 1300 00:52:57,104 --> 00:52:57,645 STUDENT: Da. 1301 00:52:57,645 --> 00:52:58,430 HANNAH: Frumos. 1302 00:52:58,430 --> 00:53:01,840 Deci, probabil, ai de gând pentru a obține o eroare nedeclarate identificator loc. 1303 00:53:01,840 --> 00:53:04,006 Deci, este doar de gând să spun Nu știu ce e asta. 1304 00:53:04,006 --> 00:53:04,920 1305 00:53:04,920 --> 00:53:05,920 Rece, altceva? 1306 00:53:05,920 --> 00:53:07,744 1307 00:53:07,744 --> 00:53:08,980 Da, OK, frumos. 1308 00:53:08,980 --> 00:53:10,330 1309 00:53:10,330 --> 00:53:12,400 >> În regulă, așa recursivitate. 1310 00:53:12,400 --> 00:53:15,160 Așa că am menționat de câteva ori că am putea obține o depășire stivă 1311 00:53:15,160 --> 00:53:17,919 pentru că suntem de asteptare nostru funcții recursive de atâtea ori. 1312 00:53:17,919 --> 00:53:20,210 Primim toate acestea stivă rame, bla, bla, bla. 1313 00:53:20,210 --> 00:53:22,420 Ce chiar este o funcție recursivă? 1314 00:53:22,420 --> 00:53:25,680 Ei bine, o funcție recursive este orice funcție care se numește. 1315 00:53:25,680 --> 00:53:26,820 1316 00:53:26,820 --> 00:53:30,160 >> Unele lucruri să fie conștienți de atunci când sunt de punere în aplicare funcție recursivă, 1317 00:53:30,160 --> 00:53:31,940 nu uitați să includeți un caz de bază. 1318 00:53:31,940 --> 00:53:34,010 Un caz de bază este punct la care vom ajunge. 1319 00:53:34,010 --> 00:53:38,740 Așa că, de exemplu, dacă suntem de codificare, , Spune, Fibonacci recursiv, 1320 00:53:38,740 --> 00:53:43,210 vrem să ne asigurăm că atunci când vom ajunge la 0 sau primul număr Fibonacci, 1321 00:53:43,210 --> 00:53:46,220 cele două numere au aceste cazuri, pentru că cei care nu sunt dependente de 1322 00:53:46,220 --> 00:53:47,700 pe lucruri care au venit înainte. 1323 00:53:47,700 --> 00:53:48,990 Cei care au propriile lor valori. 1324 00:53:48,990 --> 00:53:51,270 1325 00:53:51,270 --> 00:53:55,320 >> Unele argumente pro la recursivitate, care este o Întrebarea care le-am văzut pe teste anterioare. 1326 00:53:55,320 --> 00:53:57,930 Acestea pot duce la mai multe cod concis, elegant. 1327 00:53:57,930 --> 00:54:00,510 Și o mulțime de funcții, un mulțime de diferite algoritmi, 1328 00:54:00,510 --> 00:54:02,350 de fapt, se pretează la recursivitate. 1329 00:54:02,350 --> 00:54:05,510 Definirea acestora ar putea fi recursive în sine. 1330 00:54:05,510 --> 00:54:06,980 Deci, Fibonacci este unul. 1331 00:54:06,980 --> 00:54:07,860 Factorială este unul. 1332 00:54:07,860 --> 00:54:10,480 Merge fel este Unu toate lucruri pe care le pot uita la. 1333 00:54:10,480 --> 00:54:12,650 1334 00:54:12,650 --> 00:54:13,460 OK, întrebări? 1335 00:54:13,460 --> 00:54:13,960 Da? 1336 00:54:13,960 --> 00:54:15,644 1337 00:54:15,644 --> 00:54:19,612 >> STUDENT: Este un caz corner similar cu un caz de bază? 1338 00:54:19,612 --> 00:54:22,590 Sau că din alt un fel de [inaudibil]? 1339 00:54:22,590 --> 00:54:25,170 >> HANNAH: Sigur, asa ca o caz corner este any-- atât de 1340 00:54:25,170 --> 00:54:27,580 este cazul de colț la fel ca caz de bază? 1341 00:54:27,580 --> 00:54:32,825 Un caz de colț este ceva care dumneavoastră cod s-ar putea comporta un pic diferit. 1342 00:54:32,825 --> 00:54:34,450 1343 00:54:34,450 --> 00:54:38,610 Cazul de bază este un fel de legătură, în că ei sunt ca anumite cazuri 1344 00:54:38,610 --> 00:54:40,240 pe care doriți să se uite la. 1345 00:54:40,240 --> 00:54:43,240 Dar ideea de bază este că caz vrei funcția recursive 1346 00:54:43,240 --> 00:54:44,870 pentru a opri la un moment dat. 1347 00:54:44,870 --> 00:54:46,490 Nu se poate ține de asteptare el însuși pentru totdeauna. 1348 00:54:46,490 --> 00:54:47,781 Acesta trebuie să se oprească la un moment dat. 1349 00:54:47,781 --> 00:54:49,340 1350 00:54:49,340 --> 00:54:53,460 >> ROB: Da, frecvent, cazuri dvs. de bază ar putea fi exemple de baze de colț. 1351 00:54:53,460 --> 00:54:55,876 >> HANNAH: pe dreapta, rece, ceva? 1352 00:54:55,876 --> 00:54:58,732 >> STUDENT: Ați putea explica întemeiază un pic mai mult? 1353 00:54:58,732 --> 00:55:01,600 Eu nu prea înțeleg [Inaudibil] cazuri de bază. 1354 00:55:01,600 --> 00:55:02,676 >> HANNAH: Din cauze de bază? 1355 00:55:02,676 --> 00:55:03,140 >> STUDENT: cazuri Base, da. 1356 00:55:03,140 --> 00:55:03,770 >> HANNAH: Oh, da, sigur. 1357 00:55:03,770 --> 00:55:04,270 Să vedem. 1358 00:55:04,270 --> 00:55:05,480 Nu ne-am creta pe aici? 1359 00:55:05,480 --> 00:55:06,690 1360 00:55:06,690 --> 00:55:07,320 Da, avem. 1361 00:55:07,320 --> 00:55:09,530 OK, deci foarte repede, voi încercați să scrie destul de mare 1362 00:55:09,530 --> 00:55:11,320 astfel încât să puteți vedea pe ecran. 1363 00:55:11,320 --> 00:55:13,490 Hai sa vorbim despre, într-adevăr repede, Fibonacci. 1364 00:55:13,490 --> 00:55:15,550 Așa că am să-ți dau șirul lui Fibonacci. 1365 00:55:15,550 --> 00:55:17,090 Poti sa te uiti în sus definiția. 1366 00:55:17,090 --> 00:55:26,050 >> În esență, fiecare număr din secvența este suma celor două numere precedente. 1367 00:55:26,050 --> 00:55:29,720 OK, deci modul în care am doar s-a descris Fibonacci, 1368 00:55:29,720 --> 00:55:31,530 ai putea auzi recursivitate, nu? 1369 00:55:31,530 --> 00:55:35,280 Când i-am spus fiecare număr este suma celor două numere anterioare, 1370 00:55:35,280 --> 00:55:36,420 am putea spune OK. 1371 00:55:36,420 --> 00:55:38,570 Ei bine, n-lea Fibonacci number-- Să 1372 00:55:38,570 --> 00:55:42,260 spune că avem această funcție numit FIB fib-- de n- 1373 00:55:42,260 --> 00:55:48,260 va fi egală cu fib de n minus 1 plus-- pare rău, 1374 00:55:48,260 --> 00:55:51,240 vom trece la linia următoare peste FIB here-- de n minus 2. 1375 00:55:51,240 --> 00:55:52,790 1376 00:55:52,790 --> 00:55:56,790 >> OK, deci această lucrari de mare dacă sunteți uita la, de exemplu, zero, unu, 1377 00:55:56,790 --> 00:55:59,410 doi, trei, patru, număr Fibonacci a cincea, 1378 00:55:59,410 --> 00:56:03,561 în cazul în care vă pot spune că 5 este egal cu 2, plus 3. 1379 00:56:03,561 --> 00:56:05,060 Dar ce se întâmplă dacă sunteți la început? 1380 00:56:05,060 --> 00:56:07,184 Ce se întâmplă dacă sunteți doar lovind aceste prime două valori? 1381 00:56:07,184 --> 00:56:08,470 1382 00:56:08,470 --> 00:56:11,330 >> Pentru a obține acest lucru de 1, nu se poate spune adăuga ultimele două, 1383 00:56:11,330 --> 00:56:13,930 pentru că zero, si-- eu nu știu. 1384 00:56:13,930 --> 00:56:15,390 Deci, la un moment dat, trebuie să ne oprim. 1385 00:56:15,390 --> 00:56:21,250 La un moment dat, trebuie să spun că acestea doi au doar propriile lor definiții. 1386 00:56:21,250 --> 00:56:23,890 Numărul 0 Fibonacci este 0. 1387 00:56:23,890 --> 00:56:26,115 Și primul număr Fibonacci este 1. 1388 00:56:26,115 --> 00:56:34,120 >> Deci, modul în care s-ar putea codul asta, ar spune dacă n este mai mic de doi, 1389 00:56:34,120 --> 00:56:35,130 apoi pur și simplu a reveni n. 1390 00:56:35,130 --> 00:56:36,494 Și că ar fi cazul meu de bază. 1391 00:56:36,494 --> 00:56:38,660 Asta e modul în care știu să se oprească cu o funcție recursivă. 1392 00:56:38,660 --> 00:56:40,640 1393 00:56:40,640 --> 00:56:41,410 Este clar? 1394 00:56:41,410 --> 00:56:41,940 Minunat. 1395 00:56:41,940 --> 00:56:43,260 Orice altceva pe recursivitate? 1396 00:56:43,260 --> 00:56:44,890 1397 00:56:44,890 --> 00:56:45,930 Frumos. 1398 00:56:45,930 --> 00:56:48,750 >> Să vorbim despre rapid căutare și ori rula fel. 1399 00:56:48,750 --> 00:56:52,660 Și atunci voi da Davin unele timp pentru a vorbi despre codificare exemple. 1400 00:56:52,660 --> 00:56:56,490 Deci, aici sunt de căutare principal și felul pe care ar trebui să știi despre. 1401 00:56:56,490 --> 00:56:59,500 Guarantee-- Eu nu pot garanta, pentru că nu am văzut quiz-- 1402 00:56:59,500 --> 00:57:01,940 dar acest lucru vine test după test după demisia. 1403 00:57:01,940 --> 00:57:04,050 Deci, folosi cu siguranta acest grafic. 1404 00:57:04,050 --> 00:57:05,682 Cum ar fi, să ia această diagramă. 1405 00:57:05,682 --> 00:57:06,890 Pune-l pe foaia de ieftin. 1406 00:57:06,890 --> 00:57:07,931 Vei fi un om fericit. 1407 00:57:07,931 --> 00:57:09,010 1408 00:57:09,010 --> 00:57:12,590 >> Acest lucru ne spune timpul de functionare pentru fiecare din aceste sortare și căutare algoritmi. 1409 00:57:12,590 --> 00:57:14,020 1410 00:57:14,020 --> 00:57:18,850 Deci, căutare liniară, puteți vedea centrare timp, și același cu căutare binară. 1411 00:57:18,850 --> 00:57:21,490 Du-te pe ceea ce acești algoritmi face, ideea generală. 1412 00:57:21,490 --> 00:57:24,220 Uită-te la unele pseudocod, în cazul în care nu se cod. 1413 00:57:24,220 --> 00:57:25,610 1414 00:57:25,610 --> 00:57:30,380 >> Veți vedea că balon fel are un superior legat în cel mai rău caz de n pătrat. 1415 00:57:30,380 --> 00:57:31,490 1416 00:57:31,490 --> 00:57:34,680 Deci, dacă oferta noastră a fost complet înapoi înainte am vrut să-l rezolve, 1417 00:57:34,680 --> 00:57:37,090 ne-ar spune că asta e O să ia măsuri n pătrat. 1418 00:57:37,090 --> 00:57:38,160 1419 00:57:38,160 --> 00:57:41,730 Dar, în cel mai bun caz, așa limită inferioară pentru cel mai bun caz 1420 00:57:41,730 --> 00:57:44,300 va fi în cazul în care este deja sortate perfect. 1421 00:57:44,300 --> 00:57:46,671 Apoi, tot ce trebuie să facem este verificați dacă e sortate. 1422 00:57:46,671 --> 00:57:47,921 Este o întrebare pe aici? 1423 00:57:47,921 --> 00:57:49,805 >> STUDENT: Când ar doriți să utilizați fel? 1424 00:57:49,805 --> 00:57:50,747 Genul. 1425 00:57:50,747 --> 00:57:52,160 Sunt doar curios. 1426 00:57:52,160 --> 00:57:53,510 >> HANNAH: Când v-ar doriți să utilizați selecție fel? 1427 00:57:53,510 --> 00:57:54,010 Asta? 1428 00:57:54,010 --> 00:57:55,705 Cel care n pătrat, în ambele cazuri? 1429 00:57:55,705 --> 00:57:56,860 >> STUDENT: [inaudibil]. 1430 00:57:56,860 --> 00:57:58,151 >> HANNAH: Deci e foarte diferit. 1431 00:57:58,151 --> 00:58:00,760 Dacă aveți specific Cerințe pentru programul, 1432 00:58:00,760 --> 00:58:04,887 cum ar fi lucruri cum ar fi dacă ne-am spus să pună în aplicare o sorry-- search-- 1433 00:58:04,887 --> 00:58:06,720 pună în aplicare un fel, veți probabil vrei să mergi 1434 00:58:06,720 --> 00:58:09,950 pentru unul dintre cei care are un cel mai bun caz de n, 1435 00:58:09,950 --> 00:58:12,410 sau o limită inferioară, în cel mai bun caz de n. 1436 00:58:12,410 --> 00:58:14,790 Dar ar putea fi anumite lucruri, cum ar fi, să zicem, 1437 00:58:14,790 --> 00:58:16,767 Swap-urile sunt într-adevăr scump pentru un motiv oarecare. 1438 00:58:16,767 --> 00:58:18,850 Atunci ce-ar vrea să facă bubble fel, pentru că 1439 00:58:18,850 --> 00:58:20,641 trebuie să facă atât de multe swap-uri, lucruri de genul asta. 1440 00:58:20,641 --> 00:58:21,710 1441 00:58:21,710 --> 00:58:23,098 Orice da other--? 1442 00:58:23,098 --> 00:58:25,488 >> STUDENT: Ar fi [inaudibil] să spun că [inaudibil]? 1443 00:58:25,488 --> 00:58:30,077 1444 00:58:30,077 --> 00:58:31,910 HANNAH: Asta e un lucru care le-ar spune 1445 00:58:31,910 --> 00:58:33,670 dacă te uiți la punerea în aplicare. 1446 00:58:33,670 --> 00:58:35,850 Modul în care aș fapt, gândiți-vă de ce e n 1447 00:58:35,850 --> 00:58:40,840 pătrat este că trebuie să ruleze prin oferta noastră de lungime n, 1448 00:58:40,840 --> 00:58:42,765 de fiecare dată când face la cele mai multe, n swap-uri. 1449 00:58:42,765 --> 00:58:43,980 1450 00:58:43,980 --> 00:58:46,220 Și noi trebuie să facem acest proces de n ori. 1451 00:58:46,220 --> 00:58:51,130 >> Deci, atunci când trebuie să facă cel mult, n swap-uri și pentru n trece prin matrice, 1452 00:58:51,130 --> 00:58:52,380 acolo va fi n pătrat. 1453 00:58:52,380 --> 00:58:55,480 Dar, da, acest lucru va fi dezvăluit prin această dublă pentru buclă, 1454 00:58:55,480 --> 00:58:59,428 ca întrebarea asked-- sau imbricate pentru buclă, ar trebui să spun. 1455 00:58:59,428 --> 00:59:00,890 OK? 1456 00:59:00,890 --> 00:59:03,375 >> Și apoi îmbinați fel, care este cel mai rapid fel ne acum, 1457 00:59:03,375 --> 00:59:07,560 sau pe care le-am acoperit în CS50, știu că algoritmul principal este 1458 00:59:07,560 --> 00:59:10,150 această idee de rupere în piese sortati si apoi 1459 00:59:10,150 --> 00:59:11,980 fuzionează împreună acești biți sortate. 1460 00:59:11,980 --> 00:59:14,170 Și vor să ne log n log n. 1461 00:59:14,170 --> 00:59:17,110 Orice întrebări cu privire la căutări și felul înainte să-l dați? 1462 00:59:17,110 --> 00:59:19,840 1463 00:59:19,840 --> 00:59:21,040 Să vedem. 1464 00:59:21,040 --> 00:59:21,800 >> Oh, liste legate. 1465 00:59:21,800 --> 00:59:23,210 Îmi pare rău, am mai avea o temă. 1466 00:59:23,210 --> 00:59:25,000 OK, minunat, legate de liste. 1467 00:59:25,000 --> 00:59:27,900 Problema cu tablouri, acestea au o dimensiune fixă. 1468 00:59:27,900 --> 00:59:30,634 Deci, dacă nu știi cât de mare dvs. de intrare va fi, 1469 00:59:30,634 --> 00:59:32,050 nu doriți să creați o matrice. 1470 00:59:32,050 --> 00:59:34,080 Pentru că dacă vom crea o matrice care este prea mic, 1471 00:59:34,080 --> 00:59:35,930 am putea rula în buffer overflow. 1472 00:59:35,930 --> 00:59:38,890 >> Deci, în loc, am putea face ceva cu liste legate, care 1473 00:59:38,890 --> 00:59:44,280 ne permite să avem o dinamic structură de date de dimensiuni 1474 00:59:44,280 --> 00:59:48,970 care ne va permite să stocați o cantitate mai flexibilă a datelor. 1475 00:59:48,970 --> 00:59:54,030 Deci, în fiecare nod în nostru Lista de legat, avem două bucăți. 1476 00:59:54,030 --> 00:59:56,820 Avem valoarea reală pe care o stochează. 1477 00:59:56,820 --> 00:59:59,530 Așa că e doar un lucru pe care ar fi a se vedea în matrice, de exemplu. 1478 00:59:59,530 --> 01:00:04,600 Și atunci am să urmăriți de o pointer la următorul lucru în memorie. 1479 01:00:04,600 --> 01:00:06,430 >> Spre deosebire de tablouri, care știm cu toții de gând 1480 01:00:06,430 --> 01:00:10,890 a be-- elementele de matrice sunt toate una la rand in memory-- legat 1481 01:00:10,890 --> 01:00:13,300 Lista ar putea fi oriunde în memorie. 1482 01:00:13,300 --> 01:00:14,590 Sunt locatii arbitrare. 1483 01:00:14,590 --> 01:00:16,410 Deci, dacă ar fi să de fapt, du-te-le găsim, ne-am 1484 01:00:16,410 --> 01:00:19,770 trebuie să țină evidența următorul lucru în lista noastră. 1485 01:00:19,770 --> 01:00:22,840 >> Și apoi, pentru a ști în cazul în care această listă ca un întreg este, 1486 01:00:22,840 --> 01:00:26,276 tot ce avem pentru a ține evidența este Primul element din lista noastră de legat. 1487 01:00:26,276 --> 01:00:27,900 Și care va permite să ne urmeze. 1488 01:00:27,900 --> 01:00:31,020 1489 01:00:31,020 --> 01:00:33,070 >> Deci, acesta este modul în care s-ar putea defini un mod. 1490 01:00:33,070 --> 01:00:36,160 Aceasta este o mare oportunitate pentru a profita de structs. 1491 01:00:36,160 --> 01:00:39,660 Pentru că aveți această idee, ei bine, pentru un nod dat, am două bucăți. 1492 01:00:39,660 --> 01:00:41,770 Am valoarea reală în sine. 1493 01:00:41,770 --> 01:00:45,610 Și apoi am un pointer la următor element din lista de legat. 1494 01:00:45,610 --> 01:00:49,150 Deci, vedeți, avem un număr întreg n, care va fi valoarea reală, 1495 01:00:49,150 --> 01:00:53,150 și apoi un pointer la un nod, numit următor. 1496 01:00:53,150 --> 01:00:56,431 Așa că va fi următorul element din lista noastră de legat. 1497 01:00:56,431 --> 01:00:56,972 STUDENT: Da? 1498 01:00:56,972 --> 01:01:01,920 Nu trebuie să se precizeze că steaua este ca o struct? 1499 01:01:01,920 --> 01:01:05,620 >> HANNAH: Da, așa din moment ce aceasta este aproape ca un fel de, 1500 01:01:05,620 --> 01:01:07,980 se pare ca un recursiv definiție în care ne-am 1501 01:01:07,980 --> 01:01:12,080 Trebuie să știu ce un nod este în interiorul a găsi un nod. 1502 01:01:12,080 --> 01:01:14,450 Din moment ce nu face de fapt Știi ce un nod este complet 1503 01:01:14,450 --> 01:01:17,283 până când vom ajunge la sfârșitul anului asta: și după aceasta putem numi doar 1504 01:01:17,283 --> 01:01:21,935 o node-- în interiorul acestei definiții, trebuie să-i spunem un nod struct. 1505 01:01:21,935 --> 01:01:22,560 Mare întrebare. 1506 01:01:22,560 --> 01:01:23,580 1507 01:01:23,580 --> 01:01:25,214 Altceva? 1508 01:01:25,214 --> 01:01:26,198 Da? 1509 01:01:26,198 --> 01:01:29,150 >> STUDENT: De ce avem Trebuie să spun nod de două ori? 1510 01:01:29,150 --> 01:01:33,578 Pentru că atunci când am fost în [inaudibil] ne-am avut de a face acest lucru în punct și virgulă, 1511 01:01:33,578 --> 01:01:37,352 dar acum trebuie să găsim că nod struct? [Inaudibil]. 1512 01:01:37,352 --> 01:01:39,060 HANNAH: Deci, eu cred în ultimul exemplu, 1513 01:01:39,060 --> 01:01:42,110 am fost doar crearea de tine oricand vrut să folosească un elev după asta, 1514 01:01:42,110 --> 01:01:46,430 a trebuit sa foloseasca struct node-- Am sorry-- elev struct. 1515 01:01:46,430 --> 01:01:51,575 Acest lucru ne-a permis sa, după fapt, doar utilizarea nod adăuga un nou tip, în esență. 1516 01:01:51,575 --> 01:01:53,324 1517 01:01:53,324 --> 01:01:53,990 Care face sens? 1518 01:01:53,990 --> 01:01:54,984 1519 01:01:54,984 --> 01:01:57,150 Așa că ne-ar trebui să mă întorc și uita-te la codul înainte. 1520 01:01:57,150 --> 01:01:59,025 Dar mi-ar ghici că nu am folosit typedef. 1521 01:01:59,025 --> 01:02:02,050 Și ne-am pus întrebarea, de ce avem nevoie pentru a utiliza typedef? 1522 01:02:02,050 --> 01:02:05,540 Typedef ne permite să evităm struct cuvânt la început. 1523 01:02:05,540 --> 01:02:06,221 Da? 1524 01:02:06,221 --> 01:02:08,095 STUDENT: Ce fel de intrebari va veni 1525 01:02:08,095 --> 01:02:10,400 din punct de vedere în ceea ce privește noduri și liste postat? 1526 01:02:10,400 --> 01:02:15,110 >> HANNAH: Deci, un lucru este, am putea spune cum s-ar putea să căutați printr-o listă legat? 1527 01:02:15,110 --> 01:02:16,930 OK, pentru că este o pic mai complicat 1528 01:02:16,930 --> 01:02:18,520 decât dacă suntem în căutarea printr-o serie. 1529 01:02:18,520 --> 01:02:21,472 Ne putem uita doar la elementul de zero, Element una, două elemente, bla, bla, 1530 01:02:21,472 --> 01:02:21,972 bla. 1531 01:02:21,972 --> 01:02:22,629 1532 01:02:22,629 --> 01:02:24,420 Dacă vrem să caute printr-o listă legată, 1533 01:02:24,420 --> 01:02:27,229 vom avea de fapt să urmeze acest mic labirint de indicii. 1534 01:02:27,229 --> 01:02:29,270 Deci, haideți să mergem de fapt prin aceasta foarte repede. 1535 01:02:29,270 --> 01:02:30,460 1536 01:02:30,460 --> 01:02:32,860 Ce am putea face în obligarea sa-- să spunem noi 1537 01:02:32,860 --> 01:02:35,430 doresc să itera doar prin Lista noastră legată în întregime. 1538 01:02:35,430 --> 01:02:37,450 Ne-ar incepe de la cap. 1539 01:02:37,450 --> 01:02:39,890 Și apoi, în scopul de a trece la elementul următor, 1540 01:02:39,890 --> 01:02:43,680 în loc de doar incrementarea cu o ca și cum am putea într trece printr-o serie, 1541 01:02:43,680 --> 01:02:45,720 vom fapt de gând să urmați indicatorul următor, 1542 01:02:45,720 --> 01:02:48,360 astfel încât să putem găsi în cazul în memorie elementul următor este. 1543 01:02:48,360 --> 01:02:49,357 1544 01:02:49,357 --> 01:02:51,690 Așa că știu că nu e de ajuns pentru a să ia toate acestea în chiar acum, 1545 01:02:51,690 --> 01:02:52,650 dar veți avea aceste slide-uri. 1546 01:02:52,650 --> 01:02:54,730 Astfel încât să puteți trece prin aceasta un pic mai lent. 1547 01:02:54,730 --> 01:02:56,890 Dar, în esență, ceea ce ne dorim să faceți este să urmați aceste indicii 1548 01:02:56,890 --> 01:02:58,550 prin totalitatea listei de legătura. 1549 01:02:58,550 --> 01:03:00,258 Deci, aceasta este o întrebare s-ar putea să fie întrebat. 1550 01:03:00,258 --> 01:03:01,920 1551 01:03:01,920 --> 01:03:03,980 >> Ceva pentru a observa cu inserție, să zicem 1552 01:03:03,980 --> 01:03:07,925 am vrut să pună un element nou la partea din față a lista noastră de legat. 1553 01:03:07,925 --> 01:03:10,800 Trebuie să fim foarte atenți despre ordinea în care ne-am 1554 01:03:10,800 --> 01:03:12,760 realocată indicii. 1555 01:03:12,760 --> 01:03:15,230 Pentru ca să spunem pur și simplu am spus OK. 1556 01:03:15,230 --> 01:03:18,930 Asigurați punct de cap pentru acest element nou. 1557 01:03:18,930 --> 01:03:23,550 Doar asigurați-l punct la 1 Apoi, ne-am a pierdut, în esență, restul de pe lista noastră, 1558 01:03:23,550 --> 01:03:25,860 pentru că eu nu-mi amintesc în cazul în care două vieți. 1559 01:03:25,860 --> 01:03:27,730 >> Deci, trebuie să facem într-o Pentru foarte specific. 1560 01:03:27,730 --> 01:03:31,500 În primul rând, vom face noi punctul element de la cap. 1561 01:03:31,500 --> 01:03:33,970 Și apoi vom face capul indica elementul nou. 1562 01:03:33,970 --> 01:03:38,455 Deci, haideți să vedem cum arată cu arrows-- la fel ca asta. 1563 01:03:38,455 --> 01:03:42,080 Deci, trebuie mai întâi noi punctul element de la cap vechi. 1564 01:03:42,080 --> 01:03:45,990 Și acum, avem capul litera a noului primul element. 1565 01:03:45,990 --> 01:03:47,187 Orice întrebări cu asta? 1566 01:03:47,187 --> 01:03:49,870 1567 01:03:49,870 --> 01:03:54,350 >> OK, aici e un cod nou, ceva să se uite la un pic mai târziu. 1568 01:03:54,350 --> 01:03:58,630 Și acum se va transforma peste la Davin pentru GDB și un pic de practică 1569 01:03:58,630 --> 01:03:59,480 codificare pe hârtie. 1570 01:03:59,480 --> 01:04:00,597 1571 01:04:00,597 --> 01:04:01,096 Frumos. 1572 01:04:01,096 --> 01:04:01,810 >> ROB: Și Rob. 1573 01:04:01,810 --> 01:04:02,360 >> HANNAH: Oh, Davin și Rob. 1574 01:04:02,360 --> 01:04:03,055 Îmi pare rău. 1575 01:04:03,055 --> 01:04:03,596 >> STUDENT: Woo! 1576 01:04:03,596 --> 01:04:08,140 1577 01:04:08,140 --> 01:04:09,110 >> ROB: Mulțumesc. 1578 01:04:09,110 --> 01:04:11,209 >> Davin: Vrei să spui totul foarte repede? 1579 01:04:11,209 --> 01:04:11,875 ROB: Da, da. 1580 01:04:11,875 --> 01:04:12,845 Davin: După ce am sus. 1581 01:04:12,845 --> 01:04:16,240 1582 01:04:16,240 --> 01:04:19,520 OK, în timp ce Rob trimite microfon pe, asa ca ce e GDB? 1583 01:04:19,520 --> 01:04:23,945 Toată lumea ar fi văzut GDB în clasă și, de asemenea, la ore de birou. 1584 01:04:23,945 --> 01:04:25,070 Și tu ar trebui să fie folosind-o. 1585 01:04:25,070 --> 01:04:25,750 Deci, ce este GDB? 1586 01:04:25,750 --> 01:04:28,030 1587 01:04:28,030 --> 01:04:28,850 E cineva? 1588 01:04:28,850 --> 01:04:29,540 >> STUDENT: Este un program de depanare. 1589 01:04:29,540 --> 01:04:30,250 >> Davin: Este un program de depanare. 1590 01:04:30,250 --> 01:04:31,624 Și ce nu-l permite să faci? 1591 01:04:31,624 --> 01:04:33,064 Cum ar fi, de ce nu ne place GDB? 1592 01:04:33,064 --> 01:04:34,480 STUDENT: Pentru a încetini programul. 1593 01:04:34,480 --> 01:04:36,740 Davin: pe dreapta, astfel încât să puteți merge pe jos prin ea ca un ritm uman. 1594 01:04:36,740 --> 01:04:38,490 Și ce sunt unele comenzi pe care le puteți face? 1595 01:04:38,490 --> 01:04:40,407 Ei bine, pauza este, probabil, comanda dumneavoastră preferat. 1596 01:04:40,407 --> 01:04:43,240 Pentru că vă permite să rupe Programul și merge de fapt prin ea 1597 01:04:43,240 --> 01:04:44,280 linie cu linie. 1598 01:04:44,280 --> 01:04:46,500 >> Run vă permite să îl rulați. 1599 01:04:46,500 --> 01:04:48,210 Apoi, ca pas cu pas prin intermediul. 1600 01:04:48,210 --> 01:04:49,820 Care este între următorul pas și? 1601 01:04:49,820 --> 01:04:52,190 1602 01:04:52,190 --> 01:04:53,190 Stai, spune cu voce tare. 1603 01:04:53,190 --> 01:04:54,060 A fost corect. 1604 01:04:54,060 --> 01:04:55,280 >> STUDENT: [inaudibil]. 1605 01:04:55,280 --> 01:04:56,190 >> Davin: Da, minunat. 1606 01:04:56,190 --> 01:04:59,210 Deci, cum ar fi, următorul pas și, dacă you're-- Să presupunem că aveți o funcție vă 1607 01:04:59,210 --> 01:04:59,950 defini. 1608 01:04:59,950 --> 01:05:03,350 Să spunem că unele din funcția principală, si tu esti doar lovind următor, în continuare, 1609 01:05:03,350 --> 01:05:03,850 următor. 1610 01:05:03,850 --> 01:05:05,910 Tu esti de fapt de gând să executa această funcție, 1611 01:05:05,910 --> 01:05:07,285 dar ai de gând să sari peste el. 1612 01:05:07,285 --> 01:05:09,711 Dacă te-a lovit pas, sau s sau orice altceva, ești 1613 01:05:09,711 --> 01:05:11,460 O să sari de fapt în această funcție, 1614 01:05:11,460 --> 01:05:14,110 și apoi puteți lovi următorul pentru a vedea diferite apeluri 1615 01:05:14,110 --> 01:05:16,170 în interiorul funcției respective. 1616 01:05:16,170 --> 01:05:16,670 Da? 1617 01:05:16,670 --> 01:05:18,670 >> STUDENT: Există o modalitate pentru a sari, cum ar fi, înapoi afară? 1618 01:05:18,670 --> 01:05:20,750 Davin: Finish, da, duce cu tine sari. 1619 01:05:20,750 --> 01:05:22,570 Deci, se va duce la faptul că funcție, iar apoi ești 1620 01:05:22,570 --> 01:05:24,153 Va fi din nou în principal, de exemplu. 1621 01:05:24,153 --> 01:05:25,250 1622 01:05:25,250 --> 01:05:27,370 Imprimare se va tipări o singură dată. 1623 01:05:27,370 --> 01:05:29,381 Ceva ce să folosiți întotdeauna este de afișare. 1624 01:05:29,381 --> 01:05:31,880 Afișare se va tipări în mod constant pe tot parcursul întregime 1625 01:05:31,880 --> 01:05:32,470 de programul tău. 1626 01:05:32,470 --> 01:05:33,810 >> De exemplu, dacă sunteți într-o buclă pentru, și tu 1627 01:05:33,810 --> 01:05:37,018 vrei sa vezi cum se schimba ceva, si nu vrei sa, cum ar fi, în mod constant 1628 01:05:37,018 --> 01:05:38,940 face ca print, print, print, afișare 1629 01:05:38,940 --> 01:05:43,230 va afișa variabila continuu, de fiecare dată când te-a lovit următor. 1630 01:05:43,230 --> 01:05:44,310 Și continuă. 1631 01:05:44,310 --> 01:05:45,905 Astfel GBD, asta e GDB. 1632 01:05:45,905 --> 01:05:47,160 1633 01:05:47,160 --> 01:05:49,180 >> STUDENT: Care e cea în cazul în care [inaudibil]? 1634 01:05:49,180 --> 01:05:50,150 1635 01:05:50,150 --> 01:05:50,900 Davin: Ce este? 1636 01:05:50,900 --> 01:05:52,310 1637 01:05:52,310 --> 01:05:54,390 >> STUDENT: Ce este the-- variabilele locale. 1638 01:05:54,390 --> 01:05:55,364 1639 01:05:55,364 --> 01:05:57,780 ROB: Nu este ceva de fapt ca localnici sau ceva. 1640 01:05:57,780 --> 01:05:58,140 I can't-- 1641 01:05:58,140 --> 01:05:59,930 >> Davin: Ar putea fi ceva de genul asta, da. 1642 01:05:59,930 --> 01:06:00,830 >> HANNAH: În localnicii? 1643 01:06:00,830 --> 01:06:01,510 >> Davin: Asta e. 1644 01:06:01,510 --> 01:06:02,134 Asta e cel. 1645 01:06:02,134 --> 01:06:03,040 ROB: Frumos. 1646 01:06:03,040 --> 01:06:04,030 >> Davin: Da. 1647 01:06:04,030 --> 01:06:06,010 >> STUDENT: Ce face în continuare? 1648 01:06:06,010 --> 01:06:08,010 >> Davin: Se continues-- așa că e doar va continua programele. 1649 01:06:08,010 --> 01:06:09,843 Deci, dacă te rupe și a lovit continua, va 1650 01:06:09,843 --> 01:06:13,119 pentru a rula doar că programul până la se lovește din nou că pauza. 1651 01:06:13,119 --> 01:06:14,910 Deci, de exemplu, dacă a izbucnit într-o funcție, 1652 01:06:14,910 --> 01:06:16,720 și ai de gând să faci ca pentru buclă sau ceva de genul asta, 1653 01:06:16,720 --> 01:06:19,869 și te-a lovit continua, o să continua și du-te înapoi la acea pauză. 1654 01:06:19,869 --> 01:06:22,660 Sau nu exista nici o pauză, o să continua și termina programul. 1655 01:06:22,660 --> 01:06:25,000 >> ROB: place Deci, doar se oprește rula la prima breakpoint 1656 01:06:25,000 --> 01:06:27,010 te-a lovit, dacă atunci lovit continua, se va ține 1657 01:06:27,010 --> 01:06:28,070 merge până când este breakpoint următor. 1658 01:06:28,070 --> 01:06:30,111 Și apoi continuați va merge la breakpoint următor. 1659 01:06:30,111 --> 01:06:31,264 1660 01:06:31,264 --> 01:06:32,680 Davin: Orice alte întrebări cu privire la GDB? 1661 01:06:32,680 --> 01:06:33,577 1662 01:06:33,577 --> 01:06:35,410 Deci, cred că, în trecut, v-am întrebat ce 1663 01:06:35,410 --> 01:06:37,690 GDB este și să dea un exemplu de unele lucruri pe care le 1664 01:06:37,690 --> 01:06:40,770 se poate face cu GDB, așa foarte simplu, dar da. 1665 01:06:40,770 --> 01:06:42,280 Acolo te duci. 1666 01:06:42,280 --> 01:06:43,250 Și noduri? 1667 01:06:43,250 --> 01:06:49,571 >> ROB: Da, deci ce direcție a fost? 1668 01:06:49,571 --> 01:06:50,851 1669 01:06:50,851 --> 01:06:51,726 STUDENT: Asta a fost tot. 1670 01:06:51,726 --> 01:06:52,160 Davin: Așteaptă. 1671 01:06:52,160 --> 01:06:52,270 ROB: Tipul ăsta? 1672 01:06:52,270 --> 01:06:52,936 Davin: Acela. 1673 01:06:52,936 --> 01:06:54,660 ROB: Tipul ăsta, oh, nu am dat seama. 1674 01:06:54,660 --> 01:06:56,940 Deci, nu am fost clar pe ceea ce the-- eu nu fac 1675 01:06:56,940 --> 01:06:58,680 Știi care a asta--, dar întrebarea. 1676 01:06:58,680 --> 01:07:01,180 Nu știm exact ce s-au întrebat despre asta, asa ca 1677 01:07:01,180 --> 01:07:04,800 pentru a clarifica ceva. 1678 01:07:04,800 --> 01:07:07,750 Deci, în primul rând, cum am spus mai înainte, typedef esti mereu folosind doar 1679 01:07:07,750 --> 01:07:09,305 a crea un pseudonim pentru un tip. 1680 01:07:09,305 --> 01:07:13,420 Deci, chiar aici, porecla suntem crearea este pentru acest nod struct tip. 1681 01:07:13,420 --> 01:07:18,070 >> Deci, în primul rând, ignorarea acestui nod în typedef, astfel încât această struct nod ondulat 1682 01:07:18,070 --> 01:07:21,060 bloca până la următorul ondulat bretele este tipul de nod struct. 1683 01:07:21,060 --> 01:07:23,470 Și avem nevoie în acest nod acolo, pentru că noi 1684 01:07:23,470 --> 01:07:25,190 Trebuie de referință nod în aici. 1685 01:07:25,190 --> 01:07:29,380 Deci, cu acest tip de struct recursive, aveți nevoie pentru a da acest struct un nume, 1686 01:07:29,380 --> 01:07:31,340 sau altceva ce nu ar putea spune nod struct aici. 1687 01:07:31,340 --> 01:07:33,340 Întrucât înainte de elev când am fost tastate, cred, 1688 01:07:33,340 --> 01:07:35,423 nu am avut de spus acolo elev în sus, pentru că noi 1689 01:07:35,423 --> 01:07:40,370 nu trebuie să spun struct elev în interiorul struct în sine. 1690 01:07:40,370 --> 01:07:43,730 Deci, este recursiv care ne obligă să spunem nod acolo. 1691 01:07:43,730 --> 01:07:46,610 >> Acest nod este doar numele suntem oferindu-nod pentru typedef. 1692 01:07:46,610 --> 01:07:48,520 Astfel că nodul nu este la fel ca acel nod. 1693 01:07:48,520 --> 01:07:51,567 Dar acest nod struct este la fel ca acel nod struct. 1694 01:07:51,567 --> 01:07:54,150 Davin: Deci, ori de câte ori suni, cum ar fi, nodul în funcția principală, 1695 01:07:54,150 --> 01:07:55,350 tu nu vei Trebuie să spun nod struct. 1696 01:07:55,350 --> 01:07:58,360 Vă pot spune doar nod, pentru că nod este un different-- este, în principiu 1697 01:07:58,360 --> 01:07:59,440 spui, OK. 1698 01:07:59,440 --> 01:08:01,490 În loc de a avea pentru a apela nod struct în codul meu, 1699 01:08:01,490 --> 01:08:04,050 Vreau doar să-l redenumiți ca nod pentru a face mai ușor. 1700 01:08:04,050 --> 01:08:06,800 >> ROB: Dacă mereu folosi typedef, atunci aceasta 1701 01:08:06,800 --> 01:08:11,240 este singurul loc ai de gând să aibă de a declara o variabila cu nod struct 1702 01:08:11,240 --> 01:08:11,740 stele, da. 1703 01:08:11,740 --> 01:08:14,650 1704 01:08:14,650 --> 01:08:20,801 >> Davin: OK, deci ultima parte este greu de a preda because-- 1705 01:08:20,801 --> 01:08:22,185 1706 01:08:22,185 --> 01:08:22,685 ROB: Ce? 1707 01:08:22,685 --> 01:08:24,098 1708 01:08:24,098 --> 01:08:25,649 >> Davin: Pentru că este de codificare pe hârtie. 1709 01:08:25,649 --> 01:08:28,689 Deci, în fiecare an, avem Codul cu privire la chestiuni de hârtie. 1710 01:08:28,689 --> 01:08:32,510 Deci, cred că, anul trecut, 12 din 80 de puncte au fost cod pe hârtie. 1711 01:08:32,510 --> 01:08:36,720 An înainte de asta, 10 din 80, an înainte de faptul că, la 20 din 100, 1712 01:08:36,720 --> 01:08:37,939 așa destul de puține dintre acestea. 1713 01:08:37,939 --> 01:08:40,970 Deci, ai de gând să trebuie să fie în măsură pentru a coda la aceste funcții de mână. 1714 01:08:40,970 --> 01:08:45,340 >> Așa că m-am gândit am putea trece printr-un câteva dintre ele și a vedea cum fac oamenii, 1715 01:08:45,340 --> 01:08:47,340 un fel de mers pe jos prin -le încet cu oameni. 1716 01:08:47,340 --> 01:08:48,790 1717 01:08:48,790 --> 01:08:52,420 Deci, în general, strlen și atoi au fost foarte populare. 1718 01:08:52,420 --> 01:08:55,670 Anul trecut, cred că am avut GetPositiveInt și RandomInt. 1719 01:08:55,670 --> 01:08:58,591 Dar pow, așa putere, de asemenea, una pozitivă prea. 1720 01:08:58,591 --> 01:09:00,965 Hai să trecem prin poate una sau două dintre acestea împreună. 1721 01:09:00,965 --> 01:09:02,510 1722 01:09:02,510 --> 01:09:03,729 Ce fac oamenii vor să vadă? 1723 01:09:03,729 --> 01:09:05,037 1724 01:09:05,037 --> 01:09:05,767 >> STUDENT: atoi. 1725 01:09:05,767 --> 01:09:06,350 STUDENT: Da. 1726 01:09:06,350 --> 01:09:06,859 Davin: atoi? 1727 01:09:06,859 --> 01:09:07,800 STUDENT: [inaudibil]. 1728 01:09:07,800 --> 01:09:09,682 Davin: OK, am de gând să o facă pe bord. 1729 01:09:09,682 --> 01:09:11,765 Ai o preferință dacă o fac aici sau acolo? 1730 01:09:11,765 --> 01:09:13,580 1731 01:09:13,580 --> 01:09:14,550 Acolo, Gabe spune acolo. 1732 01:09:14,550 --> 01:09:16,729 1733 01:09:16,729 --> 01:09:19,580 >> ROB: Și acest lucru este gânduri generale cu privire la aceste probleme de codificare. 1734 01:09:19,580 --> 01:09:21,705 Încercați să scrie ceva. 1735 01:09:21,705 --> 01:09:22,580 Nu-l lăsați necompletat. 1736 01:09:22,580 --> 01:09:23,080 >> Davin: Da. 1737 01:09:23,080 --> 01:09:25,520 ROB: Dacă puteți obține a reveni tip corect, 1738 01:09:25,520 --> 01:09:27,090 sau poate că s-ar putea da la tine, dar dacă poți, cum ar fi, 1739 01:09:27,090 --> 01:09:30,256 scrie funcția de semnătura general, Dacă puteți obține cazurile de bază corecte, 1740 01:09:30,256 --> 01:09:32,244 sau cazuri de colț, sau amintindu-și de verificare pentru nul, 1741 01:09:32,244 --> 01:09:34,160 atâta timp cât aveți unele lucrurile, atunci poate că ne-am 1742 01:09:34,160 --> 01:09:35,880 vă pot da un cuplu puncte pentru problema. 1743 01:09:35,880 --> 01:09:36,810 Nu doar lăsați-l necompletat. 1744 01:09:36,810 --> 01:09:38,560 >> Davin: Da, și dacă sunt doar complet 1745 01:09:38,560 --> 01:09:40,580 lovit la modul de a transforma de fapt în cod. 1746 01:09:40,580 --> 01:09:43,140 Dacă ați scrie pseudocod, asta e destul de bine prea. 1747 01:09:43,140 --> 01:09:46,390 Deci e ca și cum, este o chestiune de șase punct, și tu scrie pseudocod corect, 1748 01:09:46,390 --> 01:09:47,858 veți obține cel puțin două puncte. 1749 01:09:47,858 --> 01:09:49,149 Deci, nu doar să le lăsați necompletat. 1750 01:09:49,149 --> 01:09:50,279 Încercați să puneți ceva. 1751 01:09:50,279 --> 01:09:51,770 >> ROB: aceasta trebuie să fie pseudocod corect, totuși. 1752 01:09:51,770 --> 01:09:52,270 >> Davin: Da. 1753 01:09:52,270 --> 01:09:55,381 ROB: Deci, suntem, în general, sunt mai puțin indulgent cu bug-uri în pseudocod. 1754 01:09:55,381 --> 01:09:57,130 Davin: OK, deci voi a vrut să vadă atoi. 1755 01:09:57,130 --> 01:09:58,480 1756 01:09:58,480 --> 01:10:02,820 OK, deci doar really-- deci ceea ce vrei să faci 1757 01:10:02,820 --> 01:10:04,969 Se vei fi având în vedere un fel de număr. 1758 01:10:04,969 --> 01:10:07,010 Dar acest număr nu este Va fi un int, nu? 1759 01:10:07,010 --> 01:10:08,574 Ce va fi? 1760 01:10:08,574 --> 01:10:09,480 >> STUDENT: [inaudibil]. 1761 01:10:09,480 --> 01:10:11,146 >> Davin: O să fie un șir de caractere, nu? 1762 01:10:11,146 --> 01:10:13,160 Deci, dacă s-au dat o string-- să say-- 1763 01:10:13,160 --> 01:10:15,228 >> ROB: Ar trebui să mă trage un editor? 1764 01:10:15,228 --> 01:10:16,200 Pot trage up-- 1765 01:10:16,200 --> 01:10:16,800 >> Davin: Oh, vrei să o faci on-- 1766 01:10:16,800 --> 01:10:17,420 >> ROB: Ați prefera bord? 1767 01:10:17,420 --> 01:10:18,800 >> Davin: Ce vrei să faci? 1768 01:10:18,800 --> 01:10:19,900 Adică, vrei să o faci cu mâna? 1769 01:10:19,900 --> 01:10:21,460 Sau vrei să o faci pe calculator? 1770 01:10:21,460 --> 01:10:22,180 >> ROB: Fă-o de mână. 1771 01:10:22,180 --> 01:10:22,805 >> Davin: [râde] 1772 01:10:22,805 --> 01:10:23,950 ROB: Fă-o de mână. 1773 01:10:23,950 --> 01:10:25,469 >> Davin: OK, asa ca va fi atoi. 1774 01:10:25,469 --> 01:10:27,760 Deci, ce este it-- vreau să spun, vom probabil da asta. 1775 01:10:27,760 --> 01:10:29,106 Dar ce se întâmplă să se întoarcă? 1776 01:10:29,106 --> 01:10:29,452 >> STUDENT: Int. 1777 01:10:29,452 --> 01:10:31,076 >> Davin: O să se întoarcă int, nu? 1778 01:10:31,076 --> 01:10:33,772 Deci-- Nu vreau să o fac acolo. 1779 01:10:33,772 --> 01:10:34,510 O voi face aici. 1780 01:10:34,510 --> 01:10:36,596 >> ROB: Puteți să-l trage în jos și apoi împinge în sus pe ea. 1781 01:10:36,596 --> 01:10:38,500 1782 01:10:38,500 --> 01:10:40,385 >> Davin: da. 1783 01:10:40,385 --> 01:10:43,880 [Râde] schimbare de joc. 1784 01:10:43,880 --> 01:10:50,950 OK, așa că va fi atoi int, și ce se va lua? 1785 01:10:50,950 --> 01:10:52,180 1786 01:10:52,180 --> 01:10:57,780 O stea char, asa ca o șir, stele s, așa. 1787 01:10:57,780 --> 01:10:59,240 >> ROB: Nisa stele, frumos. 1788 01:10:59,240 --> 01:11:02,582 1789 01:11:02,582 --> 01:11:04,040 Davin: Acest lucru nu ar putea fi acolo, OK. 1790 01:11:04,040 --> 01:11:04,540 ROB: Da. 1791 01:11:04,540 --> 01:11:06,670 Davin: OK, deci primul lucru pe care doriți să do-- I 1792 01:11:06,670 --> 01:11:08,490 Nu știu dacă cineva se uită la solutions-- practică 1793 01:11:08,490 --> 01:11:10,150 dar ceea ce ai de gând sa vrei sa faci e că ești 1794 01:11:10,150 --> 01:11:11,570 O să vrea să aibă o buclă, pentru că ești 1795 01:11:11,570 --> 01:11:14,100 O să vrea să efectiv pas prin acest șir. 1796 01:11:14,100 --> 01:11:18,880 Deci, așa helpful-- să spunem vom o pentru buclă, 1797 01:11:18,880 --> 01:11:22,270 și vom parcurge fiecare element al șirului. 1798 01:11:22,270 --> 01:11:23,470 Cât timp e asta? 1799 01:11:23,470 --> 01:11:26,464 De câte ori mergem de a repeta în care pentru bucla? 1800 01:11:26,464 --> 01:11:27,130 STUDENT: Sterln? 1801 01:11:27,130 --> 01:11:27,963 Davin: Sterln, da. 1802 01:11:27,963 --> 01:11:29,350 1803 01:11:29,350 --> 01:11:41,294 Deci, haideți să spunem lungime int este egal cu sterln s. 1804 01:11:41,294 --> 01:11:44,240 1805 01:11:44,240 --> 01:11:48,740 Și doar curios, de ce este întotdeauna un fel de mai bine de a face acest lucru in afara de bucle? 1806 01:11:48,740 --> 01:11:52,277 Cum ar fi, de ce este mai bine pentru a apela această funcție în afara unei bucle? 1807 01:11:52,277 --> 01:11:53,360 Doar verifica un bun-simț rapid? 1808 01:11:53,360 --> 01:11:55,810 1809 01:11:55,810 --> 01:11:56,311 Da? 1810 01:11:56,311 --> 01:11:58,268 STUDENT: Deci tu nu faci trebuie să țină verifica-l. 1811 01:11:58,268 --> 01:11:59,400 Poți doar să [inaudibil]. 1812 01:11:59,400 --> 01:12:01,560 >> Davin: Exact, așa da, exact ceea ce a spus ea. 1813 01:12:01,560 --> 01:12:03,101 Deci, noi nu trebuie să țină verifica-l. 1814 01:12:03,101 --> 01:12:05,690 Deci, de exemplu, în cazul în care sun această funcție în interiorul-o buclă, 1815 01:12:05,690 --> 01:12:08,050 apoi am de gând să ține de asteptare această funcție de mai multe ori. 1816 01:12:08,050 --> 01:12:10,080 Și că va scădea eficiența programului dumneavoastră. 1817 01:12:10,080 --> 01:12:12,370 Deci, este întotdeauna util să-l declare afară. 1818 01:12:12,370 --> 01:12:14,370 >> ROB: Asta a spus, pe oricare dintre aceste probleme, 1819 01:12:14,370 --> 01:12:17,940 destul de mult, atâta timp cât veți obține o Soluție de lucru, veți obține credit complet. 1820 01:12:17,940 --> 01:12:20,820 Deci, nu vă faceți griji în cazul în care design-ul este absolut cumplit. 1821 01:12:20,820 --> 01:12:22,120 1822 01:12:22,120 --> 01:12:25,230 S-ar putea să ne facă supărat citit codul. 1823 01:12:25,230 --> 01:12:28,160 Dar atâta timp cât funcționează, veți obține puncte. 1824 01:12:28,160 --> 01:12:29,302 >> Davin: Da. 1825 01:12:29,302 --> 01:12:31,260 OK, deci atunci am de gând să declara unele variabile. 1826 01:12:31,260 --> 01:12:33,900 E doar de gând să sun sumă int. 1827 01:12:33,900 --> 01:12:37,031 Și am de gând să se stabilească acest lucru egale cu zero, așa. 1828 01:12:37,031 --> 01:12:38,780 Și asta doar de gând a fi un înlocuitor. 1829 01:12:38,780 --> 01:12:40,960 Așa că o să fie ceea ce am de gând să se întoarcă. 1830 01:12:40,960 --> 01:12:43,730 Așa că am de gând să în cele din urmă a reveni sumă din acest program. 1831 01:12:43,730 --> 01:12:44,980 Așa că am aceste două variabile. 1832 01:12:44,980 --> 01:12:45,563 Am lungime. 1833 01:12:45,563 --> 01:12:46,500 Am sumă. 1834 01:12:46,500 --> 01:12:48,290 Și acum să intrăm în șir nostru. 1835 01:12:48,290 --> 01:12:49,510 >> Deci, vă permite să aveți nostru de buclă. 1836 01:12:49,510 --> 01:13:06,520 Deci, patru int I este egal cu 0 g, în timp ce I este mai mică decât lungimea I, plus, plus. 1837 01:13:06,520 --> 01:13:07,150 Și now-- 1838 01:13:07,150 --> 01:13:10,920 1839 01:13:10,920 --> 01:13:11,420 ROB: Nisa. 1840 01:13:11,420 --> 01:13:14,030 Davin: OK, și acum aici vine carnea de codul nostru. 1841 01:13:14,030 --> 01:13:17,380 Astfel încât să puteți face de fapt acest principiu, într-o singură linie. 1842 01:13:17,380 --> 01:13:20,702 Deci, are cineva o idee de ceea ce vom face în continuare? 1843 01:13:20,702 --> 01:13:23,680 1844 01:13:23,680 --> 01:13:25,380 OK, așa că e în regulă. 1845 01:13:25,380 --> 01:13:35,860 Deci, ce facem noi să spunem sumă equals-- lasă-mă să sco această sumă over-- 1846 01:13:35,860 --> 01:13:50,010 este egal cu suma de 10 de ori plus-- suntem de gând să ia s minus am o 1847 01:13:50,010 --> 01:13:54,787 citat 0 un citat făcut, așa. 1848 01:13:54,787 --> 01:13:55,620 ROB: Foarte intuitiv. 1849 01:13:55,620 --> 01:13:56,980 1850 01:13:56,980 --> 01:13:57,880 >> Davin: ea zdrobit. 1851 01:13:57,880 --> 01:14:01,438 OK, deci someone-- am înțeles, am înțeles. 1852 01:14:01,438 --> 01:14:03,680 1853 01:14:03,680 --> 01:14:06,960 OK, deci acest lucru este clar în creștere. 1854 01:14:06,960 --> 01:14:08,320 1855 01:14:08,320 --> 01:14:09,450 Ce înseamnă acest lucru? 1856 01:14:09,450 --> 01:14:12,120 Deci, știe cineva ce înseamnă asta? 1857 01:14:12,120 --> 01:14:13,826 Poate toată lumea vedea acest lucru? 1858 01:14:13,826 --> 01:14:16,088 Nu, nimeni nu poate vedea acest lucru, OK. 1859 01:14:16,088 --> 01:14:17,390 1860 01:14:17,390 --> 01:14:18,340 Mă duc sa-- 1861 01:14:18,340 --> 01:14:20,506 >> ROB: am de gând să scrie cu formula doar aici. 1862 01:14:20,506 --> 01:14:23,140 Davin: OK, Rob va face pe calculator, care este distractiv. 1863 01:14:23,140 --> 01:14:26,889 1864 01:14:26,889 --> 01:14:27,514 ROB: Oh, Doamne. 1865 01:14:27,514 --> 01:14:34,340 1866 01:14:34,340 --> 01:14:35,010 Sau nu o voi face. 1867 01:14:35,010 --> 01:14:36,288 1868 01:14:36,288 --> 01:14:36,954 Davin: Stand by. 1869 01:14:36,954 --> 01:14:42,300 1870 01:14:42,300 --> 01:14:44,260 STUDENT: Am o întrebare. 1871 01:14:44,260 --> 01:14:45,348 Davin: Da, sigur. 1872 01:14:45,348 --> 01:14:46,223 STUDENT: [inaudibil]? 1873 01:14:46,223 --> 01:14:52,529 1874 01:14:52,529 --> 01:14:54,570 Davin: OK, asa ca de fapt, cum ar fi, pur și simplu, în general, 1875 01:14:54,570 --> 01:14:56,710 dacă ar fi să pună, cum ar fi, în această declarație int 1876 01:14:56,710 --> 01:14:59,770 Am egal cu lungime 0 virgulă este egal cu sterln, that-- 1877 01:14:59,770 --> 01:15:01,200 >> STUDENT: [inaudibil]. 1878 01:15:01,200 --> 01:15:03,585 >> Davin: Asta e bine, pentru că that-- 1879 01:15:03,585 --> 01:15:05,543 STUDENT: De ce v-ar chiar necesitatea de a utiliza lungime? 1880 01:15:05,543 --> 01:15:08,620 De ce nu am putea doar [inaudibil] sterln s, la fel ca în tot acest timp [inaudibil]? 1881 01:15:08,620 --> 01:15:09,460 >> Davin: Vrei să spui aici? 1882 01:15:09,460 --> 01:15:10,001 >> STUDENT: Da. 1883 01:15:10,001 --> 01:15:12,630 Davin: Pentru că fiecare de data aceasta pentru cursele buclă, 1884 01:15:12,630 --> 01:15:14,295 se va evalua aceasta conditie. 1885 01:15:14,295 --> 01:15:14,920 STUDENT: Corect. 1886 01:15:14,920 --> 01:15:16,836 Davin: Și dacă aveți sterln acolo, atunci e 1887 01:15:16,836 --> 01:15:19,510 Va trebui pentru a apela efectiv această funcție de fiecare dată. 1888 01:15:19,510 --> 01:15:21,090 Deci, în loc de doar comparându-l cu un int, 1889 01:15:21,090 --> 01:15:23,548 ai de gând să fie un apel funcțională și apoi comparându-l 1890 01:15:23,548 --> 01:15:24,510 la valoarea de returnare. 1891 01:15:24,510 --> 01:15:25,860 Da, asa e doar, da. 1892 01:15:25,860 --> 01:15:28,860 1893 01:15:28,860 --> 01:15:30,770 >> Frumos, OK, deci acum toată lumea poate vedea. 1894 01:15:30,770 --> 01:15:33,400 Ce does-- acest lucru este ca, asta este. 1895 01:15:33,400 --> 01:15:34,580 Aceasta este blocajul, chiar aici. 1896 01:15:34,580 --> 01:15:37,030 1897 01:15:37,030 --> 01:15:37,930 Ce înseamnă asta? 1898 01:15:37,930 --> 01:15:39,250 1899 01:15:39,250 --> 01:15:39,970 Ce fac? 1900 01:15:39,970 --> 01:15:41,890 1901 01:15:41,890 --> 01:15:42,880 Da, o idee? 1902 01:15:42,880 --> 01:15:43,482 Da? 1903 01:15:43,482 --> 01:15:45,692 >> STUDENT: Ei bine, asa ca atunci cand Intrați o matrice, 1904 01:15:45,692 --> 01:15:47,525 ai de gând să meargă de la stânga la dreapta, 1905 01:15:47,525 --> 01:15:51,786 deci ai de gând să meargă în zecimal de jos [neauzit]. 1906 01:15:51,786 --> 01:15:52,410 Davin: Exact. 1907 01:15:52,410 --> 01:15:55,063 STUDENT: Deci fiecare trebuie să se înmulțească 1908 01:15:55,063 --> 01:15:59,490 ceea ce ai văzut ca valoarea int de timpul pe care îl obține pentru a trece peste faptul că unul. 1909 01:15:59,490 --> 01:16:01,590 >> Davin: Perfect, perfect, astfel, de exemplu, să 1910 01:16:01,590 --> 01:16:05,376 spun că am dat Tu-- am de gând să scrie pe aici. 1911 01:16:05,376 --> 01:16:06,480 Nu, nu sunt. 1912 01:16:06,480 --> 01:16:08,640 Am de gând să scrie pe aici. 1913 01:16:08,640 --> 01:16:12,080 Să presupunem că ți-am dat 76, nu? 1914 01:16:12,080 --> 01:16:13,380 Să spunem că îți dau 76. 1915 01:16:13,380 --> 01:16:15,360 Asta e un șir pentru a începe cu, OK? 1916 01:16:15,360 --> 01:16:16,840 >> Deci, lungime este de ce? 1917 01:16:16,840 --> 01:16:18,060 1918 01:16:18,060 --> 01:16:19,060 2, nu? 1919 01:16:19,060 --> 01:16:20,290 Suma este 0. 1920 01:16:20,290 --> 01:16:21,600 Apoi ne-am sări în nostru de buclă. 1921 01:16:21,600 --> 01:16:24,187 OK, prima iterație a aceasta, ce o să fie? 1922 01:16:24,187 --> 01:16:25,270 O să fie sumă este 0. 1923 01:16:25,270 --> 01:16:27,180 Deci, concluzie ori 10 0. 1924 01:16:27,180 --> 01:16:28,500 Asta e lipsită de sens. 1925 01:16:28,500 --> 01:16:29,880 Atunci ce face acest lucru? 1926 01:16:29,880 --> 01:16:30,845 1927 01:16:30,845 --> 01:16:31,720 STUDENT: [inaudibil]. 1928 01:16:31,720 --> 01:16:33,110 1929 01:16:33,110 --> 01:16:37,430 >> Davin: O să rândul său, că personaj într-un număr întreg, nu? 1930 01:16:37,430 --> 01:16:42,160 E un fel de cu dumneavoastră problemă set-- acest luminii, 1931 01:16:42,160 --> 01:16:44,170 e un fel de cu problemă setat la Visioneer. 1932 01:16:44,170 --> 01:16:45,980 Ai de a face cu valori ASCII. 1933 01:16:45,980 --> 01:16:48,520 Deci, dacă eu vă dau, cum ar fi, un șapte, dar e un personaj, 1934 01:16:48,520 --> 01:16:50,965 și vrei să știi, OK, ce cifră este asta? 1935 01:16:50,965 --> 01:16:53,540 1936 01:16:53,540 --> 01:16:54,910 Da, ai putea, da. 1937 01:16:54,910 --> 01:16:55,900 Deci, ce cifră este asta? 1938 01:16:55,900 --> 01:16:59,550 Ai putea scădea de la 0, dar tu Trebuie să scădea 0, caracterul. 1939 01:16:59,550 --> 01:17:01,425 >> Și în cazul în care unii oameni se repede la ei sunt 1940 01:17:01,425 --> 01:17:04,260 cum ar fi, OK, bine, nu am să știu valorile ASCII pentru acest test? 1941 01:17:04,260 --> 01:17:06,218 Nu, cu siguranta nu trebuie să știe ASCII 1942 01:17:06,218 --> 01:17:09,520 valorile, cum ar fi, litere mici o, majuscule A, zero. 1943 01:17:09,520 --> 01:17:12,060 >> ROB: Nu există nici un motiv pentru a vreodată a pus acest lucru pe foaia de ieftin. 1944 01:17:12,060 --> 01:17:14,226 >> Davin: Categoric nu deșeuri spațiu cu acest lucru. 1945 01:17:14,226 --> 01:17:18,090 Puteți literally-- doar locul de a spune 48, la fel ca dreapta sus 1946 01:17:18,090 --> 01:17:24,630 acolo, care este echivalent cu spune unul, o apostrof, 1947 01:17:24,630 --> 01:17:27,680 cum ar fi faptul că, exact la fel. 1948 01:17:27,680 --> 01:17:34,106 >> ROB: Ai putea crede aproape de ea ca if-- Dumnezeu, am nevoie meu, 1949 01:17:34,106 --> 01:17:37,490 oops-- ai putea gândi aproape de ea ca și cum am avea ceva de genul asta hash 1950 01:17:37,490 --> 01:17:39,755 defini 0 la 48. 1951 01:17:39,755 --> 01:17:41,320 1952 01:17:41,320 --> 01:17:42,030 Că nu va funcționa. 1953 01:17:42,030 --> 01:17:45,502 Dar cred ca e singur citat 0 citat unic, și pentru toate caracterele. 1954 01:17:45,502 --> 01:17:47,960 Ganditi-va ca o constantă care reprezintă acea valoare ASCII. 1955 01:17:47,960 --> 01:17:49,080 >> Davin: Da. 1956 01:17:49,080 --> 01:17:52,820 OK, deci prima dată prin intermediul, așa cu 76-- astfel pentru prima dată prin intermediul, 1957 01:17:52,820 --> 01:17:57,260 aceasta este doar caracterul 7 minus caracterul 0, 1958 01:17:57,260 --> 01:18:00,420 și cele șapte integers-- bine, cei 1959 01:18:00,420 --> 01:18:04,030 sunt șapte spații distanță de altele pe tabela ASCII sau orice altceva. 1960 01:18:04,030 --> 01:18:06,770 Așa că o să se întoarcă o int de 7. 1961 01:18:06,770 --> 01:18:08,720 Deci, acum, sumă egală cu 7. 1962 01:18:08,720 --> 01:18:10,830 >> OK, bine, hai să sari în acest timp de buclă din nou. 1963 01:18:10,830 --> 01:18:13,010 OK, acum e sumă de ori 10. 1964 01:18:13,010 --> 01:18:15,800 Deci, tu ești în mod eficient deplasează 7 spre stânga. 1965 01:18:15,800 --> 01:18:17,542 Asta face sens? 1966 01:18:17,542 --> 01:18:19,250 Ești în mod eficient se deplasează spre stânga. 1967 01:18:19,250 --> 01:18:21,790 >> Și apoi add-- acest va fi de 6 minus 0. 1968 01:18:21,790 --> 01:18:22,650 Asta 6. 1969 01:18:22,650 --> 01:18:24,752 Asa ca va fi de 70 plus 6. 1970 01:18:24,752 --> 01:18:25,996 76, asta e numărul tău. 1971 01:18:25,996 --> 01:18:28,370 Deci, indiferent de ce număr Ți-am dat, e doar încet 1972 01:18:28,370 --> 01:18:31,610 va schimba valorile mai mari la stânga, 1 factor de 10 1973 01:18:31,610 --> 01:18:35,525 de fiecare dată în bucla for, și apoi se adaugă pe cât este necesar. 1974 01:18:35,525 --> 01:18:37,350 1975 01:18:37,350 --> 01:18:37,865 >> În spate? 1976 01:18:37,865 --> 01:18:40,240 STUDENT: Noi nu trebuie să faci orice verificare în program? 1977 01:18:40,240 --> 01:18:41,580 1978 01:18:41,580 --> 01:18:44,302 >> ROB: Deci, pe cât de verificare merge pentru programul, 1979 01:18:44,302 --> 01:18:46,510 ne-ar spune destul de mult ceea ce ai nevoie pentru a verifica. 1980 01:18:46,510 --> 01:18:48,670 Dacă noi nu vă spun nimic, apoi, în general, 1981 01:18:48,670 --> 01:18:50,320 Presupun că ai să verificați cele mai multe lucruri. 1982 01:18:50,320 --> 01:18:54,772 Ca s-ar putea, doar pentru a fi în siguranță, voi Probabil ar trebui să verifice hei, este nul s? 1983 01:18:54,772 --> 01:18:56,230 Atunci am nici o idee ce să se întoarcă. 1984 01:18:56,230 --> 01:18:58,814 Dar ne-ar spune acest gen de lucruri. 1985 01:18:58,814 --> 01:18:59,480 0, nu știu. 1986 01:18:59,480 --> 01:19:02,786 >> Davin: Și de ce vrei să verificați din nou dacă e egal cu zero? 1987 01:19:02,786 --> 01:19:03,660 STUDENT: [inaudibil]. 1988 01:19:03,660 --> 01:19:04,880 Davin: Din cauza stea char. 1989 01:19:04,880 --> 01:19:05,510 E un pointer. 1990 01:19:05,510 --> 01:19:09,240 Deci, un perfect acceptabil declarație, aș putea spune, OK, 1991 01:19:09,240 --> 01:19:11,917 s este egal nul, deoarece ar putea fi un pointer la null. 1992 01:19:11,917 --> 01:19:14,250 Deci, ori de câte ori aveți indicii în calea ta în acest fel, 1993 01:19:14,250 --> 01:19:15,420 Probabil ar trebui să verificați. 1994 01:19:15,420 --> 01:19:18,461 Pentru că dacă nu se verifică dacă, și apoi atunci du-te in pentru buclă, 1995 01:19:18,461 --> 01:19:20,100 si tu esti sco doing-- jos. 1996 01:19:20,100 --> 01:19:21,980 1997 01:19:21,980 --> 01:19:22,920 Scoot jos. 1998 01:19:22,920 --> 01:19:23,860 >> ROB: Îmi pare rău, asta este. 1999 01:19:23,860 --> 01:19:25,860 >> Davin: Și așa, cum ar fi, în cazul în care aceasta este nul, iar apoi 2000 01:19:25,860 --> 01:19:28,267 face acest lucru, ceea ce eroare ai de gând pentru a obține? 2001 01:19:28,267 --> 01:19:29,850 STUDENT: Vei primi un defect set. 2002 01:19:29,850 --> 01:19:31,250 Davin: Ai de gând să se stabilească vina, dreapta, pentru că ești 2003 01:19:31,250 --> 01:19:32,616 încercând să indice în nul. 2004 01:19:32,616 --> 01:19:35,240 Deci, ai de gând să încerce să indice în memorie pe care nu le dețineți. 2005 01:19:35,240 --> 01:19:39,550 Deci, aceasta, în cazul în care acest lucru este nul, și faceți acest lucru, veți ciclu. 2006 01:19:39,550 --> 01:19:43,656 >> ROB: Cred, de asemenea, cu privire la examenul din care am pus această întrebare, am să vă spun 2007 01:19:43,656 --> 01:19:45,655 pe care le poate presupune doar este un număr pozitiv. 2008 01:19:45,655 --> 01:19:48,270 Deoarece atoi este, de asemenea, de așteptat să se ocupe de numere negative, 2009 01:19:48,270 --> 01:19:49,686 deci va trebui să caz ​​special. 2010 01:19:49,686 --> 01:19:53,080 Hei, este primul caracter o cratimă, în care caz, OK, 2011 01:19:53,080 --> 01:19:54,839 acum este un număr întreg negativ. 2012 01:19:54,839 --> 01:19:56,380 Am să-ți spun aceste tipuri de lucruri. 2013 01:19:56,380 --> 01:19:58,005 Am să-ți spun ce aveți nevoie să se ocupe. 2014 01:19:58,005 --> 01:19:59,310 Davin: Da. 2015 01:19:59,310 --> 01:20:02,530 Deci, eu sunt sigur că unii oameni ar putea have-- dacă ați început uita la examene vechi, 2016 01:20:02,530 --> 01:20:03,900 Ai văzut sterln. 2017 01:20:03,900 --> 01:20:05,120 Asta e una populară. 2018 01:20:05,120 --> 01:20:09,790 Și cred că în sterln, trebuia să face acest cec pentru nul, revenirea 2019 01:20:09,790 --> 01:20:10,950 0 sau ceva de genul asta. 2020 01:20:10,950 --> 01:20:11,940 Cum ar fi, ai avut pentru a verifica nul. 2021 01:20:11,940 --> 01:20:14,230 Și dacă nu, asta a fost punctul de pe pe testul. 2022 01:20:14,230 --> 01:20:16,750 2023 01:20:16,750 --> 01:20:19,500 Așa că, oricum, nu toată lumea se simt bine cu atoi? 2024 01:20:19,500 --> 01:20:21,112 2025 01:20:21,112 --> 01:20:22,820 Vrea cineva să du-te peste Piese din nou? 2026 01:20:22,820 --> 01:20:23,815 2027 01:20:23,815 --> 01:20:25,565 ROB: Oh, da, cred că am, de asemenea, să vă spun te 2028 01:20:25,565 --> 01:20:28,565 se poate presupune că tot este-- că acestea sunt de fapt introducerea unui număr, 2029 01:20:28,565 --> 01:20:32,821 că nu trebuie să vă faceți griji, cum ar fi, scrisori fiind în șir, așa. 2030 01:20:32,821 --> 01:20:33,320 Davin: Da. 2031 01:20:33,320 --> 01:20:33,922 Da? 2032 01:20:33,922 --> 01:20:35,713 STUDENT: Poți să mergi peste încă o dată, atunci când 2033 01:20:35,713 --> 01:20:37,860 utilizați citat dublu și single citat? 2034 01:20:37,860 --> 01:20:41,290 >> Davin: Sigur, așa ghilimele, foarte pur și simplu, este intre ghilimele sunt siruri de caractere. 2035 01:20:41,290 --> 01:20:43,370 Deci, dacă dublați citat ceva, asta e un șir. 2036 01:20:43,370 --> 01:20:48,270 Așa că, cum ar fi, dacă am avut acest 0 aici, și am făcut acest lucru, care este un șir. 2037 01:20:48,270 --> 01:20:50,060 Asta nu mai este un personaj. 2038 01:20:50,060 --> 01:20:54,816 Deci, eu nu pot găsi această valoare pe ASCII meu diagramă, pentru că este un șir de caractere, da. 2039 01:20:54,816 --> 01:20:57,770 2040 01:20:57,770 --> 01:20:59,480 >> OK, orice alte întrebări? 2041 01:20:59,480 --> 01:21:00,405 Da? 2042 01:21:00,405 --> 01:21:02,345 >> STUDENT: Deci ai a răspuns deja acest lucru, 2043 01:21:02,345 --> 01:21:05,255 dar ca, atunci când suntem de fapt scris acest lucru pe test, 2044 01:21:05,255 --> 01:21:08,165 vrei să ne scrie cu slash zerouri [inaudibil]? 2045 01:21:08,165 --> 01:21:11,041 2046 01:21:11,041 --> 01:21:11,540 Davin: Nu. 2047 01:21:11,540 --> 01:21:13,800 Întrebarea a fost ar trebui să vă încearcă o bară oblică prin zerouri 2048 01:21:13,800 --> 01:21:14,890 pentru a indica dacă sunt zero? 2049 01:21:14,890 --> 01:21:15,890 Nu, ne vom da seama. 2050 01:21:15,890 --> 01:21:16,940 2051 01:21:16,940 --> 01:21:19,530 Da, mulțumesc, sunt bine. 2052 01:21:19,530 --> 01:21:20,860 OK, nimic altceva? 2053 01:21:20,860 --> 01:21:25,060 Vrea cineva sa-- așa cred ne-am rula un pic în timp. 2054 01:21:25,060 --> 01:21:27,305 Vrei sa vezi un altul, sau? 2055 01:21:27,305 --> 01:21:28,096 STUDENT: RandomInt. 2056 01:21:28,096 --> 01:21:29,230 2057 01:21:29,230 --> 01:21:30,750 >> Davin: RandomInt, OK, exact. 2058 01:21:30,750 --> 01:21:32,975 Deci, hai sa facem RandomInt. 2059 01:21:32,975 --> 01:21:34,395 2060 01:21:34,395 --> 01:21:35,270 O voi face aici. 2061 01:21:35,270 --> 01:21:36,770 2062 01:21:36,770 --> 01:21:39,210 Deci, RandomInt este de fapt mult mai simplu. 2063 01:21:39,210 --> 01:21:43,578 Cred că atoi este, probabil, cel mai dificil pe care le-am cerut în anii anteriori. 2064 01:21:43,578 --> 01:21:44,453 STUDENT: [inaudibil]. 2065 01:21:44,453 --> 01:21:46,660 2066 01:21:46,660 --> 01:21:47,161 >> Davin: Ce? 2067 01:21:47,161 --> 01:21:49,493 ROB: Văd dacă e un fel de vizibilă de pe aici. 2068 01:21:49,493 --> 01:21:50,040 Davin: Este? 2069 01:21:50,040 --> 01:21:52,500 ROB: Nu cred că e going-- cred este de gând să fugi spre dreapta. 2070 01:21:52,500 --> 01:21:53,791 Davin: OK, așa că voi face asta. 2071 01:21:53,791 --> 01:21:56,250 Și apoi pur și simplu pune-l pe ecran. 2072 01:21:56,250 --> 01:21:57,150 >> ROB: În regulă. 2073 01:21:57,150 --> 01:21:58,190 >> Davin: Vrei să fii scrib meu? 2074 01:21:58,190 --> 01:21:58,600 >> ROB: Da. 2075 01:21:58,600 --> 01:21:59,100 >> Davin: Nisa. 2076 01:21:59,100 --> 01:22:01,210 2077 01:22:01,210 --> 01:22:02,727 OK, pot să șterg asta? 2078 01:22:02,727 --> 01:22:04,188 >> STUDENT: Da. 2079 01:22:04,188 --> 01:22:05,162 >> Davin: E atât de greu. 2080 01:22:05,162 --> 01:22:10,032 2081 01:22:10,032 --> 01:22:12,062 (CANTO) Te descurci ce faci. 2082 01:22:12,062 --> 01:22:14,454 Și de a face ceea ce tu nu faci. 2083 01:22:14,454 --> 01:22:14,954 Bine. 2084 01:22:14,954 --> 01:22:19,790 2085 01:22:19,790 --> 01:22:22,930 >> OK, dacă îmi amintesc corect, pe testul RandomInt a fost ca, 2086 01:22:22,930 --> 01:22:26,190 OK, am de gând să vă dau două numere, cum ar fi un o și a b. 2087 01:22:26,190 --> 01:22:30,380 Și vreau să-mi dai un RandomInt între aceste numere. 2088 01:22:30,380 --> 01:22:33,440 Deci, RandomInt se întâmplă să ia două Numere 2089 01:22:33,440 --> 01:22:41,690 așa RandomInt-- și este de gând să se întoarcă un int. 2090 01:22:41,690 --> 01:22:42,930 >> Deci, ceea ce este valoarea de retur? 2091 01:22:42,930 --> 01:22:44,151 Tocmai ți-am spus. 2092 01:22:44,151 --> 01:22:44,650 Int, nu? 2093 01:22:44,650 --> 01:22:46,400 2094 01:22:46,400 --> 01:22:49,260 Ca și aceasta, și atunci e de gând să ia două int. 2095 01:22:49,260 --> 01:22:56,301 Deci, o să ia int a și int b, așa. 2096 01:22:56,301 --> 01:22:58,217 Deci, ce este RandomInt de gând să faci este sa mergi 2097 01:22:58,217 --> 01:23:02,440 să se întoarcă o valoare aleatoare între aceste două valori. 2098 01:23:02,440 --> 01:23:05,140 Deci, o să fie mai mare decât o, mai puțin de b. 2099 01:23:05,140 --> 01:23:09,020 Deci, eu cred că, probabil, puteți presupune că a este cea mai mică dintre cele două valori. 2100 01:23:09,020 --> 01:23:12,210 Deci, dacă avem de-a face cu dezordine, ce funcție 2101 01:23:12,210 --> 01:23:14,825 am văzut că ne dă lucruri aleatorii? 2102 01:23:14,825 --> 01:23:15,450 STUDENT: Drand. 2103 01:23:15,450 --> 01:23:16,506 Davin: Drand, exact. 2104 01:23:16,506 --> 01:23:18,630 Deci, ai de gând să, probabil, doriți să utilizați drand ta. 2105 01:23:18,630 --> 01:23:19,940 2106 01:23:19,940 --> 01:23:29,160 Astfel încât să puteți spune aleatoare int, iar noi vom doar spune că este egal cu 0 chiar acum. 2107 01:23:29,160 --> 01:23:30,170 2108 01:23:30,170 --> 01:23:38,690 Și ei ne vor spune, OK, egal aleatoare drand 48. 2109 01:23:38,690 --> 01:23:39,747 2110 01:23:39,747 --> 01:23:40,830 Și ce se mai intoarce acest lucru? 2111 01:23:40,830 --> 01:23:43,742 Ce face această funcție vă dau? 2112 01:23:43,742 --> 01:23:45,610 >> STUDENT: Între 0 și 1. 2113 01:23:45,610 --> 01:23:47,870 >> Davin: Da, între 0 și 1. 2114 01:23:47,870 --> 01:23:48,890 Deci, o să be-- 2115 01:23:48,890 --> 01:23:51,070 >> ROB: Și asta este-- cred ne-ar-ți spun asta. 2116 01:23:51,070 --> 01:23:52,670 Cum ar fi, aveți posibilitatea să utilizați drand 48. 2117 01:23:52,670 --> 01:23:54,350 Puteți verifica acest lucru la examen trecut. 2118 01:23:54,350 --> 01:23:56,720 Dar am, probabil, ați spune se poate folosi drand 48, care 2119 01:23:56,720 --> 01:23:58,790 returnează un flotor între 0 și 1. 2120 01:23:58,790 --> 01:24:00,830 >> Davin: Da, da, eu sunt destul de sigur cu privire la examenul 2121 01:24:00,830 --> 01:24:03,860 vă spune, probabil, doriți să utilizați drand, da. 2122 01:24:03,860 --> 01:24:07,041 Deci, o să se întoarcă o anumită valoare între 0 și 1. 2123 01:24:07,041 --> 01:24:08,790 Și atunci ce ești O să vrei să faci? 2124 01:24:08,790 --> 01:24:16,360 Ei bine, vrei să multiplice by-- stai, cred că e așa, îmi pare rău. 2125 01:24:16,360 --> 01:24:18,018 Voi face doar asta. 2126 01:24:18,018 --> 01:24:19,410 Nu știu. 2127 01:24:19,410 --> 01:24:22,240 >> Deci, b minus o. 2128 01:24:22,240 --> 01:24:23,310 2129 01:24:23,310 --> 01:24:24,490 Deci, de ce b minus o? 2130 01:24:24,490 --> 01:24:26,110 2131 01:24:26,110 --> 01:24:30,490 Deci, să spunem drand vă oferă înapoi un OK int--, voi face doar restul, 2132 01:24:30,490 --> 01:24:33,380 astfel, plus o. 2133 01:24:33,380 --> 01:24:36,130 Deci, ce does-- y este b minus o. 2134 01:24:36,130 --> 01:24:40,670 Deci, haideți să spunem că drand vă oferă înapoi valoarea maximă pe care ar putea, eventual, 2135 01:24:40,670 --> 01:24:41,410 voi da. 2136 01:24:41,410 --> 01:24:42,409 Ce se că va fi? 2137 01:24:42,409 --> 01:24:43,010 STUDENT: 1. 2138 01:24:43,010 --> 01:24:44,430 >> Davin: 1, dreapta? 2139 01:24:44,430 --> 01:24:47,880 Deci, în cazul în care acest lucru este de 1, și tu ești înmulțirea cu b minus o, 2140 01:24:47,880 --> 01:24:50,110 bine, asta e doar diferență între minus A. 2141 01:24:50,110 --> 01:24:52,870 Și dacă apoi se adaugă faptul că înapoi pe o, asta este ceea ce? 2142 01:24:52,870 --> 01:24:54,290 2143 01:24:54,290 --> 01:24:55,180 Este practic b. 2144 01:24:55,180 --> 01:24:56,435 2145 01:24:56,435 --> 01:24:57,310 Asta face sens? 2146 01:24:57,310 --> 01:24:57,851 >> STUDENT: Da. 2147 01:24:57,851 --> 01:24:59,480 2148 01:24:59,480 --> 01:25:02,170 >> Davin: Deci, dacă acest lucru este maximă valoare ar putea fi, eventual, 2149 01:25:02,170 --> 01:25:03,175 aceasta va fi de 1. 2150 01:25:03,175 --> 01:25:04,122 2151 01:25:04,122 --> 01:25:06,330 Și atunci aceasta este doar diferență între cele două. 2152 01:25:06,330 --> 01:25:11,410 Adaugă o, astfel încât acesta este de gând să se întoarcă la întâmplare. 2153 01:25:11,410 --> 01:25:15,000 2154 01:25:15,000 --> 01:25:18,620 Iar în cazul de colț, ce drand vă oferă înapoi 1, 2155 01:25:18,620 --> 01:25:20,970 întâmplare va fi doar fi eficient b. 2156 01:25:20,970 --> 01:25:22,700 Dar asta e maxim se poate. 2157 01:25:22,700 --> 01:25:27,420 Deci, în cazul în care va fi mai mică că, așa să spunem că la fel ca ei 0,9, 2158 01:25:27,420 --> 01:25:31,080 astfel încât atunci 0,9 ori b minus o va fi mai puțin 2159 01:25:31,080 --> 01:25:33,230 decât diferența dintre b minus o. 2160 01:25:33,230 --> 01:25:35,830 >> Și apoi, dacă adaug că pe o, atunci acea valoare este 2161 01:25:35,830 --> 01:25:38,986 O să fie mai mare decât a, deoarece când adăugați ceva pe ea, 2162 01:25:38,986 --> 01:25:40,360 dar aceasta va fi mai mică b. 2163 01:25:40,360 --> 01:25:41,430 2164 01:25:41,430 --> 01:25:44,420 Deci, ai de gând pentru a obține o întâmplare număr, pentru că suni drand. 2165 01:25:44,420 --> 01:25:48,000 Și asta rand, acest număr aleator este Va fi undeva între o 2166 01:25:48,000 --> 01:25:49,342 și b. 2167 01:25:49,342 --> 01:25:50,780 Asta face sens? 2168 01:25:50,780 --> 01:25:52,990 >> ROB: Doar să-l pună în cifre concrete, așa 2169 01:25:52,990 --> 01:25:55,450 să spunem că vrem să alegeți o număr aleatoriu între 7 și 10. 2170 01:25:55,450 --> 01:25:56,960 Deci, b minus o este gama noastră. 2171 01:25:56,960 --> 01:26:00,150 Deci, există o gamă de trei Numerele vrem a alege de la. 2172 01:26:00,150 --> 01:26:03,290 Și apoi înmulțirea că între 0 și 1 1, 2173 01:26:03,290 --> 01:26:07,430 în cazul în care atunci ne dă some-- să spunem că ne dă 1,5. 2174 01:26:07,430 --> 01:26:10,670 >> Apoi 1,5, vrem să mergem 7-10. 2175 01:26:10,670 --> 01:26:14,470 Deci, 1,5 plus 7 Ne așteaptă înapoi în noastre de la 7 la 10 gama. 2176 01:26:14,470 --> 01:26:17,580 Și apoi ne-l stocarea interiorul un număr întreg, așa că trunchiat până la 8. 2177 01:26:17,580 --> 01:26:18,790 Și apoi ne întoarcem doar asta. 2178 01:26:18,790 --> 01:26:21,310 Deci, b minus o este gama noastră. 2179 01:26:21,310 --> 01:26:25,770 o se deplasează în sus, în numere pe care ne-o dorim în acel interval. 2180 01:26:25,770 --> 01:26:30,540 Deci, între 7 și 10, și apoi ne-am poate reveni ceea ce am termina cu. 2181 01:26:30,540 --> 01:26:32,684 >> Davin: Da, frumos. 2182 01:26:32,684 --> 01:26:34,470 >> ROB: Mulțumesc. 2183 01:26:34,470 --> 01:26:35,628 >> Davin: Da, ce sa întâmplat? 2184 01:26:35,628 --> 01:26:39,746 >> STUDENT: Nu l-am rula la orice tip de Erori ASCII când we're-- dacă drand este 2185 01:26:39,746 --> 01:26:40,996 revenind un flotor [inaudibil]. 2186 01:26:40,996 --> 01:26:42,470 2187 01:26:42,470 --> 01:26:45,360 >> ROB: Deci, la fel ca Rob a spus, deoarece aleatoare nu este un int, 2188 01:26:45,360 --> 01:26:47,080 astfel drand va fi un float. 2189 01:26:47,080 --> 01:26:48,470 Deci, și apoi se înmulțește afară. 2190 01:26:48,470 --> 01:26:50,507 Și s-ar putea obține unele un fel de numere float. 2191 01:26:50,507 --> 01:26:51,840 Și apoi o să trunchia. 2192 01:26:51,840 --> 01:26:52,339 >> STUDENT: OK. 2193 01:26:52,339 --> 01:26:53,019 Davin: Da. 2194 01:26:53,019 --> 01:26:56,060 ROB: Și dacă compilatorul ar avertiza tu despre, cum ar fi, pierdere de precizie, 2195 01:26:56,060 --> 01:26:58,986 doar aruncat o int în acolo, și atunci e bine. 2196 01:26:58,986 --> 01:27:00,398 2197 01:27:00,398 --> 01:27:00,898 Davin: Da? 2198 01:27:00,898 --> 01:27:02,332 2199 01:27:02,332 --> 01:27:04,722 >> STUDENT: Va avea aceeași probabilitate de a obține, 2200 01:27:04,722 --> 01:27:06,156 cum ar fi, b sau un [inaudibil]? 2201 01:27:06,156 --> 01:27:08,080 2202 01:27:08,080 --> 01:27:10,980 >> ROB: Deci, este-- Eu sunt de fapt întrebam este RandomInt ar trebui 2203 01:27:10,980 --> 01:27:14,362 să fie un număr de la o la mai puțin de b? 2204 01:27:14,362 --> 01:27:16,820 Ca și, dacă este între 7 și 10, care sunt posibilitatile? 2205 01:27:16,820 --> 01:27:18,454 7, 8, și 9, sau 7, 8, 9, 10? 2206 01:27:18,454 --> 01:27:19,120 Davin: Am uitat. 2207 01:27:19,120 --> 01:27:19,880 Pe problemă set-- 2208 01:27:19,880 --> 01:27:20,570 >> ROB: Cred că e 7, 8, 9. 2209 01:27:20,570 --> 01:27:22,785 >> Davin: Se spune în mod specific cuiva inclusiv și una exclusivă. 2210 01:27:22,785 --> 01:27:23,110 >> ROB: Da. 2211 01:27:23,110 --> 01:27:23,670 >> Davin: Dar eu don't-- eu sunt not-- 2212 01:27:23,670 --> 01:27:25,878 >> ROB: Deci, eu cred că acestea sunt nu sunt incluse, caz în care, 2213 01:27:25,878 --> 01:27:28,152 există un egal probabilitate de 7, 8, și 9. 2214 01:27:28,152 --> 01:27:29,360 Nu e nici o probabilitate de 10. 2215 01:27:29,360 --> 01:27:31,770 2216 01:27:31,770 --> 01:27:32,270 Davin: Da? 2217 01:27:32,270 --> 01:27:33,395 STUDENT: Am o întrebare. 2218 01:27:33,395 --> 01:27:38,090 Ne dorim să definim o funcție returnează nici o valoare, ci o matrice. 2219 01:27:38,090 --> 01:27:41,020 Atunci ce ar fi sintaxă după întoarcă? 2220 01:27:41,020 --> 01:27:44,604 >> Davin: OK, deci atunci would-- după întoarcere? 2221 01:27:44,604 --> 01:27:47,020 Deci, să spunem că ați fi declarat o serie undeva acolo sus. 2222 01:27:47,020 --> 01:27:49,708 Apoi, se va întoarce doar denumirea de matrice. 2223 01:27:49,708 --> 01:27:50,676 >> STUDENT: OK, mulțumesc. 2224 01:27:50,676 --> 01:27:51,718 Apoi să se întoarcă doar cu un-- 2225 01:27:51,718 --> 01:27:52,759 Davin: Oh, așteptați, atât de rău. 2226 01:27:52,759 --> 01:27:54,620 Întrebarea era cum vrei sa returneze un array. 2227 01:27:54,620 --> 01:27:56,170 >> ROB: Deși nu a putut fie o matrice declarat 2228 01:27:56,170 --> 01:27:57,260 pe stivă sau ceva de genul asta. 2229 01:27:57,260 --> 01:27:59,510 Ar trebui să fie ceva malloced, pentru că malloc 2230 01:27:59,510 --> 01:28:01,610 este cum ai ajuns în jurul valorii de alocare de memorie automată. 2231 01:28:01,610 --> 01:28:02,109 >> Davin: Da. 2232 01:28:02,109 --> 01:28:03,433 2233 01:28:03,433 --> 01:28:04,933 ROB: Cum obții în jurul valorii de domeniul de aplicare la nivel local. 2234 01:28:04,933 --> 01:28:09,670 2235 01:28:09,670 --> 01:28:11,550 >> Davin: Dar v-ar doar reveni name-- sale 2236 01:28:11,550 --> 01:28:17,890 >> STUDENT: [inaudibil] nu este o de valoare, de exemplu, două numere, astfel 2237 01:28:17,890 --> 01:28:18,390 [Inaudibil]. 2238 01:28:18,390 --> 01:28:19,590 >> Davin: Nu se pot întoarce număr multiple. 2239 01:28:19,590 --> 01:28:20,850 Nu poți, cum ar fi, return-- 2240 01:28:20,850 --> 01:28:23,630 >> STUDENT: Am vorbit despre revenirea o matrice sau ceva de genul asta. 2241 01:28:23,630 --> 01:28:26,050 >> Davin: Da, întrebarea este pot reveni mai multe valori. 2242 01:28:26,050 --> 01:28:27,460 Nu puteți reveni mai multe valori. 2243 01:28:27,460 --> 01:28:30,270 Tu nu se poate, cum ar fi, întoarce o atunci a reveni b sau ceva de genul asta. 2244 01:28:30,270 --> 01:28:32,710 Pentru că după ce te vei întoarce, voi a reveni din funcția. 2245 01:28:32,710 --> 01:28:35,790 Și apoi funcția se face, și ca Rob a spus, este pe stiva. 2246 01:28:35,790 --> 01:28:38,260 >> Deci tot ce memorie doar devine revenit la calculator. 2247 01:28:38,260 --> 01:28:40,025 Totul devine uitat, de fapt. 2248 01:28:40,025 --> 01:28:41,480 2249 01:28:41,480 --> 01:28:44,430 Deci, dacă doriți să reveniți mai multe valori, va trebui să returneze un array, 2250 01:28:44,430 --> 01:28:45,971 Și modul în care face acest lucru este mallocing. 2251 01:28:45,971 --> 01:28:48,780 Și apoi se va întoarce x ca asta. 2252 01:28:48,780 --> 01:28:50,280 Practic, te vei întoarce doar numele. 2253 01:28:50,280 --> 01:28:51,620 Și când te vei întoarce ceva de genul asta, ești 2254 01:28:51,620 --> 01:28:53,200 nu se întorc de fapt valoarea. 2255 01:28:53,200 --> 01:28:55,430 >> Deci, să spunem că stocat valorile într-o matrice. 2256 01:28:55,430 --> 01:28:57,910 Nu ești de fapt revenind aceste valori. 2257 01:28:57,910 --> 01:29:01,515 Cum ar fi, dacă m-am întors un int, eu sunt revenind într-adevăr copii ale valorilor. 2258 01:29:01,515 --> 01:29:02,017 2259 01:29:02,017 --> 01:29:03,850 Dar dacă i s-ar întoarce ceva de genul asta, 2260 01:29:03,850 --> 01:29:06,450 Mă întorc o referință pentru aceste valori. 2261 01:29:06,450 --> 01:29:09,090 Deci, eu sunt întorc, de fapt, un adresa de memorie a valorilor. 2262 01:29:09,090 --> 01:29:10,079 Asta face sens? 2263 01:29:10,079 --> 01:29:10,620 STUDENT: Da. 2264 01:29:10,620 --> 01:29:11,120 Davin: Nisa. 2265 01:29:11,120 --> 01:29:12,760 2266 01:29:12,760 --> 01:29:13,410 Da? 2267 01:29:13,410 --> 01:29:15,430 >> STUDENT: Când ești folosind drand aici, 2268 01:29:15,430 --> 01:29:17,660 aveți de a pune srand înainte de asta? 2269 01:29:17,660 --> 01:29:20,320 >> Davin: Nu, nu, eu nu cred așa. 2270 01:29:20,320 --> 01:29:23,040 >> ROB: Da, deci aveți să spun ceva despre srand? 2271 01:29:23,040 --> 01:29:26,900 Valoarea implicită de pe care nu spune srand la toate este de a face doar srand de nul. 2272 01:29:26,900 --> 01:29:29,350 Deci, drand pe cont propriu de lucru va. 2273 01:29:29,350 --> 01:29:33,759 Și se va semințelor în mod automat cu ora actuală, este ceea ce se folosește. 2274 01:29:33,759 --> 01:29:35,175 2275 01:29:35,175 --> 01:29:35,675 Davin: Da? 2276 01:29:35,675 --> 01:29:40,950 STUDENT: Îți [inaudibil] cu numerele? 2277 01:29:40,950 --> 01:29:42,570 Davin: Da, se poate. 2278 01:29:42,570 --> 01:29:46,770 STUDENT: Deci, ai putea spune, cum ar fi, de 4 ori 2. 2279 01:29:46,770 --> 01:29:50,280 Chestia e că nu își poate asuma apoi un int este de patru bytes. 2280 01:29:50,280 --> 01:29:51,020 Only-- 2281 01:29:51,020 --> 01:29:53,830 >> Davin: Vreau să spun, pentru testul poți. 2282 01:29:53,830 --> 01:29:54,830 [Râde] 2283 01:29:54,830 --> 01:29:55,780 >> ROB: Mm, nr. 2284 01:29:55,780 --> 01:29:56,780 Davin: Da, da, poți. 2285 01:29:56,780 --> 01:30:00,197 În cazul în care vă întrebați cât de mare o int este, tu nu poate fi, cum ar fi, patru sau opt. 2286 01:30:00,197 --> 01:30:02,030 ROB: Oh, așa că, dacă Întrebarea este în mod specific, 2287 01:30:02,030 --> 01:30:04,857 ca, în cazul în care este o problemă de codificare, ar trebui să spui dimensiune de int. 2288 01:30:04,857 --> 01:30:06,690 Dacă este o tabelă, sau se spune cât de multe bytes, 2289 01:30:06,690 --> 01:30:08,808 nu ar trebui să completeze în mărime de int. 2290 01:30:08,808 --> 01:30:11,278 >> STUDENȚI: [râde] 2291 01:30:11,278 --> 01:30:18,210 2292 01:30:18,210 --> 01:30:20,580 >> Davin: Corect, așa că de ce este mărime de int importante aici? 2293 01:30:20,580 --> 01:30:23,085 Deci, cum ar fi, dacă vom 32 de biți procesor sau ceva de genul asta, 2294 01:30:23,085 --> 01:30:24,300 atunci va fi de patru bytes. 2295 01:30:24,300 --> 01:30:26,342 Dar pe unele dintre cele mai noi chestii, ar putea fi ce? 2296 01:30:26,342 --> 01:30:27,383 Ar putea fi opt, nu? 2297 01:30:27,383 --> 01:30:30,550 Deci, asta: dacă codul de doar patru greu, apoi pe unele mașini, se va lucra. 2298 01:30:30,550 --> 01:30:32,180 Unele mașini, acesta nu va funcționa. 2299 01:30:32,180 --> 01:30:35,270 Dar dacă pe testul de suntem cum ar fi cât de mare este o int? 2300 01:30:35,270 --> 01:30:35,770 Pune-patru. 2301 01:30:35,770 --> 01:30:38,710 2302 01:30:38,710 --> 01:30:39,210 ROB: Corect. 2303 01:30:39,210 --> 01:30:39,790 Davin: Da? 2304 01:30:39,790 --> 01:30:43,192 STUDENT: Deci, pentru că suntem de declarare [Inaudibil] în interiorul unei funcții, 2305 01:30:43,192 --> 01:30:45,622 ar trebui să am pus 3 reușită această funcție? 2306 01:30:45,622 --> 01:30:46,907 Sau putem folosi afară? 2307 01:30:46,907 --> 01:30:48,740 Davin: Puteți să-l utilizați în afara această funcție. 2308 01:30:48,740 --> 01:30:49,890 Deci, el întreabă gratuit. 2309 01:30:49,890 --> 01:30:51,700 >> STUDENT: Pierde cale de unde [inaudibil]. 2310 01:30:51,700 --> 01:30:54,720 >> ROB: Oh, gratuite nu happen-- asta e parte din magia de malloc 2311 01:30:54,720 --> 01:30:57,220 este că nu ești limitată la domeniul de aplicare la nivel local. 2312 01:30:57,220 --> 01:31:00,700 Aveți control complet asupra cât timp variabilele trăi. 2313 01:31:00,700 --> 01:31:05,380 Deci, noi numim malloc aici, s-ar putea o funcție complet separate. 2314 01:31:05,380 --> 01:31:08,670 S-ar putea să fie de 10 de ore mai târziu care în cele din urmă numim gratuit. 2315 01:31:08,670 --> 01:31:11,764 >> Davin: Deci, de exemplu, cum ar fi, un cuplu săptămâni de acum, atunci când în cele din urmă 2316 01:31:11,764 --> 01:31:13,680 face abecedar dumneavoastră în dicționarul psets, mergi 2317 01:31:13,680 --> 01:31:16,410 pentru a avea o funcție care creeaza tone de noduri. 2318 01:31:16,410 --> 01:31:18,630 Deci mallocing tone de noduri în această funcție. 2319 01:31:18,630 --> 01:31:20,670 Si apoi, mai târziu, într-un Funcția separat, ești 2320 01:31:20,670 --> 01:31:22,440 O să vrea să elibereze toate aceste noduri. 2321 01:31:22,440 --> 01:31:25,740 Astfel încât să puteți literalmente trece doar pentru a desprindă un pointer, deci o adresă de memorie 2322 01:31:25,740 --> 01:31:26,684 la ceea ce malloced. 2323 01:31:26,684 --> 01:31:27,600 Și că va fi bine. 2324 01:31:27,600 --> 01:31:29,725 Nu trebuie să elibereze, cum ar fi, în aceeași funcție. 2325 01:31:29,725 --> 01:31:30,449 Da? 2326 01:31:30,449 --> 01:31:36,197 >> STUDENT: Deci, un malloc variabilă [inaudibil] afară? 2327 01:31:36,197 --> 01:31:37,384 Este că ceea ce vrei să spui? 2328 01:31:37,384 --> 01:31:38,300 Davin: Stai, spun asta? 2329 01:31:38,300 --> 01:31:38,800 Scuze. 2330 01:31:38,800 --> 01:31:42,300 >> STUDENT: În cazul în care o variabilă malloc poate fi liber oriunde în cod, 2331 01:31:42,300 --> 01:31:44,800 atunci pot fi ele accesate oriunde în codul? 2332 01:31:44,800 --> 01:31:45,800 Poți să le păstrați la nivel local? 2333 01:31:45,800 --> 01:31:47,880 >> Davin: Oh, ea a întrebat, cum ar fi, variabila, like-- 2334 01:31:47,880 --> 01:31:51,300 2335 01:31:51,300 --> 01:31:55,510 >> ROB: Deci, încă mai trebuie să au un fel de referință 2336 01:31:55,510 --> 01:31:57,220 la blocul de malloc de memorie. 2337 01:31:57,220 --> 01:31:58,540 Deci, aici, suntem revenind de x. 2338 01:31:58,540 --> 01:31:59,040 STUDENT: Oh. 2339 01:31:59,040 --> 01:32:01,920 ROB: Dacă nu ne-am întoarce x aici, iar acest lucru a fost doar nule, 2340 01:32:01,920 --> 01:32:04,550 atunci am avea acces la indicatorul care a fost malloced, 2341 01:32:04,550 --> 01:32:05,920 și este scurgeri de memorie. 2342 01:32:05,920 --> 01:32:06,690 >> STUDENT: OK. 2343 01:32:06,690 --> 01:32:10,010 >> Davin: Deci cum ar fi, să spui au această, cum ar fi, chiar aici. 2344 01:32:10,010 --> 01:32:10,510 ROB: Nu. 2345 01:32:10,510 --> 01:32:13,430 Davin: În funcția mea principală, nu pot doar suna acest X și să fie, cum ar fi, OK, 2346 01:32:13,430 --> 01:32:14,645 în această funcție, am făcut acest lucru. 2347 01:32:14,645 --> 01:32:14,960 >> ROB: Corect. 2348 01:32:14,960 --> 01:32:17,790 >> Davin: Deci, am de gând să sun X in, cum ar fi, principal sau ceva de genul asta. 2349 01:32:17,790 --> 01:32:18,540 Nu poți face asta. 2350 01:32:18,540 --> 01:32:19,600 Ai de gând să se întoarcă ceva. 2351 01:32:19,600 --> 01:32:21,000 Dar ce ai de gând să se întoarcă? 2352 01:32:21,000 --> 01:32:22,130 Ai de gând să se întoarcă o adresă de memorie. 2353 01:32:22,130 --> 01:32:25,130 Și pentru că vă întoarceți o memorie adresa, care pot fi accesate în altă parte. 2354 01:32:25,130 --> 01:32:27,262 2355 01:32:27,262 --> 01:32:28,255 Și alte întrebări? 2356 01:32:28,255 --> 01:32:28,755 Da? 2357 01:32:28,755 --> 01:32:31,213 >> STUDENT: Este funcția de mai sus fiind de validare pentru [inaudibil]? 2358 01:32:31,213 --> 01:32:33,270 2359 01:32:33,270 --> 01:32:35,005 >> Davin: De ce nu am nevoie să fac asta? 2360 01:32:35,005 --> 01:32:35,880 STUDENT: [inaudibil]. 2361 01:32:35,880 --> 01:32:37,755 Davin: Pentru că ești Nu mallocing nimic. 2362 01:32:37,755 --> 01:32:39,640 Deci, este not-- da, e nu ca un șir s. 2363 01:32:39,640 --> 01:32:41,160 E un pointer undeva. 2364 01:32:41,160 --> 01:32:42,951 Acestea sunt doar valori. 2365 01:32:42,951 --> 01:32:43,450 STUDENT: OK. 2366 01:32:43,450 --> 01:32:43,949 Davin: Da. 2367 01:32:43,949 --> 01:32:47,600 2368 01:32:47,600 --> 01:32:48,470 Altceva? 2369 01:32:48,470 --> 01:32:48,970 ROB: Da? 2370 01:32:48,970 --> 01:32:50,386 STUDENT: Dar atunci când [inaudibil]? 2371 01:32:50,386 --> 01:32:55,050 2372 01:32:55,050 --> 01:32:58,690 >> ROB: Deci, în scopul de a elibera memorie, am spune aici. 2373 01:32:58,690 --> 01:33:01,350 Deci, x este pointer noastră de a blocul de memorie. 2374 01:33:01,350 --> 01:33:02,845 Am desprindă că indicatorul. 2375 01:33:02,845 --> 01:33:04,470 Și noi nu l-ar face neapărat aici. 2376 01:33:04,470 --> 01:33:05,390 O putem face oriunde. 2377 01:33:05,390 --> 01:33:10,400 Dar te sun doar liber pe ceva care malloc întoarce. 2378 01:33:10,400 --> 01:33:12,940 Deci, malloc, aici, a revenit ceea ce este depozitat în de x. 2379 01:33:12,940 --> 01:33:14,802 Deci, putem apela gratuit pe de x. 2380 01:33:14,802 --> 01:33:18,730 2381 01:33:18,730 --> 01:33:20,556 Orice ultimele întrebări? 2382 01:33:20,556 --> 01:33:21,701 >> Davin: Orice ultimele întrebări? 2383 01:33:21,701 --> 01:33:22,200 Da? 2384 01:33:22,200 --> 01:33:25,152 >> STUDENT: Ne pare rău, puteți re-explica de ce v-ar elibera acolo? 2385 01:33:25,152 --> 01:33:26,630 De ce [inaudibil]? 2386 01:33:26,630 --> 01:33:27,774 >> Davin: Pentru aici? 2387 01:33:27,774 --> 01:33:29,109 >> STUDENT: Da, ca imediat după. 2388 01:33:29,109 --> 01:33:30,900 Davin: Tu, probabil, Nu vreau un drum liber aici. 2389 01:33:30,900 --> 01:33:31,630 ROB: Tu, probabil, nu ar fi. 2390 01:33:31,630 --> 01:33:33,060 Davin: Da, că acest lucru ar face nimic. 2391 01:33:33,060 --> 01:33:35,220 Acest lucru ar, cum ar fi, de a crea memorie, face lucruri la ea, 2392 01:33:35,220 --> 01:33:37,390 și apoi imediat uita despre asta, da. 2393 01:33:37,390 --> 01:33:39,850 >> ROB: Dar am putea face, cum ar fi, aici pentru un motiv oarecare. 2394 01:33:39,850 --> 01:33:43,902 Am putea spune stea int y este egal cu matrice întoarcere. 2395 01:33:43,902 --> 01:33:47,900 Face unele lucruri cu y, poate imprima conținutul. 2396 01:33:47,900 --> 01:33:49,350 Și apoi, în cele din urmă, am terminat. 2397 01:33:49,350 --> 01:33:50,626 Ne putem elibera y. 2398 01:33:50,626 --> 01:33:51,501 STUDENT: [inaudibil]. 2399 01:33:51,501 --> 01:33:57,839 2400 01:33:57,839 --> 01:33:59,005 Davin: Ar trebui să derulați în jos? 2401 01:33:59,005 --> 01:34:00,445 Mulțumesc. 2402 01:34:00,445 --> 01:34:00,945 ROB: Nisa. 2403 01:34:00,945 --> 01:34:02,400 2404 01:34:02,400 --> 01:34:03,646 >> Davin: OK, asta este. 2405 01:34:03,646 --> 01:34:04,520 ROB: Bine, bine. 2406 01:34:04,520 --> 01:34:05,070 Mult noroc. 2407 01:34:05,070 --> 01:34:06,800 >> Davin: Dacă aveți întrebări, ne e-mail. 2408 01:34:06,800 --> 01:34:08,670 Mult noroc. 2409 01:34:08,670 --> 01:34:10,283