1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> ALTAVEU 1: Hola a tots. 3 00:00:05,680 --> 00:00:07,530 Anem a començar. 4 00:00:07,530 --> 00:00:09,330 Crec que la gent encara va per ser filtrat a. 5 00:00:09,330 --> 00:00:12,840 No obstant això, en nom del temps, pel que podem aconseguir nois d'aquí a temps, 6 00:00:12,840 --> 00:00:14,110 anem a començar. 7 00:00:14,110 --> 00:00:18,780 Així que benvinguts a la CS50 Qüestionari 0 opinió. 8 00:00:18,780 --> 00:00:23,020 Per a aquells de vostès que no han realitzat però, vostè té una pregunta per al Dimecres. 9 00:00:23,020 --> 00:00:25,700 Woo-Hoo. 10 00:00:25,700 --> 00:00:29,780 >> Si no ha començat a estudiar encara o No s'han adonat que això existeix, però, 11 00:00:29,780 --> 00:00:34,070 concursos anteriors i tota la informació sobre el seu concurs estan en cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Hi ha una mica de coses molt bones allà, concursos passats des de l'últim 10 13 00:00:38,090 --> 00:00:43,760 anys, així com informació sobre aquesta prova i temes 14 00:00:43,760 --> 00:00:46,250 que seran coberts. 15 00:00:46,250 --> 00:00:48,980 Així que anem a començar. 16 00:00:48,980 --> 00:00:54,240 >> Així que vostès poden recordar, la primera dia de classe David tenia aquestes llums a. 17 00:00:54,240 --> 00:00:59,650 Així que, essencialment, tot el que passa sota el capó d'un ordinador és 18 00:00:59,650 --> 00:01:00,860 fet en binari. 19 00:01:00,860 --> 00:01:04,080 Binari significa el que sona com, 0 i 1s. 20 00:01:04,080 --> 00:01:09,290 Té dos valors que pot ser representada. 21 00:01:09,290 --> 00:01:14,675 >> Així com en el primer dia de la secció quan David va encendre una llum 22 00:01:14,675 --> 00:01:21,990 bombeta per representar a, o 1, el nostre ordinador entén binari com 0 i de 23 00:01:21,990 --> 00:01:24,110 1 de, encès o apagat. 24 00:01:24,110 --> 00:01:25,360 Fonaments de la binària. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Cada lloc està representat en base dues. 27 00:01:32,470 --> 00:01:36,260 Així s'agrega 2 a 0 al 1 a la 2 tot el camí cap amunt. 28 00:01:36,260 --> 00:01:41,970 >> Per calcular el que el seu binari és decimal, només has de seguir aquesta equació 29 00:01:41,970 --> 00:01:42,840 tipus de cosa. 30 00:01:42,840 --> 00:01:49,510 Si vostè té un 1 en qualsevol d'aquests llocs, el multipliques per qualsevol 31 00:01:49,510 --> 00:01:53,820 basar és en, afegir cap amunt, i a obtenir el decimal. 32 00:01:53,820 --> 00:01:57,930 Així que aquesta és la forma d'explicar a 5 en binari. 33 00:01:57,930 --> 00:02:01,400 Igual que el que estàvem fent en el última diapositiva, així és com ho faria 34 00:02:01,400 --> 00:02:02,650 representar 1 a 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> De la mateixa manera, igual que vostè pot afegir i restar en decimal o en base 10, o 37 00:02:09,660 --> 00:02:13,040 Realment qualsevol base, sobre pot afegir i resta en binari. 38 00:02:13,040 --> 00:02:18,400 Exactament el que es pot esperar quan es afegir els dos a dalt, si és igual a major 39 00:02:18,400 --> 00:02:24,220 que 1, vostè porta un 1, el converteixen en un 0, i fer l'addició d'aquesta manera, només 40 00:02:24,220 --> 00:02:29,910 com era d'esperar amb regularitat decimal o qualsevol altra base. 41 00:02:29,910 --> 00:02:30,970 Refredar. 42 00:02:30,970 --> 00:02:35,140 >> Així que com he dit abans, tot el que que passa sota el capó del nostre ordinador 43 00:02:35,140 --> 00:02:37,560 es fa en de 0 i 1 de, o binari. 44 00:02:37,560 --> 00:02:43,470 Llavors, ¿com ens expressem, per exemple, lletres o números o caràcters? 45 00:02:43,470 --> 00:02:45,560 I la resposta a això és ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII és un mapeig entre caràcters que normalment veuríem al 47 00:02:49,380 --> 00:02:53,360 Idioma Anglès com a doctors, B, De C, de subratllat, guions i 48 00:02:53,360 --> 00:02:54,910 res d'això. 49 00:02:54,910 --> 00:02:57,260 I és que els mapes d'un valor ASCII. 50 00:02:57,260 --> 00:03:03,080 Un valor ASCII és només un número que pot ser entès per l'ordinador. 51 00:03:03,080 --> 00:03:07,430 I igual que pot fer la suma i resta amb nombres, es pot fer 52 00:03:07,430 --> 00:03:10,890 amb valors ASCII. 53 00:03:10,890 --> 00:03:14,050 >> Així que en aquest exemple, el que serà aquesta imprimir? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Sí, de manera que només un espai espai espai B C D. A on va ser el meu ratolí? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Noteu que podeu definir un int a 65. 58 00:03:43,380 --> 00:03:47,080 I a imprimir que utilitzant cent C, que interpretarà això com un 59 00:03:47,080 --> 00:03:49,330 caràcter i s'imprimirà A. 60 00:03:49,330 --> 00:03:52,800 >> De la mateixa manera, es pot declarar com un char. 61 00:03:52,800 --> 00:03:56,860 I quan ho imprimeixi utilitzant cent C, que interpretarà això com 62 00:03:56,860 --> 00:04:05,240 cent D. I igual que es pot afegir un nombre, vostè pot afegir caràcters són 63 00:04:05,240 --> 00:04:06,878 Valors ASCII, en aquest cas. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> Així que una mica de punter per a tothom. 66 00:04:16,130 --> 00:04:19,610 5, com una cadena, no en realitat equivalen a 5. 67 00:04:19,610 --> 00:04:26,610 Així que com podem convertir el cadena 5 al sencer més 5? 68 00:04:26,610 --> 00:04:28,930 Alguna idea? 69 00:04:28,930 --> 00:04:31,630 Sí. 70 00:04:31,630 --> 00:04:36,720 >> Així que si tenim 5 com a una cadena, podem restar 0. 71 00:04:36,720 --> 00:04:37,820 I això ens donarà 5. 72 00:04:37,820 --> 00:04:41,670 I de la mateixa manera, si tenim 5 com a sencer, afegir que a la cadena de 0. 73 00:04:41,670 --> 00:04:43,112 I això ens dóna la cadena 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Refredar. 76 00:04:48,350 --> 00:04:52,940 >> Ara, recordar de nou a donar una conferència en una parlem d'algorismes. 77 00:04:52,940 --> 00:04:57,260 Llavors, com és el que realment volem un ordinador per fer coses interessants? 78 00:04:57,260 --> 00:05:00,460 Ja saps, només sumar i restar nombres i coses fora d'impressió no és 79 00:05:00,460 --> 00:05:01,730 que emocionant. 80 00:05:01,730 --> 00:05:04,620 En general, volem que el nostre ordinador per realitzar algun tipus d'algorisme. 81 00:05:04,620 --> 00:05:07,820 Cosa una mica més complex que només l'aritmètica simple. 82 00:05:07,820 --> 00:05:11,930 >> Un algorisme és només un pas a pas conjunt d'instruccions de com realitzar 83 00:05:11,930 --> 00:05:14,640 una certa task-- 84 00:05:14,640 --> 00:05:15,660 igual que una recepta. 85 00:05:15,660 --> 00:05:19,990 Potser recordi el primer dia de classe on David havia explicar-nos una habitació 86 00:05:19,990 --> 00:05:22,550 de les persones i quantes persones estaven a l'habitació. 87 00:05:22,550 --> 00:05:24,480 Vostè podria estar acostumat a recompte un per un. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 En aquest cas, un algorisme de temps lineal. 90 00:05:28,010 --> 00:05:31,710 >> Però David va introduir un algoritme per que expliquis les persones a l'habitació 91 00:05:31,710 --> 00:05:37,340 on tothom es posa dret, vostè diu que el seu nombre a una altra persona, afegir que 92 00:05:37,340 --> 00:05:39,200 nombre, i una persona se senti. 93 00:05:39,200 --> 00:05:40,410 I repeteixes això. 94 00:05:40,410 --> 00:05:42,910 Això és un tipus d'algorisme. 95 00:05:42,910 --> 00:05:47,520 Podem analitzar una manera eficient algorisme es basa en que és temps d'execució. 96 00:05:47,520 --> 00:05:49,680 Però anem a parlar una mica més sobre això més endavant. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> Així que tots els algoritmes també pot escriure en pseudocodi. 99 00:05:57,090 --> 00:06:01,120 Pseudocodi és només un anglès com sintaxi utilitza per representar 100 00:06:01,120 --> 00:06:02,420 un llenguatge de programació. 101 00:06:02,420 --> 00:06:06,070 Per exemple, si volíem demanar un usuari d'endevinar el meu número favorit, que 102 00:06:06,070 --> 00:06:08,390 podria tenir pseudocodi com a tal. 103 00:06:08,390 --> 00:06:09,850 >> Obtenir un usuaris endevinin. 104 00:06:09,850 --> 00:06:13,570 Si la suposició és correcta, digui'ls si és correcta, en cas contrari els dic 105 00:06:13,570 --> 00:06:15,560 no són correctes. 106 00:06:15,560 --> 00:06:22,530 I pseudocodi és una manera de fàcil que representa una idea o un algoritme. 107 00:06:22,530 --> 00:06:26,910 Així que ara el que es vol realment escriure això en el llenguatge que l'ordinador 108 00:06:26,910 --> 00:06:27,980 podria entendre. 109 00:06:27,980 --> 00:06:35,660 Així que podem escriure el nostre pseudocodi i interpretar que en el codi font. 110 00:06:35,660 --> 00:06:41,320 >> Fins ara, el codi font ha de complir a una certa sintaxi 111 00:06:41,320 --> 00:06:42,490 un llenguatge de programació. 112 00:06:42,490 --> 00:06:45,430 I fins ara, al CS50, tenim estat usant majoritàriament c. 113 00:06:45,430 --> 00:06:48,320 Així que això podria ser el codi font de c. 114 00:06:48,320 --> 00:06:51,440 Més tard, en el curs, s'arriba la nit en contacte amb altres programes 115 00:06:51,440 --> 00:06:52,480 llenguatges com PHP. 116 00:06:52,480 --> 00:06:57,540 O si vostè fins i tot prendre altres classes, que podria fer Java, Python, o fins i tot OCML. 117 00:06:57,540 --> 00:07:01,570 Però en el nostre llenguatge de programació C, és a dir com podríem escriure el codi font de 118 00:07:01,570 --> 00:07:04,760 l'algorisme de pseudocodi que Que acabo de descriure anteriorment. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> Llavors, ¿com l'equip en realitat entendre això? 121 00:07:11,430 --> 00:07:14,490 Com he dit abans, en realitat només es entén zeros i uns. 122 00:07:14,490 --> 00:07:17,880 Llavors, ¿com arribar de la font codi per a alguna cosa que pot ser 123 00:07:17,880 --> 00:07:18,960 entès? 124 00:07:18,960 --> 00:07:22,920 Bé, tenim alguna cosa anomenat un compilador. 125 00:07:22,920 --> 00:07:28,450 >> Si vostè recorda de nou a la major part de la seva conjunts de processadors, que tenia algun tipus de programa 126 00:07:28,450 --> 00:07:30,370 escrit en un arxiu de punts c. 127 00:07:30,370 --> 00:07:32,550 I llavors hauria d'escriure make. 128 00:07:32,550 --> 00:07:35,970 Llavors, què està fent fer? 129 00:07:35,970 --> 00:07:39,970 >> Podeu escriure make per compilar el programa perquè algú-- 130 00:07:39,970 --> 00:07:42,730 qui va escriure el seu conjunt p; probablement David-- 131 00:07:42,730 --> 00:07:44,190 creat un arxiu make. 132 00:07:44,190 --> 00:07:51,320 I que diu saber per executar el seu compilador, anomenat so metàl · lic, que la voluntat 133 00:07:51,320 --> 00:07:55,560 a continuació, compilar el codi font d'objectar codi, que és zeros i uns 134 00:07:55,560 --> 00:07:57,720 que l'ordinador entén. 135 00:07:57,720 --> 00:08:01,610 Però una mica més tard, ens dirigirem més a fons sobre els compiladors. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> Així recordar pset 0, dónde-- sí, vostè té una pregunta? 138 00:08:10,800 --> 00:08:11,620 >> AUDIÈNCIA: [inaudible]? 139 00:08:11,620 --> 00:08:12,490 >> ALTAVEU 1: Si. 140 00:08:12,490 --> 00:08:14,960 Crec que en realitat ha d'estar en línia. 141 00:08:14,960 --> 00:08:15,120 Sí. 142 00:08:15,120 --> 00:08:16,572 >> AUDIÈNCIA: És com [inaudible]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> ALTAVEU 1: No ho és. 145 00:08:20,830 --> 00:08:25,810 L'estan a cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> AUDIÈNCIA: concursos de Slash, slash 2013, slash 0 i, simplement feu clic a través de 147 00:08:32,900 --> 00:08:35,956 concursos 2013 i concurs 0, Revisi la secció de diapositives. 148 00:08:35,956 --> 00:08:40,380 >> ALTAVEU 1: Sí, així que si vostès volen tiri cap amunt i mirar el seu 149 00:08:40,380 --> 00:08:42,740 propi ordinador, això està bé també. 150 00:08:42,740 --> 00:08:43,130 Digues-ho de nou. 151 00:08:43,130 --> 00:08:44,546 >> AUDIÈNCIA: [inaudible]. 152 00:08:44,546 --> 00:08:48,780 >> ALTAVEU 1: Sí, [inaudible] és la variable dummy. 153 00:08:48,780 --> 00:08:49,644 Ah, sí? 154 00:08:49,644 --> 00:08:51,372 >> AUDIÈNCIA: [inaudible]? 155 00:08:51,372 --> 00:08:54,300 >> ALTAVEU 1: No, vagues no estan en l'examen. 156 00:08:54,300 --> 00:08:55,950 Ho sentim, la pregunta era, era vagues en l'examen. 157 00:08:55,950 --> 00:08:59,530 I no ho és. 158 00:08:59,530 --> 00:09:05,780 Així pset 0, vostès ha de tenir tota implementat alguna cosa amb zero. 159 00:09:05,780 --> 00:09:13,100 I vam aprendre una mica de programació bàsica blocs de construcció que utilitzen les ratllades. 160 00:09:13,100 --> 00:09:15,590 >> Així que donem una ullada a alguns d'aquests blocs de construcció 161 00:09:15,590 --> 00:09:18,170 que conformen un programa. 162 00:09:18,170 --> 00:09:20,570 En primer lloc és l'expressió de Boole. 163 00:09:20,570 --> 00:09:24,540 Les expressions booleanes són estimats i 0 d'o tot el que té 164 00:09:24,540 --> 00:09:25,700 dos valors possibles. 165 00:09:25,700 --> 00:09:30,320 En aquest cas, vertadera o falsa, dins o fora, i si o no. 166 00:09:30,320 --> 00:09:35,390 Un exemple d'un simple, molt simple, programa que utilitza un booleà 167 00:09:35,390 --> 00:09:39,140 expressió aquí. 168 00:09:39,140 --> 00:09:43,220 >> Així que perquè les expressions booleanes a ser útil, tenim operadors booleans. 169 00:09:43,220 --> 00:09:48,920 Aquests són els operadors que es poden utilitzar per comparar certs valors. 170 00:09:48,920 --> 00:09:52,820 Així que tenim i o no igual a, menor o igual que, més gran que o 171 00:09:52,820 --> 00:09:55,130 igual a, i menys de o major que. 172 00:09:55,130 --> 00:09:59,060 No obstant això, aquests operadors no són molt útils llevat que puguem combinar-los en 173 00:09:59,060 --> 00:10:00,320 condicions. 174 00:10:00,320 --> 00:10:04,370 >> Així que vostès podrien recordar a partir de zero i de la seva p estableix que 175 00:10:04,370 --> 00:10:05,400 tenia condicions. 176 00:10:05,400 --> 00:10:09,710 Ells són, en essència, com forquilles en la lògica del seu programa que 177 00:10:09,710 --> 00:10:12,670 executa depenent de si es compleix una condició. 178 00:10:12,670 --> 00:10:18,150 Així que una de les condicions que teníem utilitzat moltes vegades en aquest curs és el 179 00:10:18,150 --> 00:10:21,470 if, else, si, i les condicions la resta. 180 00:10:21,470 --> 00:10:24,060 >> Heus aquí un exemple de com vostè pot utilitzar això. 181 00:10:24,060 --> 00:10:28,430 Algú sap la diferència entre simplement usant les sentències if tots 182 00:10:28,430 --> 00:10:32,530 el camí cap avall versos if, else, si, i més combinat? 183 00:10:32,530 --> 00:10:33,013 Sí? 184 00:10:33,013 --> 00:10:34,263 >> AUDIÈNCIA: [inaudible]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> ALTAVEU 1: Exactament. 187 00:10:42,160 --> 00:10:50,210 Així que si tingués si tot el camí fins a aquest manera, encara que aquesta condició torna 188 00:10:50,210 --> 00:10:52,800 veritable, encara seguirà provar els dos següents. 189 00:10:52,800 --> 00:11:00,120 Atès que, amb una cosa-si, una cosa declaració, si el que retorna true, 190 00:11:00,120 --> 00:11:02,640 els altres no es posen a prova. 191 00:11:02,640 --> 00:11:05,955 Una pregunta sobre això? 192 00:11:05,955 --> 00:11:06,890 Refredar. 193 00:11:06,890 --> 00:11:12,240 >> Així que utilitza una persona si-d'una persona declaració si vostè sap que només pot 194 00:11:12,240 --> 00:11:14,470 ser un d'aquests casos. 195 00:11:14,470 --> 00:11:21,550 Així que sabem que si x és menor que 0, és definitivament no serà 196 00:11:21,550 --> 00:11:22,890 més gran que 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> A continuació, un altre bloc de construcció que hem après són bucles. 199 00:11:31,480 --> 00:11:33,310 Tenim tres tipus de bucles. 200 00:11:33,310 --> 00:11:35,830 Per bucles, els bucles while, i fer bucles while. 201 00:11:35,830 --> 00:11:38,730 I, en general, quan et sentis a escriure alguna cosa, vostè ha de decidir 202 00:11:38,730 --> 00:11:40,060 quin dels tres que voleu utilitzar. 203 00:11:40,060 --> 00:11:41,900 Així que com decidir quina d'elles? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Generalment fem servir un bucle for si sabem quantes vegades volem repetir 206 00:11:48,790 --> 00:11:53,650 a través d'alguna cosa o quantes vegades volem realitzar una tasca. 207 00:11:53,650 --> 00:11:58,830 Utilitzem bucles while si necessitem alguna condició de ser fidels a seguir corrent. 208 00:11:58,830 --> 00:12:03,730 I utilitzem fem bé és molt similar a la temps, però volem que el nostre codi s'executi en 209 00:12:03,730 --> 00:12:04,880 almenys una vegada. 210 00:12:04,880 --> 00:12:09,410 >> Així que fer, mentre que, el que està en el fer la voluntat sempre córrer almenys una vegada. 211 00:12:09,410 --> 00:12:13,120 Atès que, amb el temps, es poden no funcionar en absolut si la 212 00:12:13,120 --> 00:12:15,490 condició no es compleix. 213 00:12:15,490 --> 00:12:16,740 Qualsevol pregunta amb això? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> Així l'estructura d'un bucle for. 216 00:12:22,860 --> 00:12:23,620 Tot el que vostès han vist això. 217 00:12:23,620 --> 00:12:25,320 Vostè s'inicialitzi. 218 00:12:25,320 --> 00:12:26,600 Vostè té algun tipus de condició. 219 00:12:26,600 --> 00:12:32,340 Així, per exemple, podríem inicialitzar com per a i és igual a 0. 220 00:12:32,340 --> 00:12:34,040 i és menor de 10. 221 00:12:34,040 --> 00:12:35,442 I i ++. 222 00:12:35,442 --> 00:12:39,010 Molt senzill que hem fet. 223 00:12:39,010 --> 00:12:42,210 >> Per a un bucle while, de manera similar, vostè té tenir algun tipus d'inicialització, 224 00:12:42,210 --> 00:12:44,980 algun tipus de condició, i algun tipus d'actualització. 225 00:12:44,980 --> 00:12:51,990 Així que podem implementar el nostre bucle for també com un bucle durant l'ús d'aquest. 226 00:12:51,990 --> 00:12:56,000 I de manera similar amb un do while, podríem tenir una mica d'inicialització, 227 00:12:56,000 --> 00:12:58,640 executar alguna cosa, actualitzar-lo, i a continuació, comproveu l'estat. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> Així que ara les funcions. 230 00:13:05,140 --> 00:13:06,460 Vam posar tot junts. 231 00:13:06,460 --> 00:13:10,140 Podríem voler escriure alguna cosa tipus de funció. 232 00:13:10,140 --> 00:13:12,790 Funció comú que et poden han vist ja és principal. 233 00:13:12,790 --> 00:13:13,770 Principal és una funció. 234 00:13:13,770 --> 00:13:16,160 Té un tipus de retorn, int. 235 00:13:16,160 --> 00:13:18,470 Té un nom de funció, principal. 236 00:13:18,470 --> 00:13:20,810 I té arguments, argc i argv. 237 00:13:20,810 --> 00:13:24,040 Així principal és només una funció. 238 00:13:24,040 --> 00:13:27,230 >> Altres funcions que hi pugui haver utilitzat, printf printf-- és un function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, ToUpper. 240 00:13:29,330 --> 00:13:32,010 Però aquests resulten haver estat implementat per a nosaltres per 241 00:13:32,010 --> 00:13:33,270 algun tipus de biblioteca. 242 00:13:33,270 --> 00:13:37,400 Si vostès recordin incloent aquesta biblioteca CS50.h o la 243 00:13:37,400 --> 00:13:38,510 I / S estàndard biblioteca. 244 00:13:38,510 --> 00:13:39,200 Sí, la pregunta? 245 00:13:39,200 --> 00:13:41,610 >> AUDIÈNCIA: És just principal inherent a c? 246 00:13:41,610 --> 00:13:44,740 Ho fa només una mica de [inaudible]? 247 00:13:44,740 --> 00:13:47,370 >> ALTAVEU 1: La pregunta és si principal és inherent a c. 248 00:13:47,370 --> 00:13:51,460 I sí, totes les funcions tenir una funció principal. 249 00:13:51,460 --> 00:13:55,290 És una espècie de necessari per a l'ordinador a saber per on començar 250 00:13:55,290 --> 00:13:55,993 executar el codi. 251 00:13:55,993 --> 00:13:58,108 >> AUDIÈNCIA: Així que no ho faria [inaudible]? 252 00:13:58,108 --> 00:13:59,480 >> ALTAVEU 1: No 253 00:13:59,480 --> 00:14:00,760 Alguna altra pregunta? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Refredar. 256 00:14:04,770 --> 00:14:08,050 Així com vostè pot utilitzar una funció que està escrit per a vostè, també pot 257 00:14:08,050 --> 00:14:10,380 escriure la seva pròpia funció. 258 00:14:10,380 --> 00:14:17,050 Aquesta és una funció que algú podria han escrit per calcular el volum 259 00:14:17,050 --> 00:14:18,395 d'un q, per exemple. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Hi ha un tipus de retorn aquí, en aquest cas int, el nostre nom i la nostra funció q 262 00:14:29,500 --> 00:14:31,360 llista de paràmetres. 263 00:14:31,360 --> 00:14:34,550 >> I tingui en compte que vostè ha d'escriure les dades tipus del paràmetre que desitja 264 00:14:34,550 --> 00:14:38,660 utilitzar o bé la funció no saber quin tipus de 265 00:14:38,660 --> 00:14:41,650 paràmetre he acceptarà. 266 00:14:41,650 --> 00:14:48,110 Així que, en aquest cas, volem un enter com la nostra entrada. 267 00:14:48,110 --> 00:14:50,390 Llavors per què podríem voler utilitzar funcions? 268 00:14:50,390 --> 00:14:52,800 >> En primer lloc, ideal per a l'organització. 269 00:14:52,800 --> 00:14:56,350 Ajuden a trencar el codi més organitzada trossos i fer 270 00:14:56,350 --> 00:14:57,960 més fàcil de llegir. 271 00:14:57,960 --> 00:14:59,760 Simplificació. 272 00:14:59,760 --> 00:15:01,740 Això és bo per al disseny. 273 00:15:01,740 --> 00:15:04,570 Quan vostè està llegint un fragment de codi i la funció principal és realment, 274 00:15:04,570 --> 00:15:07,750 molt llarg, podria ser més difícil de raó sobre el que està passant. 275 00:15:07,750 --> 00:15:11,710 Així que si ho desglossem en funcions, pot ser que sigui més fàcil de llegir. 276 00:15:11,710 --> 00:15:12,750 I reutilitzar-capacitat. 277 00:15:12,750 --> 00:15:16,940 Si vostè té un tros de codi que està sent trucada o executar diverses vegades, 278 00:15:16,940 --> 00:15:20,690 en lloc de tornar a escriure el codi 10 vegades en la seva funció principal, que et poden 279 00:15:20,690 --> 00:15:21,440 volen tornar a utilitzar-lo. 280 00:15:21,440 --> 00:15:25,740 I llavors cada vegada que necessita utilitzar aquest peça de codi, truqui a la funció. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> Així que ara si recordem de nou a zero, també parlem d'alguns conceptes, 283 00:15:35,380 --> 00:15:37,680 un dels quals està roscat. 284 00:15:37,680 --> 00:15:41,120 Tema és el concepte de múltiples seqüències de codi 285 00:15:41,120 --> 00:15:43,040 executar a la vegada. 286 00:15:43,040 --> 00:15:47,490 Així que pensin en el primer dia en què David tenia vostès Compti el nombre de 287 00:15:47,490 --> 00:15:48,440 persones a l'habitació. 288 00:15:48,440 --> 00:15:50,550 >> En essència, el que es va sobretot és de vostès eren 289 00:15:50,550 --> 00:15:52,370 córrer fils separats. 290 00:15:52,370 --> 00:15:55,540 I aquests fils s'uneixen per obtenir algun tipus de resposta. 291 00:15:55,540 --> 00:15:58,890 De la mateixa manera, en Scratch, quan es té múltiples sprites, que et poden 292 00:15:58,890 --> 00:16:01,070 tenir un gat i un gos. 293 00:16:01,070 --> 00:16:08,770 I estarien simultàniament la gestió dels seus propis guions. 294 00:16:08,770 --> 00:16:10,020 Aquest és un exemple de roscat. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> I l'altre concepte que va ser introduït en zero era esdeveniments. 297 00:16:18,000 --> 00:16:22,550 I quan els esdeveniments són múltiples parts el seu codi es comuniquen entre si. 298 00:16:22,550 --> 00:16:26,840 En Scratch, això va ser quan va usar el control de difusió i el Quan 299 00:16:26,840 --> 00:16:29,500 Rep blocs. 300 00:16:29,500 --> 00:16:35,170 >> I també, en problemes 4, vam una mica dels esdeveniments també. 301 00:16:35,170 --> 00:16:38,250 Vostès podrien haver utilitzat la biblioteca GEvent. 302 00:16:38,250 --> 00:16:42,450 I hi havia una funció waitForClick en què estaves esperant 303 00:16:42,450 --> 00:16:44,300 perquè l'usuari faci clic. 304 00:16:44,300 --> 00:16:47,870 I el clic, en aquest cas, seria l'esdeveniment i esperar que Click és el seu 305 00:16:47,870 --> 00:16:49,120 controlador d'esdeveniments. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> I també, mitjançant la publicació dels seus conjunts de processadors i treballant en els seus conjunts de processadors, que 308 00:16:58,630 --> 00:17:01,920 podria haver entrat en contacte amb alguns d'aquests comandaments. 309 00:17:01,920 --> 00:17:05,579 Això és el que ha escrit al seu finestra de terminal o el que sigui finestra 310 00:17:05,579 --> 00:17:12,119 que apareix en la seva edició en g, essencialment, navegar pel seu ordinador. 311 00:17:12,119 --> 00:17:19,440 >> Així, per exemple, les llistes de la LS contingut d'un directori. 312 00:17:19,440 --> 00:17:22,510 Fes directori crea una nova carpeta. 313 00:17:22,510 --> 00:17:24,819 CD, canvi de directori. 314 00:17:24,819 --> 00:17:28,400 RM, eliminar, s'elimina un arxiu o algun directori. 315 00:17:28,400 --> 00:17:31,050 I a continuació, eliminar el directori Elimina un directori. 316 00:17:31,050 --> 00:17:32,300 >> AUDIÈNCIA: [inaudible]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> ALTAVEU 1: Sí, és clar. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Ho sentim, la pregunta era si suggeriria posar aquest 321 00:17:46,040 --> 00:17:48,840 en el full de trucs. 322 00:17:48,840 --> 00:17:49,440 Podria ajudar. 323 00:17:49,440 --> 00:17:51,490 Si té espai, pot posar-se'l. 324 00:17:51,490 --> 00:17:56,170 També és a generalment prou bo de recordar, perquè quan l'utilitza 325 00:17:56,170 --> 00:17:59,060 és possible que vulgueu simplement té memoritzat. 326 00:17:59,060 --> 00:18:02,750 Això va a fer la seva vida molt més fàcil. 327 00:18:02,750 --> 00:18:04,000 He respost a la seva pregunta? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> Així que ara, parlem una mica breument sobre les biblioteques. 330 00:18:14,290 --> 00:18:18,570 Però els dos principals que hem estat utilitzant fins ara en el curs són 331 00:18:18,570 --> 00:18:20,860 I / S estàndard i CS50. 332 00:18:20,860 --> 00:18:25,410 Quin tipus de coses s'inclouen a la llibreria estàndard d'E / S? 333 00:18:25,410 --> 00:18:28,410 >> Sí, fins ara hem fet servir printf. 334 00:18:28,410 --> 00:18:31,150 En CS50, hem utilitzat getInt i GetString. 335 00:18:31,150 --> 00:18:37,200 I la cadena de tipus de dades també passa per a ser declarat en aquesta biblioteca CS50. 336 00:18:37,200 --> 00:18:40,250 Parlarem una mica més en profunditat sobre com les biblioteques funcionen i com 337 00:18:40,250 --> 00:18:41,870 interactuar amb la resta del seu codi. 338 00:18:41,870 --> 00:18:46,220 Però aquests són els dos principals que haver estat en contacte amb el que va d' 339 00:18:46,220 --> 00:18:48,430 el curs. 340 00:18:48,430 --> 00:18:50,050 >> Tipus. 341 00:18:50,050 --> 00:18:58,120 Aquests són bons per recordar el molt cada tipus està representat per o com 342 00:18:58,120 --> 00:19:02,840 molts bytes cada un de tipus requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 bytes; char, 1 byte. 344 00:19:04,990 --> 00:19:06,550 Float és de 4 bytes. 345 00:19:06,550 --> 00:19:07,782 Què és un doble? 346 00:19:07,782 --> 00:19:09,032 >> AUDIÈNCIA: [inaudible]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> ALTAVEU 1: Sí, de manera que un flotador però doblar la mida. 349 00:19:16,240 --> 00:19:17,150 Què hi ha d'un temps? 350 00:19:17,150 --> 00:19:18,400 >> AUDIÈNCIA: [inaudible]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> ALTAVEU 1: OK. 353 00:19:24,680 --> 00:19:25,410 Què és un temps? 354 00:19:25,410 --> 00:19:26,660 >> AUDIÈNCIA: [inaudible]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> ALTAVEU 1: Sí, el doble d'un int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Sí. 359 00:19:34,705 --> 00:19:36,100 >> AUDIÈNCIA: [inaudible]. 360 00:19:36,100 --> 00:19:38,030 >> ALTAVEU 1: Long [inaudible]. 361 00:19:38,030 --> 00:19:41,860 I després d'un llarg temps és el doble. 362 00:19:41,860 --> 00:19:42,814 >> AUDIÈNCIA: No, no. 363 00:19:42,814 --> 00:19:47,107 Una llarga és només un int. 364 00:19:47,107 --> 00:19:50,910 Depèn de l'arquitectura abans de la [inaudible] 365 00:19:50,910 --> 00:19:52,922 int i tenen la mateixa mida. 366 00:19:52,922 --> 00:19:54,172 [Inaudible]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> ALTAVEU 1: Així que una llarga i 1 int són els mateixos. 369 00:20:00,920 --> 00:20:02,943 I després d'un llarg temps és el doble de la int. 370 00:20:02,943 --> 00:20:03,910 Refredar. 371 00:20:03,910 --> 00:20:05,550 I llavors, ¿quin és l'últim tipus? 372 00:20:05,550 --> 00:20:06,510 >> AUDIÈNCIA: Punter. 373 00:20:06,510 --> 00:20:10,350 >> ALTAVEU 1: Sí, així que va aprendre una mica sobre els punters. 374 00:20:10,350 --> 00:20:14,015 I sense importar el que un punter és assenyalant A-- que podria ser una estrella de carbó 375 00:20:14,015 --> 00:20:15,880 o int star-- 376 00:20:15,880 --> 00:20:20,530 sempre 4 bytes per a un punter. 377 00:20:20,530 --> 00:20:21,633 Preguntes sobre això? 378 00:20:21,633 --> 00:20:22,116 Sí? 379 00:20:22,116 --> 00:20:24,531 >> AUDIÈNCIA: [inaudible]? 380 00:20:24,531 --> 00:20:29,530 >> ALTAVEU 1: Així que un llarg i un int són el mateix en aquest aparell CS50. 381 00:20:29,530 --> 00:20:32,302 >> AUDIÈNCIA: L'aparell està completament intercanviables. 382 00:20:32,302 --> 00:20:33,510 >> ALTAVEU 1: Si. 383 00:20:33,510 --> 00:20:36,610 Així que un llarg, llarg és el doble d'un int. 384 00:20:36,610 --> 00:20:39,250 >> AUDIÈNCIA: Aquest és el de 32 bits? 385 00:20:39,250 --> 00:20:40,620 >> ALTAVEU 1: 32 bits, si. 386 00:20:40,620 --> 00:20:43,572 >> AUDIÈNCIA: Així que [inaudible]? 387 00:20:43,572 --> 00:20:46,790 >> ALTAVEU 1: Sí, si no ho fa dir de forma explícita, que 388 00:20:46,790 --> 00:20:47,870 ha d'assumir una mica 32. 389 00:20:47,870 --> 00:20:50,040 >> AUDIÈNCIA: Seria dir alguna cosa com assumir una 390 00:20:50,040 --> 00:20:51,498 arquitectura com l'aparell. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Per 64 bits, l'únic que canvi són llargs i punters. 393 00:21:01,710 --> 00:21:05,614 Tots dos [inaudible]. 394 00:21:05,614 --> 00:21:06,590 >> ALTAVEU 1: Sí? 395 00:21:06,590 --> 00:21:07,566 >> AUDIÈNCIA: Pregunta. 396 00:21:07,566 --> 00:21:10,982 Així que en una de les proves de pràctica, es pregunta sobre un int sense signe. 397 00:21:10,982 --> 00:21:15,374 Llavors, ¿com hauria de determinar d'un int [inaudible]? 398 00:21:15,374 --> 00:21:18,140 >> ALTAVEU 1: Un signe a és també 4 bytes. 399 00:21:18,140 --> 00:21:21,172 Però el que és diferent sobre una signatura int i un int sense signar? 400 00:21:21,172 --> 00:21:22,422 >> AUDIÈNCIA: [inaudible]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> ALTAVEU 1: així. 403 00:21:25,630 --> 00:21:27,570 Un pot representar valors negatius. 404 00:21:27,570 --> 00:21:28,580 Però com es fa això? 405 00:21:28,580 --> 00:21:30,536 >> AUDIÈNCIA: [inaudible]. 406 00:21:30,536 --> 00:21:36,370 >> ALTAVEU 1: Sí, s'estalvia 1 bit per representar el signe. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 La firma té un bit que representa el signe. 409 00:21:45,040 --> 00:21:48,886 I sense signe només és de tots els positius. 410 00:21:48,886 --> 00:21:50,365 >> AUDIÈNCIA: OK. 411 00:21:50,365 --> 00:21:54,230 Així que vostè diu que és un doble dues vegades la grandària d'un flotador? 412 00:21:54,230 --> 00:21:58,202 >> ALTAVEU 1: Feu doble és dues vegades la grandària d'un flotador, si. 413 00:21:58,202 --> 00:22:01,639 >> AUDIÈNCIA: Com funciona un punter per a un llarg temps [inaudible]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> ALTAVEU 1: Llavors la pregunta és: com el punter a una llarga long-- 416 00:22:10,870 --> 00:22:13,800 com és que només quatre bytes quan un llarg, llarg dels seus 8 bytes. 417 00:22:13,800 --> 00:22:17,310 Així que recorda el que és un punter, essencialment, en el valor molt base. 418 00:22:17,310 --> 00:22:19,046 >> AUDIÈNCIA: [inaudible]. 419 00:22:19,046 --> 00:22:22,670 >> ALTAVEU 1: Sí, així que un punter és només una posició de memòria. 420 00:22:22,670 --> 00:22:28,040 Així que no importa la quantitat d'espai aquest punter està apuntant. 421 00:22:28,040 --> 00:22:32,060 Només necessita 4 bytes per realitzar un seguiment d'aquesta ubicació de memòria. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Alguna altra pregunta? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Refredar. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> Així que l'última cosa que tinc és la sortida estàndard. 428 00:22:47,460 --> 00:22:51,020 Vostè ha d'utilitzar amb freqüència prou per tu per recordar. 429 00:22:51,020 --> 00:22:54,800 Però això és quan fem servir printf, per exemple. 430 00:22:54,800 --> 00:22:59,260 I tenim aquests marcadors de posició que van ser cridats codis de format. 431 00:22:59,260 --> 00:23:03,910 >> Així cent c char, cent i per int, i també podem utilitzar el percentatge d. 432 00:23:03,910 --> 00:23:05,130 És la mateixa cosa. 433 00:23:05,130 --> 00:23:08,200 Però, en general, en què CS50 tractar d'utilitzar el percentatge de i. 434 00:23:08,200 --> 00:23:09,860 F Percentatge de flotador. 435 00:23:09,860 --> 00:23:15,620 Ld Percentatge de llarg de llarg i cent s per cadena. 436 00:23:15,620 --> 00:23:18,550 >> De la mateixa manera, hem estat utilitzant alguns d'aquestes seqüències d'escapament. 437 00:23:18,550 --> 00:23:22,431 Per exemple, la barra invertida n per a la nova línia. 438 00:23:22,431 --> 00:23:26,910 Això és només per quan estàs de formatar el seu codi per a la impressió f. 439 00:23:26,910 --> 00:23:27,260 Sí? 440 00:23:27,260 --> 00:23:28,906 >> AUDIÈNCIA: Quin és el percentatge de d? 441 00:23:28,906 --> 00:23:31,850 >> ALTAVEU 1: tant el dubte és el que és cent per d? 442 00:23:31,850 --> 00:23:33,270 Percentatge d és per sencers. 443 00:23:33,270 --> 00:23:37,392 Percentatge di cent i són els mateixos. 444 00:23:37,392 --> 00:23:41,130 >> AUDIÈNCIA: Quina és la diferència entre barra invertida n i barra invertida r? 445 00:23:41,130 --> 00:23:45,300 >> ALTAVEU 1: Llavors la pregunta és quin és el diferència entre N i reacció 446 00:23:45,300 --> 00:23:48,615 r contraatac? 447 00:23:48,615 --> 00:23:50,906 Crec barra invertida r és-- 448 00:23:50,906 --> 00:23:54,340 >> AUDIÈNCIA: Així barra invertida r només implica torna al principi de la línia 449 00:23:54,340 --> 00:23:56,670 sense haver d'anar a una nova línia. 450 00:23:56,670 --> 00:24:01,000 Així que si imprimeix una barra invertida r i tornar al principi de la línia 451 00:24:01,000 --> 00:24:04,005 a continuació, s'imprimeix més coses, es sobreescriu el material que ja està en 452 00:24:04,005 --> 00:24:04,390 [Inaudible]. 453 00:24:04,390 --> 00:24:06,725 Atès que, en realitat n va a una nova línia i va a [inaudible]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> ALTAVEU 1: Bé, alguna altra pregunta? 456 00:24:13,915 --> 00:24:15,430 Bé. 457 00:24:15,430 --> 00:24:18,617 Vaig a donar-ho fora de Donen qui continuarà. 458 00:24:18,617 --> 00:24:25,078 >> [Aplaudiments] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> DAN: Molt bé. 461 00:25:09,720 --> 00:25:18,590 Així que vaig a estar parlant d'una altra àmplia gamma d'idees de la classe que siguin 462 00:25:18,590 --> 00:25:23,220 representant d'aproximadament dues setmanes i el començament de la setmana tres partint 463 00:25:23,220 --> 00:25:28,690 amb la fosa, que és només una forma de el tractament d'un valor d'un cert tipus com 464 00:25:28,690 --> 00:25:30,830 un valor d'un tipus diferent. 465 00:25:30,830 --> 00:25:34,110 Així que podem fer això amb caràcters a ints, flotadors per ints, i 466 00:25:34,110 --> 00:25:35,360 longs llargues duplicar. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Totes aquestes coses poden ser utilitzats com a formes de tractar algun valor numèric 469 00:25:44,500 --> 00:25:48,370 Char menys com algun altre valor numèric. 470 00:25:48,370 --> 00:25:54,480 Així que hi ha alguns problemes amb això, de Per descomptat, que ve quan llances 471 00:25:54,480 --> 00:25:57,860 coses com float a ints. 472 00:25:57,860 --> 00:26:00,500 Així que això és una mica estrany. 473 00:26:00,500 --> 00:26:03,170 Tenim un flotador que és de 1.31. 474 00:26:03,170 --> 00:26:05,220 Ens multipliquem per 10.000. 475 00:26:05,220 --> 00:26:08,380 I llavors ho imprimim com un int. 476 00:26:08,380 --> 00:26:09,630 Què significa aquest resultat? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10.000 vegades 1.31. 479 00:26:14,020 --> 00:26:18,761 Així que 13.000, és que la conjectura? 480 00:26:18,761 --> 00:26:20,685 >> AUDIÈNCIA: Crec que és de 10.000. 481 00:26:20,685 --> 00:26:24,234 >> DAN: Així que estic multiplicar per 10.000 abans que em llançar. 482 00:26:24,234 --> 00:26:25,202 >> AUDIÈNCIA: Oh. 483 00:26:25,202 --> 00:26:27,622 No hauria setembre 1 i alguns números de 0? 484 00:26:27,622 --> 00:26:29,270 >> DAN: Vostè podria tenir alguns dígits estranys. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 Així bé, és 1,3 vegades 10.000. 487 00:26:37,670 --> 00:26:40,040 Així que això és 13.000. 488 00:26:40,040 --> 00:26:41,313 I això weird-- addicional 489 00:26:41,313 --> 00:26:42,160 >> AUDIÈNCIA: 13100. 490 00:26:42,160 --> 00:26:42,650 >> DAN: 13100. 491 00:26:42,650 --> 00:26:44,910 Gràcies, Rob. 492 00:26:44,910 --> 00:26:46,610 I això weirdness-- addicional 493 00:26:46,610 --> 00:26:48,060 aquest 9,9-- 494 00:26:48,060 --> 00:26:53,860 és simplement perquè aquest càsting va acabar arrodonint on 495 00:26:53,860 --> 00:26:55,394 que no hauria de tenir. 496 00:26:55,394 --> 00:26:55,871 Sí. 497 00:26:55,871 --> 00:26:58,256 >> AUDIÈNCIA: El càsting succeeix després de tota la resta? 498 00:26:58,256 --> 00:27:03,865 >> DAN: Així que ja tinc això en impressió, fa aquesta multiplicació abans que es 499 00:27:03,865 --> 00:27:05,230 fa aquest càsting. 500 00:27:05,230 --> 00:27:06,140 >> AUDIÈNCIA: [inaudible]. 501 00:27:06,140 --> 00:27:11,350 >> DAN: Crec que projectaria primer, sí, el que seria de 10.000. 502 00:27:11,350 --> 00:27:12,610 Una mica més? 503 00:27:12,610 --> 00:27:13,330 Refredar. 504 00:27:13,330 --> 00:27:16,344 Així que això és 13.099. 505 00:27:16,344 --> 00:27:17,840 Per què passa això? 506 00:27:17,840 --> 00:27:18,900 La imprecisió. 507 00:27:18,900 --> 00:27:21,020 >> Els flotadors no són perfectes. 508 00:27:21,020 --> 00:27:27,550 Només poden representar els nombres a un cert nombre de xifres significatives. 509 00:27:27,550 --> 00:27:35,120 Així que si imprimim 8 sig figues a aquest flotador, obtenim una espècie de 510 00:27:35,120 --> 00:27:36,800 nombre lleig aspecte. 511 00:27:36,800 --> 00:27:45,580 I això és perquè 1.31 no pot amb precisió ser representat per simples 512 00:27:45,580 --> 00:27:49,000 potències de dos a la màquina. 513 00:27:49,000 --> 00:27:53,530 Pel que acaba tenint el més proper Suposo, que acaba 514 00:27:53,530 --> 00:27:55,710 ser una mica baix. 515 00:27:55,710 --> 00:27:57,730 Té sentit? 516 00:27:57,730 --> 00:27:59,110 Okay. 517 00:27:59,110 --> 00:28:05,840 >> Ara, amb commutació són una forma diferent de fent sentències condicionals on tots els 518 00:28:05,840 --> 00:28:09,900 que ens importa és una sola variable. 519 00:28:09,900 --> 00:28:16,570 Així que en aquest exemple en particular, estem obtenir un nombre enter d'usuari. 520 00:28:16,570 --> 00:28:21,070 I llavors estem veient el que és sencer. 521 00:28:21,070 --> 00:28:23,500 Presumiblement, és el nombre entre un i quatre. 522 00:28:23,500 --> 00:28:24,800 Això és el que estem demanant. 523 00:28:24,800 --> 00:28:28,450 >> Així ho fa un interruptor de el nom de la variable. 524 00:28:28,450 --> 00:28:34,290 Després de configurar els casos de possible valora que podria ser. 525 00:28:34,290 --> 00:28:37,730 Així cas que un, diuen que és baix. 526 00:28:37,730 --> 00:28:41,080 I després es trenca per sortir de la condició de l'interruptor de manera 527 00:28:41,080 --> 00:28:43,270 no seguir endavant. 528 00:28:43,270 --> 00:28:44,830 >> En la següent cas-- 529 00:28:44,830 --> 00:28:46,940 així que cas dos i cas tres-- 530 00:28:46,940 --> 00:28:51,920 si és el cas de dos que només baixa a la primera línia de codi que veu com amb 531 00:28:51,920 --> 00:28:55,400 cas, tres, fins que veu un descans. 532 00:28:55,400 --> 00:29:00,430 Així que la raó s'obté cas que un només impressió baix és perquè 533 00:29:00,430 --> 00:29:01,890 tenir aquest descans aquí. 534 00:29:01,890 --> 00:29:05,360 Si jo, per exemple, ignorat aquest break-- si em vaig llançar aquest breakaway-- 535 00:29:05,360 --> 00:29:09,740 seria imprimir baix, i llavors seria imprimir mitjà, i després es trencaria. 536 00:29:09,740 --> 00:29:12,200 >> Així descansos són una part important de canviar les condicions i 537 00:29:12,200 --> 00:29:14,340 haurien d'estar-hi. 538 00:29:14,340 --> 00:29:20,070 Els casos que no figuren explícitament són manejades pel defecte 539 00:29:20,070 --> 00:29:26,645 cas l'interruptor i sigui fet fora. 540 00:29:26,645 --> 00:29:31,363 >> AUDIÈNCIA: So 1, 2, 3, i 4 seria n? 541 00:29:31,363 --> 00:29:33,310 >> DAN: Valors que n pot ser. 542 00:29:33,310 --> 00:29:34,654 Sí. 543 00:29:34,654 --> 00:29:35,146 Sí? 544 00:29:35,146 --> 00:29:37,606 >> AUDIÈNCIA: Així que quan vostè té que [inaudible]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> DAN: Vostè imprimiria baixa, i després seria imprimir mitjana i 547 00:29:46,830 --> 00:29:47,400 a continuació, es trencaria. 548 00:29:47,400 --> 00:29:50,244 >> AUDIÈNCIA: Per què seria imprimir mitjà si [inaudible]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> DAN: Així que tot sota un cas abans d'un descans cau sota. 551 00:30:00,550 --> 00:30:09,390 Així cas una còpia d'impressió és el cas per sota de un com és aquest següent impressió. 552 00:30:09,390 --> 00:30:09,890 Sí? 553 00:30:09,890 --> 00:30:11,140 >> AUDIÈNCIA: [inaudible]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> DAN: Així que aquest nombre és només un particular, valor que aquesta variable 556 00:30:22,170 --> 00:30:23,420 pot prendre, no? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Té això sentit? 559 00:30:28,490 --> 00:30:28,990 Sí. 560 00:30:28,990 --> 00:30:31,490 >> AUDIÈNCIA: [inaudible]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Sí, el cas de dos imprimiria mitjà i després trencar. 562 00:30:34,130 --> 00:30:35,380 >> AUDIÈNCIA: [inaudible]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> DAN: Crec que qualsevol? 565 00:30:40,050 --> 00:30:43,855 Quins altres tipus de dades es pot canviar de nou? 566 00:30:43,855 --> 00:30:46,320 >> AUDIÈNCIA: Vostè pot canviar sobre qualsevol tipus de dades. 567 00:30:46,320 --> 00:30:50,905 Però només significa alguna cosa més caràcters i ints i coses per l'estil, ja que 568 00:30:50,905 --> 00:30:55,600 si vostè està canviant més d'un punter que en realitat no té sentit, 569 00:30:55,600 --> 00:30:59,555 commutació de càrregues, si és que anem a vostè fa això, perquè de punt flotant 570 00:30:59,555 --> 00:31:02,840 en la precisió, no ho faries realment vull fer això de totes maneres. 571 00:31:02,840 --> 00:31:07,320 Així que més o menys, a sencers i caràcters i coses per l'estil. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Sí, és quan tens explícita valors que vostè sap, crec, pot ser 573 00:31:12,360 --> 00:31:14,250 que un canvi és realment útil. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Bé? 576 00:31:18,990 --> 00:31:21,370 Okay. 577 00:31:21,370 --> 00:31:26,180 >> Abast és el rang que un declarat la variable s'estén. 578 00:31:26,180 --> 00:31:32,190 Així que en aquest petit tros de codi que tinc, que estaria ple d'errors. 579 00:31:32,190 --> 00:31:41,450 I la raó és que vaig declarar això int i dins l'abast d'aquest bucle. 580 00:31:41,450 --> 00:31:46,390 I llavors jo estic tractant de fer referència a aquest i fora d'aquest àmbit de bucle. 581 00:31:46,390 --> 00:31:50,330 >> Així que, bàsicament, es pot pensar en l'abast com tot el que es declara 582 00:31:50,330 --> 00:31:59,750 amb l'interior d'un conjunt de claus només hi ha dins d'aquestes claus. 583 00:31:59,750 --> 00:32:04,990 I si es tracta d'usar aquesta variable fora d'aquestes claus, podràs 584 00:32:04,990 --> 00:32:08,356 obtindrà un error del compilador. 585 00:32:08,356 --> 00:32:08,812 Sí? 586 00:32:08,812 --> 00:32:09,724 >> AUDIÈNCIA: Així que aquest no funciona? 587 00:32:09,724 --> 00:32:11,790 >> DAN: Això no funciona, si. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Cordes. 590 00:32:18,660 --> 00:32:19,780 String a char *. 591 00:32:19,780 --> 00:32:22,250 Són exactament el mateix. 592 00:32:22,250 --> 00:32:25,540 Ells són només punters a caràcters. 593 00:32:25,540 --> 00:32:33,000 I qualsevol cadena que té han d'acabar amb barra invertida zero, que és just 594 00:32:33,000 --> 00:32:34,410 una convenció c. 595 00:32:34,410 --> 00:32:36,680 >> Es diu el terminador NULL. 596 00:32:36,680 --> 00:32:39,050 I NULL-- 597 00:32:39,050 --> 00:32:41,670 N majúscula, capital d'U, el capital L, de capital L-- 598 00:32:41,670 --> 00:32:44,290 no és el mateix que el Terminador NULL. 599 00:32:44,290 --> 00:32:46,640 Això és un punter. 600 00:32:46,640 --> 00:32:48,280 Aquest és un personatge. 601 00:32:48,280 --> 00:32:49,530 Són molt diferents. 602 00:32:49,530 --> 00:32:50,200 Recorda. 603 00:32:50,200 --> 00:32:52,320 Serà en el qüestionari, probablement. 604 00:32:52,320 --> 00:32:54,040 No he vist la prova. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Sí? 607 00:32:58,840 --> 00:33:01,232 >> AUDIÈNCIA: Així NULL és, per exemple, el punter? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Si. 609 00:33:01,995 --> 00:33:05,170 >> AUDIÈNCIA: Què fa [inaudible]? 610 00:33:05,170 --> 00:33:10,050 >> DAN: Si, diuen, malloc es diu quan vostè no tenen prou memòria per obtenir 611 00:33:10,050 --> 00:33:14,400 sigui quina sigui la mida que vostè està demanant, malloc tornarà NULL. 612 00:33:14,400 --> 00:33:19,550 És, bàsicament, cada vegada que una funció és suposa que tornar un punter, 613 00:33:19,550 --> 00:33:22,600 de comprovar contra NULL perquè NULL és un Bueno-- bastant 614 00:33:22,600 --> 00:33:25,260 és, més o menys, el valor de les escombraries. 615 00:33:25,260 --> 00:33:27,050 És un zero en la mesura com punters van. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Cada vegada que es crida a una funció, que retorna un punter. 618 00:33:32,250 --> 00:33:35,960 Vostè va a voler comprovar que Segur que aquest punter no és NULL 619 00:33:35,960 --> 00:33:37,760 perquè NULL és molt comú. 620 00:33:37,760 --> 00:33:40,160 És una espècie d'un retorn de les escombraries. 621 00:33:40,160 --> 00:33:44,902 Així que si alguna cosa no anava bé, simplement tornar NULL en el seu lloc. 622 00:33:44,902 --> 00:33:45,898 >> AUDIÈNCIA: [inaudible]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Sí, i això és això. 624 00:33:48,922 --> 00:33:51,750 >> AUDIÈNCIA: [inaudible]? 625 00:33:51,750 --> 00:33:52,800 >> DAN: Spell com aquest. 626 00:33:52,800 --> 00:33:54,150 És el terminador NULL. 627 00:33:54,150 --> 00:33:56,560 És minúscules N-O-L-L si està lletrejant ella. 628 00:33:56,560 --> 00:33:59,860 >> AUDIÈNCIA: I em vaig anar esquena i provat. 629 00:33:59,860 --> 00:34:03,010 I si tractes de posar un punt flotant valor en un interruptor, que va a cridar a vostè 630 00:34:03,010 --> 00:34:05,916 dir, declaració requereix l'expressió de tipus sencer. 631 00:34:05,916 --> 00:34:07,166 >> DAN: Cal anar. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Però sí, ho era la pregunta? 634 00:34:12,246 --> 00:34:13,496 >> AUDIÈNCIA: [inaudible]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> DAN: Així de capital N, O majúscula, el capital L, L majúscula és una cosa real c. 637 00:34:23,679 --> 00:34:29,719 És el punter NULL i voluntat només ser tractats com a tals. 638 00:34:29,719 --> 00:34:33,530 Vostè mai va a tractar d'explicar el Caràcter nul i veure qualsevol 639 00:34:33,530 --> 00:34:35,630 altra manera que això. 640 00:34:35,630 --> 00:34:36,610 Sí? 641 00:34:36,610 --> 00:34:42,490 >> AUDIÈNCIA: Així que tornant a char màxim o alguna cosa en les notes, oi 642 00:34:42,490 --> 00:34:43,960 encarnar la mateixa funció com [inaudible]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> AUDIÈNCIA: Així que et refereixes tornar max caràcters de getchar, o 645 00:34:54,949 --> 00:34:55,444 sigui el que sigui? 646 00:34:55,444 --> 00:34:55,940 >> AUDIÈNCIA: Si. 647 00:34:55,940 --> 00:34:58,620 >> AUDIÈNCIA: Sí, en general termini per a totes aquestes coses 648 00:34:58,620 --> 00:34:59,920 són valors sentinella. 649 00:34:59,920 --> 00:35:03,640 Així com tornar int max de getInt i truita màxim de getchar, és 650 00:35:03,640 --> 00:35:06,010 suposa que és igual, d'acord, si aquestes coses estan tornant a nosaltres, 651 00:35:06,010 --> 00:35:07,210 alguna cosa va sortir malament. 652 00:35:07,210 --> 00:35:09,950 >> Per als gossos, només passa que té aquest valor sentinella que tothom 653 00:35:09,950 --> 00:35:10,750 convé. 654 00:35:10,750 --> 00:35:13,210 I això és el que torni quan les coses van malament. 655 00:35:13,210 --> 00:35:15,910 Així max char és el que estem utilitzant per representar alguna cosa 656 00:35:15,910 --> 00:35:18,100 com NULL o getchar. 657 00:35:18,100 --> 00:35:23,420 >> AUDIÈNCIA: Així que si vostè està provant getchar, podria vostè acaba de posar NULL? 658 00:35:23,420 --> 00:35:23,910 Seria això una diferència? 659 00:35:23,910 --> 00:35:25,400 >> DAN: No podies comprovar NULL. 660 00:35:25,400 --> 00:35:30,130 Caldria revisar caràcters màxim pel fet que el valor de retorn de la funció és 661 00:35:30,130 --> 00:35:35,416 un caràcter no un punter. 662 00:35:35,416 --> 00:35:35,888 Sí? 663 00:35:35,888 --> 00:35:38,248 >> AUDIÈNCIA: Aquesta pregunta per a la longitud de la cadena. 664 00:35:38,248 --> 00:35:40,136 Això inclou el caràcter NULL? 665 00:35:40,136 --> 00:35:41,000 >> DAN: No 666 00:35:41,000 --> 00:35:45,930 I això és en realitat la forma de longitud de sèrie sap de parar perquè es passa per 667 00:35:45,930 --> 00:35:49,070 la matriu de caràcters fins es veu un caràcter NULL. 668 00:35:49,070 --> 00:35:51,030 I llavors és com, tot bé, he acabat. 669 00:35:51,030 --> 00:35:52,130 >> AUDIÈNCIA: [inaudible] de cinc? 670 00:35:52,130 --> 00:35:53,990 >> DAN: Hola seria 5. 671 00:35:53,990 --> 00:35:55,240 Sip. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 Així arrays són contínues blocs de memòria. 674 00:36:02,880 --> 00:36:08,480 Ells tenen accés immediat al dir que el nom de la matriu i, a continuació, a arrissat 675 00:36:08,480 --> 00:36:16,720 suports, qualsevol que sigui l'índex que vol anar a, que estan indexats a partir de zero a 676 00:36:16,720 --> 00:36:20,100 la longitud de la matriu almenys 1. 677 00:36:20,100 --> 00:36:23,070 >> I estan declarats pel tipus de la El que vostè està emmagatzemant al 678 00:36:23,070 --> 00:36:29,750 matriu, el nom de la matriu, i després qualsevol que sigui la mida és d'aquesta matriu. 679 00:36:29,750 --> 00:36:36,660 Així que aquesta és una matriu de caràcters de longitud sis que té aquests valors. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Sí? 682 00:36:42,700 --> 00:36:43,950 >> AUDIÈNCIA: [inaudible]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> DAN: Si. 685 00:36:48,460 --> 00:36:51,340 >> AUDIÈNCIA: [inaudible]? 686 00:36:51,340 --> 00:36:56,700 >> DAN: Si vostè té el que està passant en la matriu ja feta. 687 00:36:56,700 --> 00:37:02,260 Així que es podria especificar aquesta vegada com, per exemple, char, qualsevol que sigui el nom de la seva 688 00:37:02,260 --> 00:37:12,200 matriu és, claudàtors buits és igual arrissat preparar H I coma coma coma L L comes 689 00:37:12,200 --> 00:37:16,290 O coma caràcter NULL i clau de tancament. 690 00:37:16,290 --> 00:37:18,180 Això també funciona com una declaració. 691 00:37:18,180 --> 00:37:20,886 >> AUDIÈNCIA: [inaudible]? 692 00:37:20,886 --> 00:37:23,110 >> DAN: Llavors cal tenir la mida ja va fer. 693 00:37:23,110 --> 00:37:23,896 >> AUDIÈNCIA: [inaudible]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Si. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Molt bé. 697 00:37:32,420 --> 00:37:36,430 Arguments de la línia d'ordres són una forma de obtenir l'entrada de l'usuari com 698 00:37:36,430 --> 00:37:39,380 arguments a principal. 699 00:37:39,380 --> 00:37:40,600 Principal té dos arguments. 700 00:37:40,600 --> 00:37:47,680 El nombre d'arguments que s'està passat al llarg de la línia d'ordres i un 701 00:37:47,680 --> 00:37:55,340 vector cadena o una matriu de cadenes de tots els arguments. 702 00:37:55,340 --> 00:38:07,840 >> Així que si, per exemple, vaig trucar a una funció com un punt a 1 plaça, 2 plaça, tres, 703 00:38:07,840 --> 00:38:10,110 argc seria 4. 704 00:38:10,110 --> 00:38:17,370 I el argv 0 seria un punt fora. 705 00:38:17,370 --> 00:38:19,130 Argv1 seria 1. 706 00:38:19,130 --> 00:38:23,030 argv2 seria 2. argv3 serien 3, en aquest cas particular. 707 00:38:23,030 --> 00:38:23,310 Sí? 708 00:38:23,310 --> 00:38:25,400 >> AUDIÈNCIA: [inaudible]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: L'últim element de la matriu perquè la matriu és la longitud argc més 710 00:38:34,010 --> 00:38:41,050 un argb, l'últim element és el punter NULL. 711 00:38:41,050 --> 00:38:42,580 És més argc 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 Així que en el cas que acabo de dir, que es argv 0 és un punt fora. 714 00:38:52,150 --> 00:38:56,330 argv 1 és 1 argv2 és 2. argv 3 és 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, que és un més gran que argc seria NULL. 716 00:39:03,490 --> 00:39:04,870 >> I això és el punter NULL. 717 00:39:04,870 --> 00:39:06,590 Sí. 718 00:39:06,590 --> 00:39:11,250 I això és perquè la cadena és un estel char és un punter. 719 00:39:11,250 --> 00:39:14,102 Així que ha de ser del mateix tipus. 720 00:39:14,102 --> 00:39:14,595 Sí? 721 00:39:14,595 --> 00:39:16,074 >> AUDIÈNCIA: Dues preguntes. 722 00:39:16,074 --> 00:39:21,004 Així que un, ¿quina és la diferència entre això i GetString altra d'un tipus 723 00:39:21,004 --> 00:39:22,483 en el motor d'usuari? 724 00:39:22,483 --> 00:39:25,934 I dos, que s'emmagatzema en seva història recent? 725 00:39:25,934 --> 00:39:28,399 Així com, GetString faria ser [inaudible]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> DAN: On s'emmagatzema? 728 00:39:33,650 --> 00:39:34,905 No sé on s'emmagatzema. 729 00:39:34,905 --> 00:39:40,000 >> AUDIÈNCIA: Així que, en realitat, ja saps com qualsevol funció que crida als seus arguments 730 00:39:40,000 --> 00:39:42,170 s'emmagatzemen a la pila? 731 00:39:42,170 --> 00:39:46,610 Així argc i argv són arguments a principal i estan a la pila, o realment 732 00:39:46,610 --> 00:39:49,131 just per sobre del que vostè pensa com el començament de la pila. 733 00:39:49,131 --> 00:39:53,490 Quina era l'altra part de la pregunta? 734 00:39:53,490 --> 00:39:56,821 >> AUDIÈNCIA: Quina és la [inaudible]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Sí, és només una manera diferent d'aconseguir la entrada de l'usuari. 736 00:40:00,990 --> 00:40:06,030 Lleugerament més eficient i d'aquest un és més pràctic per als scripts perquè 737 00:40:06,030 --> 00:40:10,070 només pot passar arguments al seu principal funció en lloc d'haver d'esperar 738 00:40:10,070 --> 00:40:13,400 per als usuaris que no té cap usuari. 739 00:40:13,400 --> 00:40:16,280 >> AUDIÈNCIA: I sí, aconseguir cadenes seria [inaudible]. 740 00:40:16,280 --> 00:40:17,922 Seria emmagatzemar les coses que necessita. 741 00:40:17,922 --> 00:40:18,834 >> DAN: Sí? 742 00:40:18,834 --> 00:40:21,114 >> AUDIÈNCIA: [inaudible]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Sí, argv 0 sempre inclou la punt slash de la crida a la funció. 744 00:40:27,545 --> 00:40:28,042 Sí? 745 00:40:28,042 --> 00:40:29,292 >> AUDIÈNCIA: [inaudible]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Sí, cada un dels arguments són va acabar en caràcter NULL perquè 748 00:40:37,310 --> 00:40:38,310 són cadenes. 749 00:40:38,310 --> 00:40:40,892 >> AUDIÈNCIA: [inaudible]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Sí, argc argv és un punter NULL. 751 00:40:44,116 --> 00:40:45,112 >> AUDIÈNCIA: [inaudible]? 752 00:40:45,112 --> 00:40:47,104 >> DAN: Ah, sí. 753 00:40:47,104 --> 00:40:48,100 Sí, ho sento. 754 00:40:48,100 --> 00:40:49,594 >> AUDIÈNCIA: Així que [inaudible]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> DAN: tant el dubte és si vostè tingués la punt de línia d'ordres slash un punt a terme 1, 2, 757 00:41:16,340 --> 00:41:20,410 faria el número de línia d'ordres arguments siguin dos o haurien de ser tres? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> AUDIÈNCIA: Crec que no fa realment importa. 760 00:41:28,240 --> 00:41:31,370 Tendeixo a dir, oh, que no va passar qualsevol argument de línia d'ordres quan, 761 00:41:31,370 --> 00:41:32,730 òbviament, que va cridar a la funció. 762 00:41:32,730 --> 00:41:37,950 Així que tendeixo a excloure vocalment la funció des de la línia d'ordres 763 00:41:37,950 --> 00:41:40,350 arguments, encara que és inclòs en argv. 764 00:41:40,350 --> 00:41:42,600 >> DAN: Però si era al test-- 765 00:41:42,600 --> 00:41:46,550 Sí-- i també si vostè diu alguna cosa com argc és igual a 3, 766 00:41:46,550 --> 00:41:48,512 vostè està a la caixa forta de peu. 767 00:41:48,512 --> 00:41:49,416 Sí? 768 00:41:49,416 --> 00:41:50,666 >> AUDIÈNCIA: [inaudible]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> DAN: Crec que si en lloc de cridar a aquest en argc i argv cadena entre parèntesis 771 00:42:09,510 --> 00:42:14,350 però va mantenir els mateixos tipus i acaba de cridar ells alguna cosa diferent com un 772 00:42:14,350 --> 00:42:16,640 i b, seguiria treballant? 773 00:42:16,640 --> 00:42:18,790 I no per això deixa treballar, vostè sol-- 774 00:42:18,790 --> 00:42:21,520 en lloc d'utilitzar argc-- haurà d'utilitzar a i b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Sí? 777 00:42:25,408 --> 00:42:26,658 >> AUDIÈNCIA: [inaudible]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> DAN: tant el dubte és GetString és va a emmagatzemar la memòria en el munt 780 00:42:38,850 --> 00:42:42,280 perquè GetString és char *. 781 00:42:42,280 --> 00:42:47,530 Emmagatzema la memòria en el munt, ja que demana ara malloc al real 782 00:42:47,530 --> 00:42:49,258 aplicació de GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 Acceptar, seguir endavant. 785 00:42:55,090 --> 00:42:55,950 >> Seguretat. 786 00:42:55,950 --> 00:43:01,090 Així que perquè sigui realment segur, vostè confia en no un i permets que ningú l'accés a qualsevol 787 00:43:01,090 --> 00:43:04,540 de la seva informació, que és la raó per cadascun construeix les seves pròpies màquines, 788 00:43:04,540 --> 00:43:09,580 els seus propis sistemes operatius, tota la seva programes a partir de zero, i, òbviament, 789 00:43:09,580 --> 00:43:13,410 no connecti a qualsevol altra màquina a través d'Internet. 790 00:43:13,410 --> 00:43:17,350 Així que els ordinadors són insegures. 791 00:43:17,350 --> 00:43:19,200 Ells realment són. 792 00:43:19,200 --> 00:43:20,940 Hem de confiar en altres persones. 793 00:43:20,940 --> 00:43:26,500 >> I la idea de la seguretat és que ets tractant de limitar la quantitat de 794 00:43:26,500 --> 00:43:27,540 la confiança que vostè necessita. 795 00:43:27,540 --> 00:43:32,080 I un dels mitjans que fa que és a través de la criptografia. 796 00:43:32,080 --> 00:43:34,950 La criptografia és, en essència, tenim secrets. 797 00:43:34,950 --> 00:43:38,880 >> A vegades hem de passar els nostres secrets al llarg a través, per exemple, l'Internet o 798 00:43:38,880 --> 00:43:39,980 altres coses. 799 00:43:39,980 --> 00:43:43,180 I no volem que la gent conèixer aquests secrets. 800 00:43:43,180 --> 00:43:50,100 Així que xifrem els nostres secrets en un camí que esperem que ningú pot imaginar. 801 00:43:50,100 --> 00:43:51,600 >> Així que used-- 802 00:43:51,600 --> 00:43:54,340 a través del curs d'aquest class-- 803 00:43:54,340 --> 00:44:00,750 coses com xifrat César i [Inaudible], que són alhora molt, molt 804 00:44:00,750 --> 00:44:03,200 formes insegures de l'encriptació de les coses. 805 00:44:03,200 --> 00:44:07,930 Són fàcils d'esbrinar el que són i quins són els seus secrets són. 806 00:44:07,930 --> 00:44:12,130 El món real utilitza molt més esquemes de xifrat complicats. 807 00:44:12,130 --> 00:44:13,880 I no entrarem en molt més que això. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Depuració. 810 00:44:19,430 --> 00:44:20,785 GDB és el millor. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Vaig a insistir en això una altra vegada. 813 00:44:25,810 --> 00:44:30,920 Utilitzeu GDB tot el temps cada vegada que tingui un problema. 814 00:44:30,920 --> 00:44:36,030 Les comandes que són útils en el BGF són trenques, el que passa, ja sigui una línia 815 00:44:36,030 --> 00:44:41,330 nombre, un nom de funció, essencialment on en el codi que desitgi detenir, 816 00:44:41,330 --> 00:44:45,600 i ser capaç de prendre el control. 817 00:44:45,600 --> 00:44:54,140 >> Imprimir pren una variable i imprimeix qualsevol que sigui aquesta variable és en aquest 818 00:44:54,140 --> 00:44:55,990 moment de la seva execució. 819 00:44:55,990 --> 00:45:00,130 Següent mou la seva execució al llarg d'un sol pas. 820 00:45:00,130 --> 00:45:05,050 I pas passos dins d'una funció en la seva execució. 821 00:45:05,050 --> 00:45:10,480 >> Altres coses s'executen, que és com en realitat s'executa el codi. 822 00:45:10,480 --> 00:45:16,630 Continuar pren totes les mesures necessàries per arribar al següent punt de ruptura. 823 00:45:16,630 --> 00:45:18,300 I n'hi ha molts, molts altres. 824 00:45:18,300 --> 00:45:19,040 Busca'ls. 825 00:45:19,040 --> 00:45:19,901 Són excel · lents. 826 00:45:19,901 --> 00:45:20,863 Sí? 827 00:45:20,863 --> 00:45:22,113 >> AUDIÈNCIA: [inaudible]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Sí, que és un depurador. 830 00:45:28,200 --> 00:45:34,230 Així que un depurador és un programa que li permet comprovar el programa. 831 00:45:34,230 --> 00:45:39,931 No és un programa que troba errors per que, però, que seria gran. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> I finalment, per a mi és la recerca. 834 00:45:46,040 --> 00:45:51,470 Així que els tipus de cerca que parlem sobre aquesta classe són recerca lineal, 835 00:45:51,470 --> 00:45:55,960 que és just que es mira a través de cada element de l'espai de recerca, un 836 00:45:55,960 --> 00:46:00,410 element a la vegada, fins trobar el que vostè està buscant o fins que arribi 837 00:46:00,410 --> 00:46:03,350 Al final del seu espai de recerca en el qual assenyala que dius que no es podia trobar 838 00:46:03,350 --> 00:46:06,360 l'element que estaves buscant. 839 00:46:06,360 --> 00:46:13,450 I això porta temps, en el millor constant, que és 0 d'1 i en el pitjor lineal 840 00:46:13,450 --> 00:46:16,070 temps, que és 0 de n. 841 00:46:16,070 --> 00:46:19,250 >> Hi binària, que necessita elements sòrdids. 842 00:46:19,250 --> 00:46:24,230 Vostè va a la meitat dels seus elements, veure si l'element que està buscant 843 00:46:24,230 --> 00:46:30,120 és més o menys que l'element que estàs en el medi. 844 00:46:30,120 --> 00:46:36,510 És que és més gran, es diu que el fons de la seva recerca d'espai és la seva 845 00:46:36,510 --> 00:46:41,550 ubicació actual, el medi, i reiniciar el procés. 846 00:46:41,550 --> 00:46:46,150 Si és menor, es mira diuen que ell-- sí, què passa? 847 00:46:46,150 --> 00:46:47,400 >> AUDIÈNCIA: [inaudible]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Si. 850 00:46:54,260 --> 00:46:58,360 Qualsevol tipus d'espècie que s'ha ensenyat en la classe és un joc just per a la prova. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Rialles] 853 00:47:04,920 --> 00:47:10,260 >> DAN: I el fet que vostè no ha tingut que ho faci per una sèrie de problemes, que és just 854 00:47:10,260 --> 00:47:12,420 joc per a la prova. 855 00:47:12,420 --> 00:47:15,186 >> AUDIÈNCIA: Podem anar-hi com A-- 856 00:47:15,186 --> 00:47:17,052 >> DAN: S'ha anat una altra vegada. 857 00:47:17,052 --> 00:47:20,496 >> ALTAVEU 2: El codi real per [Inaudible] és a study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 Així que si ens fixem en el problema la pràctica a la pàgina de combinació de tipus de 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, no és el codi per a la implementació de fusionar espècie. 861 00:47:35,880 --> 00:47:38,550 Així que vostè no ha de posar en pràctica vostè mateix aquesta nit. 862 00:47:38,550 --> 00:47:42,090 Però assegureu-vos que entén que en lloc que simplement memoritzar-la. 863 00:47:42,090 --> 00:47:45,035 >> AUDIÈNCIA: [inaudible]? 864 00:47:45,035 --> 00:47:49,720 >> ALTAVEU 2: La pàgina de combinació de tipus de study.cs50.net, hi ha una pràctica 865 00:47:49,720 --> 00:47:53,570 problema que, si fa clic a través de la problema, al final hi ha una 866 00:47:53,570 --> 00:47:56,280 solució, que és la combinació aplicació espècie. 867 00:47:56,280 --> 00:47:58,510 Però assegureu-vos que entén que i no només memoritzar 868 00:47:58,510 --> 00:47:59,760 o copiar cap avall. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> AUDIÈNCIA: I una perfectament vàlid problema per a l'examen seria 871 00:48:06,340 --> 00:48:07,990 una cosa així aquí hi ha una llista. 872 00:48:07,990 --> 00:48:12,100 Què fa aquesta llista sembla després un pas de seleccions tipus o 873 00:48:12,100 --> 00:48:13,330 ordenació per inserció o el que sigui. 874 00:48:13,330 --> 00:48:14,940 Una iteració completa de la llista. 875 00:48:14,940 --> 00:48:18,530 Així que encara que no acaba damunt de necessitar codi per a això, cal comprendre que 876 00:48:18,530 --> 00:48:20,440 suficient per saber com va que la modificació d'aquesta matriu. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> DAN: Això és tot per a mi. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Aplaudiments] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hola a tots. 883 00:49:07,410 --> 00:49:08,390 El meu nom és Lluc. 884 00:49:08,390 --> 00:49:16,840 Vaig a parlar de la recursivitat, tot les classes que hem après, i un 885 00:49:16,840 --> 00:49:18,050 mica de tots els punters. 886 00:49:18,050 --> 00:49:18,740 D'acord? 887 00:49:18,740 --> 00:49:20,340 Així que primer de tot, la recursió. 888 00:49:20,340 --> 00:49:22,951 Què significa dir que és una funció recursiva? 889 00:49:22,951 --> 00:49:24,675 >> AUDIÈNCIA: Trucades en si. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, diu a si mateix, si. 891 00:49:26,500 --> 00:49:27,700 Així que t'agrada aquesta foto, per exemple. 892 00:49:27,700 --> 00:49:30,280 És com la imatge a l'interior d'una imatge i així successivament. 893 00:49:30,280 --> 00:49:35,740 Així, per exemple, pot tener-- com Dan que parlava de cerca binària. 894 00:49:35,740 --> 00:49:41,840 Una manera en què la recerca binària és recursiu és el fet que ets 895 00:49:41,840 --> 00:49:43,130 tractant de trobar un nombre. 896 00:49:43,130 --> 00:49:44,250 Així que anar al centre. 897 00:49:44,250 --> 00:49:47,130 I a continuació, comprovar si els números allà a l'esquerra ia la dreta. 898 00:49:47,130 --> 00:49:49,650 >> I llavors si vostè descobreix que el nombre és serà de l'esquerra, que és la mateixa 899 00:49:49,650 --> 00:49:53,340 cosa com fer la recerca de nou, però només a l'esquerra de la llista. 900 00:49:53,340 --> 00:49:57,350 Així que així és com sona com que és recursiu. 901 00:49:57,350 --> 00:50:01,870 Així que és per això que vostès tenen recursiva solució per merge sort. 902 00:50:01,870 --> 00:50:04,270 >> OK, així que aquí està un exemple. 903 00:50:04,270 --> 00:50:07,280 Així que diguem que jo vull triar tots els números d'1 a n. 904 00:50:07,280 --> 00:50:13,790 Puc adonar-me que la suma dels n nombre és n més n menys 1-1. 905 00:50:13,790 --> 00:50:17,810 Però llavors, si miro n almenys 1 més n almenys 2 més 1, que és el mateix 906 00:50:17,810 --> 00:50:20,680 cosa com nombres la suma fins n menys 1. 907 00:50:20,680 --> 00:50:25,890 Així que puc dir que la suma d'una quantitat igual és igual a n més la suma de n almenys 1. 908 00:50:25,890 --> 00:50:28,010 Té això sentit? 909 00:50:28,010 --> 00:50:32,630 >> I jo també tindria una mica més anomenat el cas base, que és que 910 00:50:32,630 --> 00:50:37,440 la suma dels nombres fins a zero seria zero. 911 00:50:37,440 --> 00:50:42,770 Així que tan aviat com arribi al nombre zero, d'aturar el recompte. 912 00:50:42,770 --> 00:50:45,330 Té això sentit? 913 00:50:45,330 --> 00:50:48,120 >> Així que aquí està un exemple de com Puc aplicar això. 914 00:50:48,120 --> 00:50:49,860 Així que tinc aquesta funció en alguns. 915 00:50:49,860 --> 00:50:51,700 Per això es necessita un enter n. 916 00:50:51,700 --> 00:50:56,300 Així que aquí primer comprovo si n és menys o igual a zero. 917 00:50:56,300 --> 00:51:00,310 Així que si és menor o igual a zero, I tornar zero, que és el nostre cas base. 918 00:51:00,310 --> 00:51:05,690 En cas contrari, només pot tornar n més la suma dels números de 919 00:51:05,690 --> 00:51:07,190 un a n menys un. 920 00:51:07,190 --> 00:51:09,360 Té sentit? 921 00:51:09,360 --> 00:51:10,100 Okay. 922 00:51:10,100 --> 00:51:11,610 >> Així que aquí està el que sembla. 923 00:51:11,610 --> 00:51:15,260 Té suma de 2 parells 2 més la suma d'1. 924 00:51:15,260 --> 00:51:18,930 I alguns 1 és 1 més l' suma 0, que és 0. 925 00:51:18,930 --> 00:51:20,216 Té sentit? 926 00:51:20,216 --> 00:51:25,342 Així que si ens fixem en la pila de la seva programa, això és el que sembla. 927 00:51:25,342 --> 00:51:26,820 >> En primer lloc, tenim la funció principal. 928 00:51:26,820 --> 00:51:30,320 I a continuació, la funció principal anomenada suma 2. 929 00:51:30,320 --> 00:51:36,690 I a continuació, suma 2 que va a dir, oh, suma 2 és igual a 2, més la suma d'un. 930 00:51:36,690 --> 00:51:39,460 Així que afegeixo suma d'1 a la pila. 931 00:51:39,460 --> 00:51:43,860 I la suma d'1 va a cridar suma 0, que també serà afegit 932 00:51:43,860 --> 00:51:44,630 a la pila. 933 00:51:44,630 --> 00:51:49,240 I llavors cadascun d'aquests els que estan a la part superior d'un altre haver de tornar 934 00:51:49,240 --> 00:51:52,020 abans que els altres poden seguir endavant. 935 00:51:52,020 --> 00:51:56,240 >> Així, per exemple, aquí, suma de 0, en primer lloc, es va a tornar 0. 936 00:51:56,240 --> 00:51:58,320 I a continuació, escolliu suma d'1. 937 00:51:58,320 --> 00:52:00,850 Després suma d'1 va a retorna 1 a la suma de 2. 938 00:52:00,850 --> 00:52:03,900 I finalment, suma de 2 va per tornar a la principal 3. 939 00:52:03,900 --> 00:52:05,320 Té això sentit? 940 00:52:05,320 --> 00:52:09,496 >> És molt important entendre com la pila està treballant i tractar de 941 00:52:09,496 --> 00:52:11,980 veure si té sentit. 942 00:52:11,980 --> 00:52:13,260 Acceptar, de manera que la classificació. 943 00:52:13,260 --> 00:52:16,170 Així que per què és important la classificació, abans de res? 944 00:52:16,170 --> 00:52:18,260 Per què hauria d'importar? 945 00:52:18,260 --> 00:52:20,310 Algú? 946 00:52:20,310 --> 00:52:20,695 Dóna'm un exemple? 947 00:52:20,695 --> 00:52:21,040 Sí? 948 00:52:21,040 --> 00:52:22,968 >> AUDIÈNCIA: [inaudible]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Sí, està bé. 950 00:52:24,700 --> 00:52:26,090 Així que vostè pot buscar de manera més eficient. 951 00:52:26,090 --> 00:52:28,580 Això és una bona manera. 952 00:52:28,580 --> 00:52:32,462 Així, per exemple, tenim una gran quantitat de coses, en realitat, en les nostres vides que 953 00:52:32,462 --> 00:52:32,920 s'ordenen. 954 00:52:32,920 --> 00:52:34,830 Per exemple, els diccionaris. 955 00:52:34,830 --> 00:52:39,210 >> És molt important tenir tota la paraules en algun tipus d'ordre que 956 00:52:39,210 --> 00:52:41,970 pot accedir fàcilment. 957 00:52:41,970 --> 00:52:43,280 Així que això és el que estava dient. 958 00:52:43,280 --> 00:52:45,530 Vostè pot buscar de manera més eficient. 959 00:52:45,530 --> 00:52:48,740 Penseu en el difícil que seria tenir un diccionari en el qual les paraules estan en 960 00:52:48,740 --> 00:52:49,500 ordre aleatori. 961 00:52:49,500 --> 00:52:53,120 Vas a haver de veure, més o menys, cada paraula fins que trobi el 962 00:52:53,120 --> 00:52:54,720 paraula que vostè està buscant. 963 00:52:54,720 --> 00:52:58,710 >> Si utilitzeu Facebook També, quan el que busques en els teus amics, ets 964 00:52:58,710 --> 00:53:03,540 veurem que Facebook posa a la seva amic més proper és al cim dels 965 00:53:03,540 --> 00:53:05,470 que no parla amb tant. 966 00:53:05,470 --> 00:53:08,080 Si vostè va tot el camí fins a la part inferior de la llista d'amics, vas a veure 967 00:53:08,080 --> 00:53:11,250 persones que probablement ni tan sols recordi que vostè és amic de. 968 00:53:11,250 --> 00:53:14,590 I això és perquè les classes de Facebook seus amics en funció de com 969 00:53:14,590 --> 00:53:16,472 a prop està d'ells. 970 00:53:16,472 --> 00:53:17,930 >> Així que l'organització de les dades. 971 00:53:17,930 --> 00:53:18,450 També Pokémon. 972 00:53:18,450 --> 00:53:21,400 Així que ja veus que tots els Pokémons tenir números. 973 00:53:21,400 --> 00:53:27,210 I això és com un fàcil forma d'accedir a les dades. 974 00:53:27,210 --> 00:53:29,050 >> AUDIÈNCIA: Accés a Pokémon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Si. 976 00:53:29,890 --> 00:53:32,395 >> AUDIÈNCIA: [inaudible]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Yep. 978 00:53:33,460 --> 00:53:35,140 Acceptar, de manera que la selecció de classificació. 979 00:53:35,140 --> 00:53:41,610 Selecció tipus va a seleccionar el menys valor sense ordenar d'una llista cada 980 00:53:41,610 --> 00:53:43,300 temps en cada iteració. 981 00:53:43,300 --> 00:53:46,800 És una mica com el tipus que ho fa en el seu cap quan vostè està tractant de 982 00:53:46,800 --> 00:53:48,430 ordenar una llista a la mà. 983 00:53:48,430 --> 00:53:51,990 >> Bàsicament, tot el que fem és mirar per al número més petit. 984 00:53:51,990 --> 00:53:54,280 T'ho poses a la llista ordenada. 985 00:53:54,280 --> 00:53:56,230 I després busca la següent nombre més petit. 986 00:53:56,230 --> 00:54:00,080 I després segueixes fent que i així successivament. 987 00:54:00,080 --> 00:54:04,600 >> Així que la selecció espècie és, bàsicament, que seleccionar cada vegada que el més petit 988 00:54:04,600 --> 00:54:05,750 valor sense classificar. 989 00:54:05,750 --> 00:54:10,840 Poseu al final de l'ordenada part de la llista. 990 00:54:10,840 --> 00:54:12,370 I seguir fent això. 991 00:54:12,370 --> 00:54:15,890 Així que anem a veure ràpidament el que això s'assembla. 992 00:54:15,890 --> 00:54:19,340 Així que aquí està l'ordenada i la llista sense ordenar. 993 00:54:19,340 --> 00:54:23,350 >> Així que per l'ordenada de la llista, és inicialment buida. 994 00:54:23,350 --> 00:54:26,760 I després vaig a seleccionar el menor nombre aquí, que és 2. 995 00:54:26,760 --> 00:54:30,650 Així que tinc el número 2 i poso a la part davantera de la llista. 996 00:54:30,650 --> 00:54:34,910 I llavors miro a la immediata inferior element, que és 3. 997 00:54:34,910 --> 00:54:37,050 Així que el vaig posar al final de la llista ordenada. 998 00:54:37,050 --> 00:54:38,140 I després segueixo fent això. 999 00:54:38,140 --> 00:54:40,040 Trobada 4 i el vaig posar al final. 1000 00:54:40,040 --> 00:54:41,360 Trobar 5 i el va posar al final. 1001 00:54:41,360 --> 00:54:44,830 >> I mira com tots aquests moments que Estic dient el va posar al final és, 1002 00:54:44,830 --> 00:54:46,850 bàsicament, el canvi de dues valors. 1003 00:54:46,850 --> 00:54:48,100 D'acord? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 I després l'última, que acaba de tenir un element més. 1006 00:54:52,825 --> 00:54:55,870 Així que ja està solucionat. 1007 00:54:55,870 --> 00:54:57,800 >> Acceptar, de manera que l'ordenació per inserció. 1008 00:54:57,800 --> 00:55:03,180 L'ordenació per inserció que tindrem també aquesta cosa de tenir un ordenat i 1009 00:55:03,180 --> 00:55:04,690 una llista sense ordenar. 1010 00:55:04,690 --> 00:55:14,540 L'únic és que cada vegada que va a afegir un element a l'ordenada 1011 00:55:14,540 --> 00:55:18,170 llista, que acaba de recollir l'element que està al davant de la llista sense ordenar. 1012 00:55:18,170 --> 00:55:20,880 I després vas a trobar el posició en què ha d'estar en l'ordenada 1013 00:55:20,880 --> 00:55:22,300 part de la llista. 1014 00:55:22,300 --> 00:55:25,840 >> Anem a veure què això és així això té més sentit. 1015 00:55:25,840 --> 00:55:29,360 Així que al principi, per exemple, estic intentant per inserir el número tres de la 1016 00:55:29,360 --> 00:55:30,680 part ordenada de la llista. 1017 00:55:30,680 --> 00:55:31,800 Així que la llista no té res. 1018 00:55:31,800 --> 00:55:34,160 Així que només puc posar el número 3. 1019 00:55:34,160 --> 00:55:37,480 >> Ara, vull afegir el número 5 a la part ordenada de la llista. 1020 00:55:37,480 --> 00:55:38,900 Així que miro el número 5. 1021 00:55:38,900 --> 00:55:40,450 M'adono que és més gran que 3. 1022 00:55:40,450 --> 00:55:41,980 Així que sé que ha de ser després de les 3. 1023 00:55:41,980 --> 00:55:44,100 Així que vaig posar 3 i 5. 1024 00:55:44,100 --> 00:55:45,940 >> Llavors vull inserir el número 2. 1025 00:55:45,940 --> 00:55:51,630 M'adono que el nombre 2 és en realitat durar llavors tots dos 3 i 5. 1026 00:55:51,630 --> 00:55:54,580 Així que en realitat he de posar tot l' camí en el principi de la llista. 1027 00:55:54,580 --> 00:55:59,030 Així que he de fer, classe d', traslladar tota la elements en la llista ordenada de manera que pugui 1028 00:55:59,030 --> 00:56:01,970 fer espai per al número 2. 1029 00:56:01,970 --> 00:56:03,160 >> Llavors veig el número 6. 1030 00:56:03,160 --> 00:56:05,450 Veig que hauria de ser després de les 5. 1031 00:56:05,450 --> 00:56:06,240 Així que el vaig posar aquí. 1032 00:56:06,240 --> 00:56:07,965 I, finalment, em veig en el nombre 4. 1033 00:56:07,965 --> 00:56:11,030 I m'adono que hauria estar entre 3 i 5. 1034 00:56:11,030 --> 00:56:14,870 I llavors em vaig posar aquí i canvi tots els altres elements. 1035 00:56:14,870 --> 00:56:16,120 Té sentit? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> La classe de bombolla. 1038 00:56:19,150 --> 00:56:25,730 Així ordenament de bombolla és bàsicament el que està va a fer-- en diem bombolla 1039 00:56:25,730 --> 00:56:30,113 espècie, perquè vostè va a través de la llista-- en realitat és millor que em mostro 1040 00:56:30,113 --> 00:56:32,300 t'agrada esto-- 1041 00:56:32,300 --> 00:56:35,030 i vas a comparar nombres adjacents. 1042 00:56:35,030 --> 00:56:38,410 I vostè va a canviar la seva posicions si no estan 1043 00:56:38,410 --> 00:56:39,190 en l'ordre correcte. 1044 00:56:39,190 --> 00:56:42,570 >> Així que, bàsicament, el que va a passar és que aquí, per exemple, 1045 00:56:42,570 --> 00:56:44,160 Té 8 i 6. 1046 00:56:44,160 --> 00:56:47,270 Vostè sap que l'ordre de classificació serà en realitat ser de 6 i 5, oi? 1047 00:56:47,270 --> 00:56:49,540 Així que vas a canviar les ordres. 1048 00:56:49,540 --> 00:56:51,370 Llavors veig 8 i 4 aquí. 1049 00:56:51,370 --> 00:56:52,250 I jo faig el mateix. 1050 00:56:52,250 --> 00:56:53,400 Em canviaré de nou. 1051 00:56:53,400 --> 00:56:55,070 I, finalment, 2 i 8. 1052 00:56:55,070 --> 00:56:56,670 També els swap. 1053 00:56:56,670 --> 00:57:01,690 >> Es diu la classe de bombolla perquè després cadascuna d'aquestes iteracions, en realitat, 1054 00:57:01,690 --> 00:57:05,910 el major número a la llista rep tota el camí fins al final de la llista. 1055 00:57:05,910 --> 00:57:06,940 Té això sentit? 1056 00:57:06,940 --> 00:57:11,880 Perquè manté intercanviar i movent cap a la dreta. 1057 00:57:11,880 --> 00:57:14,440 >> OK, així que aquesta és la segona iteració. 1058 00:57:14,440 --> 00:57:17,200 Seria el mateix. 1059 00:57:17,200 --> 00:57:20,190 Vaig a fer un intercanvi i a continuació, l'últim. 1060 00:57:20,190 --> 00:57:23,290 I que no hi ha swaps i la llista està ordenada. 1061 00:57:23,290 --> 00:57:27,460 Així que a la classe de bombolla, que bàsicament mantenim anar a través de la llista i l'intercanvi 1062 00:57:27,460 --> 00:57:32,310 coses fins que m'adono que jo no vaig fer qualsevol swaps fent aquesta iteració, que 1063 00:57:32,310 --> 00:57:34,270 significa que la llista ja està ordenat. 1064 00:57:34,270 --> 00:57:35,520 Té sentit? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Anem a parlar una mica sobre el temps de funcionament. 1067 00:57:40,870 --> 00:57:45,165 Així que és el que vostès recordin Gran O, Omega, i Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Sí? 1070 00:57:50,990 --> 00:57:53,070 Bé, què és Big O, en primer lloc? 1071 00:57:53,070 --> 00:57:54,315 >> AUDIÈNCIA: [inaudible]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Sí, es diu el pitjor cas temps d'execució, la qual cosa només vol dir que és 1073 00:57:59,070 --> 00:58:03,470 quant espera el programa prendre per funcionar. 1074 00:58:03,470 --> 00:58:04,910 Igual que, en termes de-- 1075 00:58:04,910 --> 00:58:06,660 en aquest cas-- n. 1076 00:58:06,660 --> 00:58:09,150 El nombre d'elements en la llista en el pitjor dels casos. 1077 00:58:09,150 --> 00:58:12,520 Igual que, en el pitjor dels casos possibles. 1078 00:58:12,520 --> 00:58:17,100 >> Així que per a la classe de bombolla, per exemple, tenim Big O de n quadrat. 1079 00:58:17,100 --> 00:58:20,580 Per què hem de? 1080 00:58:20,580 --> 00:58:24,716 Per què és la classe de bombolla Big O n quadrada? 1081 00:58:24,716 --> 00:58:27,614 >> AUDIÈNCIA: [inaudible]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Sí, de manera que el pitjor dels casos serà que vaig a haver de fer n iteracions. 1083 00:58:35,670 --> 00:58:39,260 Així que cadascuna de les iteracions es va a portar l'element més gran fins al final 1084 00:58:39,260 --> 00:58:40,290 de la llista. 1085 00:58:40,290 --> 00:58:44,230 Així que el pitjor dels casos és que tinc per fer aquesta cosa n vegades. 1086 00:58:44,230 --> 00:58:48,550 I per a cada un d'aquests moments, he de fer n swaps perquè he de comparar 1087 00:58:48,550 --> 00:58:49,870 cadascun dos elements. 1088 00:58:49,870 --> 00:58:53,730 Així que per això està n al quadrat perquè és n vegades n. 1089 00:58:53,730 --> 00:59:00,120 >> Llavors, la selecció de gènere és també n quadrada perquè, per a cada iteració, he de 1090 00:59:00,120 --> 00:59:02,650 mirar cada element individual a la llista. 1091 00:59:02,650 --> 00:59:04,980 I després trobar el més petit, el que significa que he de 1092 00:59:04,980 --> 00:59:06,130 mirar a través de n elements. 1093 00:59:06,130 --> 00:59:11,750 I he de fer que n vegades perquè He de seleccionar tots els elements n. 1094 00:59:11,750 --> 00:59:18,273 >> Una ordenació per inserció és també n quadrada pel fet que el pitjor dels casos ho farà 1095 00:59:18,273 --> 00:59:20,950 ser, un, he de inserir n nombres, oi? 1096 00:59:20,950 --> 00:59:22,765 Així que ja sé que vaig tenir n iteracions. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Però per a cadascun d'aquests nombres, si tingués per mirar a tots els números en 1099 00:59:29,840 --> 00:59:34,380 la llista ordenada i el va posar tot el camí a la part davantera, que serà n quadrada 1100 00:59:34,380 --> 00:59:36,230 perquè serà n vegades n de nou. 1101 00:59:36,230 --> 00:59:38,280 Té sentit? 1102 00:59:38,280 --> 00:59:41,512 Què passa amb omega? 1103 00:59:41,512 --> 00:59:42,886 >> AUDIÈNCIA: [inaudible]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: És el millor dels casos. 1105 00:59:44,620 --> 00:59:48,810 Així és com, en un munt de vegades per classificació, el millor dels casos és 1106 00:59:48,810 --> 00:59:50,660 quan la llista ja està ordenat. 1107 00:59:50,660 --> 00:59:52,670 Així que vostè realment no té de fer res. 1108 00:59:52,670 --> 00:59:56,290 La classe de bombolla té la millor dels casos de n. 1109 00:59:56,290 --> 00:59:58,820 ¿Coneix usuaris per què? 1110 00:59:58,820 --> 01:00:00,620 >> AUDIÈNCIA: [inaudible]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Sí, si vostè no perd de si la ració de dades tenia cap swaps o 1112 01:00:05,640 --> 01:00:10,533 No, si vostè té una mena s'estableix a veritable si hi havia una iteració, si el 1113 01:00:10,533 --> 01:00:15,140 llista ja està ordenat, bàsicament, el que passarà és que vaig a 1114 01:00:15,140 --> 01:00:17,890 intentar canviar cada dos elements adjacents. 1115 01:00:17,890 --> 01:00:19,920 Vaig a veure que no hi ha swaps. 1116 01:00:19,920 --> 01:00:21,230 I jo acabo de tornar immediatament. 1117 01:00:21,230 --> 01:00:24,240 >> Així que això significa que jo només havia de anar a través de la llista una vegada. 1118 01:00:24,240 --> 01:00:28,990 Així que és n perquè em veig en n elements. 1119 01:00:28,990 --> 01:00:30,930 Per què la selecció tipus n quadrar? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Sí, encara que la llista està ordenada, per cada iteració de l'ordenament per selecció, em 1122 01:00:45,520 --> 01:00:47,590 de seleccionar l'element mínim. 1123 01:00:47,590 --> 01:00:49,980 Així que això significa que he de sortir a buscar en tots els elements en el sense classificar 1124 01:00:49,980 --> 01:00:53,350 llistar i trobar el mínim per a cada iteració. 1125 01:00:53,350 --> 01:00:54,600 Té això sentit? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> I l'espasa d'inserció està n perquè al cas que estic tractant d'inserir el 1128 01:01:04,690 --> 01:01:09,320 nombres i tots els números, quan em intentar inserir, veig que 1129 01:01:09,320 --> 01:01:10,510 estan en la posició correcta. 1130 01:01:10,510 --> 01:01:15,120 Jo no he d'anar a veure tots els altres números de la llista sense ordenar. 1131 01:01:15,120 --> 01:01:17,170 Així que per això serà n. 1132 01:01:17,170 --> 01:01:19,480 Té sentit? 1133 01:01:19,480 --> 01:01:21,035 I el que és theta? 1134 01:01:21,035 --> 01:01:23,410 >> AUDIÈNCIA: [inaudible]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Què, ho sento? 1136 01:01:24,380 --> 01:01:24,960 Digues-ho de nou. 1137 01:01:24,960 --> 01:01:25,666 >> AUDIÈNCIA: [inaudible]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Exactament. 1139 01:01:26,490 --> 01:01:31,280 Així es pot veure que només la selecció emmagatzemada en Merge sort tenir theta. 1140 01:01:31,280 --> 01:01:39,920 I això és perquè només tens theta si tots dos Big O i Omega són la mateixa. 1141 01:01:39,920 --> 01:01:41,520 Okay. 1142 01:01:41,520 --> 01:01:44,210 I, finalment, fusionar és un gènere en el registre n. 1143 01:01:44,210 --> 01:01:48,910 >> I llavors, com Dan estava dient, Merge sort és una espècie de la mateixa manera que 1144 01:01:48,910 --> 01:01:50,320 vostè fa una recerca binària. 1145 01:01:50,320 --> 01:01:53,530 Així s'obté la llista. 1146 01:01:53,530 --> 01:01:55,170 I vostè va a tallar per la meitat. 1147 01:01:55,170 --> 01:02:00,580 I després d'haver-los tallat en meitats més petites. 1148 01:02:00,580 --> 01:02:01,730 I després combinar-los. 1149 01:02:01,730 --> 01:02:02,960 Vostès recordes, oi? 1150 01:02:02,960 --> 01:02:04,960 Acceptar, com ell deia. 1151 01:02:04,960 --> 01:02:08,330 >> Acceptar, punters. 1152 01:02:08,330 --> 01:02:11,078 Llavors, què és un punter? 1153 01:02:11,078 --> 01:02:12,050 >> AUDIÈNCIA: [inaudible]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: Una adreça. 1155 01:02:12,820 --> 01:02:13,720 Okay. 1156 01:02:13,720 --> 01:02:18,530 Sé que David mostra un munt de videos de Binky i coses que apunten 1157 01:02:18,530 --> 01:02:19,080 L'un a l'altre. 1158 01:02:19,080 --> 01:02:22,960 Però m'agrada pensar de punters simplement com una adreça. 1159 01:02:22,960 --> 01:02:26,110 Així que és una variable que es va per emmagatzemar una adreça. 1160 01:02:26,110 --> 01:02:31,940 >> Així que és només aquesta variable especial és a dir, quatre bytes de longitud. 1161 01:02:31,940 --> 01:02:36,550 Recordeu, que per res és punter sempre de quatre bytes de longitud per al nostre 32 bits 1162 01:02:36,550 --> 01:02:39,370 màquina perquè el cas amb l'aparell. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 I que només té la ubicació d'una variable dins de la mateixa. 1165 01:02:47,050 --> 01:02:50,240 >> OK, així que hi ha aquesta memòria, bàsicament. 1166 01:02:50,240 --> 01:02:57,420 Així que cada bloc de memòria té en realitat un etiqueta, que és la direcció de la 1167 01:02:57,420 --> 01:02:58,890 memòria Slotty. 1168 01:02:58,890 --> 01:03:02,370 Així que això significa que puc tenir un punter que apunta a 1169 01:03:02,370 --> 01:03:03,380 qualsevol d'aquestes adreces. 1170 01:03:03,380 --> 01:03:09,930 Així que la raó per la que utilitzarem punters és si he de recordar la ubicació 1171 01:03:09,930 --> 01:03:12,300 que una variable específica és un record. 1172 01:03:12,300 --> 01:03:16,560 >> I vostès recorda que un dels casos era si tinc una funció 1173 01:03:16,560 --> 01:03:20,820 que si tinc realment vol intercanvi de reals, en realitat 1174 01:03:20,820 --> 01:03:22,110 d'enviar un punter. 1175 01:03:22,110 --> 01:03:23,460 No és la variable. 1176 01:03:23,460 --> 01:03:25,200 Vostès es recorden? 1177 01:03:25,200 --> 01:03:26,450 El between-- diferència 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 ¿Com es diu? 1180 01:03:34,120 --> 01:03:36,010 Trucant per valor i cridar per referència, no? 1181 01:03:36,010 --> 01:03:36,840 >> Bé, sí. 1182 01:03:36,840 --> 01:03:38,330 Així que truqui per valor. 1183 01:03:38,330 --> 01:03:43,570 Quan vostè acaba d'enviar una variable funció que està enviant un valor. 1184 01:03:43,570 --> 01:03:45,610 Així que en realitat estàs enviant una còpia de la variable. 1185 01:03:45,610 --> 01:03:49,720 I el seu programa no podria importar menys sobre si la mateixa variable en realitat 1186 01:03:49,720 --> 01:03:51,650 fa una còpia. 1187 01:03:51,650 --> 01:03:56,330 >> I trucant per referència vol dir que En realitat estic enviant una còpia de la 1188 01:03:56,330 --> 01:03:57,550 punter a aquesta variable. 1189 01:03:57,550 --> 01:04:00,970 Així que això significa que estic enviant la ubicació d'aquesta variable. 1190 01:04:00,970 --> 01:04:04,440 Així que sentir que tinc la ubicació de la variables, quan truco a la funció 1191 01:04:04,440 --> 01:04:09,700 amb punters, sóc capaç de realitat canviar les dades que eren a la principal. 1192 01:04:09,700 --> 01:04:12,050 Té sentit? 1193 01:04:12,050 --> 01:04:17,560 >> Encara que, el punter és una còpia, l' punter encara té l'adreça real de 1194 01:04:17,560 --> 01:04:20,090 la variable que vull canviar. 1195 01:04:20,090 --> 01:04:21,920 Té sentit? 1196 01:04:21,920 --> 01:04:24,290 >> Així que la creació de punters. 1197 01:04:24,290 --> 01:04:28,410 Recordeu, el punter sempre tenen el tipus que s'està apuntant 1198 01:04:28,410 --> 01:04:29,890 i després a un estel. 1199 01:04:29,890 --> 01:04:31,030 I a continuació, posar el nom. 1200 01:04:31,030 --> 01:04:35,765 Així que recordi que cada vegada que tingui qualsevol que sigui l'estrella, que és un punter a 1201 01:04:35,765 --> 01:04:38,990 que qualsevol que sigui la variable escrigui que vostè tenia. 1202 01:04:38,990 --> 01:04:42,850 >> Així que aquí a estrella, per exemple, és un punter i un enter. 1203 01:04:42,850 --> 01:04:47,680 I llavors estrella char és un punter Char estrella i així successivament. 1204 01:04:47,680 --> 01:04:47,960 Sí? 1205 01:04:47,960 --> 01:04:52,710 >> AUDIÈNCIA: Què passa si tenim un punter a n x a l'estrella. 1206 01:04:52,710 --> 01:04:55,255 Sé que crea un punter a x. 1207 01:04:55,255 --> 01:04:59,432 També declarem x un nombre enter? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, així que quan vostè diu n estrella x, no crearà un punter a una 1209 01:05:05,170 --> 01:05:06,000 x variable. 1210 01:05:06,000 --> 01:05:08,170 Estàs creant un punter anomenat x. 1211 01:05:08,170 --> 01:05:09,396 >> AUDIÈNCIA: [inaudible]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: Així que quan dic n estrella x, estic dient, hey, en la memòria, vaig a 1213 01:05:14,250 --> 01:05:16,390 aconseguir una d'aquestes tres caixes. 1214 01:05:16,390 --> 01:05:20,750 I jo vaig a dir que això serà x, que és 1215 01:05:20,750 --> 01:05:22,000 serà un punter. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 I alguna cosa interessant de punters és que ens diuen que tenen 1218 01:05:30,640 --> 01:05:32,620 4 bytes per a una màquina de 32 bits. 1219 01:05:32,620 --> 01:05:36,320 I la raó d'això és perquè 4 bytes són 32 bits. 1220 01:05:36,320 --> 01:05:40,490 >> I màquines que són 64 bits en realitat tenir adreces punters 1221 01:05:40,490 --> 01:05:43,480 que són 64 bits de longitud. 1222 01:05:43,480 --> 01:05:49,820 Pel que només significa que la mida de la adreces de la màquina és diferent. 1223 01:05:49,820 --> 01:05:52,270 >> Així que fer referència i Desreferenciar. 1224 01:05:52,270 --> 01:05:54,310 Hi ha dos operadors que vostès han de recordar. 1225 01:05:54,310 --> 01:05:55,450 La primera és ampersand. 1226 01:05:55,450 --> 01:05:56,810 La segona és l'estrella. 1227 01:05:56,810 --> 01:06:05,060 No confongui per aquesta estrella i això estrella, perquè recordar que, en 1228 01:06:05,060 --> 01:06:06,950 aquest cas, vostè té n l'estrella. 1229 01:06:06,950 --> 01:06:08,700 >> És com una cosa sencera junts. 1230 01:06:08,700 --> 01:06:10,720 No hi ha espai estrella n. 1231 01:06:10,720 --> 01:06:12,070 Així que això significa que és el tipus. 1232 01:06:12,070 --> 01:06:14,870 Recordeu que quan vostè té l'estrella variable, ets 1233 01:06:14,870 --> 01:06:16,230 parlant sobre el tipus. 1234 01:06:16,230 --> 01:06:20,540 >> Quan vostè acaba d'estrelles i després el nom de la variable, vol dir que 1235 01:06:20,540 --> 01:06:24,100 estàs eliminació de referències al punter, que vol dir que vostè està buscant en el 1236 01:06:24,100 --> 01:06:28,290 punter, la recerca de la direcció és assenyalant, anar a aquesta direcció, 1237 01:06:28,290 --> 01:06:30,850 i mirant sempre que tens aquí. 1238 01:06:30,850 --> 01:06:34,310 Així que els dic als meus estudiants que quan es té estrella, cal pensar que és 1239 01:06:34,310 --> 01:06:36,850 l'abreviatura dels continguts d'. 1240 01:06:36,850 --> 01:06:39,770 >> Així que si vostè té un punter i fer indicador de l'estrella, que és la 1241 01:06:39,770 --> 01:06:41,720 contingut del punter. 1242 01:06:41,720 --> 01:06:44,580 Així que anar al que està assenyalant i mirar el contingut constant. 1243 01:06:44,580 --> 01:06:47,730 I el signe és el mateix El que la direcció de. 1244 01:06:47,730 --> 01:06:52,560 >> Així que si tinc una variable un-- com, anem a dir que em vaig fer un int és igual 3-- 1245 01:06:52,560 --> 01:06:56,900 si vull trobar la direcció d'aquest una memòria de variables, només puc fer 1246 01:06:56,900 --> 01:06:58,240 ampersand a. 1247 01:06:58,240 --> 01:07:00,280 Així que és la direcció d'un. 1248 01:07:00,280 --> 01:07:01,530 Té sentit? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> Així que aquí està un exemple. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Aquesta manca int b i c int. 1253 01:07:11,530 --> 01:07:16,520 Així int a és igual a 3 vol dir que Vaig a anar a la memòria. 1254 01:07:16,520 --> 01:07:19,870 I vaig a trobar una ranura i posar el número 3 aquí. 1255 01:07:19,870 --> 01:07:22,200 >> I llavors int b és igual a 4. 1256 01:07:22,200 --> 01:07:23,100 Vaig a fer el mateix. 1257 01:07:23,100 --> 01:07:25,840 Anar a la memòria i posar un nombre 4 en una de les caixes. 1258 01:07:25,840 --> 01:07:27,100 I int igual a 5. 1259 01:07:27,100 --> 01:07:29,740 Troba una altra caixa i posar un número 5. 1260 01:07:29,740 --> 01:07:36,160 >> Llavors, què és aquesta línia fent fora? pa n estrella és igual a un signe. 1261 01:07:36,160 --> 01:07:37,800 Així que primer de tot, n pa estrella. 1262 01:07:37,800 --> 01:07:39,050 Què està fent? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> AUDIÈNCIA: [inaudible]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Sí, així que n pa estrella, primer, declara un punter anomenat pa. 1266 01:07:47,890 --> 01:07:53,720 I després hi ha l'assignació del valor que sigui punter a la direcció d'una. 1267 01:07:53,720 --> 01:07:55,790 Així ampersand a. 1268 01:07:55,790 --> 01:07:58,510 Llavors, si ho faig pb estrella, el que és un pb estrella? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Oh, ho sento. 1271 01:08:03,150 --> 01:08:06,330 Això també ha desaparegut. pb estrella n. 1272 01:08:06,330 --> 01:08:07,905 Vull dir pc estrelles. 1273 01:08:07,905 --> 01:08:11,200 Ho sento molt. 1274 01:08:11,200 --> 01:08:11,940 És la mateixa cosa. 1275 01:08:11,940 --> 01:08:16,408 Però ara estic bé ar la creació d'un punter ab i després un punter a c. 1276 01:08:16,408 --> 01:08:16,886 Sí? 1277 01:08:16,886 --> 01:08:18,136 >> AUDIÈNCIA: [inaudible]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Sí. 1280 01:08:26,670 --> 01:08:32,630 Així que si vas a la memòria i que vagi a la caixa que és el designador de pa, 1281 01:08:32,630 --> 01:08:37,149 realment vas a veure l'adreça d'un. 1282 01:08:37,149 --> 01:08:38,399 D'acord? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Sí? 1285 01:08:43,300 --> 01:08:45,605 >> AUDIÈNCIA: [inaudible]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Sí, el punter és una adreça. 1287 01:08:49,260 --> 01:08:50,120 Mai ho oblidis. 1288 01:08:50,120 --> 01:08:52,800 És com el més important part dels punters. 1289 01:08:52,800 --> 01:08:56,180 Hi emmagatzemar i direcció a alguna variable. 1290 01:08:56,180 --> 01:08:56,890 Una mica més? 1291 01:08:56,890 --> 01:08:58,370 Alguna altra pregunta? 1292 01:08:58,370 --> 01:08:59,189 Okay. 1293 01:08:59,189 --> 01:09:00,399 >> Així Punters i matrius. 1294 01:09:00,399 --> 01:09:08,189 Recordeu que quan faig int matriu de 3, Bàsicament, el que estic fent és que sóc, bé 1295 01:09:08,189 --> 01:09:12,779 d', declarant en un punter. 1296 01:09:12,779 --> 01:09:18,960 Així matriu és com un punter a una lloc específic en la memòria en la qual 1297 01:09:18,960 --> 01:09:21,999 assignat tres ranures per a enters. 1298 01:09:21,999 --> 01:09:23,430 Té això sentit? 1299 01:09:23,430 --> 01:09:30,250 >> Així que quan ho faig int matriu de 3, el que estic fent, bàsicament, és la creació de tres 1300 01:09:30,250 --> 01:09:31,479 ranures en la memòria. 1301 01:09:31,479 --> 01:09:33,899 Així que em trobo tres ranures de memòria. 1302 01:09:33,899 --> 01:09:38,810 Així que si ho faig, llavors, una matriu d'estrelles, bàsicament vol dir que el contingut de la matriu, 1303 01:09:38,810 --> 01:09:46,180 el que significa que esborro el punter, vaig a aquest lloc que està assenyalant, 1304 01:09:46,180 --> 01:09:47,939 i vaig posar el número u. 1305 01:09:47,939 --> 01:09:53,729 >> I després, si ho faig array estrella més 1, això és el mateix que fer array 1306 01:09:53,729 --> 01:09:59,690 suports d'un, que només vol dir que em vaig a el lloc que està apuntant a. 1307 01:09:59,690 --> 01:10:03,000 I llavors el més gener marques em moc una posició. 1308 01:10:03,000 --> 01:10:06,510 Així que vaig a aquesta posició, en realitat, i posar el número dos. 1309 01:10:06,510 --> 01:10:10,900 >> I llavors, per fi, quan ho faig gamma més 2, vaig a on 1310 01:10:10,900 --> 01:10:11,825 senyalador de matriu en. 1311 01:10:11,825 --> 01:10:14,690 I llavors em mut a blocs de memòria. 1312 01:10:14,690 --> 01:10:16,240 I llavors em vaig posar el número tres aquí. 1313 01:10:16,240 --> 01:10:16,600 Sí? 1314 01:10:16,600 --> 01:10:21,400 >> AUDIÈNCIA: array Així estrella és simplement dient que el primer punt. 1315 01:10:21,400 --> 01:10:25,090 I vostè pot afegir 1, només perquè només estem realment 1316 01:10:25,090 --> 01:10:27,295 referència a aquesta primera direcció. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Si. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Per què, per exemple, diem array 0, 1 camp, i la matriu 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Que dic, per què fas 0, 1, 2, 3 en lloc d'1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Una de les raons és, un, equip programadors prefereixen començar 1323 01:10:46,550 --> 01:10:47,750 comptant des de 0. 1324 01:10:47,750 --> 01:10:52,370 Dos és perquè quan fas matriu 0, és el mateix que fer array 1325 01:10:52,370 --> 01:10:56,330 més de 0, el que significa que vaig a aquesta posició, i no ho faig 1326 01:10:56,330 --> 01:10:59,320 ometre qualsevol bloc de memòria. 1327 01:10:59,320 --> 01:11:01,750 Així que no em moc de qualsevol bloc de memòria. 1328 01:11:01,750 --> 01:11:02,015 Sí? 1329 01:11:02,015 --> 01:11:03,265 >> AUDIÈNCIA: [inaudible]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: Així que ella està demanant el que és la diferència entre fer 1332 01:11:12,670 --> 01:11:14,000 això o fer malloc. 1333 01:11:14,000 --> 01:11:17,550 Una de les diferències és que int sèrie 3 és la creació d'un 1334 01:11:17,550 --> 01:11:19,260 matriu a la pila. 1335 01:11:19,260 --> 01:11:23,080 I quan ho faci malloc, que crea en el munt. 1336 01:11:23,080 --> 01:11:25,250 Té això sentit? 1337 01:11:25,250 --> 01:11:28,870 >> Llavors, com funciona malloc realitat? 1338 01:11:28,870 --> 01:11:32,245 Llavors, per què necessitem utilitzar malloc? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 El seu compilador tipus de figures tot les variables que es declaren. 1341 01:11:39,700 --> 01:11:44,040 I es crea un espai per a tots d'ells a la pila. 1342 01:11:44,040 --> 01:11:47,180 Així que totes les variables es van estar en algun lloc a la pila. 1343 01:11:47,180 --> 01:11:49,460 Així que aquí està les variables d'entorn. 1344 01:11:49,460 --> 01:11:53,850 >> Així que, bàsicament, l'espai per a les variables en la memòria s'assigna a 1345 01:11:53,850 --> 01:11:55,080 temps de compilació. 1346 01:11:55,080 --> 01:11:58,790 Així que això significa que l'equip té conèixer totes les variables 1347 01:11:58,790 --> 01:11:59,790 per endavant. 1348 01:11:59,790 --> 01:12:02,500 No necessita saber quin valor vostè va a posar-hi. 1349 01:12:02,500 --> 01:12:05,490 Però cal saber com quantitat de memòria que necessita. 1350 01:12:05,490 --> 01:12:09,380 >> Però ara anem a dir que, per exemple, està creant una matriu o prendre una 1351 01:12:09,380 --> 01:12:13,430 cadena que vostè està prenent l'usuari. 1352 01:12:13,430 --> 01:12:17,300 No sap quant temps la cadena serà, per exemple. 1353 01:12:17,300 --> 01:12:20,600 Així que vostè no sap exactament quants blocs de memòria s'assignen, oi? 1354 01:12:20,600 --> 01:12:24,120 >> Així que no té molt sentit per que diguis posar 100 caràcters. 1355 01:12:24,120 --> 01:12:26,420 I llavors què passa si l'usuari escriu 150? 1356 01:12:26,420 --> 01:12:27,670 Vostè serà fotut. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> Així que, bàsicament, no es pot estar segur de com quantitat de memòria que necessita assignar 1359 01:12:34,620 --> 01:12:35,960 en compilar el programa. 1360 01:12:35,960 --> 01:12:38,240 Vostè acaba de saber que el temps d'execució. 1361 01:12:38,240 --> 01:12:39,950 Així que és per això que vostè té el munt. 1362 01:12:39,950 --> 01:12:47,610 Així que el munt es tindrà memòria que vostè està assignant durant el 1363 01:12:47,610 --> 01:12:50,810 durada del programa en execució. 1364 01:12:50,810 --> 01:12:55,780 >> Així que, bàsicament, quan ho fa malloc, el que estàs fent és l'assignació de memòria en 1365 01:12:55,780 --> 01:13:00,160 temps d'execució, el que significa que vostè és decidir just en aquest moment que 1366 01:13:00,160 --> 01:13:02,670 haurien de tenir aquest record. 1367 01:13:02,670 --> 01:13:04,210 Així que això és quan estàs assignació. 1368 01:13:04,210 --> 01:13:06,430 Té això sentit? 1369 01:13:06,430 --> 01:13:11,690 >> Així que recorda, la pila té variables que es creen en temps de compilació. 1370 01:13:11,690 --> 01:13:14,560 I llavors el munt té variables que es creen sobre la marxa 1371 01:13:14,560 --> 01:13:15,600 amb malloc, per exemple. 1372 01:13:15,600 --> 01:13:16,850 >> AUDIÈNCIA: [inaudible]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: així GetString Trucaré a malloc. 1375 01:13:24,340 --> 01:13:26,710 Permetin-me parlar de malloc, i Vaig a explicar GetString. 1376 01:13:26,710 --> 01:13:32,000 Així malloc és la mateixa cosa com l'assignació de memòria. 1377 01:13:32,000 --> 01:13:34,600 Així que va a assignar memòria en el munt. 1378 01:13:34,600 --> 01:13:40,010 I es va a tornar un punter a on la memòria es va assignar al. 1379 01:13:40,010 --> 01:13:43,090 >> Així que quan vostè fer-- 1380 01:13:43,090 --> 01:13:44,910 aquí per exemple 1381 01:13:44,910 --> 01:13:45,830 indicador de l'estrella n. 1382 01:13:45,830 --> 01:13:50,520 I llavors el punter és igual a malloc grandària de 10 polzades vegades. 1383 01:13:50,520 --> 01:13:52,110 Estic creant un punter. 1384 01:13:52,110 --> 01:13:59,020 I llavors estic assignant aquest punter a el valor del punter que malloc 1385 01:13:59,020 --> 01:13:59,680 m'està donant. 1386 01:13:59,680 --> 01:14:04,150 >> Malloc Així que estic demanant que vostè pot assignar espai per a 10 nombres enters. 1387 01:14:04,150 --> 01:14:05,390 Això és el que està dient. 1388 01:14:05,390 --> 01:14:09,020 I malloc produeix una punter a aquest lloc. 1389 01:14:09,020 --> 01:14:11,460 Té sentit? 1390 01:14:11,460 --> 01:14:12,270 Okay. 1391 01:14:12,270 --> 01:14:17,940 I jo GetString està, bàsicament, fent un trucar a malloc perquè pugui assignar 1392 01:14:17,940 --> 01:14:21,680 memòria en temps d'execució. 1393 01:14:21,680 --> 01:14:26,460 >> Recordeu sempre comprovar nul perquè malloc tornarà null 1394 01:14:26,460 --> 01:14:28,200 si no es pot assignar memòria. 1395 01:14:28,200 --> 01:14:31,660 Diguem que vostè demana un ridícul quantitat de memòria. 1396 01:14:31,660 --> 01:14:33,950 El seu equip no serà capaç d'assignar tant. 1397 01:14:33,950 --> 01:14:36,410 >> Així malloc és només va a retornar null. 1398 01:14:36,410 --> 01:14:42,210 Així que sempre recordi verificar si l' punter que vostè va rebre de malloc és 1399 01:14:42,210 --> 01:14:45,640 nul · la o no, perquè, si ho és, que et poden dereferencing ser un punter i 1400 01:14:45,640 --> 01:14:48,340 causant errors secundaris. 1401 01:14:48,340 --> 01:14:50,930 I, finalment, no us oblideu seva memòria lliure. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc està creant la memòria en el munt. 1404 01:15:00,560 --> 01:15:03,436 I vostè ha de alliberar la memòria abans que el programa acaba. 1405 01:15:03,436 --> 01:15:05,370 OK, això és tot per a mi. 1406 01:15:05,370 --> 01:15:07,900 Ho sentim, Rob. 1407 01:15:07,900 --> 01:15:07,950 Gràcies. 1408 01:15:07,950 --> 01:15:09,878 >> [Aplaudiments] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Unes últimes preguntes abans que Rob ve? 1410 01:15:12,679 --> 01:15:13,138 No? 1411 01:15:13,138 --> 01:15:13,597 Sí? 1412 01:15:13,597 --> 01:15:15,892 >> AUDIÈNCIA: no vaig veure aquesta línia. 1413 01:15:15,892 --> 01:15:17,269 Ha pujat encara? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Crec que Dave és pujar aviat. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Serà publicat. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Serà en línia. 1417 01:15:20,310 --> 01:15:21,175 >> AUDIÈNCIA: Depèn. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Depèn? 1419 01:15:22,090 --> 01:15:23,157 Okay. 1420 01:15:23,157 --> 01:15:23,644 Sí? 1421 01:15:23,644 --> 01:15:27,053 >> AUDIÈNCIA: [inaudible]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Sí, ha d'alliberar tot el memòria que es va posar en el munt. 1423 01:15:30,285 --> 01:15:31,535 >> AUDIÈNCIA: [inaudible]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Sí. 1426 01:15:36,160 --> 01:15:39,980 Cada vegada que vostè té un malloc cultura, vostè ha de tenir una cultura lliure 1427 01:15:39,980 --> 01:15:42,640 després de deixar d'usar aquesta variable. 1428 01:15:42,640 --> 01:15:44,800 Així malloc i lliure són sempre junts. 1429 01:15:44,800 --> 01:15:45,410 Els seus millors amics. 1430 01:15:45,410 --> 01:15:46,720 Sí. 1431 01:15:46,720 --> 01:15:47,970 Rob? 1432 01:15:47,970 --> 01:15:55,595 1433 01:15:55,595 --> 01:15:56,850 >> ROB: Vaig a anar ràpidament. 1434 01:15:56,850 --> 01:16:00,466 I també el vídeo serà posat. 1435 01:16:00,466 --> 01:16:01,716 Tinc el micròfon en. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, així que la setmana 5 coses. 1438 01:16:26,230 --> 01:16:27,970 El primer que tenim és la pila. 1439 01:16:27,970 --> 01:16:33,390 Així que recorda que només hi ha una pila quadre per crida a la funció activa. 1440 01:16:33,390 --> 01:16:34,710 Veurem això en un segon. 1441 01:16:34,710 --> 01:16:37,850 I també recordar el que en realitat va en cada marc de pila seran 1442 01:16:37,850 --> 01:16:41,880 les variables locals de les nostres funcions, els arguments que es passen al nostre 1443 01:16:41,880 --> 01:16:43,880 funcions, juntament amb un parell altres coses que realment no 1444 01:16:43,880 --> 01:16:45,260 hagi de preocupar. 1445 01:16:45,260 --> 01:16:50,950 >> Així que aquí està un exemple de programa que, avís, principal printfing el retorn 1446 01:16:50,950 --> 01:16:52,830 valor de foo 4. 1447 01:16:52,830 --> 01:16:57,930 foo és només va a tornar el valor de la barra de 4 coma juny. 1448 01:16:57,930 --> 01:17:02,380 I la barra es va a establir alguns locals n variable igual a 4 vegades juny. 1449 01:17:02,380 --> 01:17:03,920 I després tornar n. 1450 01:17:03,920 --> 01:17:09,130 >> Així que donem una ullada a la pila al llarg la iteració actual d'aquest programa. 1451 01:17:09,130 --> 01:17:10,500 Així que la part inferior de la nostra pila. 1452 01:17:10,500 --> 01:17:12,620 Recordeu que la pila creixi. 1453 01:17:12,620 --> 01:17:15,370 Així que en la part inferior de la nostra pila, que tenir un marc de pila per a les principals. 1454 01:17:15,370 --> 01:17:17,000 En iniciar el programa, el principal sempre va a estar a l' 1455 01:17:17,000 --> 01:17:18,560 part inferior de la nostra pila. 1456 01:17:18,560 --> 01:17:20,880 >> I el que està dins la nostra apilar marc de main? 1457 01:17:20,880 --> 01:17:23,810 Així que, encara que no existeixen locals variables al principal, com he dit abans, 1458 01:17:23,810 --> 01:17:29,670 hem argc i RGV ocupar espai interior del bastidor principal pila. 1459 01:17:29,670 --> 01:17:33,260 Així principal ara es va a truqui a la funció foo. 1460 01:17:33,260 --> 01:17:35,125 I això vol dir que foo va a obtenir el seu propi marc de pila. 1461 01:17:35,125 --> 01:17:36,970 >> Així que ara estem a l'interior de la funció foo. 1462 01:17:36,970 --> 01:17:38,610 ¿I què ha d'anar a marc de pila de foo? 1463 01:17:38,610 --> 01:17:41,100 Bé, foo té un argument n. 1464 01:17:41,100 --> 01:17:45,440 I n és igual a 4, ja que això és el que principal per a l'argument de foo. 1465 01:17:45,440 --> 01:17:48,490 >> Així que ara foo va a cridar bar. 1466 01:17:48,490 --> 01:17:52,070 Què és la barra tindrà a l'interior del seu "marc de pila? 1467 01:17:52,070 --> 01:17:55,610 Té x igual a 4 i igual a sis. 1468 01:17:55,610 --> 01:17:58,540 Això no és tot el que tindrem en el marc de pila perquè la barra 1469 01:17:58,540 --> 01:18:00,580 també té una variable local n. 1470 01:18:00,580 --> 01:18:03,370 I n que establirem igual a 24. 1471 01:18:03,370 --> 01:18:05,750 >> Així que ara la barra va a tornar n. 1472 01:18:05,750 --> 01:18:09,300 Així barra 24 està tornant a el foo marc de pila. 1473 01:18:09,300 --> 01:18:12,560 I a causa bar torna ara, que vol dir que estem fent esclatar el marc de pila 1474 01:18:12,560 --> 01:18:14,250 per a la barra fora de la pila. 1475 01:18:14,250 --> 01:18:18,430 Així que tota la memòria que havia estat bar usant ara és de la pila. 1476 01:18:18,430 --> 01:18:21,550 >> Ara, foo també va per tornar a 24 principal. 1477 01:18:21,550 --> 01:18:25,470 Així que ara que foo està tornant, la memòria foo que estava usant en el seu ' 1478 01:18:25,470 --> 01:18:27,550 marc de pila també s'ha anat. 1479 01:18:27,550 --> 01:18:29,660 I ara, la principal va a trucar a printf. 1480 01:18:29,660 --> 01:18:31,660 Així printf és només una altra funció. 1481 01:18:31,660 --> 01:18:35,320 Quan cridem a printf, que serà un altre marc de pila per al printf 1482 01:18:35,320 --> 01:18:36,470 crida a la funció. 1483 01:18:36,470 --> 01:18:37,990 >> Què estem passant printf? 1484 01:18:37,990 --> 01:18:40,090 Això és el que va a anar en el seu marc de pila. 1485 01:18:40,090 --> 01:18:44,970 Si més no, estem passant que cent i barra invertida n i 1486 01:18:44,970 --> 01:18:47,180 l'argument 24. 1487 01:18:47,180 --> 01:18:50,370 Podria tenir més en és marc de pila si printf passa a ser l'ús d'alguns 1488 01:18:50,370 --> 01:18:51,200 variables locals. 1489 01:18:51,200 --> 01:18:51,920 No sabem. 1490 01:18:51,920 --> 01:18:53,810 >> Però tot el que passa a la printf apilar marc. 1491 01:18:53,810 --> 01:18:55,740 Es va a executar el printf. 1492 01:18:55,740 --> 01:18:56,830 Llavors printf que està fet. 1493 01:18:56,830 --> 01:18:57,820 Tornarà. 1494 01:18:57,820 --> 01:18:58,960 Finalment, la principal està fet. 1495 01:18:58,960 --> 01:18:59,860 Principal tornarà. 1496 01:18:59,860 --> 01:19:02,020 I llavors el nostre programa està fet. 1497 01:19:02,020 --> 01:19:02,480 Sí? 1498 01:19:02,480 --> 01:19:04,505 >> AUDIÈNCIA: Estàs sortint amb [inaudible] 1499 01:19:04,505 --> 01:19:05,900 arguments [inaudible] 1500 01:19:05,900 --> 01:19:06,830 paràmetres? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: Així que hi ha una subtil diferència entre els arguments i paràmetres. 1502 01:19:09,970 --> 01:19:14,400 I realment, en argot comú, la gent tendeix a només barrejar tot el temps. 1503 01:19:14,400 --> 01:19:17,550 Però paràmetres són els formals nom de les coses. 1504 01:19:17,550 --> 01:19:20,180 >> Així argc i argv són el paràmetres a principal. 1505 01:19:20,180 --> 01:19:23,440 Els arguments són el que realment Va esdevenir que aquests paràmetres. 1506 01:19:23,440 --> 01:19:28,340 Així que quan em truqui foo de 4, 4 és l'argument que estic passant. 1507 01:19:28,340 --> 01:19:31,460 I el paràmetre n, a l'interior de foo, pren el valor 4 1508 01:19:31,460 --> 01:19:32,880 des 4 va ser l'argument. 1509 01:19:32,880 --> 01:19:35,826 >> AUDIÈNCIA: [inaudible]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: n és una variable local a la barra. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 n segueix sent local per foo, però és un paràmetre a foo. 1513 01:19:44,960 --> 01:19:48,190 No és una variable local. 1514 01:19:48,190 --> 01:19:48,546 Sí? 1515 01:19:48,546 --> 01:19:51,180 >> AUDIÈNCIA: [inaudible]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: bar foo és simplement trucar i retornar qualsevol retorns de barres. 1517 01:19:55,400 --> 01:19:56,786 >> AUDIÈNCIA: [inaudible]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Sí, només per veure múltiples marcs de pila. 1519 01:19:59,591 --> 01:20:00,082 Sí? 1520 01:20:00,082 --> 01:20:03,519 >> AUDIÈNCIA: Per què es diu foo abans printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Per què es diu foo abans printf? 1522 01:20:05,920 --> 01:20:10,740 Així que podria tenir, en canvi, fer alguna cosa com int x és igual a foo de 4 1523 01:20:10,740 --> 01:20:12,980 i després impresa x. 1524 01:20:12,980 --> 01:20:17,900 Però en canvi, he combinat la funció posar en l'argument de printf. 1525 01:20:17,900 --> 01:20:23,670 >> Però noti que no podem realment executar la crida a printf fins que 1526 01:20:23,670 --> 01:20:25,610 esbrinar el foo de 4 és. 1527 01:20:25,610 --> 01:20:27,480 Així que anem a avaluar això. 1528 01:20:27,480 --> 01:20:32,504 I només un cop que s'han fet van tornar i avaluar això. 1529 01:20:32,504 --> 01:20:32,990 Sí? 1530 01:20:32,990 --> 01:20:37,364 >> AUDIÈNCIA: Atès que tant la barra [inaudible] 1531 01:20:37,364 --> 01:20:41,738 valor, per què nosaltres no té [inaudible]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Ells totalment han de ser int. 1533 01:20:44,400 --> 01:20:46,260 Això no va ser capturat a múltiples passades. 1534 01:20:46,260 --> 01:20:49,010 Així ha de ser int bar i int foo ja que tots dos dels 1535 01:20:49,010 --> 01:20:50,460 estan tornant sencers. 1536 01:20:50,460 --> 01:20:54,214 Buit és només si no van per tornar valors reals. 1537 01:20:54,214 --> 01:20:54,692 Sí? 1538 01:20:54,692 --> 01:20:58,038 >> AUDIÈNCIA: Si tinguessis una línia per sobre el retorn, [inaudible]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: Una línia per sobre de la rendibilitat? 1541 01:21:03,730 --> 01:21:04,410 >> AUDIÈNCIA: Si. 1542 01:21:04,410 --> 01:21:10,780 Igual que si ho fessis printf i [inaudible], hauria d'imprimir dues vegades? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: Així que dins de foo? 1544 01:21:12,992 --> 01:21:15,945 Si tinguéssim un printf aquí? 1545 01:21:15,945 --> 01:21:16,750 >> AUDIÈNCIA: Si. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: Així que si teníem dret printf aquí, seria imprimir després. 1547 01:21:19,510 --> 01:21:23,400 Des que estem cridant foo vegada dret aquí, a continuació, anem a colpejar el printf. 1548 01:21:23,400 --> 01:21:24,620 Llavors anem a trucar bar. 1549 01:21:24,620 --> 01:21:25,710 I llavors foo tornaran. 1550 01:21:25,710 --> 01:21:26,275 I això és tot. 1551 01:21:26,275 --> 01:21:30,985 Només alguna vegada trobem el printf vegada. 1552 01:21:30,985 --> 01:21:31,482 Sí? 1553 01:21:31,482 --> 01:21:32,973 >> AUDIÈNCIA: [inaudible] 1554 01:21:32,973 --> 01:21:37,950 printf cridar foo, perquè som els primers trucar a printf i després estem passant 1555 01:21:37,950 --> 01:21:38,580 els arguments. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: Així que en teoria, no és printf cridar foo? 1557 01:21:40,960 --> 01:21:42,220 Així no. 1558 01:21:42,220 --> 01:21:47,360 Només la finalitat que c va a executar aquestes coses és, abans que puguem 1559 01:21:47,360 --> 01:21:49,800 cridar a una funció, tots els arguments a la funció que 1560 01:21:49,800 --> 01:21:51,600 ser completament avaluats. 1561 01:21:51,600 --> 01:21:53,540 Així és aquesta completament avaluada? 1562 01:21:53,540 --> 01:21:54,610 Sí, és només una cadena. 1563 01:21:54,610 --> 01:21:55,480 És només un valor. 1564 01:21:55,480 --> 01:21:57,200 >> Llavors hem de completament avaluar això. 1565 01:21:57,200 --> 01:21:59,720 Un cop fet això, ara tots s'avaluen els seus arguments. 1566 01:21:59,720 --> 01:22:01,982 I ara podem fer que el trucar a printf. 1567 01:22:01,982 --> 01:22:02,478 Sí? 1568 01:22:02,478 --> 01:22:03,966 >> AUDIÈNCIA: Una pregunta. 1569 01:22:03,966 --> 01:22:06,942 Si vostè té una funció void, ha vostè té retorn i coma? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: No fer un punt i coma retorn si té una funció void. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 Okay. 1573 01:22:14,780 --> 01:22:15,830 Així que ara algunes coses munt. 1574 01:22:15,830 --> 01:22:19,640 Així munt és com anem a tractar amb la gestió de memòria dinàmica. 1575 01:22:19,640 --> 01:22:23,100 I això contrasta directament amb la pila que anomenaríem automàtica 1576 01:22:23,100 --> 01:22:24,100 la gestió de memòria. 1577 01:22:24,100 --> 01:22:27,140 >> Així que a la pila, mai s'ha per fer front a com les variables locals 1578 01:22:27,140 --> 01:22:30,400 estan sent empès i fet esclatar fora de tot aquests marcs de pila i totes aquestes coses. 1579 01:22:30,400 --> 01:22:31,070 Vostè no ha de preocupar per això. 1580 01:22:31,070 --> 01:22:32,070 És automàtic. 1581 01:22:32,070 --> 01:22:36,990 Així que el munt és manual. 1582 01:22:36,990 --> 01:22:38,070 I la [inaudible] 1583 01:22:38,070 --> 01:22:41,260 prové d'aquestes funcions malloc i lliure. 1584 01:22:41,260 --> 01:22:43,550 >> Així que aquí està un altre programa. 1585 01:22:43,550 --> 01:22:47,145 Tot el que estem fent és mallocing un enter. 1586 01:22:47,145 --> 01:22:49,360 Estem emmagatzemar-lo en estrella x. 1587 01:22:49,360 --> 01:22:52,520 Per descomptat, hem de comprovar a veure si x és nul. 1588 01:22:52,520 --> 01:22:56,400 Llavors anem al que acaba d'establir x està apuntant a un 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Imprimiu el que x està apuntant a, print x, i després lliure de x. 1591 01:23:03,260 --> 01:23:08,920 >> Llavors, ¿com és això en realitat va a veure si ens fixem en la nostra pila i el munt? 1592 01:23:08,920 --> 01:23:10,950 Així que anem a començar de nou. 1593 01:23:10,950 --> 01:23:12,580 La part inferior de la nostra pila com abans. 1594 01:23:12,580 --> 01:23:15,930 Recorda que et feu servir directament s'oposa a la pila? 1595 01:23:15,930 --> 01:23:18,850 Així que anem a tenir la la part superior del nostre patrimoni allà. 1596 01:23:18,850 --> 01:23:22,590 >> Així que la part inferior de la nostra pila, tenim nostre marc de pila per a les principals. 1597 01:23:22,590 --> 01:23:28,000 Té l'espai per argc, argv, i ens ara tenim una variable local x, que 1598 01:23:28,000 --> 01:23:30,030 és un int estrelles. 1599 01:23:30,030 --> 01:23:32,240 Així que anem a recórrer a través d'aquest programa. 1600 01:23:32,240 --> 01:23:34,420 El primer que tenim és una crida a malloc. 1601 01:23:34,420 --> 01:23:36,250 >> Així que estem fent una crida a malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc és una funció. 1603 01:23:37,100 --> 01:23:38,770 Es va a aconseguir un marc de pila. 1604 01:23:38,770 --> 01:23:40,180 Què estem passant a malloc? 1605 01:23:40,180 --> 01:23:41,610 Això anirà dins d' del marc de pila. 1606 01:23:41,610 --> 01:23:45,130 Estem passant de mida n, que és 4. 1607 01:23:45,130 --> 01:23:49,700 Així que es passa a malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Què fa malloc? 1609 01:23:50,910 --> 01:23:53,820 Ens agafa una mica d'espai en el munt. 1610 01:23:53,820 --> 01:23:55,320 Així que anirem a la pila. 1611 01:23:55,320 --> 01:23:57,990 I anem a prendre 4 bytes de la pila. 1612 01:23:57,990 --> 01:24:01,500 Així que anem a donar que una adreça arbitrària. 1613 01:24:01,500 --> 01:24:06,680 0x123 Només fingir que és un direcció que està al heap. 1614 01:24:06,680 --> 01:24:12,300 >> Llavors, què és en realitat dins d'aquest regió de memòria a la direcció Ox123? 1615 01:24:12,300 --> 01:24:13,080 Garbage. 1616 01:24:13,080 --> 01:24:15,270 Així que no hem guardat res en ella. 1617 01:24:15,270 --> 01:24:18,830 Així que pel que sabem, podria ser qualsevol cosa. 1618 01:24:18,830 --> 01:24:20,560 Vostè no ha d'assumir que és zero. 1619 01:24:20,560 --> 01:24:23,870 És més probable que no és zero. 1620 01:24:23,870 --> 01:24:26,260 >> Així que ara torna malloc. 1621 01:24:26,260 --> 01:24:28,020 I què fem quan es restableixi el malloc? 1622 01:24:28,020 --> 01:24:29,800 Ens vam proposar el que retorna. 1623 01:24:29,800 --> 01:24:32,290 Fixem x igual al que que està tornant. 1624 01:24:32,290 --> 01:24:33,690 Així que què és el tornava? 1625 01:24:33,690 --> 01:24:38,150 Està tornant 0x123 ja que és el direcció del bloc de memòria que 1626 01:24:38,150 --> 01:24:40,850 acaba de ser assignat en el munt. 1627 01:24:40,850 --> 01:24:47,160 >> Així que tornar 0x123 x ara serà establert igual a 0x123 que, il · lustrat, 1628 01:24:47,160 --> 01:24:52,940 que sovint dibuixem com X que tingui un real fletxa apuntant a aquest bloc. 1629 01:24:52,940 --> 01:24:55,820 Però x és simplement emmagatzemant aquesta direcció. 1630 01:24:55,820 --> 01:24:58,670 Així que ara hem de comprovar si x és nul. 1631 01:24:58,670 --> 01:24:59,120 No és nul. 1632 01:24:59,120 --> 01:25:02,170 Pretenem que aquesta malloc succeir. 1633 01:25:02,170 --> 01:25:04,950 >> Així que ara estrella de x és igual a 50. 1634 01:25:04,950 --> 01:25:08,450 Així estrella recorda que significa anar a aquesta direcció. 1635 01:25:08,450 --> 01:25:12,700 Així 0x123 Anem a anar a aquesta direcció. 1636 01:25:12,700 --> 01:25:14,660 Així que això ens porta fins allà. 1637 01:25:14,660 --> 01:25:16,310 Què estem fent en aquesta direcció? 1638 01:25:16,310 --> 01:25:19,020 Estem emmagatzemant 50. 1639 01:25:19,020 --> 01:25:22,500 >> Així que després d'aquesta línia, que és el que les coses seran similar. 1640 01:25:22,500 --> 01:25:24,640 Així que ara que ja no és escombraries allà. 1641 01:25:24,640 --> 01:25:28,910 Ara sabem que el 50 és en aquest en particular perquè la direcció 1642 01:25:28,910 --> 01:25:32,410 ens vam posar a això. 1643 01:25:32,410 --> 01:25:32,790 D'acord? 1644 01:25:32,790 --> 01:25:34,370 Així que ara anem a imprimir f. 1645 01:25:34,370 --> 01:25:38,490 >> Així que primer anem a imprimir estrella x. 1646 01:25:38,490 --> 01:25:39,640 Llavors, què és l'estrella x? 1647 01:25:39,640 --> 01:25:44,300 Un cop més, l'estrella x significa anar a la cosa que x està apuntant. 1648 01:25:44,300 --> 01:25:47,140 Així que x és l'emmagatzematge de 0x123 Anar a això. 1649 01:25:47,140 --> 01:25:48,490 Rebem 50. 1650 01:25:48,490 --> 01:25:50,540 Així que imprimir f. 1651 01:25:50,540 --> 01:25:54,900 I això vol dir que va a imprimir 50. 1652 01:25:54,900 --> 01:25:56,850 I després que retorna. 1653 01:25:56,850 --> 01:25:58,340 >> I després tenim el segon printf. 1654 01:25:58,340 --> 01:25:59,370 Ara estem per cent p. 1655 01:25:59,370 --> 01:26:01,680 Si no ho has vist, això és com s'imprimeix un punter. 1656 01:26:01,680 --> 01:26:04,960 Així que tenim per cent i, cent f, i tots els que ja. 1657 01:26:04,960 --> 01:26:07,160 Així cent p, imprimir un punter. 1658 01:26:07,160 --> 01:26:08,920 >> Així que x és un punter. 1659 01:26:08,920 --> 01:26:13,440 Així que si anem a imprimir x si mateix, estem imprimint el que és en realitat dins 1660 01:26:13,440 --> 01:26:19,220 x, que és 0x123 Així que la primera print f voleu imprimir 50. 1661 01:26:19,220 --> 01:26:23,620 La segona impressió f va imprimir 0x123 Sí? 1662 01:26:23,620 --> 01:26:27,460 >> AUDIÈNCIA: Utilitza cent x per imprimir un punter? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: Així que utilitzes cent x per imprimir un punter? 1664 01:26:31,200 --> 01:26:38,350 Així que es pot, però per cent x és just, en general, per com si té alguna 1665 01:26:38,350 --> 01:26:40,325 sencer i que voleu imprimir com un hexadecimal. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Així és com es fa això. 1668 01:26:44,880 --> 01:26:47,160 >> Atès que, per cent d faria imprimir com decimal. 1669 01:26:47,160 --> 01:26:50,310 Aquí és on obtenim cent d. i és simplement sencer. 1670 01:26:50,310 --> 01:26:52,690 cent p és específicament per als punters. 1671 01:26:52,690 --> 01:26:54,060 >> Així que x és un punter. 1672 01:26:54,060 --> 01:26:56,360 Volem utilitzar el percentatge p. 1673 01:26:56,360 --> 01:26:57,937 Però per cent x podria funcionar. 1674 01:26:57,937 --> 01:26:58,414 Sí? 1675 01:26:58,414 --> 01:26:59,664 >> AUDIÈNCIA: [inaudible]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Si. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Almenys per a aquest call-- així que no incloure aquí. 1680 01:27:13,440 --> 01:27:19,850 Però aquests dos arguments són necessàriament dins d'aquest marc de pila 1681 01:27:19,850 --> 01:27:23,040 juntament amb les variables locals printf passa a estar usant. 1682 01:27:23,040 --> 01:27:27,020 I a continuació, la següent crida a printf ara dins el marc de pila és printf 1683 01:27:27,020 --> 01:27:33,960 cent p barra invertida n i sigui quin sigui el valor de x és, que és 0x123. 1684 01:27:33,960 --> 01:27:34,425 Sí? 1685 01:27:34,425 --> 01:27:35,675 >> AUDIÈNCIA: [inaudible]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Es va a imprimir alguna cosa que són aquestes. 1688 01:27:40,880 --> 01:27:41,846 >> AUDIÈNCIA: [inaudible]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: Així que la imprimeix en format electrònic. 1690 01:27:44,510 --> 01:27:47,003 S'assembla a una adreça. 1691 01:27:47,003 --> 01:27:47,494 Sí? 1692 01:27:47,494 --> 01:27:49,458 >> AUDIÈNCIA: [inaudible]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Per què és què? 1694 01:27:51,075 --> 01:27:52,920 >> AUDIÈNCIA: [inaudible]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Per què és aquest punter de 4 bytes? 1696 01:27:55,240 --> 01:27:58,500 Així que hi ha un munt de 0 de davant d'aquesta. 1697 01:27:58,500 --> 01:28:03,740 Així que és realment 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 En un sistema de 64 bits, no hi hauria un munt de més zeros. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Sí? 1701 01:28:11,900 --> 01:28:13,150 >> AUDIÈNCIA: [inaudible]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: Així que el primer printf va a print-- 1704 01:28:21,130 --> 01:28:21,980 >> AUDIÈNCIA: [inaudible]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Sí, es va a imprimir el que x està assenyalant. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star diu el que és aquest el que apunta. 1708 01:28:29,070 --> 01:28:30,300 N .. 1709 01:28:30,300 --> 01:28:31,455 Així que què és el que apunta? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 N .. 1712 01:28:32,410 --> 01:28:33,390 Això és el que anem a imprimir. 1713 01:28:33,390 --> 01:28:37,020 Atès que, en el següent, estem simplement imprimir x si mateix. 1714 01:28:37,020 --> 01:28:38,850 Què hi ha dins de la f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 Okay. 1717 01:28:44,500 --> 01:28:46,620 >> I llavors, per fi, tenim el lliure. 1718 01:28:46,620 --> 01:28:48,040 Què estem passant a alliberar? 1719 01:28:48,040 --> 01:28:49,470 Estem passant x. 1720 01:28:49,470 --> 01:28:52,380 Aquest temps realment exhibició en el marc de pila. 1721 01:28:52,380 --> 01:28:56,370 >> Així que estem passant el valor 0x123 per alliberar. 1722 01:28:56,370 --> 01:28:59,070 Així que ara gratis sap, està bé, He d'anar fins el munt 1723 01:28:59,070 --> 01:29:00,050 i lliure que la memòria. 1724 01:29:00,050 --> 01:29:03,920 Ja no feu servir el que és en la direcció 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> Tan lliure va a alliberar que del munt. 1726 01:29:07,010 --> 01:29:09,490 Ara la nostra pila està buida altra vegada. 1727 01:29:09,490 --> 01:29:11,120 No tenim pèrdues de memòria. 1728 01:29:11,120 --> 01:29:12,940 Ara lliure tornarà. 1729 01:29:12,940 --> 01:29:16,130 Observi que x és encara 0x123. 1730 01:29:16,130 --> 01:29:18,240 Però això no és ara de memòria vàlida. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Ja no hem d'eliminar la referència de x. 1733 01:29:23,986 --> 01:29:24,440 Sí? 1734 01:29:24,440 --> 01:29:27,240 >> AUDIÈNCIA: És tornar 0 redundant? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: És returen 0 redundant? 1736 01:29:28,290 --> 01:29:31,110 Sí. 1737 01:29:31,110 --> 01:29:33,950 Acabem de posar que hi ha perquè tenim un retorn d'un d'aire. 1738 01:29:33,950 --> 01:29:36,830 Així és com, sí, anem a incloure el retorn 0. 1739 01:29:36,830 --> 01:29:37,310 Sí? 1740 01:29:37,310 --> 01:29:38,560 >> AUDIÈNCIA: [inaudible]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: Així que després de x gratis, què passa si tractem d'eliminar la referència al punter? 1743 01:29:45,580 --> 01:29:47,240 És possible que no surti malament. 1744 01:29:47,240 --> 01:29:49,330 És possible que encara ens vam aconseguir 50. 1745 01:29:49,330 --> 01:29:53,590 >> És possible, també, que aquesta memòria és que ara s'utilitza per a una altra cosa. 1746 01:29:53,590 --> 01:29:57,140 Així que és un comportament indefinit. 1747 01:29:57,140 --> 01:30:00,772 I indefinit significa res pot succeir. 1748 01:30:00,772 --> 01:30:01,250 Sí? 1749 01:30:01,250 --> 01:30:02,500 >> AUDIÈNCIA: [inaudible]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: No, pel que si vostè assigna x a una altra cosa. 1752 01:30:10,830 --> 01:30:15,870 Així que si aquí vam dir x és igual a alguna cosa malloc else-- 1753 01:30:15,870 --> 01:30:17,100 Mida malloc event-- 1754 01:30:17,100 --> 01:30:20,180 llavors que bloc original de la memòria no s'allibera. 1755 01:30:20,180 --> 01:30:21,490 I hem perdut oficialment. 1756 01:30:21,490 --> 01:30:23,150 Això és una pèrdua de memòria. 1757 01:30:23,150 --> 01:30:25,090 Hem perdut totes les referències a aquest bloc de memòria. 1758 01:30:25,090 --> 01:30:26,827 Així que no hi ha manera que mai puguem alliberar-la. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, així que després torni 0 significa fet. 1761 01:30:36,630 --> 01:30:37,900 >> Molt bé, així que el desbordament de pila. 1762 01:30:37,900 --> 01:30:39,320 Quina és la idea aquí? 1763 01:30:39,320 --> 01:30:41,210 Així que recorda, munt està baixant. 1764 01:30:41,210 --> 01:30:43,480 Pila està pujant. 1765 01:30:43,480 --> 01:30:48,000 Així que aquest va ser l'exemple de la conferència, Crec que, en el seu principal només va a 1766 01:30:48,000 --> 01:30:51,380 cridar a aquesta funció foo, que va dir recursivament 1 i 1767 01:30:51,380 --> 01:30:52,320 una altra vegada. 1768 01:30:52,320 --> 01:30:55,370 >> Així s'apilen les trames es van a treballar exactament de la mateixa. 1769 01:30:55,370 --> 01:30:58,130 Així que anem a començar amb la principal com el marc de pila inferior. 1770 01:30:58,130 --> 01:31:02,000 Després principal va a trucar a foo, que es va a aconseguir un marc de pila. 1771 01:31:02,000 --> 01:31:04,260 >> Llavors foo va a cridar foo de nou, que es posarà 1772 01:31:04,260 --> 01:31:05,500 un altre marc de pila. 1773 01:31:05,500 --> 01:31:08,270 I després una altra vegada, i una altra, i una altra, i una altra vegada fins que, finalment, es corre 1774 01:31:08,270 --> 01:31:09,190 en el munt. 1775 01:31:09,190 --> 01:31:11,990 Així que aquesta és la forma en què obtenim un desbordament de pila. 1776 01:31:11,990 --> 01:31:14,910 I en aquest punt, vostè SEG culpa. 1777 01:31:14,910 --> 01:31:17,335 O vostè realment seg taca davant aquest punt però sí. 1778 01:31:17,335 --> 01:31:19,660 >> AUDIÈNCIA: És un bolcat del nucli del mateix que falla seg? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: Així que vostè veurà la segmentació nucli falla deixar. 1780 01:31:26,140 --> 01:31:28,760 Vostè obté un bolcat de memòria quan vostè SEG culpa. 1781 01:31:28,760 --> 01:31:32,580 I és com un bolcat de tota la contingut de la memòria actual, de manera 1782 01:31:32,580 --> 01:31:36,670 que es pot tractar d'identificar per què SEG criticat. 1783 01:31:36,670 --> 01:31:37,135 Sí? 1784 01:31:37,135 --> 01:31:38,385 >> AUDIÈNCIA: [inaudible]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: Així que un mitjà de fallada de segmentació hi ha un desbordament de pila. 1787 01:31:45,460 --> 01:31:47,060 Així que no necessàriament. 1788 01:31:47,060 --> 01:31:49,880 Un error de segmentació vol dir que ets tocar la memòria d'una manera 1789 01:31:49,880 --> 01:31:50,880 vostè no ha de ser. 1790 01:31:50,880 --> 01:31:54,750 Així que una manera de que això passi és, quan vostè desbordament de pila, vam començar tocant 1791 01:31:54,750 --> 01:31:58,736 memòria d'una manera que no hem de ser. 1792 01:31:58,736 --> 01:31:59,208 Sí? 1793 01:31:59,208 --> 01:32:00,458 >> AUDIÈNCIA: [inaudible]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: Així que dins d'un bucle infinit. 1796 01:32:05,830 --> 01:32:08,770 Igual, això és com una infinita recursiva bucle i així tenim una altra 1797 01:32:08,770 --> 01:32:09,770 pila emmarcar cada vegada. 1798 01:32:09,770 --> 01:32:13,540 Però just a l'interior d'un habitual infinit mentre un-- 1799 01:32:13,540 --> 01:32:16,390 bo, anem ni tan sols imprimir F-- 1800 01:32:16,390 --> 01:32:17,040 fer alguna cosa. 1801 01:32:17,040 --> 01:32:18,390 El que sigui. 1802 01:32:18,390 --> 01:32:20,610 >> No estarem rebent un altre marc de pila. 1803 01:32:20,610 --> 01:32:22,530 Només anem a mantenir looping sobre aquesta única instrucció. 1804 01:32:22,530 --> 01:32:23,920 La pila no està creixent. 1805 01:32:23,920 --> 01:32:27,290 És el fet que cada recursiva anomenada ens està donant un marc de pila. 1806 01:32:27,290 --> 01:32:31,231 És per això que tenim un desbordament de pila. 1807 01:32:31,231 --> 01:32:31,728 Sí? 1808 01:32:31,728 --> 01:32:38,189 >> AUDIÈNCIA: Així que si vostè diu que obtenir el while i després [inaudible]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: Així que si dins el bucle while hi va haver un printf, tot i això 1810 01:32:42,000 --> 01:32:42,790 culpa no seg. 1811 01:32:42,790 --> 01:32:46,090 Jo simplement no vull confondre les coses. 1812 01:32:46,090 --> 01:32:46,610 Seria bucle. 1813 01:32:46,610 --> 01:32:48,225 Obtindria una sola pila emmarcar per al printf. 1814 01:32:48,225 --> 01:32:49,580 >> Llavors printf tornaria. 1815 01:32:49,580 --> 01:32:50,280 Llavors serà bucle de nou. 1816 01:32:50,280 --> 01:32:51,460 Obtindria una sola pila emmarcar per al printf. 1817 01:32:51,460 --> 01:32:52,850 Seria tornar. 1818 01:32:52,850 --> 01:32:54,060 Marc de pila individual. 1819 01:32:54,060 --> 01:33:00,215 Així que vostè no està aconseguint aquest infinit apilant marcs de pila. 1820 01:33:00,215 --> 01:33:03,185 >> AUDIÈNCIA: [inaudible]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Si. 1822 01:33:04,040 --> 01:33:09,360 Així que aquest desbordament de pila passa perquè cap d'ells 1823 01:33:09,360 --> 01:33:11,600 trucades a foo estan tornant. 1824 01:33:11,600 --> 01:33:15,250 Així que si tornem, llavors ho faríem començar a perdre els marcs de pila. 1825 01:33:15,250 --> 01:33:17,870 I llavors no tindríem desbordament de pila. 1826 01:33:17,870 --> 01:33:20,070 I és per això que vostè necessita un cas base per a les seves funcions personals. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Sí? 1829 01:33:23,479 --> 01:33:27,375 >> AUDIÈNCIA: És la mida potencial i la apilar per el munt de la mateixa per 1830 01:33:27,375 --> 01:33:29,880 tots els programes? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Aproximadament. 1832 01:33:31,910 --> 01:33:35,090 És la mida potencial de la pila i el munt de la mateixa per a tots els programes? 1833 01:33:35,090 --> 01:33:37,180 Aproximadament. 1834 01:33:37,180 --> 01:33:40,080 Hi ha alguna cosa de l'aleatorització fins on comença la pila i 1835 01:33:40,080 --> 01:33:42,400 on comença el munt. 1836 01:33:42,400 --> 01:33:45,870 Si li passa que té una gran quantitat de variables i coses globals, és possible que 1837 01:33:45,870 --> 01:33:49,520 treure una mica d'espai per a la seva munt. 1838 01:33:49,520 --> 01:33:54,060 >> En un sistema de 64 bits, que pràcticament tenir memòria infinita. 1839 01:33:54,060 --> 01:33:55,820 Hi ha tantes coses. 1840 01:33:55,820 --> 01:33:59,250 Entre 32 bits i 64 bits, que és una diferència significativa. 1841 01:33:59,250 --> 01:34:02,350 >> Vostè va a aconseguir molt més apilar i espai d'emmagatzematge dinàmic en una de 64 bits 1842 01:34:02,350 --> 01:34:05,810 sistema perquè no només més Les adreces que es poden utilitzar. 1843 01:34:05,810 --> 01:34:09,360 Però en un sistema individual, ho farà ser més o menys la mateixa quantitat de pila 1844 01:34:09,360 --> 01:34:10,785 i espai d'emmagatzematge dinàmic. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Bé. 1847 01:34:15,530 --> 01:34:18,220 >> Així que l'últim és la compilació. 1848 01:34:18,220 --> 01:34:19,810 Així que vostè ha de saber aquest procés. 1849 01:34:19,810 --> 01:34:22,240 Hi ha quatre grans passos. 1850 01:34:22,240 --> 01:34:24,400 Així que el primer ha ser fàcil de recordar. 1851 01:34:24,400 --> 01:34:25,085 Pre-processament. 1852 01:34:25,085 --> 01:34:28,390 Compta amb el prefix pre en el mateix. 1853 01:34:28,390 --> 01:34:32,080 Així que es tracta abans de tota la resta. 1854 01:34:32,080 --> 01:34:34,000 >> La cosa a recordar és el hash. 1855 01:34:34,000 --> 01:34:37,250 Així defineix haixix i haixix inclou en tots aquells. 1856 01:34:37,250 --> 01:34:39,560 Aquests són tots els pre-processador directives. 1857 01:34:39,560 --> 01:34:42,030 Aquestes són les coses que els pre-processador s'encarrega de. 1858 01:34:42,030 --> 01:34:43,680 >> Llavors, què fa un pre-processador? 1859 01:34:43,680 --> 01:34:44,850 És una cosa molt ximple. 1860 01:34:44,850 --> 01:34:49,380 Tot el que és capaç de fer són tots ells còpia i de tall, i enganxar operacions. 1861 01:34:49,380 --> 01:34:51,790 >> Així de hash estàndard inclou dot i0 h. 1862 01:34:51,790 --> 01:34:52,990 Què és això que fa? 1863 01:34:52,990 --> 01:34:56,610 Es va treure la norma i0 punt h presentar i enganxant a la part superior 1864 01:34:56,610 --> 01:34:58,960 on sigui que diu haixix inclou estàndard dot h i0. 1865 01:34:58,960 --> 01:35:02,480 >> I qualsevol hash de definir que hem veu, el que es fer? 1866 01:35:02,480 --> 01:35:06,730 El seu copiant el valor que el hash definit es defineix com i enganxar que 1867 01:35:06,730 --> 01:35:08,500 allà on estigui utilitzant el valor. 1868 01:35:08,500 --> 01:35:13,400 Així que el preprocessador simplement fa realment operacions basades en text senzill. 1869 01:35:13,400 --> 01:35:15,870 No fa res intel · ligent. 1870 01:35:15,870 --> 01:35:18,920 Així que tota la resta és més complicat. 1871 01:35:18,920 --> 01:35:22,970 >> Així que ara que és preprocessador fet, en realitat compilem. 1872 01:35:22,970 --> 01:35:24,320 Així que, què significa la compilació? 1873 01:35:24,320 --> 01:35:27,310 Estem passant de codi c al codi assemblador. 1874 01:35:27,310 --> 01:35:27,570 Sí? 1875 01:35:27,570 --> 01:35:28,820 >> AUDIÈNCIA: [inaudible]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Sí, vam agafar això. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 Així que la compilació. 1880 01:35:38,660 --> 01:35:40,310 Anem de c per al muntatge. 1881 01:35:40,310 --> 01:35:42,470 Així que això és un canvi d'idioma actual. 1882 01:35:42,470 --> 01:35:45,240 Compilació de si mateix significa passar d' un llenguatge d'alt nivell per 1883 01:35:45,240 --> 01:35:47,340 un llenguatge de nivell inferior. 1884 01:35:47,340 --> 01:35:50,720 >> I C és un llenguatge d'alt nivell en comparació amb el muntatge. 1885 01:35:50,720 --> 01:35:52,320 Quin és el muntatge? 1886 01:35:52,320 --> 01:35:56,440 Les seves instruccions, que són bastant molt, feta per a la seva CPU. 1887 01:35:56,440 --> 01:35:59,130 Però l'ordinador segueix No entendre el muntatge. 1888 01:35:59,130 --> 01:36:01,570 Només s'entén uns i zeros. 1889 01:36:01,570 --> 01:36:06,160 Així que el següent pas és el muntatge, que ens porta d'aquestes instruccions que 1890 01:36:06,160 --> 01:36:08,760 seva CPU entén i realitat els tradueix, a 1891 01:36:08,760 --> 01:36:10,820 els uns i zeros. 1892 01:36:10,820 --> 01:36:13,570 >> Així C per a muntatge en binari. 1893 01:36:13,570 --> 01:36:15,870 Però jo no tinc un executable encara. 1894 01:36:15,870 --> 01:36:19,550 Així que pensa a la biblioteca CS50. 1895 01:36:19,550 --> 01:36:23,070 Nosaltres li proporcionem un binari per aquesta biblioteca CS50, que té GetString 1896 01:36:23,070 --> 01:36:24,400 i getInt i tot això. 1897 01:36:24,400 --> 01:36:25,700 >> Però el CS50 library-- 1898 01:36:25,700 --> 01:36:27,650 i de itself-- no és executable. 1899 01:36:27,650 --> 01:36:29,570 No té una funció principal. 1900 01:36:29,570 --> 01:36:32,230 És només un munt de binari que es pot utilitzar. 1901 01:36:32,230 --> 01:36:41,730 Així que la vinculació és com reunir a tots d'aquests diferents arxius binaris 1902 01:36:41,730 --> 01:36:43,110 en un arxiu executable real. 1903 01:36:43,110 --> 01:36:45,900 Un que pot escriure dot retallar un punt fora. 1904 01:36:45,900 --> 01:36:51,660 >> Així que això és com l'arxiu que escriure, - sigui quina sigui la seva programa és-- 1905 01:36:51,660 --> 01:36:53,620 Ceaser punt c. 1906 01:36:53,620 --> 01:36:55,100 Però ara que ha estat compilat a binari. 1907 01:36:55,100 --> 01:36:56,480 Així que o punt Ceaser. 1908 01:36:56,480 --> 01:36:59,620 I aquesta és la nostra CS50 biblioteques binari. 1909 01:36:59,620 --> 01:37:02,284 I estan sent combinats en un sol executable. 1910 01:37:02,284 --> 01:37:02,758 Sí? 1911 01:37:02,758 --> 01:37:04,008 >> AUDIÈNCIA: [inaudible]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: Així que primer inclou, recorda, el hash incloure és en realitat un 1914 01:37:12,710 --> 01:37:13,810 etapa de pre-processador. 1915 01:37:13,810 --> 01:37:14,750 Però això és a part. 1916 01:37:14,750 --> 01:37:20,730 Si vostè no està utilitzant cap funció que estan fora del seu arxiu sol llavors, 1917 01:37:20,730 --> 01:37:26,100 no, no cal vincular res ja que tens tot. 1918 01:37:26,100 --> 01:37:30,310 >> Dit això, printf està sent vinculat a. 1919 01:37:30,310 --> 01:37:32,820 Si alguna vegada utilitza printf, això és una cosa que necessita ser vinculat a 1920 01:37:32,820 --> 01:37:35,740 perquè vostè no va escriure això. 1921 01:37:35,740 --> 01:37:39,530 I, de fet, printf és automàticament vinculada a. 1922 01:37:39,530 --> 01:37:42,760 Vostè sap com en la línia d'ordres o quan escriviu make, veure-ho té 1923 01:37:42,760 --> 01:37:46,690 tauler l CS50, que té enllaç a la biblioteca CS50? 1924 01:37:46,690 --> 01:37:49,070 Printf, i coses per l'estil, es va estar vinculat automàticament. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Alguna altra pregunta sobre alguna cosa? 1927 01:37:53,930 --> 01:37:56,280 >> AUDIÈNCIA: [inaudible]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: Vinculació? 1929 01:37:58,300 --> 01:38:03,450 Tenim un munt de diferents arxius binaris. 1930 01:38:03,450 --> 01:38:06,410 Aquest és l'exemple canònic que utilitzem és la biblioteca CS50. 1931 01:38:06,410 --> 01:38:09,960 Hem recopilat i que li ha assignat el binari per aquesta biblioteca CS50. 1932 01:38:09,960 --> 01:38:12,410 >> Voleu utilitzar GetString en el seu programa. 1933 01:38:12,410 --> 01:38:14,750 Així que veu i utilitza GetString. 1934 01:38:14,750 --> 01:38:19,700 Però sense el meu codi binari per GetString, al compilar el codi 1935 01:38:19,700 --> 01:38:23,140 baix, no pugui executar el seu programa perquè GetString cordes és 1936 01:38:23,140 --> 01:38:25,080 encara no completament definit. 1937 01:38:25,080 --> 01:38:29,220 >> És només quan es vincula al meu binari que conté GetString que ara, tot 1938 01:38:29,220 --> 01:38:31,130 dret, que pugui realment executar GetString. 1939 01:38:31,130 --> 01:38:32,330 El meu expedient està complet. 1940 01:38:32,330 --> 01:38:34,208 I puc executar aquest. 1941 01:38:34,208 --> 01:38:34,697 Sí? 1942 01:38:34,697 --> 01:38:37,631 >> AUDIÈNCIA: El que convertir vinculant el binari executable a? 1943 01:38:37,631 --> 01:38:42,032 Així que encara que no té altra biblioteques, no seguiria sent 1944 01:38:42,032 --> 01:38:44,477 necessari traduir la [inaudible]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: Així que un executable encara està en binari. 1946 01:38:48,640 --> 01:38:51,750 És que la combinació d'un conjunt munt de binaris. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> AUDIÈNCIA: Moltes gràcies. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Cap problema. 1950 01:38:58,560 --> 01:38:59,540 Alguna altra pregunta? 1951 01:38:59,540 --> 01:39:02,001 En cas contrari, estem preparats. 1952 01:39:02,001 --> 01:39:02,690 Bé. 1953 01:39:02,690 --> 01:39:02,990 Gràcies. 1954 01:39:02,990 --> 01:39:03,590 >> [Aplaudiments] 1955 01:39:03,590 --> 01:39:04,490 >> AUDIÈNCIA: Gràcies. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Si. 1957 01:39:05,740 --> 01:39:06,582