1 00:00:00,000 --> 00:00:06,180 2 00:00:06,180 --> 00:00:07,820 >> JASON Hirschhorn: Benvingut a A5, tothom. 3 00:00:07,820 --> 00:00:11,270 Tenim una setmana emocionant per davant de nosaltres, sobretot perquè hi ha molts nous 4 00:00:11,270 --> 00:00:12,350 s'enfronta en aquesta habitació. 5 00:00:12,350 --> 00:00:12,920 És meravellós. 6 00:00:12,920 --> 00:00:15,740 Molts de vostès són aquí per accident, que és encara millor. 7 00:00:15,740 --> 00:00:18,220 Així que espero que vostè guardarà acompanyar-nos. 8 00:00:18,220 --> 00:00:20,220 >> Aquesta setmana anem a gastar el gruix de la secció 9 00:00:20,220 --> 00:00:21,870 la preparació per a l'examen. 10 00:00:21,870 --> 00:00:26,580 Així que pel nostre programa, parlarem una mica sobre els recursos per a la classe, 11 00:00:26,580 --> 00:00:30,350 però també per a la prova i, a continuació, de nou, passar la major part de la classe de conversa 12 00:00:30,350 --> 00:00:31,390 sobre les preguntes. 13 00:00:31,390 --> 00:00:33,900 Un cop hem acabat de contestar la seva preguntes, o si les seves preguntes 14 00:00:33,900 --> 00:00:39,010 naturalment ens porten a una mica de codi, jo tenir problemes de mostra d'exàmens parcials 15 00:00:39,010 --> 00:00:43,180 passat que anem a codificar en directe a la secció junts que també aparegui algun altre 16 00:00:43,180 --> 00:00:45,420 bons temes a cobrir. 17 00:00:45,420 --> 00:00:48,280 >> Així que en primer lloc, com hem passat pel últim parell de setmanes per recordar 18 00:00:48,280 --> 00:00:51,700 nois, hi ha un munt de recursos disponible per a aquest curs. 19 00:00:51,700 --> 00:00:55,020 Molts d'ells seran molt útils a vostè com vostè continua 20 00:00:55,020 --> 00:00:57,280 estudiar per prova 0, perquè És dimarts a la tarda. 21 00:00:57,280 --> 00:00:59,630 Així que tots vostès han estat estudiar una mica. 22 00:00:59,630 --> 00:01:02,640 >> Hi ha notes de classe i de la font codi que ha 23 00:01:02,640 --> 00:01:04,050 sens dubte la sortida. 24 00:01:04,050 --> 00:01:05,019 Mira els pantalons curts. 25 00:01:05,019 --> 00:01:07,470 Fes una ullada a study.cs50.net. 26 00:01:07,470 --> 00:01:11,770 I llavors, s'enumeren a continuació, un nombre d'altres recursos. 27 00:01:11,770 --> 00:01:14,020 >> Un cop més, el concurs és demà 0 en un. 28 00:01:14,020 --> 00:01:18,230 Si no ho ha fet, comproveu Sobre la Prova 0 document sobre la 29 00:01:18,230 --> 00:01:21,370 pàgina d'inici del curs per esbrinar on vostè està prenent l'examen. 30 00:01:21,370 --> 00:01:25,770 El concurs comença a les 1:10 i acaba 70 minuts després. 31 00:01:25,770 --> 00:01:29,610 Així que si vostè es presenta després de la 1:10, ets aconseguirà que molts menys minuts 32 00:01:29,610 --> 00:01:30,940 del 70 per prendre la prova. 33 00:01:30,940 --> 00:01:33,570 Així que assegura't que estàs a temps. 34 00:01:33,570 --> 00:01:38,690 Si vostè és un estudiant d'extensió o tenir algunes altres consideracions de prova, es 35 00:01:38,690 --> 00:01:40,400 podria no estar en un matí. 36 00:01:40,400 --> 00:01:43,540 Però, de nou, comproveu el Quiz 0 document per a assegurar-se que vostè sap quan 37 00:01:43,540 --> 00:01:44,760 vostè està prenent l'examen. 38 00:01:44,760 --> 00:01:46,440 Vaig escriure 75 minuts aquí. 39 00:01:46,440 --> 00:01:48,580 Crec que això és correcte, no 70. 40 00:01:48,580 --> 00:01:53,420 >> Cobreix tot el material d'una setmana 0 a la conferència de la setmana passada, dimecres. 41 00:01:53,420 --> 00:01:59,350 I de nou, per a aquest concurs, perquè document, s'obté una doble cara i 8 42 00:01:59,350 --> 00:02:03,770 1/2 per 11 full de paper que s'obté per utilitzar com notes durant l'examen. 43 00:02:03,770 --> 00:02:08,570 Molta gent, si no la majoria de les persones, tenen trobat que la manera més útil només 44 00:02:08,570 --> 00:02:11,970 per estudiar per l'examen és fer un full d'estudi, un 45 00:02:11,970 --> 00:02:13,730 un-sider, dels seus. 46 00:02:13,730 --> 00:02:17,710 Així que busqui en els últims si vostè ha vist els passats. 47 00:02:17,710 --> 00:02:19,960 Arribar als amics per veure el que que estan posant en el seu. 48 00:02:19,960 --> 00:02:23,610 >> Però, de lluny, la millor manera possible estudi és anar a través de tot i 49 00:02:23,610 --> 00:02:26,530 reduir gradualment cap avall al que han o no pertany a aquest full de 50 00:02:26,530 --> 00:02:30,570 paper, perquè això és només una realitat manera útil per tu per assegurar-se 51 00:02:30,570 --> 00:02:33,620 vostè va a través de tot i tenir certa familiaritat amb ell. 52 00:02:33,620 --> 00:02:36,690 La majoria de la gent, ens trobem, tot i que tenen el full de paper assegut just 53 00:02:36,690 --> 00:02:39,840 al costat d'ells en el qüestionari, no encengueu a ella, perquè, de nou, que molt 54 00:02:39,840 --> 00:02:43,290 procés d'anar a través de la informació ha ajudat a que l'hi aprenguin. 55 00:02:43,290 --> 00:02:45,370 >> Algú té alguna pregunta sobre concurs de 0? 56 00:02:45,370 --> 00:02:50,120 57 00:02:50,120 --> 00:02:51,450 Té a tothom - 58 00:02:51,450 --> 00:02:53,230 Jo no faré a mà alçada. 59 00:02:53,230 --> 00:02:53,550 No importa. 60 00:02:53,550 --> 00:02:54,790 Jo anava a preguntar qui començar a estudiar. 61 00:02:54,790 --> 00:02:58,360 Però jo no vull fer-te tot no aixequin la mà. 62 00:02:58,360 --> 00:03:01,290 Així que com he dit - si, Avi, endavant. 63 00:03:01,290 --> 00:03:04,205 >> AVI: Quin seria una cosa útil per posar en el d'un localitzador? 64 00:03:04,205 --> 00:03:05,875 >> ESTUDIANT: Això depèn de vostè. 65 00:03:05,875 --> 00:03:08,210 >> JASON Hirschhorn: Vostè rep utilitzar el seu judici. 66 00:03:08,210 --> 00:03:13,220 Coses útils per posar en el d'un localitzador, si vostè està confós sobre la gran O 67 00:03:13,220 --> 00:03:17,510 temps d'execució de diferents tipus de cerques i tipus, que posen en allà en un 68 00:03:17,510 --> 00:03:18,760 gràfica excel · lent pràctic. 69 00:03:18,760 --> 00:03:22,250 D'aquesta manera, si se li demana que en el concurs, que no és necessari per tractar de la figura 70 00:03:22,250 --> 00:03:23,560 cap a fora o la raó a través del temps d'execució. 71 00:03:23,560 --> 00:03:24,730 Vostè pot simplement copiar cap avall. 72 00:03:24,730 --> 00:03:28,320 Si ens fixem en els concursos passat, una gran quantitat de vegades, no funciona qüestions de temps. 73 00:03:28,320 --> 00:03:34,150 Així que seria un exemple d'una bona cosa que posar en el seu un-pager. 74 00:03:34,150 --> 00:03:37,450 >> Altres coses bones de posar, si ets confosos sobre com declarar una 75 00:03:37,450 --> 00:03:40,570 funció o el que les diferents parts de la declaració de la funció són, escriure 76 00:03:40,570 --> 00:03:43,400 que allà, una versió genèrica i després potser un exemple. 77 00:03:43,400 --> 00:03:47,290 Si vostè està confós sobre els punters, un diagrama de com punters treball és 78 00:03:47,290 --> 00:03:48,660 probablement de gran ajuda. 79 00:03:48,660 --> 00:03:52,440 Si vostè està confós sobre la recursivitat, 1 degustar funció recursiva allà 80 00:03:52,440 --> 00:03:54,980 També podria arribar a ser realment útil. 81 00:03:54,980 --> 00:03:57,290 Això li dóna algunes idees? 82 00:03:57,290 --> 00:04:01,820 >> AVI: Cal comprendre la procés de compilació de tot, igual que 83 00:04:01,820 --> 00:04:03,220 com funciona tot? 84 00:04:03,220 --> 00:04:06,620 >> JASON Hirschhorn: Tot que ha estat cobert podria 85 00:04:06,620 --> 00:04:08,060 aparèixer en el qüestionari. 86 00:04:08,060 --> 00:04:08,930 Preguntes - 87 00:04:08,930 --> 00:04:11,300 però de nou, algunes coses seran ponderada fortament que altres. 88 00:04:11,300 --> 00:04:14,330 Algunes coses han arribat de nou i una altra vegada a classe, en 89 00:04:14,330 --> 00:04:15,590 conferència, i la secció. 90 00:04:15,590 --> 00:04:17,220 Altres coses que no tenen arribar a aquesta freqüència. 91 00:04:17,220 --> 00:04:22,900 >> Hem parlat molt sobre # include i -L alguna cosa i el que significa en els 92 00:04:22,900 --> 00:04:24,390 el procés de compilació. 93 00:04:24,390 --> 00:04:29,120 Hem parlat molt sobre GDB, s'aferren, els diferents indicadors que utilitzem quan 94 00:04:29,120 --> 00:04:33,100 compilem alguna cosa, i el que make15, per exemple, de veritat 95 00:04:33,100 --> 00:04:34,510 significa i realment ho fa. 96 00:04:34,510 --> 00:04:38,110 No hem parlar tant sobre cada pas individual a 97 00:04:38,110 --> 00:04:39,240 el procés de compilació. 98 00:04:39,240 --> 00:04:40,410 Encara hem parlat. 99 00:04:40,410 --> 00:04:42,550 Així que és una cosa que encara li ha d'estar familiaritzat. 100 00:04:42,550 --> 00:04:44,610 Però de nou, no serem - 101 00:04:44,610 --> 00:04:49,140 les coses que es presenten amb més freqüència en la classe tenen més probabilitats d'arribar a més 102 00:04:49,140 --> 00:04:52,495 sovint i ser més fortament ponderada en el qüestionari. 103 00:04:52,495 --> 00:04:53,280 >> Genial. 104 00:04:53,280 --> 00:04:54,580 Alguna altra pregunta sobre concurs 0? 105 00:04:54,580 --> 00:04:57,660 106 00:04:57,660 --> 00:05:00,050 >> Acceptar, de manera que posar una llista de temes a la pissarra. 107 00:05:00,050 --> 00:05:01,550 Vaig anar a través del pla d'estudis. 108 00:05:01,550 --> 00:05:07,340 Vaig anar a través de la secció de revisió de ahir a la nit i els tobogans per arribar 109 00:05:07,340 --> 00:05:13,710 amb una llista no exhaustiva de temes que hem cobert fins ara a CS50 110 00:05:13,710 --> 00:05:16,800 i les coses que podrien aparèixer en el qüestionari. 111 00:05:16,800 --> 00:05:19,900 Així que no vaig a anar a través d' tots i cada un d'ells. 112 00:05:19,900 --> 00:05:22,370 Això prendria molt més temps del que tenim ara. 113 00:05:22,370 --> 00:05:26,880 Però poso això aquí amb l'esperança de jog seva memòria pel que fa a les coses que poden 114 00:05:26,880 --> 00:05:28,420 o no ser tan familiar amb vostè. 115 00:05:28,420 --> 00:05:32,850 >> I m'encantaria que passar la major part de secció de respondre les seves preguntes sobre 116 00:05:32,850 --> 00:05:35,130 aquests temes, temes que no estan coberts aquí. 117 00:05:35,130 --> 00:05:36,130 Podem escriure pseudocodi. 118 00:05:36,130 --> 00:05:40,010 Podem escriure codi real per assegurar-se que - 119 00:05:40,010 --> 00:05:44,280 Jo puc respondre a la seva pregunta i ajudar Qualsevol persona pot entendre fonamentalment un 120 00:05:44,280 --> 00:05:48,330 Molts d'aquests temes perquè et sentis preparat i còmode anar a 121 00:05:48,330 --> 00:05:50,150 matí qüestionari. 122 00:05:50,150 --> 00:05:52,300 Així que llegiu la llista. 123 00:05:52,300 --> 00:05:54,780 Vostè tant de bo hagi arribat a la secció de amb algunes preguntes. 124 00:05:54,780 --> 00:05:58,480 Quan estigui llest, aixequi la mà i anem a començar. 125 00:05:58,480 --> 00:06:01,590 126 00:06:01,590 --> 00:06:05,200 >> Tingueu en compte, les preguntes que tenen, no hi ha preguntes estúpides. 127 00:06:05,200 --> 00:06:06,250 Hem sentit parlar molt d'això. 128 00:06:06,250 --> 00:06:09,490 I les preguntes que tingui, estic disposat apostar, moltes altres persones, tant 129 00:06:09,490 --> 00:06:11,740 aquí assegut i veient línia tenen també. 130 00:06:11,740 --> 00:06:13,770 Pel que només pot ajudar a la gent fent preguntes. 131 00:06:13,770 --> 00:06:15,070 Marcus. 132 00:06:15,070 --> 00:06:18,040 >> MARCUS: Entre la pila i el munt, hi ha un pre-assignat 133 00:06:18,040 --> 00:06:22,880 percentatge de memòria que es defineix com això és per a la pila oa la pila? 134 00:06:22,880 --> 00:06:25,010 O com funciona això, exactament? 135 00:06:25,010 --> 00:06:26,230 >> JASON Hirschhorn: Molt bona pregunta. 136 00:06:26,230 --> 00:06:28,640 Vaig a donar suport rastrejar una mica. 137 00:06:28,640 --> 00:06:30,910 Té tot el món - 138 00:06:30,910 --> 00:06:31,660 si us plau sigui honest aquí. 139 00:06:31,660 --> 00:06:34,130 Sé que t'estic demanant que aixequin la mà davant dels seus companys. 140 00:06:34,130 --> 00:06:38,510 Però hi ha persones que se senten incòmode amb la pila i el munt 141 00:06:38,510 --> 00:06:42,980 i li agradaria anar una altra vegada que i el que els vol dir? 142 00:06:42,980 --> 00:06:43,880 Aixequin la mà si - 143 00:06:43,880 --> 00:06:44,420 D'acord. 144 00:06:44,420 --> 00:06:45,120 Gràcies. 145 00:06:45,120 --> 00:06:48,420 Així que anirem a la pila i el munt molt ràpidament i després 146 00:06:48,420 --> 00:06:50,370 passar a respondre a la seva pregunta. 147 00:06:50,370 --> 00:06:58,250 >> Així que si dibuixem una caixa per representar memòria a l'equip, quines són algunes 148 00:06:58,250 --> 00:07:02,160 coses que van en aquest quadre? 149 00:07:02,160 --> 00:07:03,630 Principal. 150 00:07:03,630 --> 00:07:04,020 Una funció principal. 151 00:07:04,020 --> 00:07:05,890 A on va principal? 152 00:07:05,890 --> 00:07:08,090 >> ESTUDIANT: [inaudible]. 153 00:07:08,090 --> 00:07:09,390 >> JASON Hirschhorn: Així que anem a posat principal aquí. 154 00:07:09,390 --> 00:07:12,180 155 00:07:12,180 --> 00:07:13,430 Quina altra cosa va en aquesta caixa? 156 00:07:13,430 --> 00:07:16,000 157 00:07:16,000 --> 00:07:18,140 >> ESTUDIANT: Les funcions a què flama. 158 00:07:18,140 --> 00:07:19,020 >> JASON Hirschhorn: Les funcions que anomenem. 159 00:07:19,020 --> 00:07:20,440 I a on van? 160 00:07:20,440 --> 00:07:21,300 >> ESTUDIANT: A la pila. 161 00:07:21,300 --> 00:07:22,380 >> JASON Hirschhorn: Ells anar a la pila. 162 00:07:22,380 --> 00:07:27,350 Així que anem a trucar a aquest cosa aquí baix la pila. 163 00:07:27,350 --> 00:07:31,880 I a sobre de la tapa, tenim el munt. 164 00:07:31,880 --> 00:07:35,450 Així, la memòria no és un quadre com aquest. 165 00:07:35,450 --> 00:07:37,330 Però en realitat és bastant similar. 166 00:07:37,330 --> 00:07:40,840 Hi haurà un munt de caixes de més de i una altra, depenent de com de gran és el seu 167 00:07:40,840 --> 00:07:43,730 ordinador és o què tan gran és la seva memòria. 168 00:07:43,730 --> 00:07:46,950 >> Al entre cometes "de baix" és la pila. 169 00:07:46,950 --> 00:07:50,880 I hi ha diverses coses que van a la pila. 170 00:07:50,880 --> 00:07:53,840 I aquells depenen de les funcions que té en el seu codi. 171 00:07:53,840 --> 00:07:57,780 Vostè sempre té una funció en la seva codi flama principal, així que sempre hi ha una 172 00:07:57,780 --> 00:08:00,480 secció aquí al apilar dedicat a la principal. 173 00:08:00,480 --> 00:08:03,980 >> Aquestes seccions de la pila s'anomenen marcs de pila. 174 00:08:03,980 --> 00:08:09,580 Quan es diu a una altra funció, diguem principal crida a una funció de cerca binària, 175 00:08:09,580 --> 00:08:11,075 posem un altre marc a la pila. 176 00:08:11,075 --> 00:08:13,830 177 00:08:13,830 --> 00:08:17,320 Més concretament, anem a donar un tros de memòria en la nostra 178 00:08:17,320 --> 00:08:22,960 equip per emmagatzemar de recerca binària locals variables i per executar el binari 179 00:08:22,960 --> 00:08:24,150 codi de cerca. 180 00:08:24,150 --> 00:08:26,810 >> Així que cridem a la recerca binària. 181 00:08:26,810 --> 00:08:30,440 182 00:08:30,440 --> 00:08:33,340 En aquest tros de memòria, anem per emmagatzemar les seves variables locals. 183 00:08:33,340 --> 00:08:35,270 Anem a emmagatzemar les seves trucades printf. 184 00:08:35,270 --> 00:08:38,159 Passi el que passi, que la funció és serà emmagatzemat allà. 185 00:08:38,159 --> 00:08:40,350 Hi binària va a executar. 186 00:08:40,350 --> 00:08:42,210 Es va a completar l'execució. 187 00:08:42,210 --> 00:08:47,450 Quina és la paraula en C que significa que una funció ha de 188 00:08:47,450 --> 00:08:49,306 completar la seva execució? 189 00:08:49,306 --> 00:08:50,040 >> ESTUDIANT: Retorn. 190 00:08:50,040 --> 00:08:50,870 >> JASON Hirschhorn: Return. 191 00:08:50,870 --> 00:08:53,230 Així que cada vegada que vegi una sentència return, els extrems de funció 192 00:08:53,230 --> 00:08:54,350 quan arribi a això. 193 00:08:54,350 --> 00:08:56,740 Així que la recerca binària arribarà a la seva devolució. 194 00:08:56,740 --> 00:09:01,360 Aquesta part de la memòria serà essencialment ser alliberat. 195 00:09:01,360 --> 00:09:03,510 I principal tornarà a la seva execució. 196 00:09:03,510 --> 00:09:07,240 Així principal farà una pausa on era, truqui al recerca binària, aconseguir alguna cosa de valor de retorn, 197 00:09:07,240 --> 00:09:08,700 i continuar l'execució. 198 00:09:08,700 --> 00:09:10,840 Aquest marc de pila s'anirà. 199 00:09:10,840 --> 00:09:14,810 >> Si cridem a una funció recursiva, que és una funció que crida a si mateix sobre 200 00:09:14,810 --> 00:09:18,480 i una altra, pot ser que aconseguim - diem que van fer de recerca binària recursiva. 201 00:09:18,480 --> 00:09:21,520 Podríem arribar recerca binària versió un, recerca binària 2, recerca binària 202 00:09:21,520 --> 00:09:24,090 3, recerca binària 4, recerca binària 05:00. 203 00:09:24,090 --> 00:09:27,950 I a continuació, aquesta final de recerca binària de cinc arribarà el cas base, i la pila 204 00:09:27,950 --> 00:09:31,010 marcs tornaran i mantenir el tancament fins que tornem a principal. 205 00:09:31,010 --> 00:09:32,530 Podem repassar la recursivitat en una estona. 206 00:09:32,530 --> 00:09:35,530 Però tot això és a dir, si vostè és cridar a múltiples funcions alhora, 207 00:09:35,530 --> 00:09:39,250 haurà múltiples pila marcs de la pila. 208 00:09:39,250 --> 00:09:42,900 >> El munt, d'altra banda, fins aquí, no és per a funcions, 209 00:09:42,900 --> 00:09:44,380 no per a les variables locals. 210 00:09:44,380 --> 00:09:48,920 És per assignar dinàmicament variables. 211 00:09:48,920 --> 00:09:57,210 Així que aquestes són variables que poden ser inicialitzat en ja sigui principal o un 212 00:09:57,210 --> 00:09:58,640 funció que principals trucades. 213 00:09:58,640 --> 00:10:00,790 En qualsevol part del seu codi, que pot ser inicialitzat. 214 00:10:00,790 --> 00:10:04,360 I per inicialitzar una forma dinàmica la variable assignada. 215 00:10:04,360 --> 00:10:06,970 Quina funció en C fem servir? 216 00:10:06,970 --> 00:10:07,600 >> ESTUDIANT: malloc. 217 00:10:07,600 --> 00:10:09,240 >> JASON Hirschhorn: malloc. 218 00:10:09,240 --> 00:10:10,800 Vostè crida a malloc. 219 00:10:10,800 --> 00:10:12,260 Vostè obté un espai de memòria. 220 00:10:12,260 --> 00:10:15,020 I que l'espai de memòria està en el munt. 221 00:10:15,020 --> 00:10:18,840 I aquest espai de memòria es queda allà fins que truqui de forma gratuïta. 222 00:10:18,840 --> 00:10:22,670 >> Així les variables assignades dinàmicament en heap hi durant tot el temps que 223 00:10:22,670 --> 00:10:25,250 volem que hi hagi, i no ho faran desapareixerà fins que explícitament 224 00:10:25,250 --> 00:10:26,760 dir-los que es vagin. 225 00:10:26,760 --> 00:10:29,670 Pot crear en una funció. 226 00:10:29,670 --> 00:10:31,930 Pila d'aquesta funció marc s'anirà. 227 00:10:31,930 --> 00:10:35,490 Però aquesta variable seguirà existint en el munt fins que s'allibera, 228 00:10:35,490 --> 00:10:39,650 potencialment per la funció que va cridar recerca binària o el que sigui. 229 00:10:39,650 --> 00:10:42,580 >> Així que aquestes variables munt queden allà durant el temps que vostè desitja 230 00:10:42,580 --> 00:10:43,490 que es quedin allà. 231 00:10:43,490 --> 00:10:46,090 I ells aconsegueixen llocs aquí. 232 00:10:46,090 --> 00:10:47,450 I després el següent es va posar al seu lloc. 233 00:10:47,450 --> 00:10:50,210 Segueixen sent emplenat, i quedar-s'hi fins que truqui de forma gratuïta. 234 00:10:50,210 --> 00:10:52,870 >> I, essencialment, la pila i la pila, arribar a la pregunta de Marcus, 235 00:10:52,870 --> 00:10:54,500 créixer un cap a l'altre. 236 00:10:54,500 --> 00:10:57,730 I si es troben un a l'altre, que hi hagi utilitza tota la memòria en el seu 237 00:10:57,730 --> 00:11:01,330 computador, i el seu programa es tancarà perquè no té més memòria 238 00:11:01,330 --> 00:11:02,420 esquerra a utilitzar. 239 00:11:02,420 --> 00:11:07,290 Entre ells, hi ha potencialment altres coses. 240 00:11:07,290 --> 00:11:10,980 No obstant això, per l'abast d'aquest curs, no cal que et preocupis per això. 241 00:11:10,980 --> 00:11:12,020 >> Així que aquesta va ser la resposta a la seva pregunta. 242 00:11:12,020 --> 00:11:13,520 No es preocupi. 243 00:11:13,520 --> 00:11:15,550 Però aquesta era la resposta llarga. 244 00:11:15,550 --> 00:11:17,800 Tot el que necessites saber és el heap i la pila va - 245 00:11:17,800 --> 00:11:18,900 un comença a la part inferior. 246 00:11:18,900 --> 00:11:19,570 La pila de paper no. 247 00:11:19,570 --> 00:11:20,790 El munt està allà dalt. 248 00:11:20,790 --> 00:11:21,990 Ells creixeran més a prop l'un a l'altre. 249 00:11:21,990 --> 00:11:23,110 >> I si el que toquen, això és un problema. 250 00:11:23,110 --> 00:11:24,500 T'has quedat sense memòria. 251 00:11:24,500 --> 00:11:28,760 Però també, a més de saber on que estan, el que s'emmagatzema tant en el 252 00:11:28,760 --> 00:11:30,512 pila i el munt. 253 00:11:30,512 --> 00:11:31,410 Curtis. 254 00:11:31,410 --> 00:11:33,570 >> CURTIS: Quan xoquen, és que un desbordament de pila? 255 00:11:33,570 --> 00:11:35,670 >> JASON Hirschhorn: Quan xoquen, això no és un desbordament de pila. 256 00:11:35,670 --> 00:11:38,340 Un desbordament de pila és una àrea diferent que podem anar si vols. 257 00:11:38,340 --> 00:11:40,020 Bé, anem a tornar a això en un moment. 258 00:11:40,020 --> 00:11:42,730 >> ESTUDIANT: Quina és la paraula anomenada quan xoquen entre si, el 259 00:11:42,730 --> 00:11:44,450 pila i el munt? 260 00:11:44,450 --> 00:11:46,640 >> JASON Hirschhorn: Per ara, no et preocupis. 261 00:11:46,640 --> 00:11:47,750 Només has de saber - 262 00:11:47,750 --> 00:11:50,530 Vaig a respondre a aquesta pregunta després de la classe. 263 00:11:50,530 --> 00:11:52,680 Si es troben amb els altres, que es va quedar sense de la memòria, perquè no hi ha més 264 00:11:52,680 --> 00:11:53,330 espai allà. 265 00:11:53,330 --> 00:11:55,450 >> ESTUDIANT: Ho sento, el que és un error segons? 266 00:11:55,450 --> 00:11:58,710 >> JASON Hirschhorn: Un segment falla pot ser cridat per - 267 00:11:58,710 --> 00:12:02,240 depèn per què es diu de la falla seg. 268 00:12:02,240 --> 00:12:06,260 De vegades, el desbordament de pila, que va a dir segons decisió com l'error. 269 00:12:06,260 --> 00:12:08,180 >> ESTUDIANT: Què hi ha d'eliminació de referències una variable nul? 270 00:12:08,180 --> 00:12:10,040 És que una falla segons? 271 00:12:10,040 --> 00:12:11,480 >> JASON Hirschhorn: Desreferenciar un punter nul - 272 00:12:11,480 --> 00:12:17,850 OK, així que si vostè té un punter que fixa igual a null, punters, el record, 273 00:12:17,850 --> 00:12:20,270 adreces de memòria store com els seus valors. 274 00:12:20,270 --> 00:12:23,660 I un punter nul és essencialment emmagatzemar 0, el 0-th 275 00:12:23,660 --> 00:12:26,670 abordar en aquesta variable. 276 00:12:26,670 --> 00:12:30,010 Així 0x, 0, 0, 0, 0, etcètera. 277 00:12:30,010 --> 00:12:35,030 Aquesta adreça 0-th en la memòria que no és en la nostra imatge, això és allà dalt 278 00:12:35,030 --> 00:12:38,800 en algun lloc, que està reservat per a l'equip. 279 00:12:38,800 --> 00:12:40,130 No se'ns permet tocar-lo. 280 00:12:40,130 --> 00:12:44,680 >> Així que quan el programa s'està executant, si alguna cosa està tractant d'anar a la memòria 281 00:12:44,680 --> 00:12:48,990 direcció 0, sap que que és un valor buit. 282 00:12:48,990 --> 00:12:50,820 No sap res hauria d'estar allà. 283 00:12:50,820 --> 00:12:53,420 Així que si vostè tracta de fer servir alguna cosa allà i tractar alguna cosa com allà o 284 00:12:53,420 --> 00:12:58,355 tractant d'anar a aquest lloc, vostè és va a obtenir un error de segment o un error. 285 00:12:58,355 --> 00:13:00,520 Respon això a la seva pregunta? 286 00:13:00,520 --> 00:13:03,170 >> I ara anem a tornar a desbordament de pila. 287 00:13:03,170 --> 00:13:09,560 Les coses a la pila, ja que vostès tenen vist abans, en - anem a dibuixar una estreta 288 00:13:09,560 --> 00:13:11,966 d'un marc de pila. 289 00:13:11,966 --> 00:13:15,050 Tots poden veure això? 290 00:13:15,050 --> 00:13:16,650 Així que tenim el nostre marc de pila. 291 00:13:16,650 --> 00:13:23,260 Estem estalviant una matriu en un local de variable en aquesta funció. 292 00:13:23,260 --> 00:13:29,510 Així que dir que la nostra matriu té cinc punts. 293 00:13:29,510 --> 00:13:33,230 Els cinc dels quals s'emmagatzemarà en aquest marc de pila. 294 00:13:33,230 --> 00:13:37,540 >> Si comencem a escriure més enllà del límits d'aquest conjunt - 295 00:13:37,540 --> 00:13:43,990 així que si comencem a escriure en, diguem que és 0. 296 00:13:43,990 --> 00:13:46,800 Aquests són els cinc índexs de la nostra matriu. 297 00:13:46,800 --> 00:13:50,980 Si comencem a escriure en l'índex 5, que no tenim quan tenim una 298 00:13:50,980 --> 00:13:55,900 matriu de mida 5, vam començar a escriure en índex 6, 7, 8, 9, podem obtenir una pila 299 00:13:55,900 --> 00:13:57,960 Error de desbordament. 300 00:13:57,960 --> 00:14:00,510 >> Generalment no és - 301 00:14:00,510 --> 00:14:04,910 és probable que es ficarà en problemes si vostè es passa per un. 302 00:14:04,910 --> 00:14:08,640 Però, en general, s'arriba a la més problemes si vostè es passa per una gran quantitat 303 00:14:08,640 --> 00:14:12,770 i et vas fins a la data més que escrigui sobre l'adreça de retorn d'aquesta 304 00:14:12,770 --> 00:14:16,080 funció, que es troba a la part inferior del marc de pila. 305 00:14:16,080 --> 00:14:16,520 >> Perquè, ¿no? 306 00:14:16,520 --> 00:14:17,670 Vostè - al - ho sento. 307 00:14:17,670 --> 00:14:18,550 No ", perquè la dreta." 308 00:14:18,550 --> 00:14:20,470 >> En el marc de pila, que té seves variables locals. 309 00:14:20,470 --> 00:14:27,090 A la part inferior de la pila marc és la direcció de retorn. 310 00:14:27,090 --> 00:14:28,790 Aquí és on la funció passa quan s'acaba. 311 00:14:28,790 --> 00:14:33,750 I si sobreescriu aquest retorn direcció, i després quan aquest marc de pila, 312 00:14:33,750 --> 00:14:36,680 quan vostè va a través de la pila enquadrar i execució de cada línia, ets 313 00:14:36,680 --> 00:14:40,350 anirà a la seva nova adreça de retorn que està escrit allà en comptes de la 314 00:14:40,350 --> 00:14:40,910 un de real. 315 00:14:40,910 --> 00:14:45,050 I així és com hem vist algunes fallades de seguretat 316 00:14:45,050 --> 00:14:46,780 pot succeir amb els ordinadors. 317 00:14:46,780 --> 00:14:52,760 >> Així desbordament de pila, en una paraula, és quan sobreescriu la part de la pila 318 00:14:52,760 --> 00:14:55,440 se suposa que has de fer servir, el local variable que se suposa que has de fer servir, i 319 00:14:55,440 --> 00:14:58,070 en particular, quan s'inicia la sobreescriptura coses importants com el 320 00:14:58,070 --> 00:14:59,100 remet. 321 00:14:59,100 --> 00:15:00,090 I aquí és on vostè obtindrà un error. 322 00:15:00,090 --> 00:15:03,980 O potser fins i tot podria començar fins i tot escriure en - 323 00:15:03,980 --> 00:15:05,370 diuen cerca binària va ser just a sobre de principal. 324 00:15:05,370 --> 00:15:07,790 Si heu sobreescrit molt, va poder escriure en el principal. 325 00:15:07,790 --> 00:15:10,230 Però, en general, es produeix un error abans de llavors, pel fet que l'ordinador sap 326 00:15:10,230 --> 00:15:12,270 vostè està fent alguna cosa que et no s'ha de fer. 327 00:15:12,270 --> 00:15:12,560 Sí 328 00:15:12,560 --> 00:15:13,910 >> ESTUDIANT: Quina és la diferència entre un desbordament de pila 329 00:15:13,910 --> 00:15:16,940 i un buffer overflow? 330 00:15:16,940 --> 00:15:19,420 >> JASON Hirschhorn: Desbordament de memòria intermèdia és un tipus més genèric de 331 00:15:19,420 --> 00:15:20,395 el que acabo de descriure. 332 00:15:20,395 --> 00:15:22,610 >> ESTUDIANT: Llavors un desbordament de pila és un exemple d'un desbordament de memòria intermèdia. 333 00:15:22,610 --> 00:15:23,420 >> JASON Hirschhorn: Exactament. 334 00:15:23,420 --> 00:15:28,700 Aquest és un arranjament que podem pensar com un tampó, un espai perquè les coses surtin polz 335 00:15:28,700 --> 00:15:30,600 Es tracta d'un desbordament de la memòria intermèdia de pila. 336 00:15:30,600 --> 00:15:33,210 Podríem tenir un desbordament de la memòria intermèdia de pila. 337 00:15:33,210 --> 00:15:36,870 Si hi havia un tampó, que hi ha sovint és una matriu del munt, i nosaltres 338 00:15:36,870 --> 00:15:40,600 sobrescribía aquests límits, llavors ho faríem tenir un desbordament de la memòria intermèdia de pila. 339 00:15:40,600 --> 00:15:44,870 >> I més enllà de l'abast d'aquest curs, que estan detectar una mica diferent. 340 00:15:44,870 --> 00:15:48,040 El compilador té especial formes de detectar cadascun. 341 00:15:48,040 --> 00:15:50,660 Però un desbordament de memòria intermèdia és una més genèrica tipus del que he descrit, 342 00:15:50,660 --> 00:15:54,090 que era un desbordament de la memòria intermèdia de pila. 343 00:15:54,090 --> 00:15:56,240 Això respon a la seva pregunta? 344 00:15:56,240 --> 00:15:57,910 Sweet. 345 00:15:57,910 --> 00:16:01,850 >> Hi va haver alguna altra pregunta relacionada a la pila o el munt? 346 00:16:01,850 --> 00:16:04,920 347 00:16:04,920 --> 00:16:05,510 Sí 348 00:16:05,510 --> 00:16:08,220 >> ESTUDIANT: Sé que tens a cadenes gratuïtes perquè estan en el munt 349 00:16:08,220 --> 00:16:09,305 i no vol perdre memòria. 350 00:16:09,305 --> 00:16:12,240 Però vostè ha de alliberar les variables globals i coses per l'estil? 351 00:16:12,240 --> 00:16:14,335 O són ​​alliberats de forma automàtica? 352 00:16:14,335 --> 00:16:15,700 >> JASON Hirschhorn: Bona pregunta. 353 00:16:15,700 --> 00:16:22,340 Així que en CS50.H, vam crear aquesta cosa perquè vostè va anomenar una cadena. 354 00:16:22,340 --> 00:16:23,800 Una cadena és realment el que? 355 00:16:23,800 --> 00:16:24,810 >> ESTUDIANT: Caràcter estrelles. 356 00:16:24,810 --> 00:16:29,180 >> JASON Hirschhorn: Una estrella de xerrades, un punter a un caràcter, un punter a 357 00:16:29,180 --> 00:16:30,650 una matriu de caràcters. 358 00:16:30,650 --> 00:16:32,210 Això és el que la cadena és. 359 00:16:32,210 --> 00:16:36,050 Així que hem de alliberar, perquè getString, que utilitzem molt - 360 00:16:36,050 --> 00:16:38,370 nom de la cadena és igual a getString - 361 00:16:38,370 --> 00:16:43,560 que mallocs per a nosaltres una mica de memòria en la s'amuntegaran i després retorna un punter a la 362 00:16:43,560 --> 00:16:47,230 primer caràcter d'aquest cadena, un estel caràcters. 363 00:16:47,230 --> 00:16:52,760 >> Així que aparentment, si no ha estat escrit lliure en qualsevol de les seves cadenes 364 00:16:52,760 --> 00:16:55,600 que vostè ha anomenat fins ara, vostè té estat filtrant mica de memòria. 365 00:16:55,600 --> 00:16:57,430 Per descomptat que no hem parlat de que, pel que ningú ha ficat en 366 00:16:57,430 --> 00:16:58,520 problemes per fer-ho. 367 00:16:58,520 --> 00:16:59,980 Però en el futur, si. 368 00:16:59,980 --> 00:17:03,990 Quan es diu a getString, ets mallocing una mica d'espai en el munt. 369 00:17:03,990 --> 00:17:07,640 I si vostè no crida lliure després que cadena, té una pèrdua de memòria. 370 00:17:07,640 --> 00:17:09,440 Això respon a la seva pregunta? 371 00:17:09,440 --> 00:17:10,606 >> Sí 372 00:17:10,606 --> 00:17:15,020 >> ESTUDIANT: Així que per fer això, fem servir dret lliure abans del retorn? 373 00:17:15,020 --> 00:17:18,510 Igual que, en el marc de, suposo que si diem, com, int principal, dins de la 374 00:17:18,510 --> 00:17:24,410 abast del codi que està dins dels claus, just abans - 375 00:17:24,410 --> 00:17:26,140 vostè sap el lloc on vol sol posar de retorn. 376 00:17:26,140 --> 00:17:27,950 Poses lliure abans d'això? 377 00:17:27,950 --> 00:17:31,000 >> JASON Hirschhorn: Així que vostè pot posar lliure on sigui que vol posar lliure. 378 00:17:31,000 --> 00:17:33,810 Com que aquests s'assignen de manera dinàmica les variables, ja que poden 379 00:17:33,810 --> 00:17:39,170 viure més enllà de l'abast d'un particular, funció, si es diu a malloc en un 380 00:17:39,170 --> 00:17:44,140 funció separada, per exemple, getString, pot trucar gratis a main. 381 00:17:44,140 --> 00:17:46,050 No cal dir- en la funció específica 382 00:17:46,050 --> 00:17:47,570 on es diu malloc. 383 00:17:47,570 --> 00:17:50,340 Però sí cal trucar abans de principals retorns. 384 00:17:50,340 --> 00:17:51,120 >> I el que realment depèn. 385 00:17:51,120 --> 00:17:54,960 Depèn de per què malloced que espai en el primer lloc. 386 00:17:54,960 --> 00:17:57,320 Algunes persones li digui alliberar molt ràpidament. 387 00:17:57,320 --> 00:17:59,220 Algunes persones no cridar gratis fins el final del seu programa. 388 00:17:59,220 --> 00:18:00,660 I van a anar a través d' i tot de forma gratuïta. 389 00:18:00,660 --> 00:18:03,597 Depèn de què vas trucar malloc. 390 00:18:03,597 --> 00:18:11,270 >> ESTUDIANT: I ​​què li diries si es diu ús getString? 391 00:18:11,270 --> 00:18:13,320 Diries lliure, què? 392 00:18:13,320 --> 00:18:20,040 >> JASON Hirschhorn: Així que la sintaxi de forma gratuïta és simplement lliure, parin obertes, prop 393 00:18:20,040 --> 00:18:22,130 Parin, i el nom del punter. 394 00:18:22,130 --> 00:18:26,410 Així que si vostè escriu name cadena és igual a getString, poses el nom aquí. 395 00:18:26,410 --> 00:18:27,760 Aquest és el nom del punter. 396 00:18:27,760 --> 00:18:30,570 I sap que per alliberar memòria. 397 00:18:30,570 --> 00:18:33,920 >> ESTUDIANT: Així que quan s'allibera aquesta memòria, el punter segueix apuntant a aquest lloc 398 00:18:33,920 --> 00:18:34,970 en la memòria? 399 00:18:34,970 --> 00:18:39,020 O és el punter també buidada de la direcció que apunta. 400 00:18:39,020 --> 00:18:40,290 >> JASON Hirschhorn: Hem de tractar que. 401 00:18:40,290 --> 00:18:41,430 Hem codificar això. 402 00:18:41,430 --> 00:18:43,880 Tornem en arribar a codificació, i anem a codi que. 403 00:18:43,880 --> 00:18:46,000 I si vols descobrir la resposta d'això, també es pot codi que 404 00:18:46,000 --> 00:18:46,690 en el interí. 405 00:18:46,690 --> 00:18:49,100 Però aquesta és una gran pregunta. 406 00:18:49,100 --> 00:18:53,480 >> ESTUDIANT: És possible alguna cosa lliure massa aviat? 407 00:18:53,480 --> 00:18:58,530 Així que encara ho necessita per al seu programa, i t'alliberaràs d'aquest espai de memòria? 408 00:18:58,530 --> 00:18:59,200 >> JASON Hirschhorn: Si. 409 00:18:59,200 --> 00:19:03,020 És possible, si alguna cosa gratis i després d'usar-lo de nou, ho faràs 410 00:19:03,020 --> 00:19:06,890 trobar-se amb un error. 411 00:19:06,890 --> 00:19:10,810 Però això és en tu, perquè tu vas alliberar alguna cosa i després el va anomenar més tard. 412 00:19:10,810 --> 00:19:13,940 Així que aquest va ser l'error d'un programador. 413 00:19:13,940 --> 00:19:14,780 Però si. 414 00:19:14,780 --> 00:19:17,760 Es pot escriure això. 415 00:19:17,760 --> 00:19:19,240 >> Alguna pregunta més sobre - 416 00:19:19,240 --> 00:19:19,760 Sí 417 00:19:19,760 --> 00:19:22,820 >> ESTUDIANT: Llavors, si se suposa que només alliberar en general abans de la 418 00:19:22,820 --> 00:19:25,490 programa acaba, significa que si el programa acaba i no alliberar-lo, 419 00:19:25,490 --> 00:19:27,580 que la memòria encara està assignat? 420 00:19:27,580 --> 00:19:31,330 >> JASON Hirschhorn: Si el programa acaba i s'oblida de alliberar, llavors 421 00:19:31,330 --> 00:19:34,390 que la memòria es va assignar al llarg la vida útil del seu programa. 422 00:19:34,390 --> 00:19:37,670 Quan el programa es tanca completament, que la memòria no va 423 00:19:37,670 --> 00:19:39,490 quedar-s'hi per sempre. 424 00:19:39,490 --> 00:19:42,080 L'equip és prou intel · ligent com per saber que quan el programa es tanca, es 425 00:19:42,080 --> 00:19:46,440 ha de desfer de tota la memòria que es va associar amb aquest programa. 426 00:19:46,440 --> 00:19:51,240 >> No obstant això, hi ha eines que es poden executar en un programa per detectar si, quan el 427 00:19:51,240 --> 00:19:54,720 programa acabat, se li va oblidar per alliberar memòria. 428 00:19:54,720 --> 00:19:57,960 I per al seu pròxim conjunt de problemes on que utilitzarà i l'ús de malloc 429 00:19:57,960 --> 00:20:02,610 punters, vostè va a córrer aquest programar en el programa per veure si, 430 00:20:02,610 --> 00:20:06,530 quan els principals retorns, tenies certa coses que van quedar unfreed. 431 00:20:06,530 --> 00:20:09,130 >> Així que no van a romandre malloced sempre en l'equip. 432 00:20:09,130 --> 00:20:11,720 Això seria un malbaratament, perquè molt ràpidament, els ordinadors 433 00:20:11,720 --> 00:20:12,960 es quedi sense memòria. 434 00:20:12,960 --> 00:20:16,450 Però si es queden fins al final de la seva programar i no estan alliberats i la seva 435 00:20:16,450 --> 00:20:20,260 programa surt, això segueix sent un problema que aquesta eina l'ajudarà a tractar. 436 00:20:20,260 --> 00:20:21,520 >> ESTUDIANT: Això és Valgrind? 437 00:20:21,520 --> 00:20:22,910 >> JASON Hirschhorn: És anomenat Valgrind. 438 00:20:22,910 --> 00:20:23,520 I estaràs - 439 00:20:23,520 --> 00:20:25,780 >> ESTUDIANT: Però no hem de saber que durant la prova, però? 440 00:20:25,780 --> 00:20:27,600 Vull dir, es va parlar de una mica en la conferència. 441 00:20:27,600 --> 00:20:33,600 >> JASON Hirschhorn: Així Valgrind és el nom d'aquesta eina. 442 00:20:33,600 --> 00:20:37,180 Saber el que fa és suficient per resoldre el qüestionari. 443 00:20:37,180 --> 00:20:40,200 Però vostè no ha utilitzat encara en la seva conjunt de problemes perquè no hem tingut una 444 00:20:40,200 --> 00:20:43,520 conjunt de problemes que ha tractat de forma explícita amb malloc o usant malloc. 445 00:20:43,520 --> 00:20:45,330 Així que vostè no ha utilitzat Valgrind encara. 446 00:20:45,330 --> 00:20:47,760 Però ho va a utilitzar abans que tard. 447 00:20:47,760 --> 00:20:48,710 >> ESTUDIANT: Pot repetir el Valgrind és? 448 00:20:48,710 --> 00:20:49,190 >> JASON Hirschhorn: Ho sents? 449 00:20:49,190 --> 00:20:51,240 >> ESTUDIANT: Pot repetir el que el propòsit de Valgring és? 450 00:20:51,240 --> 00:20:53,100 >> JASON Hirschhorn: Valgrind és el nom - 451 00:20:53,100 --> 00:20:59,890 com GDB ajuda a depurar el programa, Valgrind ajuden a determinar si 452 00:20:59,890 --> 00:21:03,210 les coses no han estat alliberats quan el programa es tanca. 453 00:21:03,210 --> 00:21:05,110 Pel que vostè executa en el seu programa. 454 00:21:05,110 --> 00:21:09,230 I el seu programa surt, i que dirà el seu programa anomenat malloc això molts 455 00:21:09,230 --> 00:21:13,670 vegades per aquesta quantitat de bytes, i que només diuen lliure moltes vegades. 456 00:21:13,670 --> 00:21:16,520 I així ho va deixar aquests molts bytes si no són alliberats. 457 00:21:16,520 --> 00:21:18,050 O dirà que has alliberat tot. 458 00:21:18,050 --> 00:21:19,070 Bon treball. 459 00:21:19,070 --> 00:21:19,480 >> ESTUDIANT: OK. 460 00:21:19,480 --> 00:21:21,060 I es diu Valgring? 461 00:21:21,060 --> 00:21:24,940 >> JASON Hirschhorn: V-A-L-G-R-Me-N-D. 462 00:21:24,940 --> 00:21:25,970 >> ESTUDIANT: Una pregunta sobre els punters. 463 00:21:25,970 --> 00:21:30,080 Així que diguem que n han star x és igual a alguna cosa. 464 00:21:30,080 --> 00:21:33,330 Això equival, el que vostè està posant allà, és que el que s'està posant en l'interior 465 00:21:33,330 --> 00:21:36,120 el que x fa referència, o el punter de x? 466 00:21:36,120 --> 00:21:37,690 >> JASON Hirschhorn: Pot vostè repetir la pregunta? 467 00:21:37,690 --> 00:21:39,340 Podem extreure mentre es diu? 468 00:21:39,340 --> 00:21:42,710 >> ESTUDIANT: En el qüestionari, en realitat, la un que ens va enviar, va ser com, carbó de llenya 469 00:21:42,710 --> 00:21:46,520 veritat estrelles és igual a roques CS50, oi? 470 00:21:46,520 --> 00:21:52,190 Significa això que que bressola CS50 és el que la veritat està assenyalant? 471 00:21:52,190 --> 00:21:55,810 >> JASON Hirschhorn: Així que vostè està parlant les estrelles del caràcter en una cadena, com 472 00:21:55,810 --> 00:21:56,460 això funciona? 473 00:21:56,460 --> 00:21:56,890 Sí 474 00:21:56,890 --> 00:21:57,700 D'acord. 475 00:21:57,700 --> 00:21:59,140 Dibuixem això aquí. 476 00:21:59,140 --> 00:22:07,100 >> [CONVERSA SIDE] 477 00:22:07,100 --> 00:22:11,130 >> JASON Hirschhorn: Així que aquesta variable serà de tipus char estrelles. 478 00:22:11,130 --> 00:22:14,580 Què tan gran és una variable de l'estrella de tipus char? 479 00:22:14,580 --> 00:22:15,510 Quants bytes? 480 00:22:15,510 --> 00:22:16,450 >> ESTUDIANTS: Quatre. 481 00:22:16,450 --> 00:22:18,210 >> JASON Hirschhorn: Són quatre bytes. 482 00:22:18,210 --> 00:22:21,420 Quants drets és una variable de tipus int estrella? 483 00:22:21,420 --> 00:22:22,210 >> ESTUDIANTS: Quatre. 484 00:22:22,210 --> 00:22:24,910 >> JASON Hirschhorn: Quatre bytes. 485 00:22:24,910 --> 00:22:28,280 Si es tracta d'un punter, llavors sempre és 04:00 bytes, ja que els punters, el seu 486 00:22:28,280 --> 00:22:30,070 valor és una adreça de memòria. 487 00:22:30,070 --> 00:22:35,160 I les adreces de memòria en el CS50 aparell són quatre bytes de longitud. 488 00:22:35,160 --> 00:22:42,900 Així que quan cridem a getString, o quan diguem, stringname és igual, i després en 489 00:22:42,900 --> 00:22:46,140 cometes dobles van posar una cadena, estem posant - 490 00:22:46,140 --> 00:22:46,920 bé, això és una mica diferent. 491 00:22:46,920 --> 00:22:48,630 Què anem a getString com l'exemple. 492 00:22:48,630 --> 00:22:52,150 O estrelles Char alguna cosa és igual a la cadena. 493 00:22:52,150 --> 00:22:54,360 Ho sentim, dóna'm l'exemple que llegeixi? 494 00:22:54,360 --> 00:22:57,590 >> ESTUDIANT: la veritat estrelles caràcters és igual "Roques CS50" en cometes dobles. 495 00:22:57,590 --> 00:23:02,260 >> JASON Hirschhorn: Així que aquesta estrella, aquesta anomenarem a aquesta variable x per a la nostra 496 00:23:02,260 --> 00:23:04,060 fins genèrics. 497 00:23:04,060 --> 00:23:05,970 Hem creat una variable anomenada x. 498 00:23:05,970 --> 00:23:07,610 És tipus char estrelles. 499 00:23:07,610 --> 00:23:10,950 És un punter a una sèrie de caràcters. 500 00:23:10,950 --> 00:23:12,200 Així que aquí baix - 501 00:23:12,200 --> 00:23:23,710 502 00:23:23,710 --> 00:23:25,890 >> Així que així és com aquesta faria treballar en la memòria. 503 00:23:25,890 --> 00:23:27,410 Això emmagatzemar una adreça de memòria. 504 00:23:27,410 --> 00:23:31,770 Seria emmagatzemar la direcció de memòria de el primer caràcter de la matriu. 505 00:23:31,770 --> 00:23:33,830 I després, quan vas seguir el punter, ho faria 506 00:23:33,830 --> 00:23:35,200 obtenir el primer caràcter. 507 00:23:35,200 --> 00:23:38,780 >> I si estàs llegint això com una cadena, l'equip és intel · ligent 508 00:23:38,780 --> 00:23:42,930 n'hi ha prou amb saber, llegir tot això fins que arriba a una reacció 0. 509 00:23:42,930 --> 00:23:45,530 Però si estàs llegint un caràcter en un temps, així que estàs iteració mitjançant 510 00:23:45,530 --> 00:23:49,910 aquesta cadena, a continuació, només llegirà un caràcter alhora fins que arribi a 511 00:23:49,910 --> 00:23:50,850 barra invertida 0. 512 00:23:50,850 --> 00:23:52,335 Això no va poder respondre a la seva pregunta, però. 513 00:23:52,335 --> 00:23:55,610 >> ESTUDIANT: Sí, però no ho ha fet malloced que l'espai 514 00:23:55,610 --> 00:23:58,400 però, per a aquest punter. 515 00:23:58,400 --> 00:24:02,510 >> JASON Hirschhorn: Així que no estic molt segur exactament el que estàs veient, 516 00:24:02,510 --> 00:24:03,640 perquè jo no vaig fer aquest examen. 517 00:24:03,640 --> 00:24:06,370 Se suposava que havia de ser una eina recursos d'un altre TF. 518 00:24:06,370 --> 00:24:11,380 Si crearà una cadena a la apilar o com una variable local, que va a 519 00:24:11,380 --> 00:24:16,920 acaba de ser gamma de càrregues en lloc de en general, un estel carbó assenyalant 520 00:24:16,920 --> 00:24:18,600 altra cadena. 521 00:24:18,600 --> 00:24:20,550 Però jo no ho sé. 522 00:24:20,550 --> 00:24:25,065 Això podria ser un punter a una altra cadena a la pila també. 523 00:24:25,065 --> 00:24:27,240 Sí 524 00:24:27,240 --> 00:24:31,116 >> ESTUDIANT: Sé que vostè necessita assignar memòria si el punter està 525 00:24:31,116 --> 00:24:33,360 sent declarada dins d'una altra funció. 526 00:24:33,360 --> 00:24:36,740 És necessari fer el mateix si es tracta de està declarada dins del principal, 527 00:24:36,740 --> 00:24:39,570 vostè ho està utilitzant a l'interior del principal? 528 00:24:39,570 --> 00:24:43,590 >> JASON Hirschhorn: Així que si. 529 00:24:43,590 --> 00:24:46,670 Pot declarar un punter a qualsevol direcció de memòria a la memòria. 530 00:24:46,670 --> 00:24:51,440 Pot ser l'adreça de memòria d'un local de variables, encara que moltes vegades, 531 00:24:51,440 --> 00:24:55,760 persones no declaren les adreces de memòria a les variables locals, ja que van 532 00:24:55,760 --> 00:24:59,890 desaparèixer una vegada que la funció retorna, que és per això que generalment malloc coses. 533 00:24:59,890 --> 00:25:04,630 Però sí, es podia declarar un punter a una altra variable local. 534 00:25:04,630 --> 00:25:06,360 És que en general no es fa. 535 00:25:06,360 --> 00:25:09,480 Però puc fer una ullada a què cosa específica després de la classe. 536 00:25:09,480 --> 00:25:10,650 Sí 537 00:25:10,650 --> 00:25:12,350 >> ESTUDIANT: Crec que això és una espècie del que se li demana. 538 00:25:12,350 --> 00:25:16,930 Sembla estrany estar inicialitzar un punter no com un 539 00:25:16,930 --> 00:25:20,760 direcció, sinó com el sembla com un valor. 540 00:25:20,760 --> 00:25:25,970 Sembla que l'CS50 és el que hi ha dins el que s'apunta i 541 00:25:25,970 --> 00:25:28,820 no l'adreça real, oi? 542 00:25:28,820 --> 00:25:30,520 >> JASON Hirschhorn: Així que això és no és el cas, però. 543 00:25:30,520 --> 00:25:32,470 Això no és el que està passant. 544 00:25:32,470 --> 00:25:35,910 Quan es declara un estel char, és una adreça de memòria. 545 00:25:35,910 --> 00:25:38,860 Els punters són totes les adreces de memòria apuntant a una altra cosa. 546 00:25:38,860 --> 00:25:41,480 Aquest una mica més podria ser al pila, però gairebé sempre es troba a la 547 00:25:41,480 --> 00:25:43,440 s'amuntegaran en el camí veurem el que solia. 548 00:25:43,440 --> 00:25:46,860 549 00:25:46,860 --> 00:25:53,500 Però stringname és igual de cometes dobles "GetString", podem veure que i ens 550 00:25:53,500 --> 00:25:55,010 pot mirar a través d'això i codificar això. 551 00:25:55,010 --> 00:26:01,190 cadena getString no s'està guardant en aquesta variable, o el que sigui la cadena 552 00:26:01,190 --> 00:26:04,580 nom no s'està guardant en aquest variables, no perquè així és com 553 00:26:04,580 --> 00:26:06,070 punters funcionen. 554 00:26:06,070 --> 00:26:06,770 Això té sentit? 555 00:26:06,770 --> 00:26:07,170 >> ESTUDIANT: Sí 556 00:26:07,170 --> 00:26:08,570 >> JASON Hirschhorn: OK. 557 00:26:08,570 --> 00:26:11,690 Amb sort, això no era confús per a qualsevol persona. 558 00:26:11,690 --> 00:26:15,732 Però si ho fos, podem mirar de nou en una mica, perquè en realitat estem passant 559 00:26:15,732 --> 00:26:19,240 per codificar una cosa que s'espera que treballar amb cadenes i ajudar a sentir- 560 00:26:19,240 --> 00:26:22,170 més còmode amb ells. 561 00:26:22,170 --> 00:26:24,869 >> Qualsevol altra pregunta relacionada amb aquests temes o altres temes que 562 00:26:24,869 --> 00:26:26,119 Vaig a posar una còpia de seguretat? 563 00:26:26,119 --> 00:26:32,280 564 00:26:32,280 --> 00:26:34,840 I - 565 00:26:34,840 --> 00:26:36,310 en aquests moments. 566 00:26:36,310 --> 00:26:37,630 Sí, Alden. 567 00:26:37,630 --> 00:26:39,860 >> ALDEN: Així que això és totalment sense relació, però podem anar més 568 00:26:39,860 --> 00:26:42,760 molt ràpidament el que necessitem saber sobre la diferència entre un 32 i 569 00:26:42,760 --> 00:26:46,345 Equip de 64 bits? 570 00:26:46,345 --> 00:26:47,740 >> JASON Hirschhorn: Si. 571 00:26:47,740 --> 00:26:52,111 Així que 32 bits és la quantitat de bytes? 572 00:26:52,111 --> 00:26:53,060 >> ALDEN: Són quatre bytes. 573 00:26:53,060 --> 00:26:54,360 >> JASON Hirschhorn: Són quatre bytes. 574 00:26:54,360 --> 00:26:58,420 I 64 bits és la quantitat de bytes? 575 00:26:58,420 --> 00:26:59,112 >> ESTUDIANT: Vuit. 576 00:26:59,112 --> 00:27:00,610 >> JASON Hirschhorn: Vuit bytes. 577 00:27:00,610 --> 00:27:03,980 Així que de nou, vuit bits és un byte. 578 00:27:03,980 --> 00:27:08,340 El seu aparell CS50 és una màquina de 32 bits. 579 00:27:08,340 --> 00:27:13,650 Així que les adreces de memòria són 04:00 bytes de longitud. 580 00:27:13,650 --> 00:27:17,460 Hi ha 2 al 32 adreces de memòria. 581 00:27:17,460 --> 00:27:21,310 0 a 2 a la 32 almenys 1. 582 00:27:21,310 --> 00:27:27,630 I jo no sóc positiu, però això és probablement l'abast del que vostè necessita 583 00:27:27,630 --> 00:27:35,230 sé que és un equip de 32 bits, que la memòria adreces són, de nou, quatre bytes de longitud, 584 00:27:35,230 --> 00:27:39,620 i aquesta és la quantitat màxima d'adreces de memòria. 585 00:27:39,620 --> 00:27:41,680 >> A més, els tipus de dades - 586 00:27:41,680 --> 00:27:45,020 això podria ser una cosa tan bé això és digne de menció. 587 00:27:45,020 --> 00:27:49,610 La mida d'un tipus de dades depèn la màquina que vostè està treballant. 588 00:27:49,610 --> 00:27:56,760 Així que un char, un sol caràcter, és com molts bytes en el nostre dispositiu CS50? 589 00:27:56,760 --> 00:27:57,980 Un byte. 590 00:27:57,980 --> 00:28:02,310 I en realitat és un byte com bé en una màquina de 64 bits. 591 00:28:02,310 --> 00:28:05,920 >> I la majoria dels tipus de dades són el mateix nombre de bytes en ambdues màquines. 592 00:28:05,920 --> 00:28:11,620 No obstant això, alguns tipus de dades seran diferents en ambdues màquines. 593 00:28:11,620 --> 00:28:14,590 Així que seria potencialment la L'únic que vostè necessita saber. 594 00:28:14,590 --> 00:28:16,710 >> Però fins i tot això, crec, està més enllà dels límits - 595 00:28:16,710 --> 00:28:20,990 Estic gairebé segur, si un mira cap enrere en concursos d'edat, diu, per assumir 596 00:28:20,990 --> 00:28:24,090 problemes que està utilitzant la codificació de una màquina de 32 bits. 597 00:28:24,090 --> 00:28:26,620 598 00:28:26,620 --> 00:28:30,620 Però hi ha, per anar juntament amb el de Per si t'interessa, hi ha 599 00:28:30,620 --> 00:28:35,920 tipus de dades que són els mateixos grandària en totes les màquines. 600 00:28:35,920 --> 00:28:42,670 >> Si has vist alguna cosa així uint32_t, que pot o no ser 601 00:28:42,670 --> 00:28:43,260 no he vist això. 602 00:28:43,260 --> 00:28:44,290 Això és un tipus de dades. 603 00:28:44,290 --> 00:28:47,570 Això diu, serà de 32 bits sense importar quina màquina és el. 604 00:28:47,570 --> 00:28:50,350 Així que quan la gent està escrivint portàtil codi, probablement no utilitzaran ints. 605 00:28:50,350 --> 00:28:53,260 Lloc Faran servir aquests altres dades tipus que saben que seran els mateixos 606 00:28:53,260 --> 00:28:54,780 La mida de cada màquina. 607 00:28:54,780 --> 00:28:58,080 608 00:28:58,080 --> 00:28:58,250 Madhu. 609 00:28:58,250 --> 00:29:00,150 >> Madhu: Jo tenia una pregunta sobre el procés de compilació. 610 00:29:00,150 --> 00:29:04,110 Així que si vostè està escrivint un programa que utilitza una biblioteca com CS50 o alguna cosa 611 00:29:04,110 --> 00:29:06,840 així, jo sé que aquesta biblioteca ha de, en algun moment, ser 612 00:29:06,840 --> 00:29:08,590 compilat i vinculat polz 613 00:29:08,590 --> 00:29:13,380 Però, quant d'això passa durant l'elaboració del seu programa? 614 00:29:13,380 --> 00:29:15,880 Quina part d'aquest procés biblioteca passa quan estàs 615 00:29:15,880 --> 00:29:18,560 compilar el vostre programa? 616 00:29:18,560 --> 00:29:24,020 >> JASON Hirschhorn: Així que anem a repassar en general els passos d'aquest procés. 617 00:29:24,020 --> 00:29:26,280 Vostè escriu la seva columna c .. 618 00:29:26,280 --> 00:29:33,530 A l'arxiu de c., Que inclou la seva # biblioteques de capçalera, per exemple, cs50.h. 619 00:29:33,530 --> 00:29:39,480 Què té això aguda inclouen line facis al teu programa? 620 00:29:39,480 --> 00:29:40,525 Akchar. 621 00:29:40,525 --> 00:29:43,350 >> AKCHAR: Afegeix els prototips de les funcions de la capçalera 622 00:29:43,350 --> 00:29:45,120 els arxius de les biblioteques. 623 00:29:45,120 --> 00:29:45,600 >> JASON Hirschhorn: Exactament. 624 00:29:45,600 --> 00:29:49,870 Afegeix els prototips de funcions al seu codi. 625 00:29:49,870 --> 00:29:55,230 Així que quan s'està compilant el codi les primeres etapes, el compilador sap 626 00:29:55,230 --> 00:29:59,250 que realment existeixen aquestes funcions, i que en algun lloc que s'han definit. 627 00:29:59,250 --> 00:30:02,460 Els arxius. H no inclouen l' definicions per a aquestes funcions o com 628 00:30:02,460 --> 00:30:03,950 treballen realment. 629 00:30:03,950 --> 00:30:07,960 Cs50.h només inclou una cosa que diu getString és una cosa real que 630 00:30:07,960 --> 00:30:09,270 pot succeir. 631 00:30:09,270 --> 00:30:14,240 I standardio.h diu printf és una cosa real que li pot passar. 632 00:30:14,240 --> 00:30:23,190 >> Pel que el seu llenguatge c amb això. Capçalera arxiu es va convertir en una mica de 633 00:30:23,190 --> 00:30:27,750 codi llegible per la màquina, el que finalment aconsegueix convertit en binari 634 00:30:27,750 --> 00:30:30,030 codi, de 0 i 1. 635 00:30:30,030 --> 00:30:33,590 I aquest és el codi que en última instància s'executa. 636 00:30:33,590 --> 00:30:38,550 El CS50-l línia - per exemple, quan estàs escrivint Clang - 637 00:30:38,550 --> 00:30:41,830 i després d'incloure-l CS50, escriu que polz 638 00:30:41,830 --> 00:30:42,180 I veus això. 639 00:30:42,180 --> 00:30:43,890 Quan escrius fer, vostè veure que la línia aquí. 640 00:30:43,890 --> 00:30:47,740 I veurem que en un segon quan codifiquem o més endavant, quan el codi. 641 00:30:47,740 --> 00:30:50,390 >> Però això-l línia CS50 fa alguna cosa una mica diferent a 642 00:30:50,390 --> 00:30:52,440 els # include cs50.h. 643 00:30:52,440 --> 00:30:56,300 Què fa la línia que-l CS50? 644 00:30:56,300 --> 00:30:56,820 Avi? 645 00:30:56,820 --> 00:31:00,310 >> AVI: Vull dir que es vincula la biblioteca a la funció 646 00:31:00,310 --> 00:31:02,710 cridar, igual que els arxius. o. 647 00:31:02,710 --> 00:31:08,200 >> JASON Hirschhorn: Així que és molt a prop, si no és el lloc. 648 00:31:08,200 --> 00:31:16,220 El CS50-l pren l'arxiu binari i es fusiona amb l'arxiu binari. 649 00:31:16,220 --> 00:31:21,410 Així cs50.h, no té sentit en la transformació de cs50.h del llenguatge C a binari cada 650 00:31:21,410 --> 00:31:23,130 una sola vegada s'està utilitzant. 651 00:31:23,130 --> 00:31:26,650 Això seria una ximpleria, perquè això es perd molt de temps. 652 00:31:26,650 --> 00:31:30,420 Per tant, ja s'ha compilat i es va convertir en un executable. 653 00:31:30,420 --> 00:31:35,430 I ara que va a combinar amb el seu arxiu al final. 654 00:31:35,430 --> 00:31:38,370 Així que els de 1 i 0 de van fusionar-se amb els seus éssers 655 00:31:38,370 --> 00:31:39,150 i 0 en l'extrem. 656 00:31:39,150 --> 00:31:43,670 Així que ara que vostè realment té el real 1 i 0 del que defineixen com getString, 657 00:31:43,670 --> 00:31:47,890 per exemple, les obres, o com printf, per exemple, les obres. 658 00:31:47,890 --> 00:31:52,750 >> I per a més informació, hi ha una compiladors curts que Nate dóna que 659 00:31:52,750 --> 00:31:55,410 vostè ha de comprovar que va a través d'aquests passos. 660 00:31:55,410 --> 00:31:56,050 Però - 661 00:31:56,050 --> 00:31:56,560 Sí 662 00:31:56,560 --> 00:32:01,700 >> ESTUDIANT: Són sempre els arxius o. quan estan en forma de biblioteca, 663 00:32:01,700 --> 00:32:06,764 llest per combinar, vinculat - com que estan en el codi binari? 664 00:32:06,764 --> 00:32:07,600 >> JASON Hirschhorn: OK. 665 00:32:07,600 --> 00:32:08,420 El que - 666 00:32:08,420 --> 00:32:11,780 >> ESTUDIANT: Això és sempre el cas per les biblioteques quan es vinculen? 667 00:32:11,780 --> 00:32:12,500 >> JASON Hirschhorn: Si. 668 00:32:12,500 --> 00:32:17,300 Així que hi ha. S arxius, que seran codi de màquina, que també serà 669 00:32:17,300 --> 00:32:17,975 críptica a vostè. 670 00:32:17,975 --> 00:32:19,410 Vostè no ha de preocupar per això. 671 00:32:19,410 --> 00:32:24,930 Però en general, si, van a estar en format. o arxius llestos per anar. 672 00:32:24,930 --> 00:32:27,170 >> ESTUDIANT: Llavors, quan vostè envia a una biblioteca, no només s'envia 673 00:32:27,170 --> 00:32:28,880 la. h i. o? 674 00:32:28,880 --> 00:32:32,210 No envieu el. Co el. S. 675 00:32:32,210 --> 00:32:33,070 >> JASON Hirschhorn: So - 676 00:32:33,070 --> 00:32:36,260 i això és en aquest curt i, si aquesta informació sembla estar arribant a 677 00:32:36,260 --> 00:32:36,700 poc ràpid. 678 00:32:36,700 --> 00:32:39,870 No obstant això, el curt de compiladors parla d'això també. 679 00:32:39,870 --> 00:32:43,290 Quan vostè envia una biblioteca, si vostè envia la. h, l'arxiu de capçalera, els 680 00:32:43,290 --> 00:32:46,290 prototips de funcions, i l'1 de i De 0, això és tot el que té per donar. 681 00:32:46,290 --> 00:32:50,640 No cal per donar forma en què el L'opció funciona, l'arxiu c .. 682 00:32:50,640 --> 00:32:56,360 Com que el punt d'extracció, o la assenyalar les API, el punt en el SPL, 683 00:32:56,360 --> 00:32:59,650 la biblioteca portàtil de Stanford, és perquè vostè no es preocupi per com les noves 684 00:32:59,650 --> 00:33:04,220 GRect funciona, o com es mouen les obres, o com afegir obres. 685 00:33:04,220 --> 00:33:06,520 Tot el que necessites saber és afegir és una funció que pugui 686 00:33:06,520 --> 00:33:08,880 utilitzar, i ho fa. 687 00:33:08,880 --> 00:33:12,760 Així que realment no necessita saber com està escrit en C. Només necessites 688 00:33:12,760 --> 00:33:15,460 saber, aquí hi ha les funcions, la qual cosa fan, i aquí hi ha les d'1 i 0 689 00:33:15,460 --> 00:33:18,870 quan realment voleu utilitzar. 690 00:33:18,870 --> 00:33:19,530 >> Genial. 691 00:33:19,530 --> 00:33:26,980 Alguna pregunta més sobre els compiladors o altres temes del fòrum? 692 00:33:26,980 --> 00:33:30,300 >> ESTUDIANT: Tinc una pregunta d' la implementació de les funcions recursives. 693 00:33:30,300 --> 00:33:31,170 Una pregunta sobre la recursivitat. 694 00:33:31,170 --> 00:33:33,030 Vaig tenir la sensació que es plantejaran. 695 00:33:33,030 --> 00:33:38,310 Així que anirem ràpidament a través de recursivitat amb una específica 696 00:33:38,310 --> 00:33:40,690 exemple, una funció factorial. 697 00:33:40,690 --> 00:33:44,920 Com que aquest és un exemple que sorgeix amb freqüència o que s'utilitzin 698 00:33:44,920 --> 00:33:46,170 per il · lustrar la recursió. 699 00:33:46,170 --> 00:33:52,390 700 00:33:52,390 --> 00:33:56,410 >> Així «4!" es llegeix com 4 factorial. 701 00:33:56,410 --> 00:33:59,120 I què vol dir 4 factorial? 702 00:33:59,120 --> 00:34:00,696 Què vol fer? 703 00:34:00,696 --> 00:34:02,235 Com es calcula abril factorial? 704 00:34:02,235 --> 00:34:05,250 705 00:34:05,250 --> 00:34:07,960 4 vegades 3 vegades 2 vegades 1. 706 00:34:07,960 --> 00:34:11,889 >> Així que una altra manera d'escriure 4 factorial és escriure això. 707 00:34:11,889 --> 00:34:16,780 708 00:34:16,780 --> 00:34:19,022 4 Temps 3 factorial. 709 00:34:19,022 --> 00:34:22,080 A causa 3 factorial és 3 vegades 2 vegades 1. 710 00:34:22,080 --> 00:34:27,580 Així que 4 vegades 3 factorial és 4 vegades 3 vegades 2 vegades 1. 711 00:34:27,580 --> 00:34:32,679 Aquesta és la raó factorial és una gran candidat a la recursivitat, perquè és 712 00:34:32,679 --> 00:34:36,630 clar que hi ha quelcom que succeeix una i altra vegada i una altra en un 713 00:34:36,630 --> 00:34:39,820 menor nombre de coses fins arribar a la final. 714 00:34:39,820 --> 00:34:42,570 En arribar a 1, 1 factorial és 1. 715 00:34:42,570 --> 00:34:43,719 No pot anar molt més enllà. 716 00:34:43,719 --> 00:34:47,219 0 factorial també es defineix com 1. 717 00:34:47,219 --> 00:34:50,679 Així que quan s'arriba a 1 o 0, ets al final, i que pugui 718 00:34:50,679 --> 00:34:53,219 començar a anar amunt. 719 00:34:53,219 --> 00:34:59,540 Així que si volíem escriure una recursiva funció per calcular un factorial, 720 00:34:59,540 --> 00:35:02,170 anem a escriure algunes pseudocodi per això ara. 721 00:35:02,170 --> 00:35:03,300 Abans que escrivim que pseudocodi - 722 00:35:03,300 --> 00:35:05,660 Vaig a donar vostès un parell de minuts per escriure el codi de pseudo o simplement pensar 723 00:35:05,660 --> 00:35:09,600 en això - hi ha dues coses cada funció recursiva necessita. 724 00:35:09,600 --> 00:35:12,530 Quines són aquestes dues coses? 725 00:35:12,530 --> 00:35:13,220 >> JACK: Ha de cridar-se a si mateixa. 726 00:35:13,220 --> 00:35:13,680 >> JASON Hirschhorn: Noè? 727 00:35:13,680 --> 00:35:14,460 Oh, Jack. 728 00:35:14,460 --> 00:35:15,100 Endavant. 729 00:35:15,100 --> 00:35:16,640 >> JACK: Ha de cridar-se a si mateixa. 730 00:35:16,640 --> 00:35:19,220 >> JASON Hirschhorn: Així que un recursiu funció necessita una crida recursiva, un 731 00:35:19,220 --> 00:35:20,220 cridar a si mateix. 732 00:35:20,220 --> 00:35:20,770 Aquesta és una. 733 00:35:20,770 --> 00:35:21,510 I quina és l'altra cosa? 734 00:35:21,510 --> 00:35:22,250 >> JACK: Un cas base. 735 00:35:22,250 --> 00:35:23,780 >> JASON Hirschhorn: un cas base. 736 00:35:23,780 --> 00:35:26,940 Un cas base és, aquí és quan ens aturem. 737 00:35:26,940 --> 00:35:29,510 Pel que la seva funció es diu. 738 00:35:29,510 --> 00:35:31,410 El cas base és el primer. 739 00:35:31,410 --> 00:35:33,710 Vols saber si ets al final. 740 00:35:33,710 --> 00:35:37,110 I si no estàs a la final, fer la seva crida recursiva. 741 00:35:37,110 --> 00:35:39,880 I vostè va a través d'aquesta funció de nou, comprovar la seva hipòtesi de base de nou. 742 00:35:39,880 --> 00:35:42,575 Si no és el final, es fa altra crida recursiva, 743 00:35:42,575 --> 00:35:44,130 et cetera, et cetera. 744 00:35:44,130 --> 00:35:47,110 >> És per això que les funcions recursives sempre necessitar aquests casos base i els 745 00:35:47,110 --> 00:35:48,210 crides recursives. 746 00:35:48,210 --> 00:35:51,280 Si no té una crida recursiva, es no seria una funció recursiva. 747 00:35:51,280 --> 00:35:53,210 Si no té un cas base, vostè aniria per sempre i 748 00:35:53,210 --> 00:35:54,780 no hi hauria final. 749 00:35:54,780 --> 00:35:57,870 I el cas base és sempre el primer, perquè sempre es vol comprovar 750 00:35:57,870 --> 00:36:00,420 si estàs al final primera. 751 00:36:00,420 --> 00:36:04,770 Així que abans de fer una mica de pseudocodi, per què Per què no et prens un minut per pensar en 752 00:36:04,770 --> 00:36:09,360 com una funció factorial recursiva s'escriuria? 753 00:36:09,360 --> 00:36:23,340 754 00:36:23,340 --> 00:36:26,010 >> A més, totes les que estan fent, per escrit cap a fora en un full de paper és 755 00:36:26,010 --> 00:36:27,960 el que vas a haver de fer en l'examen de demà. 756 00:36:27,960 --> 00:36:32,160 Així que probablement una bona pràctica fer Assegureu-vos que el codi que està escrivint 757 00:36:32,160 --> 00:36:34,420 cap avall en el full de paper - 758 00:36:34,420 --> 00:36:35,160 o es pot fer això. 759 00:36:35,160 --> 00:36:36,710 Saps on són els punts i comes. 760 00:36:36,710 --> 00:36:37,660 Te'n recordes de la sintaxi. 761 00:36:37,660 --> 00:36:40,400 Perquè vostè no està capaç de tenir una compilador diu que vostè va fer un error. 762 00:36:40,400 --> 00:37:02,356 763 00:37:02,356 --> 00:37:07,240 >> També, al llarg d'aquestes línies, demà, quan que hi hagi problemes de codificació, si 764 00:37:07,240 --> 00:37:11,490 es va precipitar pel temps, o si vostè és molt confós pel que fa a com se suposa que has 765 00:37:11,490 --> 00:37:16,030 escriure la cosa particular en C, li tocaria escriure pseudo-codi 766 00:37:16,030 --> 00:37:18,160 i escriure comentaris a també. 767 00:37:18,160 --> 00:37:21,940 Perquè no hi ha crèdit parcial per a un Moltes de les preguntes en el qüestionari. 768 00:37:21,940 --> 00:37:24,840 Així que vostè pot estar apurat, o vostè només podria ser confós. 769 00:37:24,840 --> 00:37:28,030 Escrivint en els comentaris o pseudo-codi sovint són maneres que vostè 770 00:37:28,030 --> 00:37:29,360 pot obtenir crèdit parcial. 771 00:37:29,360 --> 00:37:31,440 >> Així que no deixi alguna cosa en blanc en el qüestionari. 772 00:37:31,440 --> 00:37:33,490 No hi ha sancions per posar les coses polz 773 00:37:33,490 --> 00:37:37,650 De fet, posant en pseudocodi o comentaris ajudarà a la motoanivelladora 774 00:37:37,650 --> 00:37:40,410 esbrinar si realment sap el que que està parlant, i potser premi 775 00:37:40,410 --> 00:37:42,030 que alguna cosa de crèdit parcial per això. 776 00:37:42,030 --> 00:37:44,510 >> També al llarg d'aquestes línies, escriure amb claredat. 777 00:37:44,510 --> 00:37:47,650 Si no podem realment el que estem escrivint, no anomenarem 778 00:37:47,650 --> 00:37:49,900 a la mitjanit de demà amb la figura el que vas escriure. 779 00:37:49,900 --> 00:37:51,520 Només anem a enlairar punts. 780 00:37:51,520 --> 00:37:56,570 Escriure amb claredat perquè puguem escoltar, o millor dit, podem llegir el que vas escriure. 781 00:37:56,570 --> 00:38:00,230 >> I si diu dues frases, no escrigui un paràgraf. 782 00:38:00,230 --> 00:38:02,280 Seguiu les instruccions. 783 00:38:02,280 --> 00:38:03,500 Escriure amb claredat. 784 00:38:03,500 --> 00:38:07,720 I escriure en aquests comentaris o pseudocodi per a les preguntes que podrien 785 00:38:07,720 --> 00:38:10,270 concessió de crèdit parcial. 786 00:38:10,270 --> 00:38:12,520 >> OK, anem a anar a factorial. 787 00:38:12,520 --> 00:38:15,000 Així que tenim una funció factorial. 788 00:38:15,000 --> 00:38:18,400 789 00:38:18,400 --> 00:38:21,550 Si hagués d'escriure realment això en C, Què he de posar davant del nom 790 00:38:21,550 --> 00:38:22,800 de la funció? 791 00:38:22,800 --> 00:38:24,880 792 00:38:24,880 --> 00:38:30,060 El tipus de retorn, que, en aquest cas, anem a donar-li int. 793 00:38:30,060 --> 00:38:35,450 I després, dins de les claus, és el que passa dins de les claus per 794 00:38:35,450 --> 00:38:36,850 una funció? 795 00:38:36,850 --> 00:38:37,950 >> ESTUDIANTS: Tipus d'argument. 796 00:38:37,950 --> 00:38:39,150 >> JASON Hirschhorn: els seus arguments. 797 00:38:39,150 --> 00:38:42,680 Així factorial probablement tenir una discussió. 798 00:38:42,680 --> 00:38:44,500 Va probablement només tenen un argument. 799 00:38:44,500 --> 00:38:49,450 I direm que prendrà un nombre enter anomenat x. 800 00:38:49,450 --> 00:38:52,770 I de nou, en escriure el prototip de una funció o escriure la funció 801 00:38:52,770 --> 00:38:57,110 en el codi abans de definir-la, es escriure el tipus de dades i el nom de 802 00:38:57,110 --> 00:39:01,370 aquesta variable només per a aquesta funció. 803 00:39:01,370 --> 00:39:06,350 Així que vostè pot passar algun número en aquesta funció, que serà referit com x 804 00:39:06,350 --> 00:39:07,340 internament. 805 00:39:07,340 --> 00:39:08,755 >> Tenim la nostra funció factorial. 806 00:39:08,755 --> 00:39:12,030 807 00:39:12,030 --> 00:39:15,850 Necessitem dues coses, un cas base i una crida recursiva. 808 00:39:15,850 --> 00:39:20,900 Quin és el cas base per al factorial? 809 00:39:20,900 --> 00:39:24,850 Algú que ho va escriure i que no té encara es parla, quina és la base 810 00:39:24,850 --> 00:39:26,100 cas factorial? 811 00:39:26,100 --> 00:39:28,400 812 00:39:28,400 --> 00:39:30,930 >> ESTUDIANT: Si n és menor de 2, retorna 1. 813 00:39:30,930 --> 00:39:33,520 >> JASON Hirschhorn: Si n és menys de 2, retorna 1. 814 00:39:33,520 --> 00:39:37,216 M'agrada això, perquè això s'encarrega de 0 i 1. 815 00:39:37,216 --> 00:39:45,290 Així que farem x <2, retorna 1. 816 00:39:45,290 --> 00:39:47,870 Si ens creuem 0, si aconseguim passat 1, aquesta funció es 817 00:39:47,870 --> 00:39:49,790 tornar immediatament gener. 818 00:39:49,790 --> 00:39:54,020 Si ens passem un nombre més gran que o igual a 2, anem a 819 00:39:54,020 --> 00:39:55,370 tenir la nostra crida recursiva. 820 00:39:55,370 --> 00:39:57,855 >> I llavors, com és que funcionarà? 821 00:39:57,855 --> 00:40:01,070 Pot algú que va treballar en aquest que no ha parlat encara em donen la 822 00:40:01,070 --> 00:40:07,380 crida recursiva per a aquesta funció en pseudocodi? 823 00:40:07,380 --> 00:40:10,770 Si ens passem d'un nombre x i és més gran que 2, el 824 00:40:10,770 --> 00:40:13,370 Què volem fer? 825 00:40:13,370 --> 00:40:17,930 També hem d'exemple escrit en la secundari que li podria donar una pista. 826 00:40:17,930 --> 00:40:20,770 >> ESTUDIANT: Truqui x vegades l' factorial de x almenys 1? 827 00:40:20,770 --> 00:40:22,020 >> JASON Hirschhorn: Exactament. 828 00:40:22,020 --> 00:40:24,610 829 00:40:24,610 --> 00:40:37,750 Anem a tornar x vegades el factorial de x almenys 1. 830 00:40:37,750 --> 00:40:41,810 I això, tot i que he escrit a dalt, bàsicament, el que va dir en anglès, 831 00:40:41,810 --> 00:40:44,580 aquesta funció factorial es dirà de nou. 832 00:40:44,580 --> 00:40:46,320 Es va a executar en x almenys 1. 833 00:40:46,320 --> 00:40:49,320 Tornarà amb algun sencer, i llavors va a multiplicar aquests dos 834 00:40:49,320 --> 00:40:52,050 junts, i aquest valor serà tornat al que sigui cridat a aquest 835 00:40:52,050 --> 00:40:55,010 funció factorial, el que podria ser un altre exemple de 836 00:40:55,010 --> 00:40:58,420 aquesta funció factorial. 837 00:40:58,420 --> 00:41:01,360 >> Així que és un exemple d'un recursiva funció, una molt 838 00:41:01,360 --> 00:41:02,530 funció recursiva simple. 839 00:41:02,530 --> 00:41:04,530 Però la majoria d'ells serà així. 840 00:41:04,530 --> 00:41:11,170 Si vols un bon recursiva lluitar per la prova, tracti de codificació 841 00:41:11,170 --> 00:41:13,230 recerca binària recursiva. 842 00:41:13,230 --> 00:41:18,950 Perquè si ho fessis de cerca binària per problema va fixar tres, probablement ho va fer 843 00:41:18,950 --> 00:41:21,730 iterativa en un bucle while. 844 00:41:21,730 --> 00:41:23,700 >> Però també pot ser escrit de forma recursiva. 845 00:41:23,700 --> 00:41:26,310 Vas a haver de escriure la seva pròpia funció separada que porta algun 846 00:41:26,310 --> 00:41:29,020 diferents arguments de línia d'ordres - o no els arguments de línia d'ordres, alguns 847 00:41:29,020 --> 00:41:30,910 diferents arguments només regular. 848 00:41:30,910 --> 00:41:33,870 Però es podria escriure de recerca binària de forma recursiva així. 849 00:41:33,870 --> 00:41:36,190 >> ESTUDIANT: Així que també podria haver escrit, en comptes de x menys 1, que 850 00:41:36,190 --> 00:41:39,502 també podria haver escrit x menys menys, ja que podria tenir 851 00:41:39,502 --> 00:41:40,830 escrit minus minus x. 852 00:41:40,830 --> 00:41:44,740 Pots explicar molt ràpidament per què aquestes serien les coses diferents, 853 00:41:44,740 --> 00:41:49,510 com quina és la diferència entre x menys menys i menys menys x? 854 00:41:49,510 --> 00:41:51,320 >> JASON Hirschhorn: No, no estic entrarà en això. 855 00:41:51,320 --> 00:41:55,500 Però vaig a parlar amb vostè sobre ell després d' classe. x menys menys, menys, menys x 856 00:41:55,500 --> 00:41:57,780 disminuir x en 1. 857 00:41:57,780 --> 00:41:59,090 Però ho fan una mica diferent. 858 00:41:59,090 --> 00:42:00,340 Però jo no vull entrar en això. 859 00:42:00,340 --> 00:42:04,330 860 00:42:04,330 --> 00:42:09,090 Altres preguntes sobre la recursivitat o aquesta funció? 861 00:42:09,090 --> 00:42:10,140 Això no és realment fins i tot pseudocodi. 862 00:42:10,140 --> 00:42:15,060 Això és bàsicament el codi en C escriviu per això. 863 00:42:15,060 --> 00:42:19,393 >> OK, qualsevol altra pregunta sobre els temes fins aquí? 864 00:42:19,393 --> 00:42:19,864 Sí 865 00:42:19,864 --> 00:42:23,130 >> ESTUDIANT: Tinc un petit repàs a la punt i flotant de precisió. 866 00:42:23,130 --> 00:42:24,260 >> JASON Hirschhorn: Flotant punt i precisió. 867 00:42:24,260 --> 00:42:26,920 Pot algú realment ràpid em fa un resum de 868 00:42:26,920 --> 00:42:28,210 punt flotant i precisió? 869 00:42:28,210 --> 00:42:30,420 Tots vostès que havies de fer això per a la seva problema establert, pel que estem tots 870 00:42:30,420 --> 00:42:31,700 familiaritzat amb ell. 871 00:42:31,700 --> 00:42:35,090 O potser no tots vostès. 872 00:42:35,090 --> 00:42:36,602 Algú? 873 00:42:36,602 --> 00:42:39,530 Doneu-me un punt de començar. 874 00:42:39,530 --> 00:42:40,750 Punt flotant i precisió. 875 00:42:40,750 --> 00:42:42,380 Quin és el problema? 876 00:42:42,380 --> 00:42:42,960 Sí 877 00:42:42,960 --> 00:42:43,680 Victòria? 878 00:42:43,680 --> 00:42:44,480 >> VANESSA: Vanessa. 879 00:42:44,480 --> 00:42:45,285 >> JASON Hirschhorn: Vanessa. 880 00:42:45,285 --> 00:42:45,680 Ho sento. 881 00:42:45,680 --> 00:42:51,550 >> VANESSA: Només hi ha un nombre finit de nombres que poden ser representats 882 00:42:51,550 --> 00:42:57,930 perquè estàs en una, en la nostra cas, un sistema de 32 bits. 883 00:42:57,930 --> 00:43:03,080 Així que tipus d'haver de compensar alguns números. 884 00:43:03,080 --> 00:43:03,910 >> JASON Hirschhorn: Així que això és exactament correcte. 885 00:43:03,910 --> 00:43:08,110 Hi ha només una certa quantitat de nombres que poden ser representats. 886 00:43:08,110 --> 00:43:11,770 Si es multipliquen dos nombres molt grans, podria desbordar la quantitat 887 00:43:11,770 --> 00:43:13,950 dels espais que ha de representar un nombre sencer. 888 00:43:13,950 --> 00:43:17,930 És per això que de vegades s'utilitza un long long en lloc d'un int. 889 00:43:17,930 --> 00:43:19,210 Això té més espais. 890 00:43:19,210 --> 00:43:21,210 Pot contenir un nombre més gran. 891 00:43:21,210 --> 00:43:24,310 >> Punt flotant de precisió té a veure amb això, sinó que també té a veure amb la 892 00:43:24,310 --> 00:43:29,300 fet que els nombres decimals són no sempre representat. 893 00:43:29,300 --> 00:43:29,540 Ho sento. 894 00:43:29,540 --> 00:43:31,280 Permetin-me dir-ho d'aquesta còpia de seguretat. 895 00:43:31,280 --> 00:43:36,610 El nombre decimal 1.0 no és sempre representat com és d'esperar, 896 00:43:36,610 --> 00:43:40,770 1,000000000. 897 00:43:40,770 --> 00:43:50,360 A vegades es representa com 1,000000001 0,999999999 o. 898 00:43:50,360 --> 00:43:52,780 Es podria fins i tot 89 llançat en algun lloc. 899 00:43:52,780 --> 00:43:56,560 Així que els nombres decimals no són representat exactament igual que ho faria 900 00:43:56,560 --> 00:43:58,430 esperem que siguin representats. 901 00:43:58,430 --> 00:44:00,010 >> Així que en conjunt de problemes - 902 00:44:00,010 --> 00:44:00,860 va ser dues? - 903 00:44:00,860 --> 00:44:05,290 problema va fixar dos, on ens topem amb Els nombres de punt flotant, quan volíem 904 00:44:05,290 --> 00:44:08,690 que representen exactament el que volíem que representen, el nombre 905 00:44:08,690 --> 00:44:12,860 de monedes d'un cèntim, o el nombre de centaus, multipliquem per 100 d'ells. 906 00:44:12,860 --> 00:44:14,750 Les envoltem. 907 00:44:14,750 --> 00:44:18,660 I després li tallem tot darrere del punt decimal. 908 00:44:18,660 --> 00:44:22,020 Això era per assegurar-se que ho farien realitat és igual exactament el que volíem 909 00:44:22,020 --> 00:44:22,410 que igualen. 910 00:44:22,410 --> 00:44:26,870 >> Perquè quan es pren una cosa que és Un flotador i fer-ne un int, que 911 00:44:26,870 --> 00:44:29,860 tallar tot a la dreta de la coma decimal. 912 00:44:29,860 --> 00:44:33,900 Com que hi ha una mica de punt flotant imprecisió, 100.000 podrien ser 913 00:44:33,900 --> 00:44:37,440 representats com 99,999999999. 914 00:44:37,440 --> 00:44:40,350 I si el que va tallar tot per la dreta immediatament, anem a 915 00:44:40,350 --> 00:44:41,600 obtenir el nombre equivocat. 916 00:44:41,600 --> 00:44:44,050 917 00:44:44,050 --> 00:44:44,180 Sí 918 00:44:44,180 --> 00:44:45,290 >> ESTUDIANT: Jo tenia una pregunta sobre el càsting. 919 00:44:45,290 --> 00:44:47,500 En quin ordre se li ocorre entrar? 920 00:44:47,500 --> 00:44:54,480 Si ho fa surar, suports, 1 dividits per 10, és el que fa 1 dividit per 10, 921 00:44:54,480 --> 00:44:58,910 a continuació, obtenir 0,1, després gireu en un flotador? 922 00:44:58,910 --> 00:45:01,470 >> JASON Hirschhorn: Si ho fa surar 1 dividit per 10 - 923 00:45:01,470 --> 00:45:02,550 >> ESTUDIANT: Sí, i llavors és igual a - 924 00:45:02,550 --> 00:45:04,240 així, ho faria normalment tenir igual - 925 00:45:04,240 --> 00:45:04,690 Sí 926 00:45:04,690 --> 00:45:06,760 Vols fer un flotador, oi? 927 00:45:06,760 --> 00:45:12,790 >> JASON Hirschhorn: OK, així que anem a utilitzar això per ramificar a esbrinar 928 00:45:12,790 --> 00:45:15,390 les respostes a aquestes preguntes a través de la codificació. 929 00:45:15,390 --> 00:45:18,180 Com que és probable que tingui una gran quantitat de aquestes preguntes minuts, i una bona manera 930 00:45:18,180 --> 00:45:19,100 per resoldre'ls és a través de la codificació. 931 00:45:19,100 --> 00:45:21,320 Així que anem a codificar això en aquest moment, i després anem a tornar enrere i 932 00:45:21,320 --> 00:45:24,020 codificar la pregunta que tenia. 933 00:45:24,020 --> 00:45:24,950 >> Així que la primera línia - 934 00:45:24,950 --> 00:45:29,390 No hauria d'haver escrit - el que és el primer que volem fer quan 935 00:45:29,390 --> 00:45:32,250 obrir un nou arxiu en gedit? 936 00:45:32,250 --> 00:45:34,190 >> ESTUDIANT: Include. 937 00:45:34,190 --> 00:45:35,920 >> JASON Hirschhorn: Inclogui què? 938 00:45:35,920 --> 00:45:37,952 >> ESTUDIANT: biblioteca CS50. 939 00:45:37,952 --> 00:45:39,920 >> JASON Hirschhorn: OK. 940 00:45:39,920 --> 00:45:42,590 Què més hem d'incloure? 941 00:45:42,590 --> 00:45:46,820 Només anem a comprovar el que succeeix quan llances alguna cosa a un flotador. 942 00:45:46,820 --> 00:45:48,605 Però, què necessitem per incloure si estem va a escriure un programa en C? 943 00:45:48,605 --> 00:45:49,300 >> ESTUDIANT: E / S estàndard 944 00:45:49,300 --> 00:45:50,625 >> JASON Hirschhorn: stdio.h. 945 00:45:50,625 --> 00:45:54,880 En realitat no necessitem, per a aquest programa, cs50.h, encara que és 946 00:45:54,880 --> 00:45:55,920 Sempre és útil incloure. 947 00:45:55,920 --> 00:45:58,260 Però nosaltres sempre necessitem stdio.h. 948 00:45:58,260 --> 00:45:59,660 >> ESTUDIANT: Quan es codifiquen en C? 949 00:45:59,660 --> 00:46:15,770 >> JASON Hirschhorn: En programar en C. 950 00:46:15,770 --> 00:46:17,090 >> Així que m'ho guardo com l'arxiu c .. 951 00:46:17,090 --> 00:46:18,590 Tinc algunes bones ressaltat de sintaxi. 952 00:46:18,590 --> 00:46:22,890 Vaig escriure buit interior principal. 953 00:46:22,890 --> 00:46:24,792 Què significa el buit? 954 00:46:24,792 --> 00:46:26,740 >> ESTUDIANT: No prendre cap arguments de la línia d'ordres. 955 00:46:26,740 --> 00:46:28,900 >> JASON Hirschhorn: mig buit, en aquest cas, el principal no es fa 956 00:46:28,900 --> 00:46:29,700 arguments de la línia d'ordres. 957 00:46:29,700 --> 00:46:32,720 En altres casos, vol dir que la funció no pren arguments de la línia d'ordres. 958 00:46:32,720 --> 00:46:36,560 O la funció, si jo hagués d'escriure void main (void), que dirien principals 959 00:46:36,560 --> 00:46:38,460 no tornar res. 960 00:46:38,460 --> 00:46:39,960 Així buit només significa res. 961 00:46:39,960 --> 00:46:42,510 Què faria jo escric si hagués de prendre arguments de línia d'ordres? 962 00:46:42,510 --> 00:46:45,250 963 00:46:45,250 --> 00:46:47,150 >> ESTUDIANT: int c arc arc cadena de v 964 00:46:47,150 --> 00:46:49,055 >> JASON Hirschhorn: int argc argv cadena. 965 00:46:49,055 --> 00:46:54,050 966 00:46:54,050 --> 00:46:55,572 És això cert? 967 00:46:55,572 --> 00:46:58,720 >> ESTUDIANT: És claudàtors argv estrella característiques. 968 00:46:58,720 --> 00:47:01,730 >> JASON Hirschhorn: Així que vostè podria escriure suports argv cadena o argv estrelles caràcters 969 00:47:01,730 --> 00:47:03,710 claudàtors, però que necessita els claudàtors. 970 00:47:03,710 --> 00:47:06,290 A causa argv és un array de cadenes, recorda. 971 00:47:06,290 --> 00:47:07,360 No és només una cadena. 972 00:47:07,360 --> 00:47:10,350 Així argv cadena és, aquí està una cadena crida argv. 973 00:47:10,350 --> 00:47:13,630 Suports argv cadena és, aquí està una matriu de cadenes. 974 00:47:13,630 --> 00:47:17,865 Suports argv cadena argc Així int seria una cosa que em 975 00:47:17,865 --> 00:47:18,810 probablement escriure. 976 00:47:18,810 --> 00:47:23,050 >> Així que volia guardar en un sencer? 977 00:47:23,050 --> 00:47:24,285 >> ESTUDIANT: Sí, sencer. 978 00:47:24,285 --> 00:47:25,840 O en un flotador. 979 00:47:25,840 --> 00:47:26,710 >> JASON Hirschhorn: En un flotador? 980 00:47:26,710 --> 00:47:30,790 Igual que, float x és igual a 1 dividit per 10. 981 00:47:30,790 --> 00:47:32,040 >> JASON Hirschhorn: OK. 982 00:47:32,040 --> 00:47:40,160 983 00:47:40,160 --> 00:47:42,240 Com puc imprimir un flotador a printf? 984 00:47:42,240 --> 00:47:45,100 985 00:47:45,100 --> 00:47:46,714 Què? 986 00:47:46,714 --> 00:47:47,560 >> ESTUDIANT:% f. 987 00:47:47,560 --> 00:47:48,300 >> JASON Hirschhorn:% f. 988 00:47:48,300 --> 00:47:50,810 Què és un nombre enter? 989 00:47:50,810 --> 00:47:52,110 d o i. 990 00:47:52,110 --> 00:47:53,000 Què és una cadena? 991 00:47:53,000 --> 00:47:54,240 >> ESTUDIANT: s. 992 00:47:54,240 --> 00:47:56,140 >> JASON Hirschhorn: s. 993 00:47:56,140 --> 00:47:57,550 Com puc obtenir una nova línia? 994 00:47:57,550 --> 00:47:58,800 >> ESTUDIANT: backslash n. 995 00:47:58,800 --> 00:48:04,610 996 00:48:04,610 --> 00:48:07,100 >> JASON Hirschhorn: Què he de fer per tornar si s'executa correctament principals? 997 00:48:07,100 --> 00:48:08,360 >> ESTUDIANT: 0. 998 00:48:08,360 --> 00:48:09,430 He de escriure aquesta línia, però? 999 00:48:09,430 --> 00:48:10,170 >> ESTUDIANT: No 1000 00:48:10,170 --> 00:48:11,513 Bé, no anem a escriure, llavors. 1001 00:48:11,513 --> 00:48:16,450 1002 00:48:16,450 --> 00:48:17,190 Tots poden llegir això? 1003 00:48:17,190 --> 00:48:18,485 S'assembla una mica petita. 1004 00:48:18,485 --> 00:48:20,160 Tots poden veure, o hauria Ho faig més gran? 1005 00:48:20,160 --> 00:48:23,480 1006 00:48:23,480 --> 00:48:25,100 Crec que per a la càmera, farem és una mica més gran, però. 1007 00:48:25,100 --> 00:48:35,750 1008 00:48:35,750 --> 00:48:38,410 >> JASON Hirschhorn: Si vull convertir aquest . C presentar en un arxiu executable, el que 1009 00:48:38,410 --> 00:48:39,260 Per què escric? 1010 00:48:39,260 --> 00:48:41,610 >> ESTUDIANT: Feu la prova. 1011 00:48:41,610 --> 00:48:42,080 >> JASON Hirschhorn: Ho sents? 1012 00:48:42,080 --> 00:48:42,790 >> ESTUDIANT: Feu la prova. 1013 00:48:42,790 --> 00:48:44,040 >> JASON Hirschhorn: Feu la prova. 1014 00:48:44,040 --> 00:48:46,700 1015 00:48:46,700 --> 00:48:48,410 Estàvem parlant de aquesta línia abans. 1016 00:48:48,410 --> 00:48:49,140 Clang. 1017 00:48:49,140 --> 00:48:51,270 Què hi ha so metàl · lic? 1018 00:48:51,270 --> 00:48:52,200 El nom del compilador. 1019 00:48:52,200 --> 00:48:53,920 Quina és aquesta línia? 1020 00:48:53,920 --> 00:48:55,580 >> ESTUDIANT: Estableix que per a la utilització de GDB. 1021 00:48:55,580 --> 00:48:59,230 >> JASON Hirschhorn: Conjunts cap amunt per a ús de GDB. 1022 00:48:59,230 --> 00:49:02,338 Aquesta línia, què és això? 1023 00:49:02,338 --> 00:49:03,290 >> ESTUDIANT: El codi font. 1024 00:49:03,290 --> 00:49:06,010 >> JASON Hirschhorn: Aquest és el arxiu d'origen, l'arxiu c .. 1025 00:49:06,010 --> 00:49:08,150 Què fan aquestes dues línies? 1026 00:49:08,150 --> 00:49:10,245 O aquests dos no línies. 1027 00:49:10,245 --> 00:49:12,300 >> ESTUDIANT: Anomena ho prova. 1028 00:49:12,300 --> 00:49:15,410 >> JASON Hirschhorn: Així que el guió o diu, nomenar alguna cosa diferent. 1029 00:49:15,410 --> 00:49:16,790 I aquí estàs cridant prova. 1030 00:49:16,790 --> 00:49:18,900 Si jo no he de, Quin seria el nom d'aquesta? 1031 00:49:18,900 --> 00:49:20,260 >> ESTUDIANT: a.out. 1032 00:49:20,260 --> 00:49:22,340 >> JASON Hirschhorn: a.out. 1033 00:49:22,340 --> 00:49:25,366 Què fa això? 1034 00:49:25,366 --> 00:49:27,670 >> ESTUDIANT: Vincula la biblioteca matemàtica. 1035 00:49:27,670 --> 00:49:29,550 >> JASON Hirschhorn: Vincula a la biblioteca de matemàtiques. 1036 00:49:29,550 --> 00:49:32,880 No incloem la biblioteca matemàtica, però ja que és tan comú, que han 1037 00:49:32,880 --> 00:49:35,780 make escrit per incloure sempre la biblioteca matemàtica. 1038 00:49:35,780 --> 00:49:39,050 I de la mateixa manera, el que inclou la biblioteca CS50. 1039 00:49:39,050 --> 00:49:43,010 >> Acceptar, pel que si enumerem, ara tenim un executable anomenat prova. 1040 00:49:43,010 --> 00:49:45,150 Per executar-lo, escric prova. 1041 00:49:45,150 --> 00:49:48,330 Veig que el meu punt flotant, com era d'esperar, és igual a 0. 1042 00:49:48,330 --> 00:49:50,890 1043 00:49:50,890 --> 00:49:51,590 Això - 1044 00:49:51,590 --> 00:49:52,060 de manera que - 1045 00:49:52,060 --> 00:49:55,210 >> ESTUDIANT: Llavors, si vostè posa surar ara, com ho llances com float - 1046 00:49:55,210 --> 00:49:56,870 >> JASON Hirschhorn: Cast la 1 a un flotador? 1047 00:49:56,870 --> 00:49:59,180 >> ESTUDIANT: No, tiri la cosa completa - 1048 00:49:59,180 --> 00:49:59,500 si. 1049 00:49:59,500 --> 00:50:02,460 Si vostè acaba de fer això, Això ho fa un 0,1? 1050 00:50:02,460 --> 00:50:07,170 >> JASON Hirschhorn: OK, així que molt ràpid, 1 dividit per 10, aquests són 1051 00:50:07,170 --> 00:50:08,690 sencers es divideixen. 1052 00:50:08,690 --> 00:50:13,580 Així que quan es divideix nombres enters, són 0, i que està estalviant que 0 en un 1053 00:50:13,580 --> 00:50:17,170 surar, perquè la barra és només la divisió entera. 1054 00:50:17,170 --> 00:50:19,180 Així que ara estem convertint quelcom en un flotador. 1055 00:50:19,180 --> 00:50:21,650 >> Anem a veure què passa. 1056 00:50:21,650 --> 00:50:22,900 Anem a fer la prova. 1057 00:50:22,900 --> 00:50:25,870 1058 00:50:25,870 --> 00:50:31,090 Així que ara veiem que aquesta barra no era divisió entera, que estava flotant 1059 00:50:31,090 --> 00:50:32,640 divisió de coma. 1060 00:50:32,640 --> 00:50:35,700 Com que un dels seus arguments havia estat tirat a un flotador. 1061 00:50:35,700 --> 00:50:38,380 Així que ara que estava dient, el tractament d'aquesta divisió com que estem tractant amb 1062 00:50:38,380 --> 00:50:40,140 punts flotants, no amb nombres enters. 1063 00:50:40,140 --> 00:50:42,760 I així obtenim la resposta que esperem. 1064 00:50:42,760 --> 00:50:44,620 >> Anem a veure el que passa - 1065 00:50:44,620 --> 00:50:47,103 Ui. 1066 00:50:47,103 --> 00:50:51,646 Si volgués imprimir més decimals llocs, com podria fer-ho? 1067 00:50:51,646 --> 00:50:55,550 >> Punt f Point, o com molts: ESTUDIANT decimals que desitgi. 1068 00:50:55,550 --> 00:51:02,280 1069 00:51:02,280 --> 00:51:04,440 >> JASON Hirschhorn: Així que imprimeixo 10 llocs decimals. 1070 00:51:04,440 --> 00:51:06,610 I ara veiem que estem rebent algunes coses rares. 1071 00:51:06,610 --> 00:51:09,650 I això va tornant a la teva pregunta sobre de coma flotant imprecisió. 1072 00:51:09,650 --> 00:51:10,950 Hi ha coses rares emmagatzemat aquí. 1073 00:51:10,950 --> 00:51:13,650 1074 00:51:13,650 --> 00:51:15,275 >> Bé, això respon a la teva pregunta? 1075 00:51:15,275 --> 00:51:18,550 1076 00:51:18,550 --> 00:51:20,200 Què més vols per codificar ràpidament? 1077 00:51:20,200 --> 00:51:25,470 >> ESTUDIANT: Jo només volia veure si No, si t'alliberes una mica de punter, 1078 00:51:25,470 --> 00:51:30,410 si aquest punter encara hi havia emmagatzemat en que la direcció del que havia estat 1079 00:51:30,410 --> 00:51:32,170 assenyalant prèviament. 1080 00:51:32,170 --> 00:51:34,100 >> JASON Hirschhorn: OK, pel que farem això. 1081 00:51:34,100 --> 00:51:38,030 Caràcter ptr estrella, això crea una variable anomenat ptr de tipus char estrelles. 1082 00:51:38,030 --> 00:51:39,280 Com escric malloc? 1083 00:51:39,280 --> 00:51:40,550 Alden? 1084 00:51:40,550 --> 00:51:41,800 >> ALDEN: Just malloc. 1085 00:51:41,800 --> 00:51:44,820 1086 00:51:44,820 --> 00:51:51,040 Però llavors ha de ser la mida de, i en aquest cas, suposo que s'havia 1087 00:51:51,040 --> 00:51:52,465 estar apuntant a char. 1088 00:51:52,465 --> 00:51:54,450 Així que seria caràcters. 1089 00:51:54,450 --> 00:51:57,520 >> JASON Hirschhorn: OK, així que més genèricament, Inside - 1090 00:51:57,520 --> 00:51:58,770 anem a editar. 1091 00:51:58,770 --> 00:52:05,100 1092 00:52:05,100 --> 00:52:09,260 Malloc Dins, desitja que el nombre de bytes en el munt. 1093 00:52:09,260 --> 00:52:12,320 En general, el que hem vist que som fent és que anem a malloc 1094 00:52:12,320 --> 00:52:14,940 cadenes, per exemple, o matrius d'enters. 1095 00:52:14,940 --> 00:52:21,600 Així que si volem octubre sencers, o el 10 caràcters, 10 ens donarà 10. 1096 00:52:21,600 --> 00:52:24,370 I a continuació, la mida dels caràcters donaria ens que la mida de caràcters, que en 1097 00:52:24,370 --> 00:52:25,120 aquest cas és d'1 byte. 1098 00:52:25,120 --> 00:52:26,250 Tenim 10 bytes. 1099 00:52:26,250 --> 00:52:28,540 Si haguéssim d'escriure la mida de int, això ens donaria 40 bytes. 1100 00:52:28,540 --> 00:52:31,520 >> Així que més genèricament, a l'interior de malloc és el nombre de bytes que desitja. 1101 00:52:31,520 --> 00:52:34,620 En aquest cas, estem rebent 1 byte. 1102 00:52:34,620 --> 00:52:36,900 El que sembla com un ús estrany de malloc, però per al nostre 1103 00:52:36,900 --> 00:52:38,470 propòsits té sentit. 1104 00:52:38,470 --> 00:52:40,420 Així que cal. 1105 00:52:40,420 --> 00:52:43,420 >> Anem a trucar gratis. 1106 00:52:43,420 --> 00:52:47,040 Ens desfem d'ella i fem servir ptr nou. 1107 00:52:47,040 --> 00:52:48,750 I què voleu comprovar? 1108 00:52:48,750 --> 00:52:50,550 >> ESTUDIANT: Jo només volia comprovar si o no hi havia res 1109 00:52:50,550 --> 00:52:51,900 dins d'ella. 1110 00:52:51,900 --> 00:52:53,050 >> JASON Hirschhorn: Així que si apuntava a alguna cosa? 1111 00:52:53,050 --> 00:52:57,740 >> ESTUDIANT: Sí, exactament, si encara tenia una adreça de memòria. 1112 00:52:57,740 --> 00:53:02,220 >> JASON Hirschhorn: ¿Així que vols per comprovar el valor de ptr? 1113 00:53:02,220 --> 00:53:03,470 >> ESTUDIANT: Sí, exactament. 1114 00:53:03,470 --> 00:53:07,940 1115 00:53:07,940 --> 00:53:10,160 >> JASON Hirschhorn: Què és el que escric aquí si vull comprovar el valor de la 1116 00:53:10,160 --> 00:53:11,880 punt - el que és, Jordània va dir, el valor? 1117 00:53:11,880 --> 00:53:13,720 O el que s'emmagatzema dins ptr? 1118 00:53:13,720 --> 00:53:14,620 >> ESTUDIANT: Direcció de la memòria. 1119 00:53:14,620 --> 00:53:16,330 >> JASON Hirschhorn: Direcció de la memòria. 1120 00:53:16,330 --> 00:53:20,520 Així que si jo escric només això, que va a dóna'm el valor de PTR. 1121 00:53:20,520 --> 00:53:22,800 I com puc imprimir a terme una adreça de memòria? 1122 00:53:22,800 --> 00:53:26,470 Quina és la cadena de format per a una adreça de la memòria? 1123 00:53:26,470 --> 00:53:27,430 >> ESTUDIANT:% p. 1124 00:53:27,430 --> 00:53:28,050 >> JASON Hirschhorn:% p. 1125 00:53:28,050 --> 00:53:29,500 % S és una cadena. 1126 00:53:29,500 --> 00:53:30,750 % P per al punter. 1127 00:53:30,750 --> 00:53:40,820 1128 00:53:40,820 --> 00:53:43,540 És això cert? 1129 00:53:43,540 --> 00:53:44,790 Això és correcte. 1130 00:53:44,790 --> 00:53:49,450 1131 00:53:49,450 --> 00:53:51,040 Així ptr és igual a - 1132 00:53:51,040 --> 00:53:53,350 que encara té alguna cosa en ella. 1133 00:53:53,350 --> 00:53:56,110 1134 00:53:56,110 --> 00:53:57,645 Aquesta és probablement una més pregunta interessant. 1135 00:53:57,645 --> 00:53:59,198 Què fa aquesta línia? 1136 00:53:59,198 --> 00:54:00,830 >> ESTUDIANT: falles Seg 1137 00:54:00,830 --> 00:54:01,310 >> JASON Hirschhorn: Què? 1138 00:54:01,310 --> 00:54:02,678 >> ESTUDIANT: Crec que SEG faltes. 1139 00:54:02,678 --> 00:54:03,574 >> JASON Hirschhorn: Hm? 1140 00:54:03,574 --> 00:54:04,920 >> ESTUDIANT: Crec que SEG culpa. 1141 00:54:04,920 --> 00:54:08,265 >> JASON Hirschhorn: Així que aquesta línia de ptr codi, estel, el que 1142 00:54:08,265 --> 00:54:10,152 Què significa l'estrella? 1143 00:54:10,152 --> 00:54:11,240 >> ESTUDIANT: El contingut d'. 1144 00:54:11,240 --> 00:54:11,560 >> JASON Hirschhorn: Si. 1145 00:54:11,560 --> 00:54:13,910 Anar a treure el contingut d'. 1146 00:54:13,910 --> 00:54:16,830 Així que això va a anar a la memòria abordar allà i donar-me això. 1147 00:54:16,830 --> 00:54:21,030 Solia% c aquí perquè hi ha són caràcters emmagatzemats allà. 1148 00:54:21,030 --> 00:54:23,390 Així que anirem a aquesta direcció ens Acabo de veure - o probablement serà un 1149 00:54:23,390 --> 00:54:25,190 mica diferent aquest vegada que executem el programa. 1150 00:54:25,190 --> 00:54:28,010 Però anem a anar a aquesta adreça que sabem que encara hi ha 1151 00:54:28,010 --> 00:54:29,260 i veure el que hi ha. 1152 00:54:29,260 --> 00:54:35,640 1153 00:54:35,640 --> 00:54:37,110 >> Així que no SEG culpa. 1154 00:54:37,110 --> 00:54:38,970 Simplement no ens ha donat res. 1155 00:54:38,970 --> 00:54:43,350 Pot ser que hi hagi en realitat ens ha donat alguna cosa, simplement no ho pot veure. 1156 00:54:43,350 --> 00:54:45,110 I això va de nou a aquesta idea - 1157 00:54:45,110 --> 00:54:47,270 i nosaltres no tindrem massa en això, perquè això és més enllà de la 1158 00:54:47,270 --> 00:54:48,460 abast d'aquest curs. 1159 00:54:48,460 --> 00:54:51,260 Però hem parlat aquí, si ens va anar més enllà dels límits de la matriu per 1160 00:54:51,260 --> 00:54:54,890 1, podríem no tenir problemes. 1161 00:54:54,890 --> 00:54:58,550 >> De vegades, quan et vas fora per 1, que estàs fent alguna cosa malament, i vostè 1162 00:54:58,550 --> 00:54:59,220 podria ficar en problemes. 1163 00:54:59,220 --> 00:55:00,820 Però no sempre es fiquen en problemes. 1164 00:55:00,820 --> 00:55:05,170 Depèn de quant d'una cosa dolenta que Què, et vas a ficar en problemes. 1165 00:55:05,170 --> 00:55:07,790 La qual cosa no vol dir, ser descuidat amb el seu codi. 1166 00:55:07,790 --> 00:55:12,080 Però és a dir, el programa no sempre deixar de fumar, fins i tot si vas a algun lloc 1167 00:55:12,080 --> 00:55:14,130 que no has d'anar. 1168 00:55:14,130 --> 00:55:18,170 >> Un bon exemple d'això és, una gran quantitat de persones en el seu problema conjunt 3, que 1169 00:55:18,170 --> 00:55:22,350 tenia 15 anys, no va comprovar la límits de la junta. 1170 00:55:22,350 --> 00:55:25,860 Així que va mirar a l'esquerra, va mirar a la dreta, va mirar a dalt, es veia 1171 00:55:25,860 --> 00:55:27,000 a la part inferior. 1172 00:55:27,000 --> 00:55:31,540 Però vostè no va comprovar per veure si la part superior va ser en realitat estarà en el consell. 1173 00:55:31,540 --> 00:55:35,220 I un munt de gent que va fer això i va resultar que en, el seu programa va funcionar 1174 00:55:35,220 --> 00:55:38,960 perfectament, perquè on estava aquest tauler emmagatzemada a la memòria, si vostè va ser un 1175 00:55:38,960 --> 00:55:42,300 per sobre d'ella o comprovat que la memòria direcció, no hi havia res 1176 00:55:42,300 --> 00:55:44,870 particularment horrible que, pel que el seu programa no era 1177 00:55:44,870 --> 00:55:45,970 va a cridar a vostè. 1178 00:55:45,970 --> 00:55:48,870 >> Però seguiríem enlairar punts si que no comprovi que, pel fet que 1179 00:55:48,870 --> 00:55:50,850 estaven fent una cosa que no estaves suposa que ha de fer, i vostè podria tenir 1180 00:55:50,850 --> 00:55:51,860 ficat en problemes. 1181 00:55:51,860 --> 00:55:54,040 Les probabilitats són, però, és probable que no ho vas fer. 1182 00:55:54,040 --> 00:55:57,790 Així que això és per demostrar que, sí, encara podem anar-hi. 1183 00:55:57,790 --> 00:55:59,010 I no entrarem en problema en aquest cas. 1184 00:55:59,010 --> 00:56:04,000 Si tractem de fer llegir el propers 100 caràcters, havíem 1185 00:56:04,000 --> 00:56:06,000 probablement ficar-se en problemes. 1186 00:56:06,000 --> 00:56:09,400 I vostè pot codificar la lectura de la següent 100 caràcters si vol fent algunes 1187 00:56:09,400 --> 00:56:10,110 espècie de bucle. 1188 00:56:10,110 --> 00:56:10,850 Sí 1189 00:56:10,850 --> 00:56:16,250 >> ESTUDIANT: Des que ens van assignar que espai d'un valor real, no ho faríem 1190 00:56:16,250 --> 00:56:17,050 realment serà capaç de veure res. 1191 00:56:17,050 --> 00:56:21,740 Cal provar-ho amb l'ajust que igual a com C o alguna cosa? 1192 00:56:21,740 --> 00:56:22,640 >> JASON Hirschhorn: Molt bona pregunta. 1193 00:56:22,640 --> 00:56:25,340 Com es configura el valor - 1194 00:56:25,340 --> 00:56:28,980 quina línia de codi Com puc escriure en la línia 07:00 per fer el que vas dir? 1195 00:56:28,980 --> 00:56:34,040 >> ESTUDIANT: Star ptr és igual a un sol cita c Extrem cometa simple. 1196 00:56:34,040 --> 00:56:36,970 >> JASON Hirschhorn: Així que això és posar un caràcter, c, en aquest lloc, 1197 00:56:36,970 --> 00:56:40,200 perquè una vegada més, aquesta estrella significa anar a allà. 1198 00:56:40,200 --> 00:56:43,320 I quan s'usa en el costat de la mà esquerra un operador d'assignació, que és igual a 1199 00:56:43,320 --> 00:56:47,270 signar, que no anem a aconseguir que la valor tant com estableix aquest valor. 1200 00:56:47,270 --> 00:56:48,520 Ara anem a veure què passa. 1201 00:56:48,520 --> 00:56:54,700 1202 00:56:54,700 --> 00:56:56,770 >> Posem alguna cosa allà i va ser allà. 1203 00:56:56,770 --> 00:56:58,000 Cridem lliure. 1204 00:56:58,000 --> 00:57:00,100 Algunes coses que probablement va succeir en el munt. 1205 00:57:00,100 --> 00:57:01,890 Per tant, ja no hi és. 1206 00:57:01,890 --> 00:57:07,440 Però de nou, no estem obtenint en problemes per anar-hi. 1207 00:57:07,440 --> 00:57:10,260 >> Estic fent això en el codi per il · lustrar que molts d'aquests 1208 00:57:10,260 --> 00:57:12,410 preguntes que vostè té, que són molt interessant 1209 00:57:12,410 --> 00:57:13,650 respon a una gran quantitat de temps. 1210 00:57:13,650 --> 00:57:15,260 I ells són realment bones preguntes. 1211 00:57:15,260 --> 00:57:19,010 I vostè pot calcular cap a fora en seu compte si, per exemple, 1212 00:57:19,010 --> 00:57:19,990 ja no estem a la secció. 1213 00:57:19,990 --> 00:57:20,940 Sí 1214 00:57:20,940 --> 00:57:24,430 >> ESTUDIANT: Com que vostè no va a enviar el punter en qualsevol lloc, és el que necessita 1215 00:57:24,430 --> 00:57:26,530 utilitzar malloc? 1216 00:57:26,530 --> 00:57:28,400 >> JASON Hirschhorn: Així que això es remunta a la seva pregunta inicial. 1217 00:57:28,400 --> 00:57:28,620 [? ?] 1218 00:57:28,620 --> 00:57:29,980 És només una variable local? 1219 00:57:29,980 --> 00:57:32,280 Malloc aquí no és que convincent. 1220 00:57:32,280 --> 00:57:35,260 L'ús d'malloc aquí no és que convincent perquè és 1221 00:57:35,260 --> 00:57:36,500 només una variable local. 1222 00:57:36,500 --> 00:57:40,970 >> ESTUDIANT: Llavors podries fer carbó ptr estrelles és igual a saludar? 1223 00:57:40,970 --> 00:57:41,400 >> JASON Hirschhorn: Oh. 1224 00:57:41,400 --> 00:57:43,300 Així que anem a tornar ara a la seva pregunta inicial. 1225 00:57:43,300 --> 00:57:46,885 Crec que vostè no està satisfet amb la meva resposta. 1226 00:57:46,885 --> 00:57:48,220 ¿D'acord? 1227 00:57:48,220 --> 00:57:49,226 Igual que? 1228 00:57:49,226 --> 00:57:49,682 >> ESTUDIANT: Sí 1229 00:57:49,682 --> 00:57:50,932 Esperi. 1230 00:57:50,932 --> 00:57:54,090 1231 00:57:54,090 --> 00:57:57,850 >> JASON Hirschhorn: I on Què vols imprimir? 1232 00:57:57,850 --> 00:58:00,026 Així que anem a imprimir una cadena d'aquesta manera? 1233 00:58:00,026 --> 00:58:06,380 1234 00:58:06,380 --> 00:58:07,630 >> ESTUDIANT: Interessant. 1235 00:58:07,630 --> 00:58:09,900 1236 00:58:09,900 --> 00:58:14,285 >> JASON Hirschhorn: Això diu això argument té el tipus d'un caràcter. 1237 00:58:14,285 --> 00:58:17,200 1238 00:58:17,200 --> 00:58:18,620 Així que això ha de ser un caràcter. 1239 00:58:18,620 --> 00:58:25,170 1240 00:58:25,170 --> 00:58:26,280 >> ESTUDIANT: Tot just pren la primera. 1241 00:58:26,280 --> 00:58:28,610 >> JASON Hirschhorn: Així que aquesta és el que vaig dir abans. 1242 00:58:28,610 --> 00:58:34,240 Com he dit, no és l'emmagatzematge de la cadena dins de punter variable. 1243 00:58:34,240 --> 00:58:35,120 És l'emmagatzematge - 1244 00:58:35,120 --> 00:58:36,350 >> ESTUDIANT: El primer valor de la cadena. 1245 00:58:36,350 --> 00:58:40,810 >> JASON Hirschhorn: La direcció de el primer valor de la cadena. 1246 00:58:40,810 --> 00:58:46,940 Si ens anem a imprimir això, estem obtenir el valor dins de punter. 1247 00:58:46,940 --> 00:58:51,005 I veurem que és, de fet, una adreça de memòria. 1248 00:58:51,005 --> 00:58:53,595 1249 00:58:53,595 --> 00:58:56,440 >> Això té sentit? 1250 00:58:56,440 --> 00:58:56,940 Ho sento. 1251 00:58:56,940 --> 00:58:58,996 Espera, això respon a la teva pregunta, però? 1252 00:58:58,996 --> 00:58:59,790 >> ESTUDIANT: Sí 1253 00:58:59,790 --> 00:59:05,830 >> JASON Hirschhorn: Aquesta línia de codi és la creació d'una cadena i després un altre 1254 00:59:05,830 --> 00:59:09,115 punter variable que s'apunta d'aquesta cadena, de la matriu. 1255 00:59:09,115 --> 00:59:14,320 1256 00:59:14,320 --> 00:59:14,980 Sí 1257 00:59:14,980 --> 00:59:19,200 >> ESTUDIANT: Llavors, si ens vam anar un record seguir fent front, trauríem el h? 1258 00:59:19,200 --> 00:59:21,990 1259 00:59:21,990 --> 00:59:23,150 S'ha emmagatzemat com una cadena? 1260 00:59:23,150 --> 00:59:24,400 >> JASON Hirschhorn: Igual que, ho vam fer - 1261 00:59:24,400 --> 00:59:28,540 1262 00:59:28,540 --> 00:59:30,790 així que això és valuós fer. 1263 00:59:30,790 --> 00:59:33,780 Aquesta és l'aritmètica de punt, que vostès han vist abans i ha de ser 1264 00:59:33,780 --> 00:59:35,550 relativament còmode. 1265 00:59:35,550 --> 00:59:36,905 Això és similar a l'escriptura - 1266 00:59:36,905 --> 00:59:41,980 1267 00:59:41,980 --> 00:59:46,350 si haguéssim d'escriure aquesta línia de codi, hem vist la notació de matriu abans. 1268 00:59:46,350 --> 00:59:55,900 Això ens ha de donar la segona valor en aquest array, h. 1269 00:59:55,900 --> 01:00:05,010 >> Si féssim això, això també ha de donar nosaltres el segon valor en aquest array. 1270 01:00:05,010 --> 01:00:08,320 Com que no va a la memòria direcció de la primera hora, però el 1271 01:00:08,320 --> 01:00:10,530 adreça de memòria de la cosa d'una vegada. 1272 01:00:10,530 --> 01:00:14,360 I llavors els desreferencias operador estrelles aquest punter. 1273 01:00:14,360 --> 01:00:16,940 I de nou, anem a veure. 1274 01:00:16,940 --> 01:00:18,664 Rebem h de nou. 1275 01:00:18,664 --> 01:00:20,980 >> ESTUDIANT: Què significa exactament dereference significa això? 1276 01:00:20,980 --> 01:00:23,650 >> JASON Hirschhorn: Dereference és una paraula elegant per anar a. 1277 01:00:23,650 --> 01:00:26,390 Anar a això i el que cal és eliminar la referència d'un punter. 1278 01:00:26,390 --> 01:00:28,240 És només una paraula elegant per això. 1279 01:00:28,240 --> 01:00:29,986 >> ESTUDIANT: Si volguéssim imprimir tota la cadena, podríem 1280 01:00:29,986 --> 01:00:31,930 fer punter signe? 1281 01:00:31,930 --> 01:00:33,490 >> JASON Hirschhorn: OK, estem farà una pausa aquí. 1282 01:00:33,490 --> 01:00:35,480 Anem a acabar aquí. 1283 01:00:35,480 --> 01:00:41,760 Ampersand li dóna l'adreça d'un ubicació, així que quan vostè fa signe de 1284 01:00:41,760 --> 01:00:44,080 una variable, que et dóna la direcció on s'emmagatzema aquesta variable. 1285 01:00:44,080 --> 01:00:48,580 Punter Ampersand li donarà la Direcció de ptr ptr on està en la memòria. 1286 01:00:48,580 --> 01:00:50,140 >> No anirem a amb aquest exemple. 1287 01:00:50,140 --> 01:00:52,640 Vostè pot esbrinar aquests coses pel seu compte. 1288 01:00:52,640 --> 01:00:55,740 Però de nou, això podria fins i tot ser un Rayando poc més enllà del que necessita saber per 1289 01:00:55,740 --> 01:00:58,000 l'abast d'aquesta meitat de període - 1290 01:00:58,000 --> 01:00:59,070 o aquest qüestionari, més aviat. 1291 01:00:59,070 --> 01:01:00,270 Ho sento. 1292 01:01:00,270 --> 01:01:03,770 >> Seguirem endavant, perquè ho faria agradaria fer un problema de codificació 1293 01:01:03,770 --> 01:01:05,100 abans d'hora s'ha acabat. 1294 01:01:05,100 --> 01:01:09,340 I anem a codificar el que penso és la més convincent d'aquestes 1295 01:01:09,340 --> 01:01:11,020 exemples, atoi. 1296 01:01:11,020 --> 01:01:14,520 Així que això era una qüestió sobre un concurs fa dos anys. 1297 01:01:14,520 --> 01:01:17,810 I jo tinc al tauler aquí. 1298 01:01:17,810 --> 01:01:20,680 >> La gent es va preguntar en el qüestionari - 1299 01:01:20,680 --> 01:01:23,640 se'ls va donar una mica més tesxt en la pregunta, però he eliminat la 1300 01:01:23,640 --> 01:01:26,640 text, perquè no era necessari per al nostre propòsit ara. 1301 01:01:26,640 --> 01:01:29,180 Era només alguns antecedents en el atoi va fer. 1302 01:01:29,180 --> 01:01:31,425 Però tots vostès saben i són molt familiaritzats amb atoi. 1303 01:01:31,425 --> 01:01:35,620 >> Li suggereixo que codifica aquesta en un full de paper. 1304 01:01:35,620 --> 01:01:39,310 També li suggereixo que utilitzi l'estratègia que hem repassat 1305 01:01:39,310 --> 01:01:41,040 molt en la nostra secció. 1306 01:01:41,040 --> 01:01:44,130 En primer lloc, assegureu-vos que entén el atoi està fent. 1307 01:01:44,130 --> 01:01:47,580 Fes un dibuix o arribar a algun imatge mental d'ell al seu cap. 1308 01:01:47,580 --> 01:01:51,120 A continuació, escriviu el pseudocodi per això. 1309 01:01:51,120 --> 01:01:53,120 En el qüestionari, si l'únic que aconsegueix és pseudocodi, almenys 1310 01:01:53,120 --> 01:01:54,550 posar alguna cosa a sota. 1311 01:01:54,550 --> 01:02:00,070 I després assignar aquest pseudocodi a C. Si vostè té un xec en el seu 1312 01:02:00,070 --> 01:02:03,760 pseudocodi, com comprovar si alguna cosa és 1, que assigna a un cas 1313 01:02:03,760 --> 01:02:05,750 condicions i així successivament. 1314 01:02:05,750 --> 01:02:07,850 I, finalment, el codi del programa en C. 1315 01:02:07,850 --> 01:02:15,000 >> Així que tornar a atoi i trigar cinc minuts codificar això en un full de 1316 01:02:15,000 --> 01:02:19,480 paper, que és probablement el quantitat de temps que el portarà en un 1317 01:02:19,480 --> 01:02:21,260 qüestionari per atoi codi. 1318 01:02:21,260 --> 01:02:27,060 De cinc a 15 minuts, de cinc a 12, de cinc a 10 minuts, es tracta de la quantitat de 1319 01:02:27,060 --> 01:02:30,150 temps que li dedica a aquesta pregunta de la prova. 1320 01:02:30,150 --> 01:02:31,670 Així trigar cinc minuts, si us plau. 1321 01:02:31,670 --> 01:02:35,957 I si vostè té alguna pregunta, llevant la mà i vaig a entrar en raó. 1322 01:02:35,957 --> 01:06:39,570 1323 01:06:39,570 --> 01:06:41,066 >> [Converses paral · leles] 1324 01:06:41,066 --> 01:08:35,279 1325 01:08:35,279 --> 01:08:37,580 >> JASON Hirschhorn: OK, així que que era de cinc minuts. 1326 01:08:37,580 --> 01:08:39,880 Aquest va ser probablement per la quantitat de temps que passaria en aquest en un concurs, 1327 01:08:39,880 --> 01:08:42,120 potser la part baixa de l'època. 1328 01:08:42,120 --> 01:08:44,010 Anem a recapitular una mica. 1329 01:08:44,010 --> 01:08:45,740 Comencem codificar aquesta. 1330 01:08:45,740 --> 01:08:49,479 I si no arribem fins al final, les respostes a aquesta i aquesta 1331 01:08:49,479 --> 01:08:54,189 pregunta d'examen estan disponibles, un cop més, La tardor de 2011 és quan aquesta pregunta 1332 01:08:54,189 --> 01:08:54,913 aparegut en el qüestionari. 1333 01:08:54,913 --> 01:08:57,830 >> I va valer la pena vuit punts en el qüestionari a continuació. 1334 01:08:57,830 --> 01:09:01,140 Vuit punts està a l'extrem superior de la quantitat de punts alguna cosa val la pena. 1335 01:09:01,140 --> 01:09:04,790 La majoria de preguntes estan en el rang d'un a sis punts. 1336 01:09:04,790 --> 01:09:08,500 Així que aquesta és una més desafiant pregunta, segur. 1337 01:09:08,500 --> 01:09:09,750 Pot algú ajudar-me a començar? 1338 01:09:09,750 --> 01:09:13,260 1339 01:09:13,260 --> 01:09:15,380 >> En general, què anem a voler fer amb aquesta 1340 01:09:15,380 --> 01:09:17,550 funcionar atoi, lògicament? 1341 01:09:17,550 --> 01:09:19,569 Què volem fer? 1342 01:09:19,569 --> 01:09:22,279 Així que anem a escriure alguns pseudocodi. 1343 01:09:22,279 --> 01:09:24,090 >> ESTUDIANT: Converteix caràcters en enters. 1344 01:09:24,090 --> 01:09:26,700 >> JASON Hirschhorn: Converteix caràcters en enters. 1345 01:09:26,700 --> 01:09:27,479 D'acord. 1346 01:09:27,479 --> 01:09:30,870 Llavors, quants caràcters estem va a haver d'anar a través de? 1347 01:09:30,870 --> 01:09:32,295 >> ESTUDIANT: Tots ells. 1348 01:09:32,295 --> 01:09:34,100 >> ESTUDIANT: Tots els personatges a la cadena. 1349 01:09:34,100 --> 01:09:35,540 >> JASON Hirschhorn: Tots els de la caràcters de la cadena. 1350 01:09:35,540 --> 01:09:42,180 Així que si volíem anar a través de cada caràcter d'una cadena, el que és una cosa 1351 01:09:42,180 --> 01:09:44,560 en C que hem vist que ha permès nosaltres anar a través de cada 1352 01:09:44,560 --> 01:09:45,939 caràcter d'una cadena? 1353 01:09:45,939 --> 01:09:46,819 >> ESTUDIANTS: Un bucle for. 1354 01:09:46,819 --> 01:09:48,069 >> JASON Hirschhorn: Un bucle for. 1355 01:09:48,069 --> 01:09:52,020 1356 01:09:52,020 --> 01:09:55,330 Així que anem a recórrer tots els personatges en si. 1357 01:09:55,330 --> 01:10:00,940 >> Llavors, què anem a voler fer quan arribem a un personatge en concret? 1358 01:10:00,940 --> 01:10:02,480 Diguem que estem aconseguint passem per un 90. 1359 01:10:02,480 --> 01:10:03,460 Obtenim el 9. 1360 01:10:03,460 --> 01:10:04,240 És un personatge. 1361 01:10:04,240 --> 01:10:07,440 Què volem fer amb que el caràcter setembre? 1362 01:10:07,440 --> 01:10:10,082 >> ESTUDIANT: restar de caràcter 0? 1363 01:10:10,082 --> 01:10:11,860 >> ESTUDIANT: Afegeix 0? 1364 01:10:11,860 --> 01:10:13,350 >> JASON Hirschhorn: Resti des de 0 personatge? 1365 01:10:13,350 --> 01:10:13,800 >> ESTUDIANT: Sí 1366 01:10:13,800 --> 01:10:15,573 >> JASON Hirschhorn: Per què que vols fer això? 1367 01:10:15,573 --> 01:10:16,560 >> ESTUDIANT: [inaudible] 1368 01:10:16,560 --> 01:10:17,010 valor. 1369 01:10:17,010 --> 01:10:18,380 El seu valor int. 1370 01:10:18,380 --> 01:10:21,580 >> JASON Hirschhorn: OK, així que ens prenem el caràcter 9, restar de 1371 01:10:21,580 --> 01:10:25,820 caràcter 0 per obtenir una nombre enter real setembre. 1372 01:10:25,820 --> 01:10:27,070 Sweet. 1373 01:10:27,070 --> 01:10:31,255 1374 01:10:31,255 --> 01:10:37,000 I, com saber que el caràcter 9 menys 0 caràcters és de 9? 1375 01:10:37,000 --> 01:10:39,222 Què gràfica què ens fixem en? 1376 01:10:39,222 --> 01:10:43,130 >> ESTUDIANT: Hi ha lògicament 09:00 llocs entre 9 i 0. 1377 01:10:43,130 --> 01:10:44,620 O vostè podria mirar a la taula ASCII. 1378 01:10:44,620 --> 01:10:45,120 >> JASON Hirschhorn: taula ASCII. 1379 01:10:45,120 --> 01:10:46,490 Però sí, té vostè raó també. 1380 01:10:46,490 --> 01:10:47,780 Llavors restem 0. 1381 01:10:47,780 --> 01:10:49,010 Així que ara tenim el sencer setembre. 1382 01:10:49,010 --> 01:10:49,970 I què és el que volem fer amb això? 1383 01:10:49,970 --> 01:10:54,970 Si tenim 90, és el primer sencer tenim, el que volem fer? 1384 01:10:54,970 --> 01:10:58,180 >> ESTUDIANT: Em poso en un nombre enter temporal matriu, i després fer les matemàtiques perquè 1385 01:10:58,180 --> 01:11:02,088 després de convertir en un cap. 1386 01:11:02,088 --> 01:11:03,020 >> JASON Hirschhorn: OK. 1387 01:11:03,020 --> 01:11:06,990 >> ESTUDIANT: Vostè pot començar a finals de la matriu i després avançar de manera 1388 01:11:06,990 --> 01:11:10,350 que cada vegada que es mou cap endavant, el multipliques per 10. 1389 01:11:10,350 --> 01:11:10,830 >> JASON Hirschhorn: OK. 1390 01:11:10,830 --> 01:11:12,250 Això sona com una molt idea convincent. 1391 01:11:12,250 --> 01:11:16,040 Podem començar pel final de la nostra sèrie, i podem utilitzar strleng. 1392 01:11:16,040 --> 01:11:17,030 Podem utilitzar strleng aquí. 1393 01:11:17,030 --> 01:11:18,870 Aconseguirem la durada de la nostra cadena. 1394 01:11:18,870 --> 01:11:20,100 Partim al final. 1395 01:11:20,100 --> 01:11:29,170 I + la primera, només prenem que sencer, i potser vam crear com un 1396 01:11:29,170 --> 01:11:32,270 nova variable sencera fins a la part superior on estem emmagatzemant tot. 1397 01:11:32,270 --> 01:11:37,340 Així el cicle que recorre tots els caràcters en si de darrere cap endavant, restem 0, i 1398 01:11:37,340 --> 01:11:42,790 llavors ho prenem, i en funció de on està, ho multipliquem 1399 01:11:42,790 --> 01:11:45,860 per una potència de 10. 1400 01:11:45,860 --> 01:11:50,644 Com que la primera d'elles, què fem multiplicar el caràcter més a la dreta pel camí? 1401 01:11:50,644 --> 01:11:51,440 >> ESTUDIANT: 10 al 0. 1402 01:11:51,440 --> 01:11:53,170 >> JASON Hirschhorn: 10 a 0. 1403 01:11:53,170 --> 01:11:56,010 Què és el multipliquem el segon caràcter més a la dreta pel camí? 1404 01:11:56,010 --> 01:11:57,450 >> ESTUDIANT: [inaudible]. 1405 01:11:57,450 --> 01:11:57,960 >> JASON Hirschhorn: Què? 1406 01:11:57,960 --> 01:11:59,150 >> ESTUDIANT: 10 a la 1. 1407 01:11:59,150 --> 01:12:00,420 >> JASON Hirschhorn: 10 a la 1. 1408 01:12:00,420 --> 01:12:03,754 El caràcter terç més a la dreta-? 1409 01:12:03,754 --> 01:12:04,580 >> ESTUDIANT: 10 a la 2. 1410 01:12:04,580 --> 01:12:05,350 >> JASON Hirschhorn: 10 a la 2. 1411 01:12:05,350 --> 01:12:07,200 >> ESTUDIANT: Ho sento, no ho entenc el que estem fent aquí. 1412 01:12:07,200 --> 01:12:08,640 >> JASON Hirschhorn: OK, Tornem, doncs. 1413 01:12:08,640 --> 01:12:12,500 Així que anem a obtenir aprovada en una cadena. 1414 01:12:12,500 --> 01:12:14,470 Com que estem escrivint atoi. 1415 01:12:14,470 --> 01:12:15,260 Així que van passant d'una cadena. 1416 01:12:15,260 --> 01:12:17,640 Diguem que estem aconseguint passem a la cadena 90. 1417 01:12:17,640 --> 01:12:19,930 >> El primer que farem és establir una nova variable de tipus sencer que som 1418 01:12:19,930 --> 01:12:22,150 només crearà com el nostre nou sencer. 1419 01:12:22,150 --> 01:12:24,630 Això és el que per tornar al final. 1420 01:12:24,630 --> 01:12:30,110 Hem d'anar a través de tots els personatges en la cadena perquè hem determinat 1421 01:12:30,110 --> 01:12:34,430 que hem de tocar cada un i a continuació, afegir al nostre nou sencer. 1422 01:12:34,430 --> 01:12:36,330 >> Però no podem afegir com un nombre. 1423 01:12:36,330 --> 01:12:38,270 No podem prendre 9 i afegir setembre al nostre número sencer. 1424 01:12:38,270 --> 01:12:40,560 Depèn de quin lloc és a la cadena. 1425 01:12:40,560 --> 01:12:42,960 Haurem de multiplicar que per una potència de 10. 1426 01:12:42,960 --> 01:12:45,580 Perquè així és com a base de 10 obres. 1427 01:12:45,580 --> 01:12:49,050 >> Així que anem a obtenir el real caràcter, o el nombre sencer real 1428 01:12:49,050 --> 01:12:53,860 nombre, restant caràcter 0 de caràcter 9 com vam fer amb 1429 01:12:53,860 --> 01:12:57,560 restant qualitat capital A partir d' qualsevol que sigui el caràcter que hem tingut en una de 1430 01:12:57,560 --> 01:12:58,120 aquests problemes. 1431 01:12:58,120 --> 01:13:04,190 Així que anem realment obtenim un nombre de 0 a 9 guarden com un nombre real, i anem a 1432 01:13:04,190 --> 01:13:07,590 es multiplica per una potència de 10, depenent on estem a la cadena. 1433 01:13:07,590 --> 01:13:19,430 1434 01:13:19,430 --> 01:13:22,575 I després anem a afegir de nou en la nostra nova variable sencera. 1435 01:13:22,575 --> 01:13:32,840 1436 01:13:32,840 --> 01:13:37,890 >> Així que el que això es veuria com ho faria BE - dibuixarem aquí. 1437 01:13:37,890 --> 01:13:40,086 Si ens passem a la cadena de 90 - 1438 01:13:40,086 --> 01:13:41,336 >> ESTUDIANT: [inaudible]. 1439 01:13:41,336 --> 01:13:43,190 1440 01:13:43,190 --> 01:13:45,540 >> JASON Hirschhorn: Però atoi pren una cadena. 1441 01:13:45,540 --> 01:13:46,350 Així que anem a anar a través d' l'explotació. 1442 01:13:46,350 --> 01:13:49,900 Li donarem passem al 90. 1443 01:13:49,900 --> 01:13:51,540 Anem de nou a la part davantera. 1444 01:13:51,540 --> 01:13:53,920 Prenem el 0. 1445 01:13:53,920 --> 01:13:55,080 >> ESTUDIANT: Ho sento. 1446 01:13:55,080 --> 01:13:55,880 Potser això és una estupidesa. 1447 01:13:55,880 --> 01:13:59,440 Si ens anem a aprovar en una cadena, per què és 90 el que estem 1448 01:13:59,440 --> 01:14:00,260 aconseguir passar a? 1449 01:14:00,260 --> 01:14:03,160 Com que 90 és un nombre enter. 1450 01:14:03,160 --> 01:14:06,820 >> JASON Hirschhorn: Perquè atoi presa cadena i la converteix en el nombre enter 1451 01:14:06,820 --> 01:14:08,320 representació d'aquesta cadena. 1452 01:14:08,320 --> 01:14:13,650 Però la cadena 90 no és el nombre enter 90 o el nombre 90. 1453 01:14:13,650 --> 01:14:17,920 La cadena 90 és un conjunt de dos, o tres personatges, més aviat, el 9 1454 01:14:17,920 --> 01:14:22,740 caràcter, el caràcter 0, i la barra invertida 0 caràcters. 1455 01:14:22,740 --> 01:14:26,260 >> I estem escrivint atoi perquè, per exemple, quan es pren la comanda 1456 01:14:26,260 --> 01:14:30,230 argument de la línia, i es guarda en argv, es guarda com una cadena. 1457 01:14:30,230 --> 01:14:32,940 Però si vostè vol tractar com un nombre, que necessita per convertir-se en un 1458 01:14:32,940 --> 01:14:34,700 nombre enter real. 1459 01:14:34,700 --> 01:14:37,210 La qual cosa vam fer un dels nostres butlletins de problemes. 1460 01:14:37,210 --> 01:14:38,800 El que vam fer en una sèrie dels nostres butlletins de problemes. 1461 01:14:38,800 --> 01:14:41,690 Tothom que va tenir un sencer com un argument de línia d'ordres. 1462 01:14:41,690 --> 01:14:46,490 Així que per això la nostra funció atoi pren una cadena. 1463 01:14:46,490 --> 01:14:51,910 >> Així que de nou, en el nostre exemple, estem Va a prendre l'última. 1464 01:14:51,910 --> 01:14:55,050 Anem a restar el caràcter 0 d'ell, perquè els personatges 0 1465 01:14:55,050 --> 01:14:58,810 restat pel caràcter 0 li dóna el nombre real 0, segons 1466 01:14:58,810 --> 01:15:00,950 les matemàtiques ASCII que fem. 1467 01:15:00,950 --> 01:15:04,870 >> Atès que els caràcters es representen com diferent de la seva real - la 1468 01:15:04,870 --> 01:15:08,830 un caràcter, per exemple, minúscula és 97. 1469 01:15:08,830 --> 01:15:10,260 No és - Ui! 1470 01:15:10,260 --> 01:15:13,290 No és tot el que es pot esperar que sigui, 0, per exemple. 1471 01:15:13,290 --> 01:15:16,200 Així que cal restar el caràcter per aconseguir un 0. 1472 01:15:16,200 --> 01:15:18,950 >> Així que farem això aquí per obtenir el nombre real. 1473 01:15:18,950 --> 01:15:22,560 I després anem a multiplicar per una potència de 10 depenent d'on es 1474 01:15:22,560 --> 01:15:27,030 es troba a la cadena, i després prendre aquest i afegir al nostre marcador de posició 1475 01:15:27,030 --> 01:15:32,520 variable, de manera que podem arribar a nostre nou sencer final. 1476 01:15:32,520 --> 01:15:35,080 Això té sentit per a tothom? 1477 01:15:35,080 --> 01:15:37,730 >> Així que no anem a codificar aquesta en aquest moment, perquè estem 1478 01:15:37,730 --> 01:15:38,830 aconseguint curt de temps. 1479 01:15:38,830 --> 01:15:40,860 Demano disculpes pel temps d'això. 1480 01:15:40,860 --> 01:15:44,620 Però això és el que, amb sort, ho faria ser capaç de fer en el concurs - al 1481 01:15:44,620 --> 01:15:47,710 almenys, aconseguir aquest pseudocodi en escrit. 1482 01:15:47,710 --> 01:15:50,840 >> I després, si haguéssim d'escriure la pseudocodi, en realitat, podríem fer això 1483 01:15:50,840 --> 01:15:51,490 amb força rapidesa. 1484 01:15:51,490 --> 01:15:55,230 Cada línia de comentaris que escrivim aquí es tradueix en prop 1485 01:15:55,230 --> 01:15:56,970 una línia de codi C. 1486 01:15:56,970 --> 01:16:01,780 Declarar una nova variable, l'escriptura un bucle, alguns resta, alguns 1487 01:16:01,780 --> 01:16:07,070 multiplicació i alguna assignació. 1488 01:16:07,070 --> 01:16:09,020 Ens agradaria probablement també volem escriure una línia de retorn. 1489 01:16:09,020 --> 01:16:12,040 També pot ser que vulgui posar algunes comprovacions en aquí. 1490 01:16:12,040 --> 01:16:12,655 Sí 1491 01:16:12,655 --> 01:16:15,720 >> ESTUDIANT: Llavors, podem tractar s com la cadena real? 1492 01:16:15,720 --> 01:16:18,730 Perquè jo sé que és només una direcció. 1493 01:16:18,730 --> 01:16:22,090 Igual que, com obtenir la longitud d' la cadena que es passa a través de? 1494 01:16:22,090 --> 01:16:25,310 >> JASON Hirschhorn: Llavors, com la longitud d'una cadena? 1495 01:16:25,310 --> 01:16:25,830 Strlen. 1496 01:16:25,830 --> 01:16:26,660 >> ESTUDIANT: strlen, si. 1497 01:16:26,660 --> 01:16:30,550 Però es pot posar s com el argument per això? 1498 01:16:30,550 --> 01:16:34,620 >> JASON Hirschhorn: Així strlen porta una estrella de carbó. 1499 01:16:34,620 --> 01:16:38,090 I resulta que l'estrella char, i segueix comptant fins que arriba a un 1500 01:16:38,090 --> 01:16:41,865 barra invertida 0. strlen era en realitat un dels altres programes que 1501 01:16:41,865 --> 01:16:42,850 anaven a codi. 1502 01:16:42,850 --> 01:16:44,560 Aquesta és una altra bona per al codi. 1503 01:16:44,560 --> 01:16:47,270 Que un és una mica més fàcil, ja que si vostè pensarà en això 1504 01:16:47,270 --> 01:16:47,830 conceptualment - 1505 01:16:47,830 --> 01:16:51,620 Que acabo de dir en veu alta - strlen segueix un punter i manté en marxa i 1506 01:16:51,620 --> 01:16:54,210 comptar i fer seguiment fins arribar a una barra invertida 0. 1507 01:16:54,210 --> 01:16:56,530 >> ESTUDIANT: OK, ho tinc. 1508 01:16:56,530 --> 01:17:00,200 >> JASON Hirschhorn: Així que el millor de sort en concurs 0 de demà. 1509 01:17:00,200 --> 01:17:03,170 Si vostè té alguna pregunta, vaig a estar fora després d'això. 1510 01:17:03,170 --> 01:17:05,610 No dubti en enviar un correu electrònic. 1511 01:17:05,610 --> 01:17:08,480 Arribar al seu propi TF si ets no al meu secció, o que la meva 1512 01:17:08,480 --> 01:17:10,005 per correu electrònic si vostè ho desitja. 1513 01:17:10,005 --> 01:17:13,140 >> Si vols flipar i acaba d'enviar em un correu electrònic, un correu electrònic Freakout, vaig a 1514 01:17:13,140 --> 01:17:16,710 li enviarà de tornada, com, una cara somrient, o, com, una broma o alguna cosa així. 1515 01:17:16,710 --> 01:17:18,190 Així que no dubteu a fer això també. 1516 01:17:18,190 --> 01:17:20,750 Bona sort una altra vegada, i ho faré ens veiem la setmana que ve. 1517 01:17:20,750 --> 01:17:23,435