1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. Malan: Molt bé. 2 00:00:08,160 --> 00:00:11,170 Això és CS50, i aquest és el final de la segona setmana. 3 00:00:11,170 --> 00:00:14,650 Si vostè espera a tenir gana voltant d'aquesta hora matí, sé que 4 00:00:14,650 --> 00:00:18,920 que convoqui un petit grup de matí, dijous, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Hi ha un URL aquí si voleu confirmar la seva assistència. 6 00:00:21,460 --> 00:00:25,270 L'espai és limitat, així que si us plau, perdoneu si el formulari s'ha omplert fins al moment en què 7 00:00:25,270 --> 00:00:26,680 omplir això. 8 00:00:26,680 --> 00:00:29,400 Una altra URL però, que pot ser d'interès és la següent. 9 00:00:29,400 --> 00:00:32,409 >> Així que en gairebé un mes, el curs es posarà a disposició 10 00:00:32,409 --> 00:00:36,090 tant més àmpliament a través de EDX, a través del qual la gent a l'Internet serà 11 00:00:36,090 --> 00:00:39,580 capaç de seguir endavant, participar en el curs molt activament, de fet. 12 00:00:39,580 --> 00:00:43,070 Es va a utilitzar l'aparell CS50 CS50 i discutir i la major part del 13 00:00:43,070 --> 00:00:45,840 diverses eines de programari que ja han estat usant aquest semestre. 14 00:00:45,840 --> 00:00:49,030 I una de les iniciatives que ens agradaria prendre com un experiment d'aquest any 15 00:00:49,030 --> 00:00:53,120 és veure fins a quin punt el contingut que es pot traduir en un altre parlada i 16 00:00:53,120 --> 00:00:54,110 llengües escrites. 17 00:00:54,110 --> 00:00:58,000 Així que si vostè podria tenir interès a participar en aquest projecte, en el qual 18 00:00:58,000 --> 00:01:02,090 oferirem transcripcions en anglès i subtítols en el curs de 19 00:01:02,090 --> 00:01:05,190 conferències i pantalons curts i seminaris i seccions i similars - 20 00:01:05,190 --> 00:01:08,700 si vostè parla amb fluïdesa i escriure amb fluïdesa un altre idioma, ho faríem 21 00:01:08,700 --> 00:01:12,240 encantaria participar en aquest projecte, el qual et portarà a una o més de les 22 00:01:12,240 --> 00:01:15,340 vídeos, traduint-los en una llengua que conec bastant bé. 23 00:01:15,340 --> 00:01:19,050 Perquè us feu una idea de la interfície, hi ha una interfície d'usuari basada en web 24 00:01:19,050 --> 00:01:22,330 que utilitzarem, que crearà essencialment una interfície d'usuari d'aquesta manera. 25 00:01:22,330 --> 00:01:24,520 Això m'estava ensenyant alguns Halloween enrere. 26 00:01:24,520 --> 00:01:27,710 I al costat dret hi ha en negre al costat d'aquestes marques de temps, 27 00:01:27,710 --> 00:01:31,300 podràs veure les diverses coses que van sortir de la meva boca aquest dia. 28 00:01:31,300 --> 00:01:34,660 I després, per sota d'ell, vostè serà capaç de traduir a un altre idioma. 29 00:01:34,660 --> 00:01:37,840 Exactament el que el mapeig és entre, en aquest cas, Anglès 30 00:01:37,840 --> 00:01:38,660 i, per exemple, l'espanyol. 31 00:01:38,660 --> 00:01:40,480 Així que en realitat és un molt fàcil d'utilitzar eina. 32 00:01:40,480 --> 00:01:43,690 Pot rebobinar i avanç ràpid molt fàcilment amb el teclat. 33 00:01:43,690 --> 00:01:46,710 Així que si vol participar en aquest experiment i que les seves paraules 34 00:01:46,710 --> 00:01:50,730 vist i llegit per milers de potencials persones per aquí, si us plau, em sento 35 00:01:50,730 --> 00:01:51,960 llibertat de participar. 36 00:01:51,960 --> 00:01:56,940 >> Ara una paraula sobre el gatet de dilluns, perquè no ens han enviat un excés 37 00:01:56,940 --> 00:01:58,120 missatge de por. 38 00:01:58,120 --> 00:02:02,130 S'adonen que a mesura que les hores d'oficina i com suggereixen les seccions suggereixen, la 39 00:02:02,130 --> 00:02:05,110 disseny del curs és molt perquè els estudiants i col · laborar 40 00:02:05,110 --> 00:02:09,250 parlant de treballar a través dels butlletins de problemes i problemes junts. 41 00:02:09,250 --> 00:02:13,630 I realment la línia només es redueix a, una vegada més, el treball que en última instància 42 00:02:13,630 --> 00:02:16,420 han de presentar ha de ser la seva. 43 00:02:16,420 --> 00:02:19,080 I el que és, amb tota honestedat - en horari d'oficina, és totalment normal - 44 00:02:19,080 --> 00:02:21,560 que està totalment d'esperar, fins i tot - a estar xatejant amb alguns 45 00:02:21,560 --> 00:02:22,370 amics al teu costat. 46 00:02:22,370 --> 00:02:25,240 Si ell o ella està lluitant amb algun tema, i vostè és com, oh, bé anem 47 00:02:25,240 --> 00:02:27,750 vaig a donar una idea d'alguna línia de codi que he escrit. 48 00:02:27,750 --> 00:02:28,290 Això està bé. 49 00:02:28,290 --> 00:02:28,700 Això succeeix. 50 00:02:28,700 --> 00:02:31,580 I això és molt favorable, crec que, amb el procés d'aprenentatge. 51 00:02:31,580 --> 00:02:35,270 Quan la línia, de nou, es creua és quan el cap és de tipus inclinat sobre 52 00:02:35,270 --> 00:02:38,800 aquí durant uns segons massa o minuts perquè realment tingui només 53 00:02:38,800 --> 00:02:41,250 estat una oportunitat de desbloqueig per al seu amic. 54 00:02:41,250 --> 00:02:43,870 I certament, quan les coses s'intercanvien a través de correu electrònic i Dropbox i 55 00:02:43,870 --> 00:02:45,350 similars, allà també hi ha la línia. 56 00:02:45,350 --> 00:02:48,940 Així que per tots els mitjans, se sentin còmodes i se senten animats a xerrar amb els amics 57 00:02:48,940 --> 00:02:51,270 i companys sobre conjunts de processadors i més. 58 00:02:51,270 --> 00:02:54,680 I només s'adonen que el que en última instància, sotmetre hauria de ser el 59 00:02:54,680 --> 00:02:57,780 producte de la seva creació i no una altra persona. 60 00:02:57,780 --> 00:03:01,010 >> Així doncs, en la mateixa línia de adorables criatures, és possible que 61 00:03:01,010 --> 00:03:02,820 saben d'aquest tipus aquí. 62 00:03:02,820 --> 00:03:06,180 Així que aquesta és una pel · lícula terriblement cursi d'anys enrere. 63 00:03:06,180 --> 00:03:08,680 Hi ha algú aquí Spaceballs vist? 64 00:03:08,680 --> 00:03:09,120 Està bé. 65 00:03:09,120 --> 00:03:10,220 Així que un bon nombre aquí. 66 00:03:10,220 --> 00:03:13,840 Així que aquesta és la nostra manera meravellosament acadèmic d'introduir avui en última instància, 67 00:03:13,840 --> 00:03:15,130 el concepte de criptografia. 68 00:03:15,130 --> 00:03:19,010 I així un dels problemes específics de domini per a conjunt de processadors 2, que entrarà 69 00:03:19,010 --> 00:03:22,770 demà a la nit tarda, és submergir-se en el món de la criptografia, que 70 00:03:22,770 --> 00:03:26,380 és l'art de xifrar o codificar informació. 71 00:03:26,380 --> 00:03:30,160 I en última instància, es relaciona amb el món de la seguretat. 72 00:03:30,160 --> 00:03:34,440 >> Ara la seguretat per a la majoria de nosaltres es presenta en forma de mecanismes bastant mundanes. 73 00:03:34,440 --> 00:03:36,920 Tots nosaltres tenim noms d'usuari i contrasenyes. 74 00:03:36,920 --> 00:03:41,350 I tots tenim noms d'usuari i contrasenyes molt dolents, molt probablement. 75 00:03:41,350 --> 00:03:45,250 Si la contrasenya és la mateixa en diversos llocs web, que probablement no és 76 00:03:45,250 --> 00:03:47,920 la millor idea, com veurem cap al final del semestre. 77 00:03:47,920 --> 00:03:51,680 Si la contrasenya s'escriu en una nota adhesiva - no és broma - en el seu 78 00:03:51,680 --> 00:03:55,130 monitor, que tampoc és necessàriament el millor disseny, però bastant comú una 79 00:03:55,130 --> 00:03:56,140 fenomen. 80 00:03:56,140 --> 00:04:00,420 I si vostè no està utilitzant la criptografia per xifrar les contrasenyes, que són 81 00:04:00,420 --> 00:04:01,610 especialment vulnerables. 82 00:04:01,610 --> 00:04:04,670 Així que si vostè pensa que està sent súper intel · ligent per tenir una paraula oculta 83 00:04:04,670 --> 00:04:07,740 documentar en algun lloc del seu disc dur que té totes les seves contrasenyes però 84 00:04:07,740 --> 00:04:10,550 que està en una carpeta que ningú mirarà endins, això també no és molt 85 00:04:10,550 --> 00:04:11,540 mecanisme d'assegurança. 86 00:04:11,540 --> 00:04:15,100 I així ho pset 2 presentaré és aquest art de la criptografia i 87 00:04:15,100 --> 00:04:18,300 lluitant informació perquè coses com les contrasenyes 88 00:04:18,300 --> 00:04:19,500 tant més segura. 89 00:04:19,500 --> 00:04:24,500 Per tal de motivar aquest problema molt real amb un molt no-real-world 90 00:04:24,500 --> 00:04:28,740 escenari, permetin-me presentar a un dels nostres clips favorits aquí en aquest 91 00:04:28,740 --> 00:04:29,895 pel · lícula Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [REPRODUCCIÓ DE VÍDEO] 93 00:04:30,565 --> 00:04:32,995 -Casc, vostè dimoni, què està passant? 94 00:04:32,995 --> 00:04:34,730 Què estàs fent amb la meva filla? 95 00:04:34,730 --> 00:04:38,960 -Permeteu-me introduir el cirurgià plàstic brillant jove, el Dr Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, el més gran home nas d'ocupació en tota la 97 00:04:43,290 --> 00:04:45,526 univers i Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Sa Altesa. 99 00:04:46,450 --> 00:04:47,380 -Nas treball? 100 00:04:47,380 --> 00:04:48,035 No entenc. 101 00:04:48,035 --> 00:04:49,480 Ella ja ha tingut una cirurgia de nas. 102 00:04:49,480 --> 00:04:51,490 Era un dolç 16 presents. 103 00:04:51,490 --> 00:04:53,090 -No, no és el que vostè pensa. 104 00:04:53,090 --> 00:04:55,150 És molt, molt pitjor. 105 00:04:55,150 --> 00:04:59,860 Si no em donen la combinació de la protecció de l'aire, el Dr Schlotkin voluntat 106 00:04:59,860 --> 00:05:04,135 donar a la seva filla de tornada a la seva antiga nas. 107 00:05:04,135 --> 00:05:05,385 -No! 108 00:05:08,202 --> 00:05:10,186 D'on vas treure això? 109 00:05:10,186 --> 00:05:11,178 -Molt bé. 110 00:05:11,178 --> 00:05:11,674 L'hi diré. 111 00:05:11,674 --> 00:05:12,666 L'hi diré. 112 00:05:12,666 --> 00:05:14,154 -No, pare, no. 113 00:05:14,154 --> 00:05:15,150 No has de fer-ho. 114 00:05:15,150 --> 00:05:16,460 -Tens raó, estimada. 115 00:05:16,460 --> 00:05:18,450 Vaig a estranyar la seva nova nas. 116 00:05:18,450 --> 00:05:21,550 Però no vaig a dir-los la combinació no importa què. 117 00:05:21,550 --> 00:05:23,100 -Molt bé. 118 00:05:23,100 --> 00:05:25,510 Dr Schlotkin, fes el que vulguis. 119 00:05:25,510 --> 00:05:26,760 -És un plaer. 120 00:05:30,560 --> 00:05:31,180 -No! 121 00:05:31,180 --> 00:05:33,450 Espera, espera. 122 00:05:33,450 --> 00:05:34,770 L'hi diré. 123 00:05:34,770 --> 00:05:36,400 L'hi diré. 124 00:05:36,400 --> 00:05:38,630 -Jo sabia que anava a funcionar. 125 00:05:38,630 --> 00:05:42,040 D'acord, m'ho dóna. 126 00:05:42,040 --> 00:05:46,890 -La combinació és un. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Dos. 130 00:05:48,950 --> 00:05:49,370 -Dos. 131 00:05:49,370 --> 00:05:50,450 -Dos. 132 00:05:50,450 --> 00:05:50,715 -Tres 133 00:05:50,715 --> 00:05:51,380 -Tres. 134 00:05:51,380 --> 00:05:52,390 -Tres. 135 00:05:52,390 --> 00:05:53,200 -Quatre. 136 00:05:53,200 --> 00:05:53,720 -Quatre. 137 00:05:53,720 --> 00:05:55,830 -Quatre. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Cinc. 140 00:05:57,120 --> 00:05:58,560 -Cinc. 141 00:05:58,560 --> 00:06:03,770 -Així que la combinació és un, dos, tres, quatre, cinc. 142 00:06:03,770 --> 00:06:06,745 Això és el més estúpid combinació que he sentit en la meva vida. 143 00:06:06,745 --> 00:06:09,290 Aquesta és la classe de cosa que un idiota podria tenir en el seu equipatge. 144 00:06:09,290 --> 00:06:11,540 -Gràcies, Sa Altesa. 145 00:06:11,540 --> 00:06:12,940 -El vas fer? 146 00:06:12,940 --> 00:06:14,230 -Vaig apagar la paret. 147 00:06:14,230 --> 00:06:14,630 -No, no ho vas fer. 148 00:06:14,630 --> 00:06:15,430 Es va apagar la pel · lícula sencera. 149 00:06:15,430 --> 00:06:16,722 -Dec haver premut el botó equivocat. 150 00:06:16,722 --> 00:06:18,078 -Bé, el va posar de nou. 151 00:06:18,078 --> 00:06:18,805 Col loqueu la pel · lícula de nou. 152 00:06:18,805 --> 00:06:19,080 -Sí, senyor. 153 00:06:19,080 --> 00:06:19,270 Sí, senyor. 154 00:06:19,270 --> 00:06:19,830 -Anem, Erna. 155 00:06:19,830 --> 00:06:20,270 Vine, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Per descomptat que sé que encara haurem de cobrar per això. 157 00:06:27,400 --> 00:06:28,325 -Bé, ¿funciona? 158 00:06:28,325 --> 00:06:29,550 On és la porta? 159 00:06:29,550 --> 00:06:29,910 -Va funcionar, senyor. 160 00:06:29,910 --> 00:06:30,770 Tenim la combinació. 161 00:06:30,770 --> 00:06:31,390 -Gran. 162 00:06:31,390 --> 00:06:35,630 Ara podem prendre cada últim alè d'aire fresc del planeta Druidia. 163 00:06:35,630 --> 00:06:36,550 Quina és la combinació? 164 00:06:36,550 --> 00:06:38,805 -Un, dos, tres, quatre, cinc. 165 00:06:38,805 --> 00:06:40,610 -Un, dos, tres, quatre, cinc? 166 00:06:40,610 --> 00:06:41,070 -Sí. 167 00:06:41,070 --> 00:06:41,760 -Això és increïble. 168 00:06:41,760 --> 00:06:45,200 Tinc la mateixa combinació en el meu equipatge. 169 00:06:45,200 --> 00:06:47,800 Preparar SpaceBall 1 per sortida immediata. 170 00:06:47,800 --> 00:06:48,536 -Sí, senyor. 171 00:06:48,536 --> 00:06:52,350 -I canviar la combinació en el meu equipatge. 172 00:06:52,350 --> 00:06:53,250 -Ai! 173 00:06:53,250 --> 00:06:55,020 [FI DE REPRODUCCIÓ DE VÍDEO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. Malan: Una pel · lícula increïble que ara tots han de veure. 175 00:07:00,600 --> 00:07:06,540 Així el context aquí és que amb les dades insegurs ve una oportunitat per 176 00:07:06,540 --> 00:07:07,790 xifrar i per enfilar. 177 00:07:07,790 --> 00:07:11,060 I pel que aquest, per exemple, és un exemple d'un missatge xifrat. 178 00:07:11,060 --> 00:07:12,980 En realitat, això diu alguna cosa en anglès. 179 00:07:12,980 --> 00:07:14,750 Però és evident que no és totalment obvi. 180 00:07:14,750 --> 00:07:17,360 I anem a arribar al punt de partida avui a esmicolar el que aquest secret 181 00:07:17,360 --> 00:07:18,380 missatge aquí és. 182 00:07:18,380 --> 00:07:22,370 Però en el món real de les computadores, les coses no semblen que fins i tot podria 183 00:07:22,370 --> 00:07:23,440 ser frases en anglès. 184 00:07:23,440 --> 00:07:27,500 Per exemple, això és el que pots trobar en un sistema Linux o Mac estàndard o 185 00:07:27,500 --> 00:07:32,080 Unix ordinador en un arxiu que va ser en un altre temps anomenat l'arxiu de contrasenyes. 186 00:07:32,080 --> 00:07:34,170 Avui en dia, s'ha traslladat a altres llocs. 187 00:07:34,170 --> 00:07:38,660 Però si ens fixem en el lloc correcte en un sistema, podràs veure no només la seva 188 00:07:38,660 --> 00:07:41,430 nom d'usuari o la d'altres persones en el sistema, però veuràs un 189 00:07:41,430 --> 00:07:43,410 versió encriptada de la seva contrasenya. 190 00:07:43,410 --> 00:07:47,800 En efecte, la cripta hi ha paraula suggereix que les coses estan xifrats. 191 00:07:47,800 --> 00:07:52,030 I aquesta sèrie de lletres aparentment a l'atzar i caràcters i nombres i 192 00:07:52,030 --> 00:07:56,370 etc pot ser desxifrat en general només saber un secret - 193 00:07:56,370 --> 00:07:58,600 una paraula secreta, un número secret. 194 00:07:58,600 --> 00:08:02,760 I així, en efecte, l'art de la criptografia en última instància es redueix a la confiança d'alguns 195 00:08:02,760 --> 00:08:05,700 classe i saber alguna cosa que ningú més ho fa. 196 00:08:05,700 --> 00:08:10,010 Anem a estudiar això amb més detall una mica més avui i en el conjunt de processadors per venir. 197 00:08:10,010 --> 00:08:11,860 >> I ara una paraula sobrepassa / falla. 198 00:08:11,860 --> 00:08:15,250 Per tant, i com alguns de vosaltres heu bussejat en conjunt de processadors 1, l'aparell, i 199 00:08:15,250 --> 00:08:18,390 un món molt nou per a vostè, es va adonar que les frustracions i 200 00:08:18,390 --> 00:08:21,340 confusió i dificultats tècniques només són d'esperar. 201 00:08:21,340 --> 00:08:24,410 Especialment amb el conjunt de processadors en primer lloc, on hi ha tantes coses noves, només aconseguir 202 00:08:24,410 --> 00:08:28,830 familiaritzats amb ls i cd i tots aquests comandaments arcans en un nou entorn. 203 00:08:28,830 --> 00:08:32,679 I que és separat del material real i programació en si. 204 00:08:32,679 --> 00:08:35,960 Així donen compte, també, que sens dubte hi ha horari d'oficina que hi ha com 205 00:08:35,960 --> 00:08:36,770 l'estructura de suport. 206 00:08:36,770 --> 00:08:38,620 Seccions començarà diumenge que ve. 207 00:08:38,620 --> 00:08:41,990 Però el més important, si et sents sol que aquest no és el 208 00:08:41,990 --> 00:08:44,420 món per a tu, tingueu en compte que en realitat es limita a prendre temps. 209 00:08:44,420 --> 00:08:47,520 I si no fos per aquesta oportunitat fa anys per a mi de prendre una classe 210 00:08:47,520 --> 00:08:50,840 passa / no passa, la veritat, mai m'hauria posat un peu a l'aula. 211 00:08:50,840 --> 00:08:53,520 I vostè pot canviar això per amunt fins, diguem, el cinquè dilluns del curs. 212 00:08:53,520 --> 00:08:57,110 Així que si vostè està a la vora ara, adonar-se que en lloc de cap a algun altre 213 00:08:57,110 --> 00:09:01,000 aigües en conjunt, no certament en compte només canviar per passar / fallar. 214 00:09:01,000 --> 00:09:03,750 Un cop més, no hi ha realment aquesta cultura aquí a Harvard de prendre les coses 215 00:09:03,750 --> 00:09:08,080 passa / no passa ja que tothom vol aconseguir o escreix. 216 00:09:08,080 --> 00:09:11,470 Però, francament, aquesta és una meravellosa manera de provar una cosa que potser no 217 00:09:11,470 --> 00:09:13,110 ser familiar per a vostè. 218 00:09:13,110 --> 00:09:17,090 I vostè va a acabar fent en la majoria dels casos molt fines, potser 219 00:09:17,090 --> 00:09:18,040 molt a la seva sorpresa. 220 00:09:18,040 --> 00:09:20,850 I en termes més concrets, el que crec que passa / no passa generalment ho fa, 221 00:09:20,850 --> 00:09:23,350 especialment en el que podria haver experimentat amb conjunt de processadors 0, si vostè ha posat 222 00:09:23,350 --> 00:09:27,200 en 10 hores, 15 hores, 25 hores en algun conjunt de processadors - i no ets més que colpejar 223 00:09:27,200 --> 00:09:28,180 el cap contra la paret, 224 00:09:28,180 --> 00:09:29,850 i s'està fent super tard a la nit, 225 00:09:29,850 --> 00:09:31,880 però que ha pres el conjunt de processadors com el 90% del camí, 226 00:09:31,880 --> 00:09:33,780 vostè sap que vostè no pot entendre una cosa - 227 00:09:33,780 --> 00:09:36,830 passa / no passa realment pren la vora d'una classe com aquesta, on es pot ordenar 228 00:09:36,830 --> 00:09:39,150 feliç de dir molt bé, ja sé que no és perfecte. 229 00:09:39,150 --> 00:09:40,470 Però vaig treballar el meu cul en això. 230 00:09:40,470 --> 00:09:42,410 Estic bastant content amb el lloc on va acabar. 231 00:09:42,410 --> 00:09:44,780 I que compleixi amb les expectatives de passa / no passa. 232 00:09:44,780 --> 00:09:46,850 Així que tingues-ho en compte. 233 00:09:46,850 --> 00:09:47,140 >> Està bé. 234 00:09:47,140 --> 00:09:50,980 Així que aquells de vostès que han tingut dificultats per utilitzar la Universitat de Harvard Wi-Fi saber 235 00:09:50,980 --> 00:09:54,780 que hi ha un SSID CS50, una connexió Wi-Fi flotant voltant que 236 00:09:54,780 --> 00:09:56,520 podria tenir millor sort per. 237 00:09:56,520 --> 00:09:59,430 És una mica irònic que la clau per això - si vol provar 238 00:09:59,430 --> 00:10:03,080 connecti a aquest per obtenir millors velocitats i faci'ns saber si no és millor - 239 00:10:03,080 --> 00:10:09,240 és un, dos, tres, quatre, cinc, tot el camí fins a vuit perquè vuit és 240 00:10:09,240 --> 00:10:10,270 més segur que cinc. 241 00:10:10,270 --> 00:10:15,520 Així que si vostè necessita la contrasenya de Wi-Fi, Wi-CS50 aquí. 242 00:10:15,520 --> 00:10:16,950 Un, dos, tres, quatre, cinc, sis, set, vuit. 243 00:10:16,950 --> 00:10:20,440 I missatge el CS50 Parli si vostè encara té problemes de connectivitat intermitent, 244 00:10:20,440 --> 00:10:24,880 i deixarem que els poders que es coneixen per aquest espai. 245 00:10:24,880 --> 00:10:25,180 >> Està bé. 246 00:10:25,180 --> 00:10:30,350 Així que un reclam ràpid, especialment per a aquells de vostès que són nois o noies fans 247 00:10:30,350 --> 00:10:31,900 de totes les coses d'Apple. 248 00:10:31,900 --> 00:10:37,566 El que desenterrat de fa uns anys era aquest arxiu aquí, ilock.c, només per 249 00:10:37,566 --> 00:10:40,930 tipus de fer més concret i més complexes alguns dels més bàsic C 250 00:10:40,930 --> 00:10:42,350 programes que hem estat escrivint. 251 00:10:42,350 --> 00:10:44,360 Així que vaig obrir aquest arxiu, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Està disponible a la pàgina de conferències per avui. 253 00:10:46,830 --> 00:10:49,470 Pel costat de l'esquerra, es veu una llarga llista de funcions. 254 00:10:49,470 --> 00:10:51,860 Així que el tipus que va escriure això va escriure una gran quantitat de funcions, 255 00:10:51,860 --> 00:10:53,290 més que simplement principal. 256 00:10:53,290 --> 00:10:55,490 Ell va utilitzar una gran quantitat de biblioteques aquí. 257 00:10:55,490 --> 00:11:00,450 I si comencem a desplaçar-se a través de, el que això realment és, és el mateix 258 00:11:00,450 --> 00:11:04,670 En primer lloc, crec jo, per trencar l'iPhone original. 259 00:11:04,670 --> 00:11:08,000 Quan es volia fer jailbreak a l'iPhone original, el que significa desnuar 260 00:11:08,000 --> 00:11:11,800 el d'AT & T i en realitat instal · lar programari especial en ell i fer coses 261 00:11:11,800 --> 00:11:13,510 que Apple no vol que la gent a fer - 262 00:11:13,510 --> 00:11:17,020 Bé, algú es va prendre el temps per esbrinar exactament com podrien explotar 263 00:11:17,020 --> 00:11:20,880 defectes de programari, errors, errors, en el programari d'Apple. 264 00:11:20,880 --> 00:11:22,650 I així va néixer ilock.c. 265 00:11:22,650 --> 00:11:26,670 Que si ho recopilar en un ordinador i instal · lat en un iPhone 266 00:11:26,670 --> 00:11:29,810 Es connecta al seu ordinador a través de, per exemple, un cable USB, això li donaria 267 00:11:29,810 --> 00:11:33,360 privilegis d'administrador o root al teu iPhone i et fan més o menys 268 00:11:33,360 --> 00:11:34,170 el que vulguis. 269 00:11:34,170 --> 00:11:36,740 >> I així ha estat aquest fascinant gat i la rata entre Apple i 270 00:11:36,740 --> 00:11:39,920 la resta del món, en particular pel que, igual que moltes empreses, tracten de bloquejar 271 00:11:39,920 --> 00:11:43,220 les seves coses a baix de manera que només es pot fer amb ella el que tenia planejat. 272 00:11:43,220 --> 00:11:46,620 Però gràcies a gent com aquesta i la seva comprensió de baix nivell 273 00:11:46,620 --> 00:11:50,580 informació i, en aquest cas, de programació C i un munt de les construccions familiars 274 00:11:50,580 --> 00:11:54,630 que hem començat a jugar, vostè pot realment aprofitar el 275 00:11:54,630 --> 00:11:59,050 maquinari d'una manera millor li sembli i no necessàriament una entitat corporativa. 276 00:11:59,050 --> 00:12:01,360 Així, per exemple, no tinc ni idea del que tot això està fent. 277 00:12:01,360 --> 00:12:03,220 Però GetVersion sona bastant senzill. 278 00:12:03,220 --> 00:12:05,480 I sembla que aquesta és una funció que aquesta persona va escriure. 279 00:12:05,480 --> 00:12:09,240 Prengui algun tipus de nombre enter com a argument, no torna res, però 280 00:12:09,240 --> 00:12:13,080 sembla bucle amb un bucle aquí i si una condició, si la condició, 281 00:12:13,080 --> 00:12:15,620 trencar, i d'alguna manera es relaciona amb el nombre de versió. 282 00:12:15,620 --> 00:12:16,700 Si ens desplacem cap avall - 283 00:12:16,700 --> 00:12:19,570 tot i que moltes d'aquestes paraules clau es serà nou, i hi ha un 284 00:12:19,570 --> 00:12:22,590 gran quantitat de funcions en aquí mai hem vist i no podrien mai veure més 285 00:12:22,590 --> 00:12:23,830 el transcurs del semestre - 286 00:12:23,830 --> 00:12:27,150 al final de la dia, segueix les mateixes regles i la lògica que hem estat 287 00:12:27,150 --> 00:12:28,760 jugant amb fins ara. 288 00:12:28,760 --> 00:12:34,220 Així que això és massa vell per trencar les seves 3s 4s iPhone o 5 anys o abans, en aquests dies, 289 00:12:34,220 --> 00:12:37,320 però sàpiguen que tot es deriva en gran mesura d'aquest món que hem 290 00:12:37,320 --> 00:12:38,430 es va capbussar en. 291 00:12:38,430 --> 00:12:41,900 >> Així que donem una ullada a un petit exemple més simple. 292 00:12:41,900 --> 00:12:46,100 Aquest, només per escalfar amb una mica de sintaxi i també algunes altres dades 293 00:12:46,100 --> 00:12:49,240 tipus que hem parlat, però no han vist realment en C. Per tant aquesta és una 294 00:12:49,240 --> 00:12:51,680 arxiu anomenat positive1.c. 295 00:12:51,680 --> 00:12:55,120 I pels comentaris a la part superior, això només exigeix ​​que un usuari proporcioni una 296 00:12:55,120 --> 00:12:55,960 nombre positiu. 297 00:12:55,960 --> 00:12:59,530 Així que és un exemple d'un bucle do-while, que és agradable per a l'usuari interactiu 298 00:12:59,530 --> 00:13:01,980 programes en què vostè necessita per avisar a l'usuari que faci alguna cosa. 299 00:13:01,980 --> 00:13:05,190 I si ells no cooperen, els crides o rebutjar la seva entrada. 300 00:13:05,190 --> 00:13:11,610 El cas en qüestió, faré les línies 19 a 24, sempre que l'usuari té 301 00:13:11,610 --> 00:13:14,310 No m'ha donat un nombre positiu. 302 00:13:14,310 --> 00:13:20,400 Ara bé, aquest detall aquí a la línia 18, per què jo declare n per sobre d'aquest conjunt 303 00:13:20,400 --> 00:13:24,490 construcció de bucle en lloc de al costat de la línia 22 en què 304 00:13:24,490 --> 00:13:26,880 realment importa per obtenir n? 305 00:13:26,880 --> 00:13:27,330 Sí? 306 00:13:27,330 --> 00:13:27,780 [Inaudible] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. Malan: Sí, pel que aquest problema d'abast. 308 00:13:29,040 --> 00:13:30,850 I, en termes senzills, quin abast es refereix? 309 00:13:34,690 --> 00:13:36,610 Sí? 310 00:13:36,610 --> 00:13:37,860 [Inaudible] 311 00:13:40,040 --> 00:13:41,105 DAVID J. Malan: Pots parlar una mica més alt? 312 00:13:41,105 --> 00:13:43,450 Ponència 1: On es pot accedir a una variable en particular. 313 00:13:43,450 --> 00:13:45,170 DAVID J. Malan: Perfect. 314 00:13:45,170 --> 00:13:47,360 On es pot accedir a una variable en particular. 315 00:13:47,360 --> 00:13:50,400 I, en general, la regla general fins ara ha estat que l'abast d'algunes 316 00:13:50,400 --> 00:13:55,860 variable es defineix per les claus més recents que he vist. 317 00:13:55,860 --> 00:14:02,010 I així, en aquest cas, si he comès l'error de declarar n en la línia 22, 318 00:14:02,010 --> 00:14:03,010 que la línia havia de funcionar. 319 00:14:03,010 --> 00:14:10,990 M'agradaria aconseguir un int, de manera que el posa en aquesta variable n en la línia 22. 320 00:14:10,990 --> 00:14:16,900 Però quina línia de codi ara no tindria ni idea del que estic parlant? 321 00:14:16,900 --> 00:14:22,650 Així que 25, i resulta que 24, així, perquè en aquest cas, queda fora 322 00:14:22,650 --> 00:14:23,610 de les claus. 323 00:14:23,610 --> 00:14:27,280 Així que una mica d'una molèstia, però molt fàcil de resoldre simplement declarant 324 00:14:27,280 --> 00:14:30,140 la variable fora de la funció. 325 00:14:30,140 --> 00:14:32,600 >> Ara veurem el dia d'avui, es pot anar un pas més enllà. 326 00:14:32,600 --> 00:14:34,860 I fins i tot pot resultar una mica mandrós - 327 00:14:34,860 --> 00:14:37,320 i això no és el recomanat, en general - 328 00:14:37,320 --> 00:14:42,260 sinó que fins i tot podria donar-te mandra i posar una variable a nivell mundial, per dir-ho, no 329 00:14:42,260 --> 00:14:46,670 interior d'una funció, no a l'interior d'un bucle, però al mateix arxiu, fora 330 00:14:46,670 --> 00:14:49,600 de totes les funcions que vostè ha escrit, com ho vaig fer aquí a la línia 15. 331 00:14:49,600 --> 00:14:51,160 Però això és generalment mal vist. 332 00:14:51,160 --> 00:14:55,680 També has de saber això de vegades és una solució a altres problemes, com veurem 333 00:14:55,680 --> 00:14:56,620 finalment veure. 334 00:14:56,620 --> 00:14:58,130 Així que per ara, anem a deixar-ho així. 335 00:14:58,130 --> 00:15:01,030 Però anem a veure si podem tornar a escriure això per iniciar una expressar 336 00:15:01,030 --> 00:15:01,990 poc diferent. 337 00:15:01,990 --> 00:15:05,330 >> Així que aquest programa, només perquè quedi clar, és positive1. 338 00:15:05,330 --> 00:15:11,810 Deixa anar per davant aquí i al meu finestra de terminal fer positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Compila, està bé. 340 00:15:12,740 --> 00:15:14,910 Vaig a córrer positive1, premeu Enter. 341 00:15:14,910 --> 00:15:16,820 Exigeixo que em donis un enter positiu. 342 00:15:16,820 --> 00:15:18,260 Diré -1. 343 00:15:18,260 --> 00:15:18,910 Això no va funcionar. 344 00:15:18,910 --> 00:15:22,150 0, 99, que sembla funcionar. 345 00:15:22,150 --> 00:15:23,570 Potser no és la prova més rigorosa. 346 00:15:23,570 --> 00:15:26,480 Però almenys és una prova de seny agradable que estem en el camí correcte. 347 00:15:26,480 --> 00:15:29,240 Així que ara seguirem endavant i obrir la segona versió d'aquest. 348 00:15:29,240 --> 00:15:32,500 I el que és diferent ja? 349 00:15:32,500 --> 00:15:35,140 S'implementa la mateixa cosa. 350 00:15:35,140 --> 00:15:40,660 Però el que està saltant com clarament diferent aquesta vegada? 351 00:15:40,660 --> 00:15:42,560 Sí, per la qual cosa aquest bool en verd. 352 00:15:42,560 --> 00:15:45,980 Gedit ha ressaltat en verd aquesta paraula clau denominada bool, 353 00:15:45,980 --> 00:15:47,000 que és un tipus de dades. 354 00:15:47,000 --> 00:15:51,080 No ve integrat en totes les versions de C. Cal incloure una 355 00:15:51,080 --> 00:15:52,010 biblioteca específica. 356 00:15:52,010 --> 00:15:54,770 En el nostre cas, que inclou la biblioteca CS50 perquè ens 357 00:15:54,770 --> 00:15:56,460 tenen accés a bool. 358 00:15:56,460 --> 00:15:59,810 No obstant això, en la línia 18, sembla que tenim un valor booleà anomenat aquí agraïts. 359 00:15:59,810 --> 00:16:01,040 Així que podria haver cridat a aquesta cosa. 360 00:16:01,040 --> 00:16:04,500 Però em va trucar agraït només per transmetre algun tipus de significat semàntic. 361 00:16:04,500 --> 00:16:07,930 Així que al principi de la línia 18, no estic agraït pel que sembla pel fet que el 362 00:16:07,930 --> 00:16:12,150 Valor agraït Boolean s'inicialitza a false a la línia 18. 363 00:16:12,150 --> 00:16:16,890 I llavors sembla que el que he fet aquí a les línies 21-23 s'acabo 364 00:16:16,890 --> 00:16:18,610 tipus de reescriure la meva lògica. 365 00:16:18,610 --> 00:16:21,020 Així que no funcionalment diferents. 366 00:16:21,020 --> 00:16:26,940 No obstant això, en la línia 22 ara, puc comprovar si el int l'usuari ha proporcionat és més gran que 367 00:16:26,940 --> 00:16:31,120 0, llavors simplement canviar el valor d'agrair a true. 368 00:16:31,120 --> 00:16:32,290 I per què ho faig? 369 00:16:32,290 --> 00:16:35,600 Com que en la línia 25, pel que sembla, vaig a comprovar una condició. 370 00:16:35,600 --> 00:16:39,380 És aquest bucle while agraït és fals. 371 00:16:39,380 --> 00:16:43,610 >> Així que proposo això com una alternativa a la versió un, perquè és almenys un 372 00:16:43,610 --> 00:16:45,130 poc més intuïtiu, potser. 373 00:16:45,130 --> 00:16:46,900 És una mica més a terra en anglès. 374 00:16:46,900 --> 00:16:51,710 Així que faci el següent mentre no estàs agraït o agraïda mentre que és fals. 375 00:16:51,710 --> 00:16:55,890 I aquest cop, també, pel que sembla, no m'importa recordar el que l'usuari va escriure 376 00:16:55,890 --> 00:16:57,730 perquè en l'avís no hi ha n variables. 377 00:16:57,730 --> 00:16:58,650 Així que en realitat, jo - 378 00:16:58,650 --> 00:17:00,080 una petita mentida blanca allà. 379 00:17:00,080 --> 00:17:02,770 Funcionalment, el programa és una mica diferent una vegada que arribem al fons de 380 00:17:02,770 --> 00:17:04,819 perquè jo no estic acordant del que n és. 381 00:17:04,819 --> 00:17:09,579 Però jo volia demostrar que també en aquest cas tot i que hem vist i getInt 382 00:17:09,579 --> 00:17:13,920 GetString s'utilitza en el costat dret d'un signe d'igual manera que fins ara 383 00:17:13,920 --> 00:17:17,160 recordem el valor, tècnicament, no és estrictament necessari. 384 00:17:17,160 --> 00:17:20,950 Si per qualsevol raó vostè no els importa per guardar el valor, el que desitja 385 00:17:20,950 --> 00:17:25,710 per comprovar el valor, observi que simplement podem escriure això com getInt obert 386 00:17:25,710 --> 00:17:27,000 Parin, parin prop. 387 00:17:27,000 --> 00:17:30,460 Aquesta funció tornarà un valor, com ho hem estat dient. 388 00:17:30,460 --> 00:17:32,010 Se't va a tornar un int. 389 00:17:32,010 --> 00:17:36,450 I així, si mentalment pensar que això passi, quan escric en 99, getInt 390 00:17:36,450 --> 00:17:38,160 torna el número 99. 391 00:17:38,160 --> 00:17:41,330 I així, conceptualment, és com si el meu codi eren en realitat això. 392 00:17:41,330 --> 00:17:45,880 Així que si 99 és en realitat major que 0, llavors es converteix en veritat agraït. 393 00:17:45,880 --> 00:17:50,420 Llavors es dóna compte de la línia 25 ooh, hem acabat perquè ara estic agraït. 394 00:17:50,420 --> 00:17:54,590 I en la línia 26, simplement dir gràcies pel enter positiu, el que 395 00:17:54,590 --> 00:17:55,710 va passar a ser. 396 00:17:55,710 --> 00:17:58,900 >> Ara farem el sucre sintàctic lleu aquí, per dir-ho. 397 00:17:58,900 --> 00:18:02,990 A veure si podem netejar aquesta línia 25 amb aquesta variació tercera i última 398 00:18:02,990 --> 00:18:04,640 en positive3. 399 00:18:04,640 --> 00:18:08,250 Així que notar que l'única diferència ara és quina línia de codi? 400 00:18:11,930 --> 00:18:13,260 Sí, i 25. 401 00:18:13,260 --> 00:18:15,520 I no hem vist realment aquest truc encara. 402 00:18:15,520 --> 00:18:19,510 Però ens van fer veure el signe d'exclamació dilluns, el que denota què? 403 00:18:19,510 --> 00:18:20,970 Així que no, o negació. 404 00:18:20,970 --> 00:18:23,460 Així que pren un valor booleà i voltejar el seu valor. 405 00:18:23,460 --> 00:18:24,390 Cert converteix en falsa. 406 00:18:24,390 --> 00:18:25,500 Fals es fa realitat. 407 00:18:25,500 --> 00:18:28,910 Així que això, proposo, és encara una mica més intuïtiu d'una manera de 408 00:18:28,910 --> 00:18:32,200 poder programar perquè encara agraït inicialitzar en false. 409 00:18:32,200 --> 00:18:33,530 Encara faig el següent. 410 00:18:33,530 --> 00:18:35,700 Vaig posar agraït a true quan arribi el moment. 411 00:18:35,700 --> 00:18:40,690 Però ara vostè pot realment traduir aquest codi només verbalment esquerra a dreta, 412 00:18:40,690 --> 00:18:42,550 mentre no agraït. 413 00:18:42,550 --> 00:18:46,170 A causa de bang, o signe d'exclamació, denota la noció de no, així que mentre 414 00:18:46,170 --> 00:18:47,010 no gràcies. 415 00:18:47,010 --> 00:18:49,740 >> Així que de nou, no hem introduït nous conceptes en si. 416 00:18:49,740 --> 00:18:53,230 Hem parlat de booleans enrere quan juguem amb Scratch. 417 00:18:53,230 --> 00:18:55,690 Però n'adono ara que acabem de començar a escriure el nostre codi en 418 00:18:55,690 --> 00:18:56,550 moltes maneres diferents. 419 00:18:56,550 --> 00:19:00,010 Per tant, i en pset1, si vostè és una espècie de lluita per descobrir la manera de 420 00:19:00,010 --> 00:19:03,400 escriure algun programa, la Casa estàs de sort perquè no hi haurà cap 421 00:19:03,400 --> 00:19:05,780 nombre de solucions que li poden succeir a. 422 00:19:05,780 --> 00:19:09,850 Per exemple, això és només tres per fins i tot el més simple dels programes. 423 00:19:09,850 --> 00:19:10,180 Està bé. 424 00:19:10,180 --> 00:19:13,860 I ara recordo el dilluns, deixem en aquesta nota amb valors de retorn. 425 00:19:13,860 --> 00:19:18,280 Així, per primera vegada, escrivim un programa que no només té principal, 426 00:19:18,280 --> 00:19:22,240 també té la seva pròpia funció personalitzada que vaig escriure aquí. 427 00:19:22,240 --> 00:19:26,640 Així, en la línia 31 a la 34, he implementat una funció de cub. 428 00:19:26,640 --> 00:19:27,800 No és complex. 429 00:19:27,800 --> 00:19:29,830 És que algunes vegades vegades i una, en aquest cas. 430 00:19:29,830 --> 00:19:34,920 Però l'important d'això és que estic prenent d'entrada en forma d'una i 431 00:19:34,920 --> 00:19:38,910 Vaig a tornar la sortida en forma de vegades i diverses vegades a. 432 00:19:38,910 --> 00:19:43,940 >> Així que ara tinc la capacitat, tant com solia fer-ho amb printf sol, per cridar 433 00:19:43,940 --> 00:19:47,120 aquesta funció cridant a la funció de cub. 434 00:19:47,120 --> 00:19:49,470 I la funció de cub té alguna entrada. 435 00:19:49,470 --> 00:19:52,030 I la funció retorna un cub de sortida. 436 00:19:52,030 --> 00:19:56,660 I així, per contra, printf acabo de fer alguna cosa. 437 00:19:56,660 --> 00:19:59,490 No va tornar tot el que ens importava - tot i que, com 438 00:19:59,490 --> 00:20:00,820 A part d'això, no torna cap valor. 439 00:20:00,820 --> 00:20:02,650 Només generalment ho ignoren. 440 00:20:02,650 --> 00:20:04,000 Printf acabo de fer alguna cosa. 441 00:20:04,000 --> 00:20:06,220 Tenia un efecte secundari de la impressió a la pantalla. 442 00:20:06,220 --> 00:20:09,480 Per contra aquí, tenim la funció de cub, que 443 00:20:09,480 --> 00:20:11,400 en realitat torna alguna cosa. 444 00:20:11,400 --> 00:20:12,960 >> Així que aquest és generalment - 445 00:20:12,960 --> 00:20:15,260 per a aquells que estan familiaritzats amb això, és una idea bastant senzilla. 446 00:20:15,260 --> 00:20:18,460 Però per a aquells menys familiaritzats amb la idea de passar en les entrades i obtenir 447 00:20:18,460 --> 00:20:21,700 sortides posteriors, tractarem només una cosa simple super. 448 00:20:21,700 --> 00:20:25,180 Hi ha algú que ve còmode a l'escenari breument? 449 00:20:25,180 --> 00:20:27,460 Vostè ha d'estar còmode amb una càmera a vostè, també. 450 00:20:27,460 --> 00:20:27,640 Si. 451 00:20:27,640 --> 00:20:28,610 Bé, quin és el teu nom? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. Malan: Ken. 454 00:20:29,420 --> 00:20:29,810 Molt bé, Ken. 455 00:20:29,810 --> 00:20:31,060 Anem amunt. 456 00:20:31,060 --> 00:20:34,660 Així Ken serà una funció de la classe aquí. 457 00:20:34,660 --> 00:20:35,760 I seguirem endavant i fer això. 458 00:20:35,760 --> 00:20:38,790 Anem una mica sofisticat. 459 00:20:38,790 --> 00:20:39,770 Gust a conèixer-lo. 460 00:20:39,770 --> 00:20:41,010 Benvingut al centre de l'escenari. 461 00:20:41,010 --> 00:20:41,980 Està bé. 462 00:20:41,980 --> 00:20:45,590 Anem a colpejar el botó aquí. 463 00:20:45,590 --> 00:20:46,420 Està bé. 464 00:20:46,420 --> 00:20:49,490 Així que aquí tens una pissarra moderna. 465 00:20:49,490 --> 00:20:53,050 I el que jo sóc és la funció principal, per exemple. 466 00:20:53,050 --> 00:20:55,990 I no tinc un iPad a la mà. 467 00:20:55,990 --> 00:20:59,000 Jo no me'n recordo com - bé, en realitat, no puc dir això. 468 00:20:59,000 --> 00:21:02,200 Jo realment no tinc bona lletra. 469 00:21:02,200 --> 00:21:05,260 I per tant, vull imprimir alguna cosa a la pantalla per a mi. 470 00:21:05,260 --> 00:21:07,470 >> Així que estic sent el programa principal. 471 00:21:07,470 --> 00:21:15,060 I li diré que tens això escrivint en el meu gargots i 472 00:21:15,060 --> 00:21:16,600 llavors el pas d'una entrada. 473 00:21:16,600 --> 00:21:20,000 Així com ximple encara que aquest exercici és, la noció de funcions i trucar a un 474 00:21:20,000 --> 00:21:22,260 funció i retorna una funció realment es redueix a això. 475 00:21:22,260 --> 00:21:23,120 Estic principal. 476 00:21:23,120 --> 00:21:26,270 Acabo d'escriure printf ("alguna cosa") a la pantalla. 477 00:21:26,270 --> 00:21:27,470 Estic executant aquest programa. 478 00:21:27,470 --> 00:21:30,900 I tan bon punt es diu a printf, pren un argument - o un paràmetre, 479 00:21:30,900 --> 00:21:31,660 de vegades - 480 00:21:31,660 --> 00:21:32,780 entre cometes dobles. 481 00:21:32,780 --> 00:21:33,960 Aquí està l'argument. 482 00:21:33,960 --> 00:21:35,740 Ho estic passant a Ken. 483 00:21:35,740 --> 00:21:39,390 Ara ell és un quadre negre escrit un nombre d'anys que pel que sembla 484 00:21:39,390 --> 00:21:41,070 només sap imprimir coses a la pantalla. 485 00:21:41,070 --> 00:21:42,320 >> Per tant, executar. 486 00:21:48,842 --> 00:21:49,900 Això no és dolent. 487 00:21:49,900 --> 00:21:50,890 Així, molt bé. 488 00:21:50,890 --> 00:21:52,900 Així que ara es porta a terme l'execució de Ken. 489 00:21:52,900 --> 00:21:55,810 Ha de donar-me res a canvi? 490 00:21:55,810 --> 00:21:57,240 Així que el que hem vist fins ara. 491 00:21:57,240 --> 00:21:59,230 Un cop més, és en realitat printf torna un nombre. 492 00:21:59,230 --> 00:22:01,640 Però anem a ignorar que, per ara, perquè mai he fet servir. 493 00:22:01,640 --> 00:22:03,400 Així que això és tot per Ken. 494 00:22:03,400 --> 00:22:06,650 I ara principal torna a executar - 495 00:22:06,650 --> 00:22:09,630 principal pren el control de nou el programa perquè aquesta línia de codi, 496 00:22:09,630 --> 00:22:11,010 printf, es porta a terme l'execució. 497 00:22:11,010 --> 00:22:13,890 I que avancem en el nostre camí execució de qualsevol altres línies hi són. 498 00:22:13,890 --> 00:22:14,130 >> Està bé. 499 00:22:14,130 --> 00:22:17,080 Així que ara anem a provar un exemple una mica diferent. 500 00:22:17,080 --> 00:22:22,430 I aquest cop aquí, es va a esborrar la pantalla aquí. 501 00:22:22,430 --> 00:22:24,670 I aquesta vegada, anem a fer la funció de mesurament de volum. 502 00:22:24,670 --> 00:22:27,350 Però aquesta vegada, espero que un valor de sortida. 503 00:22:27,350 --> 00:22:28,630 Així que seguirem endavant i fer-ho. 504 00:22:28,630 --> 00:22:35,680 Així que ara tinc una línia de codi que diu que x = cub (x). 505 00:22:35,680 --> 00:22:36,930 Així que en realitat let 's - 506 00:22:41,450 --> 00:22:43,940 la línia de codi, el record, es veu així. 507 00:22:43,940 --> 00:22:45,960 x = cub (x). 508 00:22:45,960 --> 00:22:48,100 Llavors, com es va a treballar? 509 00:22:48,100 --> 00:22:50,820 Així que seguirem endavant i donar-li una pantalla en blanc de nou. 510 00:22:50,820 --> 00:22:55,000 I jo vaig a escriure ara pel valor de x, que en aquest moment de 511 00:22:55,000 --> 00:23:01,080 temps passa a ser, diguem, 2, perquè sigui senzill. 512 00:23:01,080 --> 00:23:04,890 Així que he escrit en un tros de paper el valor de 2, 513 00:23:04,890 --> 00:23:06,100 com és el meu valor x. 514 00:23:06,100 --> 00:23:08,250 L'hi dono a Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: I acabo d'escriure la resposta? 516 00:23:09,200 --> 00:23:12,660 DAVID J. Malan: Sí, anem a escriure la resposta. 517 00:23:12,660 --> 00:23:13,030 Bé. 518 00:23:13,030 --> 00:23:16,280 I ara m'ha de retornar alguna cosa. 519 00:23:16,280 --> 00:23:17,560 Per tant - 520 00:23:17,560 --> 00:23:18,170 perfecte. 521 00:23:18,170 --> 00:23:18,840 Niça segue. 522 00:23:18,840 --> 00:23:21,970 >> Així que ara em passa de nou el valor de 8, en aquest cas. 523 00:23:21,970 --> 00:23:23,220 I què faig amb ell? 524 00:23:23,220 --> 00:23:26,130 Bé, en realitat, veurem. 525 00:23:26,130 --> 00:23:26,640 Obtenir aquest dret. 526 00:23:26,640 --> 00:23:27,880 Què faré amb ell? 527 00:23:27,880 --> 00:23:31,900 Ara em vaig a prendre aquest valor i en realitat el guardi en els 528 00:23:31,900 --> 00:23:33,400 mateixos bits en la memòria. 529 00:23:33,400 --> 00:23:35,030 Però noti, jo sóc una mena de lluita aquí. 530 00:23:35,030 --> 00:23:38,280 Estic una mica confós perquè on puc realment escriure el valor de x? 531 00:23:38,280 --> 00:23:41,840 Perquè el que acabes de fer és físicament Ken mà un full de paper 532 00:23:41,840 --> 00:23:44,400 que tenia el valor 2, que era x. 533 00:23:44,400 --> 00:23:46,300 I de fet, això és precisament el que succeeix. 534 00:23:46,300 --> 00:23:50,100 Així que resulta que quan es crida a una funció, i se li passa un argument 535 00:23:50,100 --> 00:23:54,130 com "hola món" o se li passa un argument com el 2, en general, està 536 00:23:54,130 --> 00:23:56,720 passant una còpia d'aquest argument. 537 00:23:56,720 --> 00:24:01,020 I així com jo vaig anotar el número 2 aquí i l'hi va donar a Ken, que ha 538 00:24:01,020 --> 00:24:04,760 vol dir que encara tinc una còpia del valor 2 en algun lloc. 539 00:24:04,760 --> 00:24:08,140 Perquè en realitat, ara que ho he aconseguit tornar el valor 8, he de tornar enrere en el 540 00:24:08,140 --> 00:24:12,010 RAM i realment anotar 8, on una vegada vaig tenir el número 2. 541 00:24:12,010 --> 00:24:15,720 >> Així que recorda visualment aquesta idea de passar literalment a 542 00:24:15,720 --> 00:24:16,730 una còpia del valor. 543 00:24:16,730 --> 00:24:19,570 Ken fa les seves coses, em fa una mica de volta - en aquest cas, 544 00:24:19,570 --> 00:24:20,820 un valor com 8. 545 00:24:20,820 --> 00:24:22,660 I llavors he de fer alguna cosa amb aquest valor si 546 00:24:22,660 --> 00:24:24,880 volen mantenir aquí. 547 00:24:24,880 --> 00:24:29,470 Així que tot això serà molt familiar d'aquí a poc. 548 00:24:29,470 --> 00:24:33,082 Moltes gràcies per aquesta demostració aquí, Ken. 549 00:24:33,082 --> 00:24:34,820 Està bé. 550 00:24:34,820 --> 00:24:36,720 Molt ben fet. 551 00:24:36,720 --> 00:24:40,610 Així que anem a veure la forma en què en última instància es refereix a algunes de les funcions 552 00:24:40,610 --> 00:24:42,270 demanant que hem estat fent aquí. 553 00:24:42,270 --> 00:24:47,610 Així que permetin-me anar per davant i ens porti de nou a l'exemple cubicació aquí. 554 00:24:47,610 --> 00:24:53,080 I noti que si volem realment començar a prendre aquest més futur, anem 555 00:24:53,080 --> 00:24:57,050 a haver de tenir en compte el fet que el nombre x que està sent aprovada en 556 00:24:57,050 --> 00:25:01,390 aquí és diferent del que realment està passant en la funció. 557 00:25:01,390 --> 00:25:03,940 Així que de nou, això passa per la còpia serà molt 558 00:25:03,940 --> 00:25:05,620 germànic en un moment. 559 00:25:05,620 --> 00:25:09,320 >> Així que anem a fer una ullada a alguna cosa que no acaba de funcionar bé encara. 560 00:25:09,320 --> 00:25:11,790 Vaig a seguir endavant i obrir un exemple calessa tercer, que 561 00:25:11,790 --> 00:25:13,560 pateix de la naturalesa. 562 00:25:13,560 --> 00:25:18,070 I es diu buggy3, i implementa una funció d'intercanvi. 563 00:25:18,070 --> 00:25:23,500 Així que aquí tenim una funció principal que ha xiy arbitràriament inicialitza 564 00:25:23,500 --> 00:25:24,720 1 i 2, respectivament. 565 00:25:24,720 --> 00:25:27,590 Podríem utilitzar getInt, però només necessitem un exercici simple. 566 00:25:27,590 --> 00:25:29,680 Així que és codificada com 1 i 2. 567 00:25:29,680 --> 00:25:35,330 En les línies 21 i 22, que pel que sembla imprimir x i i, un per línia. 568 00:25:35,330 --> 00:25:39,620 Després, en la línia 23, sostinc que estic canviant aquests valors, punt, punt, punt. 569 00:25:39,620 --> 00:25:43,030 Em aparentment cridar a una funció en la línia 24 diu intercanvi 570 00:25:43,030 --> 00:25:44,000 que pren dos arguments. 571 00:25:44,000 --> 00:25:46,430 És totalment legítim per les funcions de prendre dos arguments. 572 00:25:46,430 --> 00:25:48,220 Hem vist printf fer-ho ja. 573 00:25:48,220 --> 00:25:50,370 Així intercanvi aparentment presa x i i. 574 00:25:50,370 --> 00:25:53,010 I com el seu nom ho indica, és d'esperar que serà 575 00:25:53,010 --> 00:25:54,320 intercanviar aquests dos valors. 576 00:25:54,320 --> 00:25:57,560 Així que em diuen en la línia 25, intercanvien. 577 00:25:57,560 --> 00:26:01,570 I reimprimir x i i sota el supòsit que 578 00:26:01,570 --> 00:26:02,830 que han estat efectivament intercanviats. 579 00:26:02,830 --> 00:26:04,370 Però si realment executar aquest programa - 580 00:26:04,370 --> 00:26:06,060 m'ho dius a mi obrir una finestra de terminal. 581 00:26:06,060 --> 00:26:07,750 Permetin-me fer buggy3. 582 00:26:07,750 --> 00:26:09,970 Com el seu nom ho indica, això no acabarà bé. 583 00:26:09,970 --> 00:26:14,690 Perquè quan premeu la tecla Enter, cal notar que x és 1. 584 00:26:14,690 --> 00:26:15,720 i és 2. 585 00:26:15,720 --> 00:26:19,160 I no obstant això, al final del programa, que encara hi són, de fet, el mateix. 586 00:26:19,160 --> 00:26:22,760 >> Així que basat en la demostració acaba amb Ken, el que realment està passant? 587 00:26:22,760 --> 00:26:24,660 Bé, anem a aprofundir en aquesta funció swap. 588 00:26:24,660 --> 00:26:25,800 És súper curt. 589 00:26:25,800 --> 00:26:28,020 No és més que unes poques línies de codi de temps. 590 00:26:28,020 --> 00:26:32,810 Però quin és el problema fonamental que s'ha de basar en la simple història li va dir a 591 00:26:32,810 --> 00:26:34,270 aquí amb Ken? 592 00:26:34,270 --> 00:26:36,115 Per què el canvi d'trenca? 593 00:26:36,115 --> 00:26:37,365 [Inaudible] 594 00:26:39,840 --> 00:26:40,460 Exactament. 595 00:26:40,460 --> 00:26:43,610 Així que estem a guardar una còpia, no la variable en si. 596 00:26:43,610 --> 00:26:46,810 En altres paraules, d'intercanvi aparentment pren dos arguments, un int. 597 00:26:46,810 --> 00:26:49,370 I està cridat arbitràriament a i b. 598 00:26:49,370 --> 00:26:54,430 I fins aquí, he passat a x i i, que són, respectivament, 1 i 2. 599 00:26:54,430 --> 00:26:56,580 Però no estic literalment passant x. 600 00:26:56,580 --> 00:26:58,410 No estic literalment passant a i. 601 00:26:58,410 --> 00:27:01,230 Estic passant una còpia de x i una còpia de i. 602 00:27:01,230 --> 00:27:05,180 És com gairebé com si ha copiat i enganxat en intercanviar els valors que 603 00:27:05,180 --> 00:27:07,440 desitja que es manipulen en realitat. 604 00:27:07,440 --> 00:27:11,970 Així que si aquest és el cas, quan jo, el programa començarà a executar 605 00:27:11,970 --> 00:27:14,140 la línia 35, després 36 - 606 00:27:14,140 --> 00:27:17,740 quan arribi a la línia 37, en aquest moment de la història, quin és el valor de a? 607 00:27:20,740 --> 00:27:24,850 En aquest punt de la història, línia 37, quin és el valor d'una en aquest moment? 608 00:27:24,850 --> 00:27:25,980 Per tant, només ha de ser 1. 609 00:27:25,980 --> 00:27:26,170 ¿És cert? 610 00:27:26,170 --> 00:27:29,100 Com x es passa com a primer argument. 611 00:27:29,100 --> 00:27:33,150 I aquesta funció només arbitràriament es diu el seu primer argument, a. 612 00:27:33,150 --> 00:27:35,130 De la mateixa manera és i, el segon argument. 613 00:27:35,130 --> 00:27:37,930 I és just cridar a la b arbitràriament segon argument. 614 00:27:37,930 --> 00:27:40,510 >> Ara bé, aquesta dicotomia és en realitat bastant simple explicació. 615 00:27:40,510 --> 00:27:40,880 Pensa en això. 616 00:27:40,880 --> 00:27:42,980 Cap de nosaltres ha conegut la persona que va escriure printf. 617 00:27:42,980 --> 00:27:49,880 Així que segurament, ell o ella no té idea del que les nostres variables de 30 anys més tard es van 618 00:27:49,880 --> 00:27:50,710 per ser anomenat. 619 00:27:50,710 --> 00:27:55,110 Així que ha d'haver una distinció entre el que diuen variables en 620 00:27:55,110 --> 00:27:59,960 funcions que està escrivint i el que anomenem variables en funcions que està 621 00:27:59,960 --> 00:28:01,770 trucant o utilitzant. 622 00:28:01,770 --> 00:28:05,120 En altres paraules, he escrit els meus variables com x i i. 623 00:28:05,120 --> 00:28:08,060 Però si algú havia escrit la funció d'intercanvi, ell o ella certament 624 00:28:08,060 --> 00:28:10,480 No sabria què meus variables seran anomenat. 625 00:28:10,480 --> 00:28:13,850 Així que adonar-se que això és per què té aquesta dualitat de noms. 626 00:28:13,850 --> 00:28:16,800 Tècnicament, jo podria fer això per casualitat. 627 00:28:16,800 --> 00:28:19,750 Però encara s'usa per a còpies. 628 00:28:19,750 --> 00:28:22,940 Només seria una pura coincidència estèticament si aquesta persona que va escriure 629 00:28:22,940 --> 00:28:25,590 intercanvi havia utilitzat els mateixos noms. 630 00:28:25,590 --> 00:28:25,930 >> Està bé. 631 00:28:25,930 --> 00:28:29,010 Així que en aquest punt de la història, línia 37, a és 1. 632 00:28:29,010 --> 00:28:30,410 b és 2. 633 00:28:30,410 --> 00:28:32,040 I ara em dedico a intercanviar-les. 634 00:28:32,040 --> 00:28:34,730 Bé, primer de tot, m'ho fan realment molt més simple. 635 00:28:34,730 --> 00:28:36,500 No sé quines són aquestes tres línies de codi feien. 636 00:28:36,500 --> 00:28:37,370 Permetin-me fer això. 637 00:28:37,370 --> 00:28:38,850 b obté una. 638 00:28:38,850 --> 00:28:40,170 obté un b. 639 00:28:40,170 --> 00:28:41,450 Fet. 640 00:28:41,450 --> 00:28:43,540 Per què aquesta trencat, lògicament? 641 00:28:46,980 --> 00:28:48,590 És una cosa de la intuïtiu, oi? 642 00:28:48,590 --> 00:28:50,640 Per tant es converteix en una b. 643 00:28:50,640 --> 00:28:52,450 I b es converteix en una. 644 00:28:52,450 --> 00:28:55,410 Però el problema és que tan aviat com s'executa la línia 37, quina és la 645 00:28:55,410 --> 00:28:58,170 valor de a i b? 646 00:28:58,170 --> 00:28:59,070 El mateix, 1. 647 00:28:59,070 --> 00:29:03,460 Perquè has pallissa, per dir-ho, has canviat b sigui igual a. 648 00:29:03,460 --> 00:29:06,000 Així que una vegada que la línia 37 s'executa, això és genial. 649 00:29:06,000 --> 00:29:09,940 Ara té dues còpies del número 1 dins d'aquesta funció. 650 00:29:09,940 --> 00:29:14,720 Així que quan vostè diu en la línia 38, es posa un b, bé, ets una mica fotut. 651 00:29:14,720 --> 00:29:17,370 Perquè estàs assignant 1 a 1. 652 00:29:17,370 --> 00:29:20,400 Vostè ha perdut el tipus de valor que li importava. 653 00:29:20,400 --> 00:29:22,910 >> Així que en la versió original d'aquest, observi el que vaig fer. 654 00:29:22,910 --> 00:29:26,620 Jo en canvi va tenir una tercera línia de codi que es veia així. 655 00:29:26,620 --> 00:29:29,910 Jo declaro una variable temporal - tmp és un nom molt comú 656 00:29:29,910 --> 00:29:31,240 per a una variable temporal. 657 00:29:31,240 --> 00:29:34,280 És un int perquè ha de coincidir amb el que jo vull fer una còpia de. 658 00:29:34,280 --> 00:29:39,720 Puc guardar una còpia d'un interior d'tmp. Així que una vegada que la línia 37 s'ha executat, 659 00:29:39,720 --> 00:29:41,390 el valor de a és - 660 00:29:41,390 --> 00:29:42,970 seny registre ràpid - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 El valor de b és 2. 663 00:29:45,780 --> 00:29:48,470 I el valor de tmp és també 1. 664 00:29:48,470 --> 00:29:51,470 Així que ara executar la línia 38. 665 00:29:51,470 --> 00:29:57,180 Així que una vegada que la línia 38 s'executa, una presa el valor de b. 666 00:29:57,180 --> 00:29:58,510 I b va ser de 2. 667 00:29:58,510 --> 00:30:00,500 Així és ara un 2. 668 00:30:00,500 --> 00:30:03,110 Així que en aquest punt de la història, a és 2, b és 2, 669 00:30:03,110 --> 00:30:05,130 i tmp és 1. 670 00:30:05,130 --> 00:30:09,330 Així que ara, lògicament, podem valorar només tmp plop a la b. 671 00:30:09,330 --> 00:30:10,690 I hem acabat. 672 00:30:10,690 --> 00:30:12,170 >> Per això hem resolt aquest problema. 673 00:30:12,170 --> 00:30:16,040 Malauradament, quan executo aquest programa en aquesta forma, en realitat no intercanviar 674 00:30:16,040 --> 00:30:17,700 qualsevol valor. 675 00:30:17,700 --> 00:30:18,950 Però perquè quedi clar, per què? 676 00:30:23,420 --> 00:30:26,310 He arreglat el problema lògic de fa un moment. 677 00:30:26,310 --> 00:30:31,150 Però de nou, si executa aquest programa, x i i no canvien a la fi de 678 00:30:31,150 --> 00:30:33,834 l'execució del programa. 679 00:30:33,834 --> 00:30:34,760 [Inaudible] 680 00:30:34,760 --> 00:30:36,030 DAVID J. Malan: Així que no han tornat res. 681 00:30:36,030 --> 00:30:36,960 Així que això és cert. 682 00:30:36,960 --> 00:30:39,880 Però resulta que hi ha un petit problema aquí, perquè fins ara, el 683 00:30:39,880 --> 00:30:42,460 L'únic que hem pogut tornar és una cosa. 684 00:30:42,460 --> 00:30:46,540 I aquesta és una restricció de C. Només pot tornar realment un valor, 685 00:30:46,540 --> 00:30:48,970 en aquest cas, estic una mica encallat aquí 686 00:30:48,970 --> 00:30:51,805 perquè vaig poder retornar el nou valor de x o podia tornar el 687 00:30:51,805 --> 00:30:53,160 nou valor de i. 688 00:30:53,160 --> 00:30:54,330 Però vull tant enrere. 689 00:30:54,330 --> 00:30:58,010 Així que torna no és la solució simple aquí. 690 00:30:58,010 --> 00:30:59,770 Però el problema fonamental és per què? 691 00:30:59,770 --> 00:31:03,270 Què hem canviat en realitat? 692 00:31:03,270 --> 00:31:04,010 a i b. 693 00:31:04,010 --> 00:31:07,670 Però a i b són còpies de x i i, el que significa que acabem de fer tot això 694 00:31:07,670 --> 00:31:10,080 treball - només passem com tres minuts parlant sobre el canvi 695 00:31:10,080 --> 00:31:11,680 funció i els tres d'aquestes variables. 696 00:31:11,680 --> 00:31:15,090 I això està molt bé, perfectament correcte en l'aïllament. 697 00:31:15,090 --> 00:31:20,230 No obstant això, un abast i b és l'única en aquestes línies aquí. 698 00:31:20,230 --> 00:31:24,130 Així com un bucle, si es declara un enter i per l'interior de la 699 00:31:24,130 --> 00:31:27,400 loop - De la mateixa manera, si vostè està dins de declarar a i b d'una funció que 700 00:31:27,400 --> 00:31:30,550 que has escrit, són vàlids només dins d'aquesta funció. 701 00:31:30,550 --> 00:31:35,020 El que vol dir que tan aviat com swap es realitza l'execució i es passa de la línia 24 a 702 00:31:35,020 --> 00:31:38,380 línia 25, X i Y no han canviat en absolut. 703 00:31:38,380 --> 00:31:42,580 Vostè acaba de perdre un munt de temps que es triga còpies de variables. 704 00:31:42,580 --> 00:31:46,490 >> Així resulta que la solució a això és en realitat no evident. 705 00:31:46,490 --> 00:31:49,210 No és més que suficient per retornar valors perquè podem 706 00:31:49,210 --> 00:31:50,320 només retornen un valor. 707 00:31:50,320 --> 00:31:53,370 I realment vull canviar tant x com i, a la vegada. 708 00:31:53,370 --> 00:31:55,020 Així que anem a tornar a això. 709 00:31:55,020 --> 00:31:58,770 Però, per ara, s'adonen que el problema fonamental es deriva del fet 710 00:31:58,770 --> 00:32:00,660 que a i b són còpies. 711 00:32:00,660 --> 00:32:03,450 I ells estan en el seu propi àmbit. 712 00:32:03,450 --> 00:32:04,980 Bé, anem a tractar de resoldre això d'alguna manera. 713 00:32:04,980 --> 00:32:09,200 Permetin-me retrocedir en realitat aquí i obren, diguem, una quarta variant 714 00:32:09,200 --> 00:32:11,170 d'aquest, buggy4. 715 00:32:11,170 --> 00:32:13,230 I què passa amb això? 716 00:32:13,230 --> 00:32:16,690 Aquest és un problema similar però més senzill que mirar abans de prendre una punyalada en 717 00:32:16,690 --> 00:32:17,530 resoldre'l. 718 00:32:17,530 --> 00:32:19,440 Aquest programa es diu increment. 719 00:32:19,440 --> 00:32:24,320 I, pel que sembla, s'inicialitza un enter x a 1 a la línia 18. 720 00:32:24,320 --> 00:32:25,950 Llavors em diuen x 1. 721 00:32:25,950 --> 00:32:28,020 Llavors reclamació incrementant, punt, punt, punt. 722 00:32:28,020 --> 00:32:29,460 Llavors truqui increment. 723 00:32:29,460 --> 00:32:33,480 Però llavors, en les línies 22 i 23, que diuen que ha estat incrementat. 724 00:32:33,480 --> 00:32:37,780 Jo reclam x ara és el que és, presumiblement, 2. 725 00:32:37,780 --> 00:32:39,770 >> Però aquest programa està lliure d'errors. 726 00:32:39,770 --> 00:32:41,020 Quin és el problema? 727 00:32:43,450 --> 00:32:44,418 Sí? 728 00:32:44,418 --> 00:32:45,668 [Inaudible] 729 00:32:49,260 --> 00:32:49,850 DAVID J. Malan: Exactament. 730 00:32:49,850 --> 00:32:52,430 Així que x ha estat declarada, òbviament, en la línia 18. 731 00:32:52,430 --> 00:32:54,410 És dins de claus principal. 732 00:32:54,410 --> 00:32:58,470 Així que la resposta simple és que, bé, x existeix aquí. 733 00:32:58,470 --> 00:33:01,510 No existeix en la línia 32. 734 00:33:01,510 --> 00:33:03,710 Així que aquest programa realment ni tan sols es compilarà. 735 00:33:03,710 --> 00:33:07,910 El compilador, quan intento compilar aquest codi, es va a cridar 736 00:33:07,910 --> 00:33:13,190 sobre algun identificador no declarat o alguna cosa per l'estil. 737 00:33:13,190 --> 00:33:13,870 De fet, ho intentarem. 738 00:33:13,870 --> 00:33:15,235 Es tracta de fer buggy4. 739 00:33:17,780 --> 00:33:18,190 Aquí està. 740 00:33:18,190 --> 00:33:22,030 L'ús de x identificador no declarat en la línia 32. 741 00:33:22,030 --> 00:33:25,700 I, de fet, serem més explícit aquí avui perquè això sigui útil en 742 00:33:25,700 --> 00:33:27,140 les hores d'oficina ia casa. 743 00:33:27,140 --> 00:33:29,000 Tingueu en compte que és una mica críptic escrit. 744 00:33:29,000 --> 00:33:31,560 Però el fet que té Clang ens va cridar, dient: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, és realment útil. 746 00:33:36,970 --> 00:33:41,970 Això significa que l'error està en la línia 32 a la posició de cinc caràcters. 747 00:33:41,970 --> 00:33:44,670 Així que un, dos, tres, quatre, cinc. 748 00:33:44,670 --> 00:33:46,640 Això és, en efecte, on el problema és. 749 00:33:46,640 --> 00:33:49,710 I també a tenir en compte en les hores d'oficina ia casa, tinc sort aquí. 750 00:33:49,710 --> 00:33:50,740 Tinc un error. 751 00:33:50,740 --> 00:33:52,660 Serà relativament fàcil de solucionar. 752 00:33:52,660 --> 00:33:56,220 Però si tens una pàgina amb la missatges d'error aclaparadores, de nou, 753 00:33:56,220 --> 00:33:59,240 adonar-se que el situat més avall podria ser un símptoma de 754 00:33:59,240 --> 00:34:00,320 les més altes. 755 00:34:00,320 --> 00:34:03,560 Així que sempre persegueix els errors de dalt a baix. 756 00:34:03,560 --> 00:34:06,720 Com que només hi pot haver un efecte en cadena que li està suggerint 757 00:34:06,720 --> 00:34:09,030 té problemes molt més del que realment fan. 758 00:34:09,030 --> 00:34:14,989 >> Llavors, com podem solucionar aquest problema si el meu objectiu és incrementar x? 759 00:34:14,989 --> 00:34:15,370 Què és això? 760 00:34:15,370 --> 00:34:15,620 Bé. 761 00:34:15,620 --> 00:34:16,679 Així que podem fer x global. 762 00:34:16,679 --> 00:34:18,860 Anem a tirar pel dret que em va advertir sobre abans. 763 00:34:18,860 --> 00:34:20,550 Però diables, només necessitem una solució ràpida. 764 00:34:20,550 --> 00:34:23,949 Així que diguem que x int aquí. 765 00:34:23,949 --> 00:34:25,600 Això fa que x global. 766 00:34:25,600 --> 00:34:28,460 Així que ara principal té accés. 767 00:34:28,460 --> 00:34:31,780 I increment té accés. 768 00:34:31,780 --> 00:34:33,860 I així que permetin-me anar endavant i compilar aquest moment. 769 00:34:33,860 --> 00:34:36,330 Fer buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Sembla compilar ara. 771 00:34:37,440 --> 00:34:40,949 Anem a córrer buggy4, i sembla que funciona realment. 772 00:34:40,949 --> 00:34:42,780 Ara bé, aquesta és una d'aquestes coses - 773 00:34:42,780 --> 00:34:45,870 fes el que jo dic, no el que faig, com acabo de fer aquí. 774 00:34:45,870 --> 00:34:49,239 Com que en general, els nostres programes es posaran molt més interessant i 775 00:34:49,239 --> 00:34:50,440 molt més que això. 776 00:34:50,440 --> 00:34:53,199 I si la solució a problemes de la vida és ah, posar tota la 777 00:34:53,199 --> 00:34:57,550 variables en la capçalera de l'arxiu, molt ràpidament fer arribar els programes 778 00:34:57,550 --> 00:34:59,700 terriblement difícil de manejar. 779 00:34:59,700 --> 00:35:02,050 Es fa més difícil d'idear nous noms de variables. 780 00:35:02,050 --> 00:35:05,240 Es fa més difícil entendre què variable està fent què. 781 00:35:05,240 --> 00:35:08,250 >> I així, en general, això no és una bona solució. 782 00:35:08,250 --> 00:35:09,780 Així que farem això millor. 783 00:35:09,780 --> 00:35:11,920 No volem utilitzar una variable global aquí. 784 00:35:11,920 --> 00:35:14,050 Jo vull incrementar x. 785 00:35:14,050 --> 00:35:16,050 Així que, òbviament, podria - 786 00:35:16,050 --> 00:35:18,450 al cap ia la fi, és una mica d'una història ximple, perquè acabem de fer això. 787 00:35:18,450 --> 00:35:22,050 Però si jo no sabia res d'aquest operador, en cas contrari no se li va permetre 788 00:35:22,050 --> 00:35:27,700 canviar a principal en si, com podria jo posar en pràctica Ken aquí, aquesta 789 00:35:27,700 --> 00:35:31,450 temps per no incrementar cub però? 790 00:35:31,450 --> 00:35:32,700 Com puc canviar això d'aquí? 791 00:35:32,700 --> 00:35:33,025 Si. 792 00:35:33,025 --> 00:35:34,275 [Inaudible] 793 00:35:37,430 --> 00:35:38,000 DAVID J. Malan: Està bé, està bé. 794 00:35:38,000 --> 00:35:40,490 Així que per què no passar x? 795 00:35:40,490 --> 00:35:44,390 I llavors en lloc de tornar-lo, per què no m'acaba de prémer retorn x + 1? 796 00:35:44,390 --> 00:35:46,370 Ara, un parell de coses més que canviar aquí. 797 00:35:46,370 --> 00:35:47,530 Estic en el camí correcte. 798 00:35:47,530 --> 00:35:48,910 Què més necessita per modificar? 799 00:35:48,910 --> 00:35:49,470 Algú més. 800 00:35:49,470 --> 00:35:49,882 Sí? 801 00:35:49,882 --> 00:35:51,530 [Inaudible] 802 00:35:51,530 --> 00:35:53,520 DAVID J. Malan: He de canviar el tipus de retorn d'increment 803 00:35:53,520 --> 00:35:54,590 perquè no s'anul · larà. 804 00:35:54,590 --> 00:35:56,650 Buit significa que no ha de ser retornat. 805 00:35:56,650 --> 00:35:57,600 Però està clar que ara és. 806 00:35:57,600 --> 00:36:01,280 Així que això ha de canviar a int per ser coherent amb el que 807 00:36:01,280 --> 00:36:02,580 En realitat estic tornant. 808 00:36:02,580 --> 00:36:04,580 >> Ara, una altra cosa és encara amb errors aquí. 809 00:36:04,580 --> 00:36:04,982 Sí? 810 00:36:04,982 --> 00:36:06,590 [Inaudible] 811 00:36:06,590 --> 00:36:07,630 DAVID J. Malan: Així que he de augmentar x? 812 00:36:07,630 --> 00:36:10,336 [Inaudible] 813 00:36:10,336 --> 00:36:11,880 DAVID J. Malan: Ah, així que he de passar x. 814 00:36:11,880 --> 00:36:13,300 Així que he de fer això aquí. 815 00:36:17,590 --> 00:36:19,690 Així que el prototip, he de canviar això aquí. 816 00:36:19,690 --> 00:36:21,290 Així que això ha de ser un int. 817 00:36:21,290 --> 00:36:22,820 Això ha de ser - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 De fet, tinc un error aquí. 820 00:36:24,710 --> 00:36:25,780 Anem a arreglar això primer. 821 00:36:25,780 --> 00:36:27,990 Quin ha de ser aquesta realitat? 822 00:36:27,990 --> 00:36:29,330 Per tant, hi ha d'haver alguna cosa int. 823 00:36:29,330 --> 00:36:30,340 Podria ser x. 824 00:36:30,340 --> 00:36:33,120 Però, francament, si vostè comença a trucar a tots els de la seva x variables, que obtindrà 825 00:36:33,120 --> 00:36:35,250 menys i menys clara quin és quin. 826 00:36:35,250 --> 00:36:38,210 Així que anem a triar arbitràriament una nomenclatura diferent per a mi 827 00:36:38,210 --> 00:36:40,220 funcions d'ajuda, les funcions que estic escrivint. 828 00:36:40,220 --> 00:36:41,100 L'anomenarem a. 829 00:36:41,100 --> 00:36:44,500 O podríem anomenar - anem a anomenar even_number a ser encara més explícit. 830 00:36:44,500 --> 00:36:47,610 Així que he de tornar tot el que el nombre és més 1. 831 00:36:47,610 --> 00:36:49,720 I ara he de canviar una cosa aquí i una altra 832 00:36:49,720 --> 00:36:50,700 una altra cosa aquí. 833 00:36:50,700 --> 00:36:54,150 Què he de canviar en la línia 21 en primer lloc? 834 00:36:54,150 --> 00:36:55,390 He de assignar a x. 835 00:36:55,390 --> 00:36:57,480 Així que no puc dir x increment. 836 00:36:57,480 --> 00:37:01,000 Necessito recordar la resposta en canviar el valor de x en 837 00:37:01,000 --> 00:37:02,020 el costat de la mà esquerra. 838 00:37:02,020 --> 00:37:04,930 I tot i que x es troba ara a l'esquerra i la dreta, que és totalment correcte, perquè 839 00:37:04,930 --> 00:37:08,370 a mà dreta s'executa primer i després es va deixar caure a l'esquerra 840 00:37:08,370 --> 00:37:10,240 cosa mà, x en aquest cas. 841 00:37:10,240 --> 00:37:11,900 I finalment, aquesta és una solució fàcil ara. 842 00:37:11,900 --> 00:37:15,080 Això només ha de coincidir amb el que està a baix. 843 00:37:15,080 --> 00:37:17,120 Nombre Int 844 00:37:17,120 --> 00:37:17,320 >> Està bé. 845 00:37:17,320 --> 00:37:20,290 Així que un munt de canvis per a una funció realment estúpid. 846 00:37:20,290 --> 00:37:24,250 Però representant de coses que cada vegada voldrà fer. 847 00:37:24,250 --> 00:37:25,490 Així que buggy4. 848 00:37:25,490 --> 00:37:26,485 M'he cagat en algun lloc. 849 00:37:26,485 --> 00:37:27,520 Oh meu Déu. 850 00:37:27,520 --> 00:37:29,660 Cinc errors, com, un programa de sis línies. 851 00:37:29,660 --> 00:37:36,500 Llavors, què hi ha de dolent en la línia 18, el caràcter 5? 852 00:37:36,500 --> 00:37:36,970 Està bé. 853 00:37:36,970 --> 00:37:39,330 Així que he de declarar aquest int. 854 00:37:39,330 --> 00:37:39,630 Està bé. 855 00:37:39,630 --> 00:37:41,790 Així que anem a veure, un munt d'altres errors. 856 00:37:41,790 --> 00:37:42,230 Oh meu déu. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Però, de nou, anem a esborrar la pantalla - 859 00:37:46,020 --> 00:37:48,660 L Control d'aquí - i Clang repetició. 860 00:37:48,660 --> 00:37:51,340 Així que cinc problemes que en realitat és només una. 861 00:37:51,340 --> 00:37:53,500 Així que ara anem a executar buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 Sort. 863 00:37:54,150 --> 00:37:57,434 x s'ha incrementat correctament. 864 00:37:57,434 --> 00:37:58,420 >> Està bé. 865 00:37:58,420 --> 00:38:01,700 Qualsevol pregunta sobre la forma d'incrementar els nombres? 866 00:38:01,700 --> 00:38:02,896 Sí? 867 00:38:02,896 --> 00:38:06,864 Ponència 2: Per què és que vostè pot canviar el nombre x en la variable 868 00:38:06,864 --> 00:38:08,860 nomenar i sabrà el que vols dir? 869 00:38:08,860 --> 00:38:09,600 DAVID J. Malan: Bona pregunta. 870 00:38:09,600 --> 00:38:13,130 Com és que només puc canviar x a nombre i el programa sabrà 871 00:38:13,130 --> 00:38:13,990 immediatament? 872 00:38:13,990 --> 00:38:16,120 Així que de nou, pensa en ell com aquesta abstracció. 873 00:38:16,120 --> 00:38:20,110 Així que si jo sóc principal i Ken és incremental, francament, no m'importa 874 00:38:20,110 --> 00:38:21,540 Ken el crida al seu iPad. 875 00:38:21,540 --> 00:38:25,350 No m'importa el que ell anomena qualsevol cosa que tingui a veure amb la seva aplicació 876 00:38:25,350 --> 00:38:26,550 d'aquesta funcionalitat. 877 00:38:26,550 --> 00:38:32,130 Així que aquest és un detall d'implementació que jo, principal, no 878 00:38:32,130 --> 00:38:33,010 que importa. 879 00:38:33,010 --> 00:38:37,440 I així, simplement canviant constantment dins de la funció, el nombre aquí 880 00:38:37,440 --> 00:38:41,340 i el nombre d'aquí, és tot el que pren tant de temps com jo recompilar. 881 00:38:41,340 --> 00:38:43,820 És com si vostè pensa - molts de nosaltres, aquells de vostès amb conductor 882 00:38:43,820 --> 00:38:46,590 llicències que han impulsat, o fins i tot si vostè ha conduït a un cotxe - 883 00:38:46,590 --> 00:38:50,710 la majoria de nosaltres no tenim idea de com funciona un cotxe sota la campana. 884 00:38:50,710 --> 00:38:54,710 I, literalment, si s'obre el capó, la majoria de nosaltres - jo inclòs - 885 00:38:54,710 --> 00:38:56,580 no sabrem realment el que estem veient. 886 00:38:56,580 --> 00:38:58,850 Una cosa que es pot sentir amb coses com aquesta ara mateix. 887 00:38:58,850 --> 00:39:01,380 Però en realitat no han de tenir cura com el cotxe funciona. 888 00:39:01,380 --> 00:39:05,000 Nosaltres no hem de cuidar el que totes les varetes i pistons i els cables a l'interior de 889 00:39:05,000 --> 00:39:07,700 el cotxe està fent en realitat. 890 00:39:07,700 --> 00:39:11,360 >> Així que alguna cosa com el que vostès anomenen el pistó no té importància 891 00:39:11,360 --> 00:39:11,920 aquí en aquest cas. 892 00:39:11,920 --> 00:39:12,490 La mateixa idea. 893 00:39:12,490 --> 00:39:12,670 Sí? 894 00:39:12,670 --> 00:39:13,920 [Inaudible] 895 00:39:25,250 --> 00:39:29,530 DAVID J. Malan: Si hi ha més usos de la variable xa moment enrere, 896 00:39:29,530 --> 00:39:32,220 vostè, el programador, hauria de canviar tot arreu. 897 00:39:32,220 --> 00:39:35,230 O vostè podria literalment fer Arxiu, Menú, i després Cercar / Reemplaçar, 898 00:39:35,230 --> 00:39:36,270 alguna cosa per l'estil. 899 00:39:36,270 --> 00:39:40,110 Però hauràs de fer aquests canvis pel seu compte. 900 00:39:40,110 --> 00:39:41,200 Cal ser coherent. 901 00:39:41,200 --> 00:39:42,450 [Inaudible] 902 00:39:47,200 --> 00:39:48,960 DAVID J. Malan: un ordre particular com aquí? 903 00:39:48,960 --> 00:39:52,660 Si això era int altre nombre? 904 00:39:52,660 --> 00:39:52,940 Si. 905 00:39:52,940 --> 00:39:56,430 Així ordre importa quan es crida a la funció. 906 00:39:56,430 --> 00:40:00,350 Així que si m'estaven trucant increment aquí amb una mica alguna cosa coma, 907 00:40:00,350 --> 00:40:01,400 hi ha una correlació directa. 908 00:40:01,400 --> 00:40:04,490 La primera variable, com es digui, es fa una còpia de la primera 909 00:40:04,490 --> 00:40:05,480 argument aquí. 910 00:40:05,480 --> 00:40:07,280 Lamentablement, això no hauria de ser un parèntesi. 911 00:40:07,280 --> 00:40:09,300 Les línies del segon argument per dalt amb el segon. 912 00:40:09,300 --> 00:40:11,220 >> Així ordre, sí, importa. 913 00:40:11,220 --> 00:40:11,490 Està bé. 914 00:40:11,490 --> 00:40:13,360 No em vaig prendre un llarg camí per arribar-hi. 915 00:40:13,360 --> 00:40:14,610 Altres preguntes? 916 00:40:16,460 --> 00:40:16,850 Està bé. 917 00:40:16,850 --> 00:40:20,300 Així que anem a veure si podem pintar un quadre del que realment passa 918 00:40:20,300 --> 00:40:22,160 aquí sota la caputxa, per dir-ho. 919 00:40:22,160 --> 00:40:26,310 Així que aquest és un rectangle que podria representar la memòria del seu ordinador. 920 00:40:26,310 --> 00:40:31,240 Així que encara que no té idea de com funciona la memòria RAM o com funciona, si més no 921 00:40:31,240 --> 00:40:33,590 se suposa que té raïms d'ell en aquests dies. 922 00:40:33,590 --> 00:40:34,740 Tens megabytes d'ella. 923 00:40:34,740 --> 00:40:35,760 Tens gigabytes d'ella. 924 00:40:35,760 --> 00:40:40,690 I sabem des de zero setmana que un byte és què? 925 00:40:40,690 --> 00:40:41,280 8 bits. 926 00:40:41,280 --> 00:40:42,730 Bé, aleshores 8 zeros i uns. 927 00:40:42,730 --> 00:40:46,300 Així que si el seu equip té un giga de RAM, dues gigues de RAM en aquests dies, té un 928 00:40:46,300 --> 00:40:54,450 mil milions o 2 milions de bytes de memòria, o milers de milions a uns 8 milions de dòlars o 16 929 00:40:54,450 --> 00:40:56,560 bits, en l'interior del seu ordinador. 930 00:40:56,560 --> 00:40:59,710 Ara, a diferència de l'exemple poc llanós Willy, no és partícules magnètiques 931 00:40:59,710 --> 00:41:00,560 típicament més. 932 00:41:00,560 --> 00:41:04,470 Cada vegada més, en els ordinadors portàtils com a mínim, és les unitats d'estat sòlid, SSD, que 933 00:41:04,470 --> 00:41:05,560 simplement no tenen parts mòbils. 934 00:41:05,560 --> 00:41:06,710 Tot és electrònic. 935 00:41:06,710 --> 00:41:08,070 Tot està basat electricitat. 936 00:41:08,070 --> 00:41:12,360 Així que pensar, però, d'aquest rectangle com només representa el un o dos 937 00:41:12,360 --> 00:41:13,930 gigabytes de memòria que té. 938 00:41:13,930 --> 00:41:15,500 >> Així que és un tros de memòria. 939 00:41:15,500 --> 00:41:20,460 Ara el món de la informàtica té una mena de trossos de particions de 940 00:41:20,460 --> 00:41:22,570 memòria per fer coses diferents. 941 00:41:22,570 --> 00:41:25,930 Així, per exemple, si aquesta és la memòria RAM del seu ordinador - com suggereix el 942 00:41:25,930 --> 00:41:30,400 rectangle allà - Resulta que, per convenció, a la part superior de la RAM, així que 943 00:41:30,400 --> 00:41:33,170 dir-ho, és generalment el que es diu un segment de text. 944 00:41:33,170 --> 00:41:35,910 Aquests són els zeros i uns que s'han recopilat. 945 00:41:35,910 --> 00:41:39,040 Per això, quan hem mirat sota de la caputxa del a.out és a dir, tots 946 00:41:39,040 --> 00:41:40,360 els zeros i uns - 947 00:41:40,360 --> 00:41:44,000 quan s'executa un programa, els zeros i uns es carreguen des del seu disc 948 00:41:44,000 --> 00:41:46,290 unitat en alguna cosa que es diu memòria RAM. 949 00:41:46,290 --> 00:41:48,950 I a la RAM, se les col · loca en la part superior. 950 00:41:48,950 --> 00:41:50,330 Ara, mentrestant, té altres coses. 951 00:41:50,330 --> 00:41:53,060 Dades inicialitzats, dades sense inicialitzar. 952 00:41:53,060 --> 00:41:56,440 Aquestes dues franges de memòria es refereixen a les variables globals, que 953 00:41:56,440 --> 00:41:57,530 no s'utilitzen sovint. 954 00:41:57,530 --> 00:42:00,630 Però de vegades, si ho fan, acaben allà també. 955 00:42:00,630 --> 00:42:01,620 Llavors hi ha altres coses. 956 00:42:01,620 --> 00:42:04,130 Les variables d'entorn, que no anem a passar molt temps en. 957 00:42:04,130 --> 00:42:06,120 Però dues coses importants que tornarà al llarg d'aquest 958 00:42:06,120 --> 00:42:08,130 semestre, pila i pila. 959 00:42:08,130 --> 00:42:12,280 >> Així que la majoria de la memòria de l'equip està reservat en executar un programa per 960 00:42:12,280 --> 00:42:14,880 una cosa que es diu la pila i una cosa que es diu la pila. 961 00:42:14,880 --> 00:42:16,940 I no anem a parlar sobre el munt d'avui, però ho farem 962 00:42:16,940 --> 00:42:18,180 parlar de la pila. 963 00:42:18,180 --> 00:42:22,910 I la pila està destinat a evocar la visual de com el menjador 964 00:42:22,910 --> 00:42:26,120 safates de menjar en Mather House, o on sigui que sigui, on el 965 00:42:26,120 --> 00:42:27,810 menjador personal netejar cada dia. 966 00:42:27,810 --> 00:42:30,180 Els apilar amunt de la planta de dalt. 967 00:42:30,180 --> 00:42:33,800 I de la mateixa manera en la memòria, hi ha aquesta idea de posar alguna cosa en un 968 00:42:33,800 --> 00:42:36,740 apilar, posar alguna cosa en una pila, posar alguna cosa en una pila. 969 00:42:36,740 --> 00:42:38,000 I què és el que volem dir amb això? 970 00:42:38,000 --> 00:42:41,430 Bé, anem a fer un zoom en només la meitat inferior d'aquest quadre, seu ordinador 971 00:42:41,430 --> 00:42:43,990 RAM, proposar la següent. 972 00:42:43,990 --> 00:42:48,300 Resulta que quan s'executa un programa com a.out o hola, sigui quina sigui 973 00:42:48,300 --> 00:42:49,920 del programa és que vostè ha escrit, 974 00:42:49,920 --> 00:42:53,030 de nou, aquests zeros i uns es carreguen des del disc dur - que és 975 00:42:53,030 --> 00:42:56,190 emmagatzematge a llarg termini, es queda allà, fins i tot quan es tiri de la clavilla - 976 00:42:56,190 --> 00:42:57,220 carregat a la RAM. 977 00:42:57,220 --> 00:42:59,020 RAM és més ràpid que els discos durs. 978 00:42:59,020 --> 00:43:00,700 És més petit que els discs durs. 979 00:43:00,700 --> 00:43:03,490 Però és que els programes en viu mentre està en funcionament. 980 00:43:03,490 --> 00:43:06,380 >> Així es fa doble clic en un programa en un Mac o un PC - està carregat de 981 00:43:06,380 --> 00:43:07,750 disc dur a la RAM. 982 00:43:07,750 --> 00:43:11,760 Així que es carrega a la memòria RAM, els zeros i uns anar a la part superior forma, la 983 00:43:11,760 --> 00:43:13,130 així anomenat segment de text. 984 00:43:13,130 --> 00:43:17,040 Però tan bon punt el programa arrenca en realitat, el principal 985 00:43:17,040 --> 00:43:18,140 funció es diu. 986 00:43:18,140 --> 00:43:21,070 I principal, com hem vist, sovint té variables locals. 987 00:43:21,070 --> 00:43:24,560 I té sencers i cadenes i caràcters i similars. 988 00:43:24,560 --> 00:43:28,300 Així que si el teu programa que vostè ha escrit o del programa que s'ha 989 00:43:28,300 --> 00:43:33,680 doble clic utilitzen algunes variables dins de la principal, que acaben en la 990 00:43:33,680 --> 00:43:37,020 part inferior de la pila de la memòria, per dir-ho. 991 00:43:37,020 --> 00:43:39,160 Ara, més concretament, què significa això realment? 992 00:43:39,160 --> 00:43:44,080 Això només vol dir que si anàvem a explicar les coses - 993 00:43:44,080 --> 00:43:49,380 si anàvem a numerar els bytes de memòria RAM en el seu ordinador, observi que 994 00:43:49,380 --> 00:43:51,650 Aquest nombre pot ser zero bytes. 995 00:43:51,650 --> 00:43:56,130 Aquest podria ser el nombre de bytes d'una, dues, tres, quatre, cinc, sis, tots 996 00:43:56,130 --> 00:43:57,290 fins arribar a agradar - 997 00:43:57,290 --> 00:44:01,520 2000000000 seria tot el camí fins allà dalt. 998 00:44:01,520 --> 00:44:05,960 En altres paraules, quan parlem de RAM o memòria en termes de bytes, es 999 00:44:05,960 --> 00:44:09,680 només significa que algú ha decidit que a comptar cadascun 1000 00:44:09,680 --> 00:44:11,110 aquests trossos de memòria. 1001 00:44:11,110 --> 00:44:16,950 >> Així que quan vostè necessita 32 bits per a un int, o si necessita 8 bits per a un char, si 1002 00:44:16,950 --> 00:44:18,320 què acaben en la memòria? 1003 00:44:18,320 --> 00:44:20,650 Bé, conceptualment, que acaba d'acabar en el fons d'aquest 1004 00:44:20,650 --> 00:44:21,780 cosa que es diu la pila. 1005 00:44:21,780 --> 00:44:25,670 Però l'interessant ara és quan crida a una funció principal. 1006 00:44:25,670 --> 00:44:28,830 Suposem que una funció anomenada foo, només un nom arbitrari. 1007 00:44:28,830 --> 00:44:32,480 El que passa és principal està a la part inferior d'aquesta pila de memòria. 1008 00:44:32,480 --> 00:44:35,630 Foo ara es col · loca en la part superior de la memòria principal. 1009 00:44:35,630 --> 00:44:40,020 Així que qualsevol variable local que ha foo acabar espècie de vista conceptual dalt 1010 00:44:40,020 --> 00:44:40,770 els de principal. 1011 00:44:40,770 --> 00:44:46,920 Si foo crida a una altra funció anomenada bar, aquelles variables acaben aquí. 1012 00:44:46,920 --> 00:44:49,790 Si la barra demana una mica més, aquí, aquí, aquí. 1013 00:44:49,790 --> 00:44:53,900 Així que el que és interessant sobre l'execució d'un programa és que en cridar a funcions, 1014 00:44:53,900 --> 00:44:57,720 i com les funcions que criden a funcions, i aquestes funcions trucar a funcions, 1015 00:44:57,720 --> 00:45:00,980 construir l'edifici aquesta pila de funcions en la memòria. 1016 00:45:00,980 --> 00:45:06,740 I només una vegada retorna una funció no comença a rebre aquesta memòria esquena. 1017 00:45:06,740 --> 00:45:11,190 Així que una de les maneres més fàcils d'executar fora de la memòria en un programa d'ordinador és 1018 00:45:11,190 --> 00:45:14,170 escriure funcions que mai tornen. 1019 00:45:14,170 --> 00:45:16,650 >> Així, per exemple, demostrarem com molt amb un 1020 00:45:16,650 --> 00:45:18,460 programa intencionalment buggy. 1021 00:45:18,460 --> 00:45:24,690 Deixin-me seguir endavant i fer # include, int main (void). 1022 00:45:24,690 --> 00:45:31,270 I ho faré, mentre que (2> 1), que probablement mai 1023 00:45:31,270 --> 00:45:33,370 canviar a nosaltres. 1024 00:45:33,370 --> 00:45:37,720 I m'ho dius a mi seguir endavant ara i fer printf. 1025 00:45:37,720 --> 00:45:39,950 En realitat, això serà menys interessant visualment. 1026 00:45:39,950 --> 00:45:40,460 Anem a fer això. 1027 00:45:40,460 --> 00:45:44,840 Per int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Fem d'aquest error, i + +. 1029 00:45:49,740 --> 00:45:51,150 I no printf aquí. 1030 00:45:51,150 --> 00:45:52,550 Anem a practicar el que predicava. 1031 00:45:52,550 --> 00:45:54,090 Anem a fer una mètode aquí. 1032 00:45:54,090 --> 00:46:00,860 Cor Buit, i direm int i. 1033 00:46:00,860 --> 00:46:02,295 I després vaig a dir, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, anem a fer-ho més interessant. 1035 00:46:06,790 --> 00:46:08,350 Que en realitat no imprimeix res en absolut. 1036 00:46:08,350 --> 00:46:10,530 Anem a fer això. 1037 00:46:10,530 --> 00:46:11,780 Cor (i). 1038 00:46:16,630 --> 00:46:17,000 >> Està bé. 1039 00:46:17,000 --> 00:46:20,040 Així que això té errors perquè per què? 1040 00:46:20,040 --> 00:46:22,850 Estic fent això com vaig perquè el programa no fa res 1041 00:46:22,850 --> 00:46:23,420 d'interès. 1042 00:46:23,420 --> 00:46:24,670 Però aquest no és l'objectiu. 1043 00:46:24,670 --> 00:46:30,440 L'objectiu és escriure un programa que té com a principal funció fa el que, pel que sembla? 1044 00:46:30,440 --> 00:46:31,370 Truqui a si mateix. 1045 00:46:31,370 --> 00:46:32,600 I en realitat, no necessitem el bucle. 1046 00:46:32,600 --> 00:46:36,070 Anem a simplificar encara això només per no perdre de vista la realitat 1047 00:46:36,070 --> 00:46:37,310 error fonamental. 1048 00:46:37,310 --> 00:46:39,200 Principals trucades cor per cantar alguns cors. 1049 00:46:39,200 --> 00:46:41,760 Llavors vaig fer alguna cosa estúpid, i jo tenia cor cor anomenada perquè vaig suposar 1050 00:46:41,760 --> 00:46:43,550 algú més ho havia de posar en pràctica potser. 1051 00:46:43,550 --> 00:46:45,960 I ara això no es va a compilar encara. 1052 00:46:45,960 --> 00:46:48,340 He de fer què? 1053 00:46:48,340 --> 00:46:49,700 Necessito el prototip, recorda. 1054 00:46:49,700 --> 00:46:55,520 Així que he de tenir aquí cor void (int i). 1055 00:46:55,520 --> 00:46:57,470 >> Així que ara, si em vaig per aquí - 1056 00:46:57,470 --> 00:46:59,030 en realitat, utilitzarem la finestra més gran. 1057 00:46:59,030 --> 00:47:01,670 Seguirem endavant i fer cors. 1058 00:47:01,670 --> 00:47:06,000 Seguirem endavant i fer cors. 1059 00:47:06,000 --> 00:47:08,302 L'ús d'declarant no identificat i. 1060 00:47:08,302 --> 00:47:09,860 Oh, això va ser estúpid. 1061 00:47:09,860 --> 00:47:11,020 No necessitem l'argument. 1062 00:47:11,020 --> 00:47:13,680 Anem a fer això. 1063 00:47:13,680 --> 00:47:14,550 Ens hauria agradat haver començat d'aquesta manera. 1064 00:47:14,550 --> 00:47:16,160 Hauria estat un programa molt més fàcil d'escriure. 1065 00:47:16,160 --> 00:47:20,100 Així que hi ha. 1066 00:47:20,100 --> 00:47:23,870 Ara anirem a la meva finestra de terminal, torneu a executar Clang. 1067 00:47:23,870 --> 00:47:26,900 I aquí anem. 1068 00:47:26,900 --> 00:47:28,020 Això va ser molt ràpid. 1069 00:47:28,020 --> 00:47:30,690 El que en realitat acaba de passar, però? 1070 00:47:30,690 --> 00:47:33,430 Bé, ara vaig a afegir la línia d'impressió, pel que podem veure. 1071 00:47:33,430 --> 00:47:41,330 Així que permetin-me dir printf, direm, sóc aquí. 1072 00:47:41,330 --> 00:47:43,470 Està bé, no hi ha variables, el deixarem així. 1073 00:47:43,470 --> 00:47:44,860 Permetin-me tornar a executar make. 1074 00:47:44,860 --> 00:47:47,940 Permetin-me tornar a executar el cor. 1075 00:47:47,940 --> 00:47:51,235 I anem. 1076 00:47:53,880 --> 00:47:55,130 Segueix endavant. 1077 00:47:57,630 --> 00:47:59,750 Com acotació al marge, per què no ho ha ensorrat encara? 1078 00:47:59,750 --> 00:48:02,050 La decisió de segmentació passar súper ràpid abans. 1079 00:48:02,050 --> 00:48:04,250 [Inaudible] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. Malan: Exactament. 1081 00:48:04,830 --> 00:48:06,350 Així que es necessita temps per imprimir. 1082 00:48:06,350 --> 00:48:08,370 Només es necessita més treball per part de l'equip. 1083 00:48:08,370 --> 00:48:09,550 I aquí està. 1084 00:48:09,550 --> 00:48:10,620 Segmentació culpa. 1085 00:48:10,620 --> 00:48:12,140 >> Així notar com de ràpid executar programes. 1086 00:48:12,140 --> 00:48:14,110 Si no està imprimint alguna cosa, super ràpid. 1087 00:48:14,110 --> 00:48:18,100 Però encara tinc aquest error de segmentació perquè el que estava passant? 1088 00:48:18,100 --> 00:48:21,310 Bé, si vostè pensa sobre com la memòria de l'equip es presenta, aquesta 1089 00:48:21,310 --> 00:48:22,890 passa a ser principal. 1090 00:48:22,890 --> 00:48:23,800 Però aquí - 1091 00:48:23,800 --> 00:48:28,670 Anem a trucar a aquest cor, i anomenarem a aquest cor. 1092 00:48:28,670 --> 00:48:33,420 I ara si faig la meva estètica bé, això és només dirà cor, 1093 00:48:33,420 --> 00:48:38,060 cor, cor, cor, cor, cor, cor, fins a la sacietat. 1094 00:48:38,060 --> 00:48:39,920 I, finalment, ¿què passarà? 1095 00:48:39,920 --> 00:48:46,690 Si el panorama és literalment això, què li passa conceptual? 1096 00:48:46,690 --> 00:48:48,320 Els excessos de la pila la pila. 1097 00:48:48,320 --> 00:48:52,400 O pitjor encara, que acaba d'envair tot, incloent el segment de text, que és 1098 00:48:52,400 --> 00:48:54,530 els zeros i uns que representen el seu programa. 1099 00:48:54,530 --> 00:48:56,690 En resum, això és només super, super malament. 1100 00:48:56,690 --> 00:48:56,860 ¿És cert? 1101 00:48:56,860 --> 00:48:58,620 El seu programa s'ha disparat fora de control. 1102 00:48:58,620 --> 00:49:02,840 Vostè està utilitzant la memòria molt més del que volia tot per un estúpid 1103 00:49:02,840 --> 00:49:03,920 error, en aquest cas. 1104 00:49:03,920 --> 00:49:08,160 O, en aquest cas, una funció molt deliberadament fet en si de trucada. 1105 00:49:08,160 --> 00:49:09,210 Ara bé, això no és del tot dolent. 1106 00:49:09,210 --> 00:49:12,540 Les funcions que es diuen en realitat té un gran poder 1107 00:49:12,540 --> 00:49:13,700 quan l'hi usa correctament. 1108 00:49:13,700 --> 00:49:15,650 Jo no ho he fet servir correctament aquí. 1109 00:49:15,650 --> 00:49:16,940 >> Així que això no és del tot dolent. 1110 00:49:16,940 --> 00:49:20,620 Però el fet que en realitat mai deixa de cridar-me a mi mateix és un dret fonamental 1111 00:49:20,620 --> 00:49:23,050 aquí debilitat d'aquest programa. 1112 00:49:23,050 --> 00:49:25,090 Llavors, on anem amb tot això? 1113 00:49:25,090 --> 00:49:26,230 Bé, què està passant realment? 1114 00:49:26,230 --> 00:49:30,010 Quan dic a la funció d'increment, igual que fèiem en aquests exemples, 1115 00:49:30,010 --> 00:49:33,290 Tinc un valor com una que jo pas polz 1116 00:49:33,290 --> 00:49:35,820 Em passa una còpia del número u. 1117 00:49:35,820 --> 00:49:37,080 Així passa el següent. 1118 00:49:37,080 --> 00:49:40,390 Així que entrarem en l'exemple d'increment. 1119 00:49:40,390 --> 00:49:44,230 I aquest tipus per aquí. 1120 00:49:44,230 --> 00:49:46,800 Així que aquí és el que està succeint realment. 1121 00:49:46,800 --> 00:49:50,770 Quan vaig trucar a l'increment, i pas a x, pictòricament el que és 1122 00:49:50,770 --> 00:49:53,660 passant aquí és aquesta - 1123 00:49:53,660 --> 00:50:00,240 si tinc el valor d'1 emmagatzemen aquí, i jo en realitat cridar increment, que 1124 00:50:00,240 --> 00:50:02,680 ara es diu cor - 1125 00:50:02,680 --> 00:50:04,010 sí, això m'està llançant aquí. 1126 00:50:04,010 --> 00:50:06,750 Així que anomenarem a aquest increment. 1127 00:50:06,750 --> 00:50:09,420 I no sabem el que aquesta funció següent serà. 1128 00:50:09,420 --> 00:50:14,270 Llavors, què està passant realment aquí en algun lloc principal, tinc un tros de 1129 00:50:14,270 --> 00:50:16,670 memòria que emmagatzema el número 1. 1130 00:50:16,670 --> 00:50:19,730 Quan dic increment, estic fent servir un altre tros de memòria, però ara 1131 00:50:19,730 --> 00:50:20,840 té la còpia de 1. 1132 00:50:20,840 --> 00:50:25,480 Quan incrementar aquest valor, això es converteix en 2 - horriblement escrit en la 1133 00:50:25,480 --> 00:50:26,420 pantalla aquí. 1134 00:50:26,420 --> 00:50:30,550 Però llavors, què passa tan bon punt torna d'increment? 1135 00:50:30,550 --> 00:50:34,610 Aquesta memòria només es va lliurar de nou al sistema operatiu, el que significa que tot 1136 00:50:34,610 --> 00:50:37,470 que has fet és gens útil. 1137 00:50:37,470 --> 00:50:43,460 El que estava continguda originalment en el principal segueix sent realment allà. 1138 00:50:43,460 --> 00:50:44,650 >> Llavors, ¿a on anem amb això? 1139 00:50:44,650 --> 00:50:49,400 Bé, resulta que a la memòria que té aquesta d'esquena seqüència de 1140 00:50:49,400 --> 00:50:50,940 bytes que es poden posar les coses polz 1141 00:50:50,940 --> 00:50:53,760 I resulta que ja hem vist alguna cosa que consisteix a col · locar 1142 00:50:53,760 --> 00:50:55,100 coses tornin a l'esquena amb esquena amb esquena. 1143 00:50:55,100 --> 00:51:00,170 Què és una cadena, sobre la base d'una setmana i dues setmanes ara? 1144 00:51:00,170 --> 00:51:01,840 Així que és només una col · lecció de personatges. 1145 00:51:01,840 --> 00:51:05,290 Així resulta que, de la mateixa manera que vostè pot posar números a la memòria, de manera similar que pugui 1146 00:51:05,290 --> 00:51:06,900 posar els caràcters en la memòria. 1147 00:51:06,900 --> 00:51:09,810 I un cop que comencem a posar en la memòria de personatges d'esquena cap enrere per 1148 00:51:09,810 --> 00:51:12,800 de nou, és que l'ús de les coses més simples com un bucle o 1149 00:51:12,800 --> 00:51:14,510 un bucle while, podem iterar - 1150 00:51:14,510 --> 00:51:17,130 d'esquerra a dreta sobre els caràcters d'una cadena - 1151 00:51:17,130 --> 00:51:20,720 i començar a fer massatges en personatges completament diferents. 1152 00:51:20,720 --> 00:51:25,550 A podria convertir-se en B. B es pot convertir en C. Per tant, en definitiva, podem prendre una 1153 00:51:25,550 --> 00:51:28,830 Frase anglès que realment té sentit i convertir cada un dels 1154 00:51:28,830 --> 00:51:32,440 cartes d'una en una mitjançant un recorregut per la memòria del nostre ordinador d'esquerra a 1155 00:51:32,440 --> 00:51:34,300 dret a xifrar en realitat. 1156 00:51:34,300 --> 00:51:36,590 >> Així que tindrem nostres cinc minuts de descans aquí, i quan tornem, anem a 1157 00:51:36,590 --> 00:51:39,060 iniciar aquest procés de codificació de la informació. 1158 00:51:41,640 --> 00:51:43,180 >> Està bé. 1159 00:51:43,180 --> 00:51:48,440 Així que abans de bussejar en alguns criptografia i aquestes coses anomenades matrius, permetin-me 1160 00:51:48,440 --> 00:51:51,610 pausa per a qualsevol pregunta, perquè em sento com si realment alguna cosa confusa alguns 1161 00:51:51,610 --> 00:51:52,230 aquests temes. 1162 00:51:52,230 --> 00:51:53,940 Així que anem a arreglar ara si podem. 1163 00:51:53,940 --> 00:51:56,480 Així que només parlava dels valors de retorn. 1164 00:51:56,480 --> 00:51:58,630 Parlem d'arguments. 1165 00:51:58,630 --> 00:52:02,330 I parlem d'aquest concepte, que tornarem a les pròximes setmanes 1166 00:52:02,330 --> 00:52:07,140 venir, de veure la memòria com un munt d'ells apilats 1167 00:52:07,140 --> 00:52:08,540 safates, per dir-ho. 1168 00:52:08,540 --> 00:52:13,460 De baix a dalt, de manera que cada safata que es posen a la pila representa 1169 00:52:13,460 --> 00:52:15,160 una funció que està sent anomenat. 1170 00:52:17,970 --> 00:52:20,300 Alguna pregunta? 1171 00:52:20,300 --> 00:52:22,890 Llavors, què - vaig a tractar de fer una pregunta. 1172 00:52:22,890 --> 00:52:25,520 Segueixo fent malbé, però ara és. - vostè tot vist la cara del noi. 1173 00:52:25,520 --> 00:52:27,020 Així que anem a tornar a això. 1174 00:52:27,020 --> 00:52:29,700 >> Així que permetin-me fer una pregunta aquí. 1175 00:52:29,700 --> 00:52:34,810 Permetin-me simplificar això al que era abans que alguns de la nostra anterior Q & A. 1176 00:52:34,810 --> 00:52:41,730 I el fet que l'increment té parèntesi d'obertura, nombre int, tancat 1177 00:52:41,730 --> 00:52:42,260 parèntesi. 1178 00:52:42,260 --> 00:52:46,370 Quin nombre representen int? 1179 00:52:46,370 --> 00:52:47,250 [Inaudible] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. Malan: un argument. 1181 00:52:47,870 --> 00:52:50,732 D'acord, però què és un argument? 1182 00:52:50,732 --> 00:52:51,620 [Inaudible] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. Malan: Em sap greu, què és això? 1184 00:52:52,500 --> 00:52:53,150 Ponent 3: Una cosa passa polz 1185 00:52:53,150 --> 00:52:53,570 DAVID J. Malan: Molt bé. 1186 00:52:53,570 --> 00:52:54,780 Així que una cosa que es passa polz 1187 00:52:54,780 --> 00:52:56,560 I més en general, és només l'entrada. 1188 00:52:56,560 --> 00:52:59,860 Si vostè està escrivint una funció i el propòsit d'aquesta funció en la vida és fer 1189 00:52:59,860 --> 00:53:03,290 una cosa una mica diferent cada vegada que l'usa, llavors l'única forma de 1190 00:53:03,290 --> 00:53:07,710 que passi realment sembla que li faciliti l'entrada de manera que 1191 00:53:07,710 --> 00:53:10,180 pot fer alguna cosa diferent amb l'entrada cada vegada. 1192 00:53:10,180 --> 00:53:13,590 >> Així que cal especificar dues coses quan una funció té entrades. 1193 00:53:13,590 --> 00:53:17,240 Cal especificar el nom que voleu donar a aquesta entrada, simplement per 1194 00:53:17,240 --> 00:53:20,790 seva pròpia conveniència, de manera que vostè pugui referir-s'hi en la funció que 1195 00:53:20,790 --> 00:53:23,610 vostè està escrivint, com ho vaig fer aquí a la línia 32. 1196 00:53:23,610 --> 00:53:27,840 Però també cal especificar el seu tipus, ja que C és un llenguatge de programació 1197 00:53:27,840 --> 00:53:28,840 que només requereix 1198 00:53:28,840 --> 00:53:31,810 que si vols una variable, vostè ha de dir-li a l'ordinador què 1199 00:53:31,810 --> 00:53:32,790 el tipus de dades que és, 1200 00:53:32,790 --> 00:53:35,540 en gran part, perquè sàpiga quants bits a 1201 00:53:35,540 --> 00:53:37,230 assignar a aquesta variable. 1202 00:53:37,230 --> 00:53:38,600 Com que podria ser de sis - 1203 00:53:38,600 --> 00:53:39,990 ho sento, no serà sis. 1204 00:53:39,990 --> 00:53:41,050 Pot ser 16. 1205 00:53:41,050 --> 00:53:41,630 Pot ser 8. 1206 00:53:41,630 --> 00:53:44,410 Pot ser 32, fins i tot 64. 1207 00:53:44,410 --> 00:53:45,820 Però l'equip ha de saber. 1208 00:53:45,820 --> 00:53:49,110 Ara el int a la banda esquerra representa el que, per contra? 1209 00:53:52,825 --> 00:53:53,780 [Inaudible] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. Malan: Què és això? 1211 00:53:54,570 --> 00:53:55,390 [Inaudible] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. Malan: El tipus de la funció i, més específicament, la 1213 00:53:57,920 --> 00:53:59,755 tipus de la seva producció. 1214 00:53:59,755 --> 00:54:00,220 Dreta. 1215 00:54:00,220 --> 00:54:04,220 Així, mentre que la cosa en parèntesi representa la seva entrada, si s'escau, la 1216 00:54:04,220 --> 00:54:06,640 cosa a l'esquerra representa la sortida. 1217 00:54:06,640 --> 00:54:10,560 I en aquest cas, l'increment aparentment torna un int. 1218 00:54:10,560 --> 00:54:14,590 I així int és el tipus de retorn d'aquesta funció. 1219 00:54:14,590 --> 00:54:16,090 >> Què significa tornar? 1220 00:54:16,090 --> 00:54:19,810 Literalment, s'utilitza la paraula clau return. 1221 00:54:19,810 --> 00:54:24,640 I si el que estan tornant a la dreta de la paraula clau és una 1222 00:54:24,640 --> 00:54:28,340 sencer, que és consistent amb el que hem promès. 1223 00:54:28,340 --> 00:54:31,110 No es podria fer alguna cosa com això - 1224 00:54:31,110 --> 00:54:32,280 hola, món - 1225 00:54:32,280 --> 00:54:33,500 perquè això és una cadena. 1226 00:54:33,500 --> 00:54:35,440 Òbviament, no és un nombre enter. 1227 00:54:35,440 --> 00:54:40,450 Així que en resum, la càrrega està realment en nosaltres, el programador, per ser més específic 1228 00:54:40,450 --> 00:54:44,730 al que estem tornant i per llavors de seguir per tornar. 1229 00:54:44,730 --> 00:54:49,030 I després de fer una mica més clar el context - 1230 00:54:49,030 --> 00:54:50,080 aquí està una altra vegada. 1231 00:54:50,080 --> 00:54:51,060 El context - 1232 00:54:51,060 --> 00:54:52,830 gran sorpresa en un moment. 1233 00:54:52,830 --> 00:54:57,720 El context aquí és que la memòria del seu ordinador és, de nou, un 1234 00:54:57,720 --> 00:54:59,070 gigabytes, dos gigabytes, el que sigui. 1235 00:54:59,070 --> 00:54:59,630 Potser és més. 1236 00:54:59,630 --> 00:55:00,540 Potser és menys. 1237 00:55:00,540 --> 00:55:03,750 Però l'equip que considera que té diferents seccions. 1238 00:55:03,750 --> 00:55:04,860 Una cosa passa allà baix. 1239 00:55:04,860 --> 00:55:06,020 Una altra cosa que passa per allà. 1240 00:55:06,020 --> 00:55:07,540 Coses diferents va en el medi. 1241 00:55:07,540 --> 00:55:09,300 I avui, tot just començar a explicar aquesta història. 1242 00:55:09,300 --> 00:55:11,130 >> Però tornarem a això amb el temps. 1243 00:55:11,130 --> 00:55:15,000 Per ara, l'única memòria que realment importa és el segment de text 1244 00:55:15,000 --> 00:55:17,160 ja que només representa els zeros i uns 1245 00:55:17,160 --> 00:55:18,460 Clang que s'emeten. 1246 00:55:18,460 --> 00:55:21,570 Així que quan s'executa una ordre en el teclat com a.out, o doble 1247 00:55:21,570 --> 00:55:25,350 feu clic a una icona en Mac OS o Windows, el programa està carregat del seu disc 1248 00:55:25,350 --> 00:55:26,930 conduir a la RAM. 1249 00:55:26,930 --> 00:55:30,850 I es va deixar caure al cim de la memòria RAM de l'ordinador, per dir-ho. 1250 00:55:30,850 --> 00:55:35,470 Ara, mentrestant, ja que el seu programa es posa en marxa i el principal es diu a la 1251 00:55:35,470 --> 00:55:39,240 programa que va escriure o escriu el programa de Microsoft o Apple, que cap dels seus 1252 00:55:39,240 --> 00:55:42,930 variables locals acaben aquí baix a la part inferior de la memòria del seu ordinador. 1253 00:55:42,930 --> 00:55:46,490 Però si truca a una altra funció principal que té variables o 1254 00:55:46,490 --> 00:55:48,340 arguments, acaben sobre. 1255 00:55:48,340 --> 00:55:50,670 I si aquesta funció crida a alguna cosa, acaben sobre d'ella, 1256 00:55:50,670 --> 00:55:51,840 per sobre d'ella, per sobre d'ella. 1257 00:55:51,840 --> 00:55:56,100 I només una vegada una funció es fa executant fa la pila de safates, de manera 1258 00:55:56,100 --> 00:55:58,320 a parlar, començar a baixar cada vegada més. 1259 00:55:58,320 --> 00:56:03,370 I això és el que llavors, en poques paraules, explica per què, quan es diu cubeta - 1260 00:56:03,370 --> 00:56:04,660 o pot trucar al increment - 1261 00:56:04,660 --> 00:56:06,490 que està passant en una còpia del valor. 1262 00:56:06,490 --> 00:56:09,840 I el que això significa és que pictòricament està literalment escrit la 1263 00:56:09,840 --> 00:56:14,540 número 1 en una altra part de la memòria, el canvi que 1 a 2, en el cas dels 1264 00:56:14,540 --> 00:56:15,360 increment - 1265 00:56:15,360 --> 00:56:17,450 oa un 8, en el cas de cub - 1266 00:56:17,450 --> 00:56:21,450 i després estirar memòria que desapareix tan bon punt l'increment o la galleda 1267 00:56:21,450 --> 00:56:23,410 retorna la funció. 1268 00:56:23,410 --> 00:56:24,267 >> Pregunta. 1269 00:56:24,267 --> 00:56:25,517 [Inaudible] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. Malan: On - Les variables globals s'emmagatzemen en el que és 1271 00:56:29,970 --> 00:56:32,960 Actualment, va cridar a les dades inicialitzats o dades sense inicialitzar. 1272 00:56:32,960 --> 00:56:35,900 La diferència és que si vostè té una variable global, i se li assigna 1273 00:56:35,900 --> 00:56:39,530 immediatament un valor amb el signe igual, que acaba a la part superior hi ha. 1274 00:56:39,530 --> 00:56:43,390 I si el que diuen int x punt i coma sense cap valor, acaba lleugerament 1275 00:56:43,390 --> 00:56:46,670 inferior en RAM simplement per convenció. 1276 00:56:46,670 --> 00:56:49,308 Altres qüestions. 1277 00:56:49,308 --> 00:56:49,750 Està bé. 1278 00:56:49,750 --> 00:56:53,040 >> Així que aquesta imatge tornarà a mesura que més poderós del que podem fer 1279 00:56:53,040 --> 00:56:53,830 amb l'equip. 1280 00:56:53,830 --> 00:56:58,790 Però per ara, tindrem una breu introducció a la criptografia, un tipus específic de 1281 00:56:58,790 --> 00:57:01,910 criptografia que no resol tots els problemes del món, però no resoldre 1282 00:57:01,910 --> 00:57:02,480 alguns d'ells. 1283 00:57:02,480 --> 00:57:06,090 En aquest cas aquí, tenim una cosa que es diu la criptografia de clau secreta. 1284 00:57:06,090 --> 00:57:10,430 I criptografia de clau secreta, com el seu nom indica, deriva la seva seguretat 1285 00:57:10,430 --> 00:57:11,330 a partir d'un secret. 1286 00:57:11,330 --> 00:57:14,720 Així, per exemple, si vostè és nou a l'escola primària i que estiguis passant un 1287 00:57:14,720 --> 00:57:18,040 carteta amor secret per al noi o la noia que t'estan aixafant - si vostè 1288 00:57:18,040 --> 00:57:20,820 Volia passar que a través de l'audiència, probablement no escriuria 1289 00:57:20,820 --> 00:57:24,120 una nota en Anglès o el que la seva llengua materna és, més aviat, 1290 00:57:24,120 --> 00:57:25,800 podria xifrar. 1291 00:57:25,800 --> 00:57:27,820 O vostè pot enviar-los un missatge de text en aquests dies. 1292 00:57:27,820 --> 00:57:30,310 Però que en realitat podria passar una nota a través de la sala de classe. 1293 00:57:30,310 --> 00:57:33,820 I per fer-ho de forma segura, de tal manera que els seus amics i el professor 1294 00:57:33,820 --> 00:57:36,820 no saps el que estàs escrivint, és possible arribar a una força simple 1295 00:57:36,820 --> 00:57:37,800 algorisme - 1296 00:57:37,800 --> 00:57:39,290 jove, encara que és possible que - 1297 00:57:39,290 --> 00:57:40,780 a només codificar les paraules. 1298 00:57:40,780 --> 00:57:44,390 Així que en lloc d'escriure una, podria escriure B. En lloc de B, pot escriure 1299 00:57:44,390 --> 00:57:46,670 C. En lloc de C, pot escriure D, i així successivament. 1300 00:57:46,670 --> 00:57:50,020 O bé, podria arribar a una traducció més sofisticat de les lletres 1301 00:57:50,020 --> 00:57:51,300 per diferents lletres. 1302 00:57:51,300 --> 00:57:55,440 Però el problema és el noi o la noia a la qual li està enviant aquesta nota ha de 1303 00:57:55,440 --> 00:57:56,850 saber alguna cosa. 1304 00:57:56,850 --> 00:57:59,620 Què és el que, òbviament? 1305 00:57:59,620 --> 00:58:01,400 Igual que, quin és el seu secret. 1306 00:58:01,400 --> 00:58:04,620 Igual que, què és això mapatge entre A i B i Cs i Ds? 1307 00:58:04,620 --> 00:58:08,780 És només l'addició d'un, per dir-ho, a cadascuna de les lletres per anar de 1308 00:58:08,780 --> 00:58:09,730 A a B, B a C? 1309 00:58:09,730 --> 00:58:11,350 És més complex que això? 1310 00:58:11,350 --> 00:58:16,450 Així que tu i el teu enamorat és necessari tenir aquesta informació secreta. 1311 00:58:16,450 --> 00:58:18,170 Però hi ha una espècie de catch-22 aquí. 1312 00:58:18,170 --> 00:58:20,760 Si aquesta és la primera vegada que enviarà aquesta carta d'amor a través de la 1313 00:58:20,760 --> 00:58:25,590 classe, com és aquest nen o nena sabrà quin és el secret fins i tot és? 1314 00:58:25,590 --> 00:58:28,450 Així que la clau secreta de xifrat no resol tots els problemes del món. 1315 00:58:28,450 --> 00:58:30,490 I de fet hi ha una relació que tornarem a cap 1316 00:58:30,490 --> 00:58:31,370 semestre final. 1317 00:58:31,370 --> 00:58:35,970 >> De la mateixa manera, no tenen cap de nosaltres probablement mai enviada a - 1318 00:58:35,970 --> 00:58:39,453 de la mateixa manera, no la majoria de nosaltres coneix a algú que treballa, per exemple, en 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 I, no obstant això, molts de nosaltres hem comprat coses a Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 I hem estat ensenyats a assumir que aquests comerç electrònic 1322 00:58:45,670 --> 00:58:47,060 transaccions són segures. 1323 00:58:47,060 --> 00:58:47,210 ¿És cert? 1324 00:58:47,210 --> 00:58:49,310 La direcció URL https probablement diu. 1325 00:58:49,310 --> 00:58:51,590 Hi ha potser una icona de cadenat poc ximple en algun lloc. 1326 00:58:51,590 --> 00:58:54,680 Hi ha una espècie de criptografia de la seguretat de la seva informació de targeta de crèdit 1327 00:58:54,680 --> 00:58:56,980 entre vostè i Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 I, no obstant això, si la criptografia implica conèixer algun secret, i no obstant això no ho fan 1329 00:59:00,410 --> 00:59:03,330 conec a ningú en Amazon, i he arreglat certament no qualsevol tipus d' 1330 00:59:03,330 --> 00:59:07,350 secret amb algú a l'Amazones, com és el meu ordinador o navegador fent això? 1331 00:59:07,350 --> 00:59:10,100 Bé, resulta que hi ha altres tipus de criptografia en total que resolen 1332 00:59:10,100 --> 00:59:10,740 aquest problema. 1333 00:59:10,740 --> 00:59:13,610 Però per ara, ens centrarem en el senzill, on es poden organitzar en 1334 00:59:13,610 --> 00:59:18,480 avançar a conèixer algun secret, com un plus o alguna correlació entre A i B. 1335 00:59:18,480 --> 00:59:20,710 >> I el procés de criptografia generalment implica això. 1336 00:59:20,710 --> 00:59:23,550 Vostè té una mica de text sense format, representat aquí a l'esquerra. 1337 00:59:23,550 --> 00:59:26,260 Pot executar a través d'algun tipus d'algorisme o procediment 1338 00:59:26,260 --> 00:59:27,670 per xifrar. 1339 00:59:27,670 --> 00:59:31,390 Potser això és només A es converteix en B, B es converteix en C i després s'acaba amb 1340 00:59:31,390 --> 00:59:32,260 text xifrat. 1341 00:59:32,260 --> 00:59:36,450 Mentrestant, un cop que el seu enamorat rep la nota secreta, ell o ella ha de llavors 1342 00:59:36,450 --> 00:59:39,950 desxifrar en general que l'algorisme d'inversió per tal d'aconseguir 1343 00:59:39,950 --> 00:59:41,640 copia el text sense format. 1344 00:59:41,640 --> 00:59:43,860 Ara hi ha encarnacions físiques d'aquest. 1345 00:59:43,860 --> 00:59:46,720 Per exemple, aquest és un petit anell descodificador secret. 1346 00:59:46,720 --> 00:59:50,060 I aquest és un anell en el sentit que hi ha dos dials aquí. 1347 00:59:50,060 --> 00:59:53,630 A la perifèria exterior d'aquesta cosa, no hi ha lletres de l'A a la Z, 1348 00:59:53,630 --> 00:59:55,110 encara estan en ordre aleatori. 1349 00:59:55,110 --> 00:59:58,410 I a l'interior, de fet hi ha alguns números, de manera que amb aquest 1350 00:59:58,410 --> 01:00:02,940 anell, es pot convertir tipus de fora però no per dins per tal d'alinear 1351 01:00:02,940 --> 01:00:04,110 nombres amb lletres. 1352 01:00:04,110 --> 01:00:08,290 I en el clip que està a punt de veure - alguns dels quals vostè va poder haver vist 24/7 1353 01:00:08,290 --> 01:00:11,120 durant la temporada de Nadal d'una pel · lícula que es diu Un conte de Nadal. 1354 01:00:11,120 --> 01:00:16,050 Veuràs que poc Ralphie estava tan ansiós per descobrir què orfenet 1355 01:00:16,050 --> 01:00:19,810 Annie missatge secret era el que havia estat comunicada, crec, en la 1356 01:00:19,810 --> 01:00:22,810 forma de missatges numèrics en una sèrie de la caixa. 1357 01:00:22,810 --> 01:00:26,760 I calia acumular totes les petites targetes que vénen 1358 01:00:26,760 --> 01:00:27,480 a la caixa de cereals. 1359 01:00:27,480 --> 01:00:28,320 Calia enviar per correu polz 1360 01:00:28,320 --> 01:00:31,060 Calia recuperar l'anell descodificador secret, de manera que vostè pot finalment entendre 1361 01:00:31,060 --> 01:00:34,190 el que la cartografia és entre lletres i nombres, 1362 01:00:34,190 --> 01:00:35,420 o lletres i lletres. 1363 01:00:35,420 --> 01:00:39,790 Així que et dono aquest clip curt d'una història de Nadal per motivar conjunt de processadors 2 i 1364 01:00:39,790 --> 01:00:42,340 nostra discussió, en un moment, de les matrius. 1365 01:00:42,340 --> 01:00:43,773 Així que aquí tenim Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [REPRODUCCIÓ DE VÍDEO] 1367 01:00:44,126 --> 01:00:47,470 -Sigui notori a tots que Ralph Parker es nomena 1368 01:00:47,470 --> 01:00:50,690 membre de la Little Orphan Annie Secret Circle i té dret a tot 1369 01:00:50,690 --> 01:00:53,500 els honors i beneficis que ocorren al mateix. 1370 01:00:53,500 --> 01:00:56,040 -Signat, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Ratificat, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 En tinta! 1373 01:01:00,150 --> 01:01:02,910 Honors i beneficis, ja a l'edat de nou. 1374 01:01:09,970 --> 01:01:10,730 Anem, anem a seguir endavant amb ella. 1375 01:01:10,730 --> 01:01:15,000 Jo no necessito tot aquest jazz sobre contrabandistes i pirates. 1376 01:01:15,000 --> 01:01:17,624 -Escolti demà a la nit per l'aventura final del Negre 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Ara és el moment per al missatge secret d'Annie com vostès, membres 1379 01:01:23,380 --> 01:01:25,670 del Cercle Secret. 1380 01:01:25,670 --> 01:01:30,260 Recordeu, els nens, només els membres del Cercle Secret d'Annie pot descodificar 1381 01:01:30,260 --> 01:01:31,660 Missatge secret d'Annie. 1382 01:01:31,660 --> 01:01:36,230 Recordeu, Annie depèn de tu. 1383 01:01:36,230 --> 01:01:38,720 Estableixi les seves agulles per B2. 1384 01:01:38,720 --> 01:01:41,040 Aquí està el missatge. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Estic en la meva primera reunió secreta. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre estava en aquesta nit gran veu. 1389 01:01:51,700 --> 01:01:54,890 Em vaig adonar que el missatge d'aquesta nit va ser molt important. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Aquest és un missatge d'Annie ella. 1392 01:01:58,590 --> 01:01:59,840 Recordeu, no l'hi diguis a ningú. 1393 01:02:04,570 --> 01:02:08,750 -90 Segons més tard, estic en l'única habitació de la casa on un nen de nou anys 1394 01:02:08,750 --> 01:02:12,980 podia seure a la intimitat i descodificació. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Vaig anar a la següent. 1396 01:02:17,130 --> 01:02:20,330 E. La primera paraula és ser. 1397 01:02:20,330 --> 01:02:22,670 S. Venia més fàcil ara. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, anem, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Em he d'anar. 1401 01:02:28,430 --> 01:02:30,350 -Vaig a estar just a sota, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Comproveu. 1404 01:02:38,270 --> 01:02:40,000 Assegureu-vos que? 1405 01:02:40,000 --> 01:02:42,105 Quin era Little Orphan Annie tractant de dir? 1406 01:02:42,105 --> 01:02:43,095 Assegureu-vos que? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy ha d'anar. 1409 01:02:44,580 --> 01:02:45,570 Faci el favor de sortir? 1410 01:02:45,570 --> 01:02:46,560 -Està bé, mare. 1411 01:02:46,560 --> 01:02:48,540 Vaig a estar fora. 1412 01:02:48,540 --> 01:02:50,580 -Jo estava cada vegada més a prop ara. 1413 01:02:50,580 --> 01:02:52,550 La tensió era terrible. 1414 01:02:52,550 --> 01:02:53,355 Què va ser? 1415 01:02:53,355 --> 01:02:56,315 El destí del planeta pot penjar d'un fil. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy ha d'anar. 1418 01:02:59,165 --> 01:03:02,310 -Vaig a tenir raó a terme, per l'amor de Déu. 1419 01:03:02,310 --> 01:03:04,000 -Vaja, gairebé arribem. 1420 01:03:04,000 --> 01:03:05,180 Els meus dits volaven. 1421 01:03:05,180 --> 01:03:07,150 La meva ment era un parany d'acer. 1422 01:03:07,150 --> 01:03:08,790 Cada porus va vibrar. 1423 01:03:08,790 --> 01:03:10,040 Era gairebé transparent. 1424 01:03:10,040 --> 01:03:13,400 Sí, sí, sí, sí. 1425 01:03:13,400 --> 01:03:18,960 -Assegureu-vos de prendre la seva Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Un comercial de mala mort? 1428 01:03:28,200 --> 01:03:29,640 Fill de puta. 1429 01:03:29,640 --> 01:03:33,340 [FI DE REPRODUCCIÓ DE VÍDEO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. Malan: Així que aquí tenim la criptografia. 1431 01:03:36,040 --> 01:03:39,670 Llavors, com en un ordinador podem anar sobre l'aplicació o 1432 01:03:39,670 --> 01:03:40,950 que representa aquest tipus de coses? 1433 01:03:40,950 --> 01:03:44,430 Bé, necessitem una manera d'expressar una mica més flexible que 1434 01:03:44,430 --> 01:03:46,420 les nostres variables fins al moment han permès. 1435 01:03:46,420 --> 01:03:47,370 Hem tingut sencers. 1436 01:03:47,370 --> 01:03:48,380 Hem tingut caràcters. 1437 01:03:48,380 --> 01:03:50,790 Hem tingut flotadors i dobles i alguns altres. 1438 01:03:50,790 --> 01:03:55,050 Però aquestes són les peces individuals de la memòria que realment no ens permeten 1439 01:03:55,050 --> 01:03:58,010 expressar coses com les paraules i oracions i frases. 1440 01:03:58,010 --> 01:04:00,200 De fet, hem anomenat cordes aquestes coses. 1441 01:04:00,200 --> 01:04:03,650 Però va prometre que això és només una simplificació en el CS50 1442 01:04:03,650 --> 01:04:07,020 biblioteca que estem intentant pelar. 1443 01:04:07,020 --> 01:04:08,970 >> Així que anem a començar a fer això aquí. 1444 01:04:08,970 --> 01:04:11,130 Deixin-me seguir endavant i obrir un arxiu - 1445 01:04:11,130 --> 01:04:13,770 tots aquests arxius estan disponibles en línia com de costum - 1446 01:04:13,770 --> 01:04:19,120 array.c anomenat per resoldre un problema relacionat amb cadenes però que pinta una 1447 01:04:19,120 --> 01:04:23,040 imatge aquí de com podríem utilitzar una cosa anomenada una matriu. 1448 01:04:23,040 --> 01:04:25,530 Una matriu és un tipus de dades. 1449 01:04:25,530 --> 01:04:31,320 És un tipus de variable, de classes, que té diversos tipus de dades més petites 1450 01:04:31,320 --> 01:04:34,150 dins d'ella d'esquena a l'esquena amb esquena. 1451 01:04:34,150 --> 01:04:37,700 Així, per exemple, si volem escriure un petit programa que li dóna el seu 1452 01:04:37,700 --> 01:04:42,110 concurs mitjà d'un curs com 50 que té dos exàmens, podeu molt fàcilment 1453 01:04:42,110 --> 01:04:45,170 escriure aquest programa - basat fins i tot en alguns dels materials de la setmana passada - 1454 01:04:45,170 --> 01:04:47,770 mitjançant l'ús d'getInt i un parell de variables. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, i és bastant senzill. 1456 01:04:51,920 --> 01:04:55,930 És potser 10, 20 línies de codi, màx, per implementar un programa que demani la 1457 01:04:55,930 --> 01:05:01,170 usuari per a dues anotacions prova i després calcula la mitjana agregándolos 1458 01:05:01,170 --> 01:05:03,850 junts, dividint per dos, i després imprimir els resultats. 1459 01:05:03,850 --> 01:05:06,380 Probablement podríem fer això molt fàcilment ara, després de 1460 01:05:06,380 --> 01:05:07,510 un cert nombre de minuts. 1461 01:05:07,510 --> 01:05:11,005 >> Però el problema és que suposo que el 50 tenia tres o quatre proves. 1462 01:05:11,005 --> 01:05:13,510 Suposem que li agradaria utilitzar el mateix programa per a una classe que tenia 1463 01:05:13,510 --> 01:05:14,850 proves setmanals. 1464 01:05:14,850 --> 01:05:16,610 Penseu en una classe que ha exàmens setmanals. 1465 01:05:16,610 --> 01:05:20,610 Si hi ha com 16 o menys setmanes en un semestre, ara té 16 variables - 1466 01:05:20,610 --> 01:05:24,270 quiz1 int, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Així que vostè comença a veure aquesta redundància, aquesta copiant i enganxant 1468 01:05:27,560 --> 01:05:31,390 de codi, ha de començar a fer que t'agradaria que hi hagués una manera millor. 1469 01:05:31,390 --> 01:05:33,930 I gràcies a Déu, a causa de les matrius, n'hi ha. 1470 01:05:33,930 --> 01:05:34,980 Així que anem a fer això. 1471 01:05:34,980 --> 01:05:38,430 En primer lloc, permetin-me presentar a una cosa molt simple que no hem fet servir fins ara, 1472 01:05:38,430 --> 01:05:40,140 però ho vas a veure de tant en tant en el codi. 1473 01:05:40,140 --> 01:05:42,360 Això és el que normalment es coneix com constant. 1474 01:05:42,360 --> 01:05:45,790 Així que és una constant en el sentit que aquest valor mai canvia. 1475 01:05:45,790 --> 01:05:49,210 La convenció humana en crear una constant és utilitzar tot el capital 1476 01:05:49,210 --> 01:05:51,940 cartes, només perquè realment es destaca en el codi. 1477 01:05:51,940 --> 01:05:55,960 I la paraula clau especial que s'utilitza en C # defineix. 1478 01:05:55,960 --> 01:06:00,250 Així que si vostè diu # defineix, després un espai, llavors la paraula que voleu utilitzar per 1479 01:06:00,250 --> 01:06:03,260 la constant de nom, i després el valor de la constant. 1480 01:06:03,260 --> 01:06:06,180 Així que nota, això és diferent de assigna alguna cosa a una variable. 1481 01:06:06,180 --> 01:06:07,020 No hi ha cap signe igual. 1482 01:06:07,020 --> 01:06:08,240 No hi ha punt i coma. 1483 01:06:08,240 --> 01:06:11,410 Això és el que es coneix generalment com una directiva de preprocessador, però més en 1484 01:06:11,410 --> 01:06:12,210 que una altra vegada. 1485 01:06:12,210 --> 01:06:18,540 >> Per ara, això crea un valor immutable anomenat TESTS l'efectiva 1486 01:06:18,540 --> 01:06:19,940 valor numèric és 2. 1487 01:06:19,940 --> 01:06:24,020 Així que on Quan vegeu proves, exàmens, proves curtes al llarg d'aquest arxiu, que és 1488 01:06:24,020 --> 01:06:25,410 només el número 2. 1489 01:06:25,410 --> 01:06:28,100 Ara, si miro principal ara, anem a veure com funciona això. 1490 01:06:28,100 --> 01:06:29,500 Al principi, sembla una mica críptic. 1491 01:06:29,500 --> 01:06:31,340 Però tot és cosa d'una setmana. 1492 01:06:31,340 --> 01:06:32,710 Demani a l'usuari per als graus. 1493 01:06:32,710 --> 01:06:33,630 Com podem fer això? 1494 01:06:33,630 --> 01:06:35,470 Doncs bé, en la línia 22 - 1495 01:06:35,470 --> 01:06:37,210 aquesta és realment la part sucosa - 1496 01:06:37,210 --> 01:06:40,960 Jo declaro un flotador, però no és només un sol flotador. 1497 01:06:40,960 --> 01:06:44,620 Estic declarant, més aviat, un conjunt de valors de punt flotant. 1498 01:06:44,620 --> 01:06:49,100 Aquesta variable es dirà graus, com s'implica aquí. 1499 01:06:49,100 --> 01:06:53,080 Però l'única nova sintaxi llavors són aquests claudàtors, el fet de 1500 01:06:53,080 --> 01:06:59,350 que he dit graus flotador i després obrir el parèntesi i després un nombre. 1501 01:06:59,350 --> 01:07:02,460 Avís, si això és una constant, això és com ho vam fer. 1502 01:07:02,460 --> 01:07:06,890 Això significa ordinador hey, dóna'm dos flotadors, i anomenarem col · lectivament 1503 01:07:06,890 --> 01:07:08,220 els graus. 1504 01:07:08,220 --> 01:07:11,920 Això està en contrast amb un procés molt més tediós com aquest. 1505 01:07:11,920 --> 01:07:15,850 Grau 1 surar, surar grade2, i així successivament. 1506 01:07:15,850 --> 01:07:20,010 Així que una matriu que ens permet posar en pràctica aquesta idea, però molt menys desordenadament, en 1507 01:07:20,010 --> 01:07:24,630 de manera que podem escriure una línia de codi en lloc de, per exemple, 16 per a una 16 1508 01:07:24,630 --> 01:07:25,740 setmana del semestre. 1509 01:07:25,740 --> 01:07:29,950 Així que jo no volia que codificar 2 perquè si penses en aquest moment 1510 01:07:29,950 --> 01:07:34,160 lògicament - Suposo que l'any que ve CS50 canvis a 3 qüestionaris en el seu lloc. 1511 01:07:34,160 --> 01:07:35,510 I jo tenia el número 2 aquí. 1512 01:07:35,510 --> 01:07:36,600 Jo tenia el número 2 aquí. 1513 01:07:36,600 --> 01:07:37,580 Jo tenia el número 2 aquí. 1514 01:07:37,580 --> 01:07:38,560 Jo tenia el número 2 aquí. 1515 01:07:38,560 --> 01:07:43,180 Es torna molt tediós i molt fàcil ficar la pota i canviar accidentalment 1516 01:07:43,180 --> 01:07:47,690 un valor a 3 i es perdi algun altre valor de 2. 1517 01:07:47,690 --> 01:07:52,460 Així que vaig a aquest lloc abstracte de distància i utilitzar aquesta constant que, com el seu 1518 01:07:52,460 --> 01:07:54,120 nom indica, mai canvia. 1519 01:07:54,120 --> 01:07:57,710 I ara, no importa si tenim diferents concursos d'aquest any o el següent, 1520 01:07:57,710 --> 01:08:01,210 només cal canviar en un sol lloc, aquí dalt a la part superior. 1521 01:08:01,210 --> 01:08:02,720 >> Així que això és tot el constant és. 1522 01:08:02,720 --> 01:08:08,680 Mentrestant, la característica nova és que conceptual d'una matriu. 1523 01:08:08,680 --> 01:08:14,660 Així que els claudàtors donar-me aquesta flota i em deixa moltes col · lectivament 1524 01:08:14,660 --> 01:08:16,630 en diuen els graus aquí. 1525 01:08:16,630 --> 01:08:17,990 Així que ara anem a veure el que faré. 1526 01:08:17,990 --> 01:08:20,359 Aquí, a la línia 24 és l'inici d'un bucle. 1527 01:08:20,359 --> 01:08:22,260 Això és realment res especial. 1528 01:08:22,260 --> 01:08:25,060 És només mitjançant proves en lloc d'un nombre codificat. 1529 01:08:25,060 --> 01:08:27,790 Però no hi ha res intel · lectualment diferent allà la setmana passada. 1530 01:08:27,790 --> 01:08:29,040 Això és només printf. 1531 01:08:29,040 --> 01:08:35,490 Així printf ("nombre qüestionari% d de% d") perquè només vull imprimir dóna'm concurs 1532 01:08:35,490 --> 01:08:38,050 número u dels dos i després dos de dos. 1533 01:08:38,050 --> 01:08:39,850 Així que això és purament una cosa estètica. 1534 01:08:39,850 --> 01:08:42,500 Però la part més interessant ara està en la línia 27. 1535 01:08:42,500 --> 01:08:48,310 Per tal d'omplir en un dels dos marcadors de posició amb un punt flotant 1536 01:08:48,310 --> 01:08:51,029 valor, de nou utilitzar claudàtors. 1537 01:08:51,029 --> 01:08:55,620 En aquest cas, estic fent servir i perquè aquest bucle for s'ha iniciat amb i igual a 1538 01:08:55,620 --> 01:08:57,560 Quin valor, pel que sembla? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Així que en la primera iteració d'aquest bucle, és com si 1541 01:09:01,350 --> 01:09:02,689 escriure això en el codi. 1542 01:09:02,689 --> 01:09:05,580 Però en la segona iteració d'aquest bucle, és com si 1543 01:09:05,580 --> 01:09:07,750 escriure això en el meu codi. 1544 01:09:07,750 --> 01:09:10,750 Però el fet que jo estic fent servir una variable és perfecte perquè, com el seu nom 1545 01:09:10,750 --> 01:09:14,300 suggereix, està variant el seu valor en cada iteració. 1546 01:09:14,300 --> 01:09:17,370 Així que m'estic omplint aquest conjunt un lloc al mateix temps. 1547 01:09:17,370 --> 01:09:18,910 Què fa aquest acord sembla? 1548 01:09:18,910 --> 01:09:21,430 Bé, la raó per la qual va arribar a aquesta super simple rectangle a la pantalla aquí 1549 01:09:21,430 --> 01:09:23,350 abans era per això. 1550 01:09:23,350 --> 01:09:27,279 Una matriu és simplement un tros de memòria seguit d'un altre tros de la memòria, 1551 01:09:27,279 --> 01:09:30,109 seguit per un altre bloc de memòria, i així successivament. 1552 01:09:30,109 --> 01:09:35,260 Així que si el meu matriu és de mida 2, en aquest cas aquí, l'únic que estaria fent per 1553 01:09:35,260 --> 01:09:37,590 escrivint en les puntuacions de les meves preguntes i respostes, com aquí. 1554 01:09:37,590 --> 01:09:39,430 Tinc 100 en aquest cas. 1555 01:09:39,430 --> 01:09:42,020 I llavors em vaig posar un 99 en aquest cas. 1556 01:09:42,020 --> 01:09:46,040 Llavors, aquesta memòria no podria fins i tot ser utilitzat perquè només he demanat al 1557 01:09:46,040 --> 01:09:48,689 equip per a una matriu de mida 2. 1558 01:09:48,689 --> 01:09:50,180 Les places estan encara allà. 1559 01:09:50,180 --> 01:09:50,340 ¿És cert? 1560 01:09:50,340 --> 01:09:52,500 Encara disposa de dues gigabytes de RAM, encara que només 1561 01:09:52,500 --> 01:09:53,979 demanar dos flotadors. 1562 01:09:53,979 --> 01:09:58,710 Així que la idea darrere de les matrius és que l'ordinador només pren un tros de memòria 1563 01:09:58,710 --> 01:10:03,230 i després reparteix trossos més petits d'esquena a l'esquena amb esquena. 1564 01:10:03,230 --> 01:10:04,740 I això és tot un arranjament és. 1565 01:10:04,740 --> 01:10:09,080 És un tros continu de memòria, dins dels quals vostè pot posar les coses. 1566 01:10:09,080 --> 01:10:12,400 >> Ara bé, això passa a continuació, només fer una mica d'aritmètica avorrit. 1567 01:10:12,400 --> 01:10:16,170 Si em desplaço fins aquí, aquí és on em iterar sobre la matriu. 1568 01:10:16,170 --> 01:10:19,410 Vinc amb la suma de tots els valors de la matriu. 1569 01:10:19,410 --> 01:10:22,390 I aleshores utilitzar la funció round aquí per fer realitat el 1570 01:10:22,390 --> 01:10:23,940 suma dividida per concursos. 1571 01:10:23,940 --> 01:10:27,450 Però permetin-me saludar la meva mà que com una mena d'aritmètica suficient per ara. 1572 01:10:27,450 --> 01:10:30,010 Però tot el que està fent per mi en última instància està calculant una mitjana. 1573 01:10:30,010 --> 01:10:33,640 Així que prova primer més segon qüestionari, dividit per 2 i després imprimir 1574 01:10:33,640 --> 01:10:34,700 cap a fora com un int. 1575 01:10:34,700 --> 01:10:39,030 >> Però ara anem a la transició a un exemple diferent anomenat cadena1, 1576 01:10:39,030 --> 01:10:42,370 que pinta un quadre similar però utilitzant cordes. 1577 01:10:42,370 --> 01:10:45,550 Deixin-me seguir endavant i simplificar això per un moment. 1578 01:10:45,550 --> 01:10:48,340 I perdona la sagnia per ara. 1579 01:10:48,340 --> 01:10:52,280 Observeu en la línia 19 d'aquest exemple, tinc una cadena de l'usuari. 1580 01:10:52,280 --> 01:10:55,780 Però noti el que estic fent en la línies 22 en endavant. 1581 01:10:55,780 --> 01:11:00,260 En realitat estic iterar des i fins - i aquest és un nou truc - 1582 01:11:00,260 --> 01:11:02,730 strlen, cadena de longitud. 1583 01:11:02,730 --> 01:11:07,010 Aquesta és una funció que ve amb C que si se li passa una cadena, que compta 1584 01:11:07,010 --> 01:11:08,950 que el nombre de caràcters que hi ha en aquesta cadena. 1585 01:11:08,950 --> 01:11:09,440 Això és tot. 1586 01:11:09,440 --> 01:11:12,520 El fet que sigui en lloc de strlen longitud de la cadena és només perquè és 1587 01:11:12,520 --> 01:11:13,040 més succinta. 1588 01:11:13,040 --> 01:11:17,100 Fa 30 anys, la gent li agrada escriure coses tan succintament possible. 1589 01:11:17,100 --> 01:11:19,080 Per això hem mantingut aquesta convenció aquí. 1590 01:11:19,080 --> 01:11:21,730 i + + només significa incrementar ia cada iteració. 1591 01:11:21,730 --> 01:11:24,310 I ara notin això, que és molt interessant. 1592 01:11:24,310 --> 01:11:28,730 Així, en la línia 24, dic ordinador, deme un personatge, vuit 1593 01:11:28,730 --> 01:11:30,770 bits, i en diuen c. 1594 01:11:30,770 --> 01:11:35,370 Però què és aquesta en el costat dret dient? 1595 01:11:35,370 --> 01:11:38,150 En Anglès, què representa? 1596 01:11:38,150 --> 01:11:40,070 [Inaudible] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. Malan: Exactament. 1598 01:11:40,490 --> 01:11:42,390 Dóna'm el primer caràcter de la matriu. 1599 01:11:42,390 --> 01:11:45,400 O més en general, em donen el caràcter i-èsim de la matriu. 1600 01:11:45,400 --> 01:11:48,230 I adonar-se que és important ara que com els informàtics, en realitat estem 1601 01:11:48,230 --> 01:11:49,330 comptant des de 0. 1602 01:11:49,330 --> 01:11:51,290 No té discreció per començar a fer-ho. 1603 01:11:51,290 --> 01:11:54,580 Ara vostè ha de comportar-se d'acord amb les expectatives de l'equip i 1604 01:11:54,580 --> 01:11:58,010 comptar a partir de zero, perquè [0] serà el primer 1605 01:11:58,010 --> 01:11:59,670 caràcter en una cadena. 1606 01:11:59,670 --> 01:12:01,320 [1] serà la segona. 1607 01:12:01,320 --> 01:12:03,610 [2] serà el tercer, i així successivament. 1608 01:12:03,610 --> 01:12:08,840 Així que aquest programa, si ho compili - és a dir, de nou, cadena1. 1609 01:12:08,840 --> 01:12:11,040 >> Així que cadena1. 1610 01:12:11,040 --> 01:12:16,730 I ara em trobo cadena1 al meu finestra de terminal. 1611 01:12:16,730 --> 01:12:19,180 S'espera per a l'entrada, així que vaig a escriure, per exemple, David. 1612 01:12:19,180 --> 01:12:20,080 Retorn. 1613 01:12:20,080 --> 01:12:23,350 I ara s'imprimeix DAVID tot en línies diferents, perquè 1614 01:12:23,350 --> 01:12:24,430 adonar-se del que estic fent. 1615 01:12:24,430 --> 01:12:27,510 Estic imprimint un caràcter alhora. 1616 01:12:27,510 --> 01:12:29,100 Ara no entrarem en detalls avui sobre aquest tema. 1617 01:12:29,100 --> 01:12:31,610 Però he eliminat fa un moment aquest xec aquí. 1618 01:12:31,610 --> 01:12:36,310 Resulta que si l'usuari s'està portant malament, contradictori, o simplement 1619 01:12:36,310 --> 01:12:41,780 confús, en realitat es pot deixar de donar una sèrie de certa extensió. 1620 01:12:41,780 --> 01:12:43,640 Si es prem la tecla equivocada al teclat, pot donar 1621 01:12:43,640 --> 01:12:44,390 cap cadena en absolut. 1622 01:12:44,390 --> 01:12:47,790 O si vostè és maliciós, pot intentar per enganxar al patrimoni d'un gigabyte d'un 1623 01:12:47,790 --> 01:12:49,380 assaig per omplir aquesta cadena. 1624 01:12:49,380 --> 01:12:52,060 I si l'equip es queda sense memòria, resulta que anem 1625 01:12:52,060 --> 01:12:54,310 per tornar aquest valor especial anomenat null. 1626 01:12:54,310 --> 01:12:57,550 Així que per ara, només sé que hi ha aquest valor especial anomenat nul · la que 1627 01:12:57,550 --> 01:13:01,000 ens permetrà comprovar quan estem fora de la memòria, entre altres coses. 1628 01:13:01,000 --> 01:13:07,330 >> Però si obro ara cadena2, noti una diferència aquí. 1629 01:13:07,330 --> 01:13:09,760 Tingueu en compte una diferència aquí amb cadena2. 1630 01:13:09,760 --> 01:13:13,260 Amb cadena2, aquest bucle for és una mica diferent. 1631 01:13:13,260 --> 01:13:16,350 Deixa esborrar els nuls perquè puguem parlar d'aquells en un altre moment. 1632 01:13:16,350 --> 01:13:18,460 Però, què hi ha de diferent en el bucle for aquesta vegada? 1633 01:13:21,580 --> 01:13:23,160 I puc tornar a l'exemple anterior. 1634 01:13:23,160 --> 01:13:24,800 Així que aquesta és la versió dos. 1635 01:13:24,800 --> 01:13:27,020 Aquesta és la versió un. 1636 01:13:27,020 --> 01:13:31,935 Un, dos, un dos. 1637 01:13:35,030 --> 01:13:38,240 Així que l'anomenada strlen és on? 1638 01:13:38,240 --> 01:13:40,420 És a la primera part del bucle for. 1639 01:13:40,420 --> 01:13:43,060 Alguna idea de per què estic fent això? 1640 01:13:43,060 --> 01:13:43,690 Si. 1641 01:13:43,690 --> 01:13:46,010 [Inaudible] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. Malan: Així que no cridi a la funció cada vegada. 1643 01:13:47,630 --> 01:13:48,040 Exactament. 1644 01:13:48,040 --> 01:13:50,350 Recordeu que en els bucles for que són súper senzill una vegada que una espècie de 1645 01:13:50,350 --> 01:13:52,180 entendre que aquesta és la inicialització, la 1646 01:13:52,180 --> 01:13:53,330 condició, i l'actualització. 1647 01:13:53,330 --> 01:13:55,430 El problema és que la condició ocorre en cada 1648 01:13:55,430 --> 01:13:56,600 iteració del bucle. 1649 01:13:56,600 --> 01:13:59,930 I així, en aquest exemple aquí, què té de dolent el fet de 1650 01:13:59,930 --> 01:14:03,500 que aquesta és la meva condició? 1651 01:14:03,500 --> 01:14:05,920 Estàs cridant strlen una i altra vegada i una altra. 1652 01:14:05,920 --> 01:14:08,990 Però una vegada que has escrit en David, la longitud de la cadena és de cinc. 1653 01:14:08,990 --> 01:14:11,560 I no canviarà en cada iteració del bucle perquè el 1654 01:14:11,560 --> 01:14:15,560 cadena és encara D-A-V-I-D. Així que aquesta és una pista del que es convertirà en un 1655 01:14:15,560 --> 01:14:19,650 idea cada vegada més important que es coneix com una decisió de disseny, on - simplement no 1656 01:14:19,650 --> 01:14:21,640 fer que l'ordinador faci la feina innecessari. 1657 01:14:21,640 --> 01:14:25,630 >> Però així com una vista prèvia de pset 2, conjunt de processadors 2 a l'edició estàndard és 1658 01:14:25,630 --> 01:14:28,850 et desafiar aplicar en la pràctica un cert nombre de xifres, alguns 1659 01:14:28,850 --> 01:14:32,650 nombre d'algorismes de xifrat, perquè pugui xifrar i desxifrar 1660 01:14:32,650 --> 01:14:35,530 missatges secrets, molt semblant al Ralphie hi ha un descodificat. 1661 01:14:35,530 --> 01:14:38,720 En l'edició pirata de pset 2, anirem una mica més lluny. 1662 01:14:38,720 --> 01:14:42,010 Ens anem a lliurar un arxiu d'un sistema informàtic actual que conté un 1663 01:14:42,010 --> 01:14:45,690 gran quantitat de noms d'usuari i contrasenyes xifrades reals, i el desafiament 1664 01:14:45,690 --> 01:14:49,110 per a l'edició pirata serà de desxifrar les contrasenyes i la figura 1665 01:14:49,110 --> 01:14:53,060 el criptografia o què secret es va utilitzar per realment 1666 01:14:53,060 --> 01:14:55,080 generar les contrasenyes. 1667 01:14:55,080 --> 01:14:58,360 I farem això utilitzant una nova característica de C que vaig a donar 1668 01:14:58,360 --> 01:15:02,200 només una demo de, conegut com arguments de línia de comandes. 1669 01:15:02,200 --> 01:15:05,930 >> Així resulta que, com alguns de vostès poden haver vist en la secció o en llibres de text, 1670 01:15:05,930 --> 01:15:09,850 principal no ha de sempre ser nul entre parèntesi. 1671 01:15:09,850 --> 01:15:14,060 Resulta que la principal també es pot escriure així, amb dos arguments, 1672 01:15:14,060 --> 01:15:19,690 argc i argv, on argc és el nombre de paraules que s'escriu després 1673 01:15:19,690 --> 01:15:21,940 el nom del programa en la línia d'ordres. 1674 01:15:21,940 --> 01:15:24,550 I argv són les paraules reals. 1675 01:15:24,550 --> 01:15:29,470 I com els claudàtors indiquen allà, argv és aparentment una matriu. 1676 01:15:29,470 --> 01:15:33,720 Serà una cadena després d'una sèrie després d'una cadena en la memòria. 1677 01:15:33,720 --> 01:15:36,170 Llavors, què serem capaços de fer, a partir de conjunt de processadors 2, es 1678 01:15:36,170 --> 01:15:37,310 alguna cosa com això. 1679 01:15:37,310 --> 01:15:42,450 Si faig argv1, que és un exemple tornarem a dilluns, i executar 1680 01:15:42,450 --> 01:15:45,180 ella, notar que no sembla fer res. 1681 01:15:45,180 --> 01:15:47,050 Simplement imprimeix el seu propi nom. 1682 01:15:47,050 --> 01:15:53,220 Però si dic adéu classe, observi que aquest programa aparentment es repeteix 1683 01:15:53,220 --> 01:15:57,030 sobre cadascuna de les paraules que s'escriuen en l'indicador. 1684 01:15:57,030 --> 01:16:02,050 I els mitjans pels quals puguin accedir a les paraules que l'usuari té 1685 01:16:02,050 --> 01:16:06,780 escriu en l'indicador és canviant principal, a partir d'aquest cap de setmana, a partir de int 1686 01:16:06,780 --> 01:16:10,710 main (void) per int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 I així naixerà arguments de línia de comandes. 1688 01:16:13,700 --> 01:16:17,210 I un cop que estiguis molt sofisticat en això, vostè serà capaç d'escriure 1689 01:16:17,210 --> 01:16:21,370 programes realment al · lucinants, com aquest d'aquí, que va per sobre i més enllà 1690 01:16:21,370 --> 01:16:25,520 algunes de les funcions que hem fet fins ara, però tot molt potent. 1691 01:16:25,520 --> 01:16:27,330 >> Així que sortirem d'això amb això a la pantalla. 1692 01:16:27,330 --> 01:16:29,160 I ens veiem el dilluns.