1 00:00:00,000 --> 00:00:02,742 2 00:00:02,742 --> 00:00:05,680 >> Spreker 1: Hi almal. 3 00:00:05,680 --> 00:00:07,530 Ons gaan om te begin. 4 00:00:07,530 --> 00:00:09,330 Ek dink mense is nog steeds gaan wees filter in. 5 00:00:09,330 --> 00:00:12,840 Maar in die belang van die tyd, so ons kan kry jy ouens hier uit op tyd, 6 00:00:12,840 --> 00:00:14,110 ons gaan om te begin. 7 00:00:14,110 --> 00:00:18,780 So welkom om die CS50 Quiz 0 review. 8 00:00:18,780 --> 00:00:23,020 Vir dié van julle wat nog nie besef nie, jy het 'n vraag op Woensdag. 9 00:00:23,020 --> 00:00:25,700 Woo-hoo. 10 00:00:25,700 --> 00:00:29,780 >> As jy nog nie begin studeer nie of het nie besef dat dit bestaan ​​nie, 11 00:00:29,780 --> 00:00:34,070 verlede vasvrae en alle inligting oor jou quiz is op cs50.net/quizzes. 12 00:00:34,070 --> 00:00:38,090 Daar is 'n paar goeie dinge op daar, verlede vasvrae van die afgelope 10 13 00:00:38,090 --> 00:00:43,760 jaar sowel as inligting oor hierdie quiz en onderwerpe 14 00:00:43,760 --> 00:00:46,250 wat gedek sal word. 15 00:00:46,250 --> 00:00:48,980 So laat ons begin. 16 00:00:48,980 --> 00:00:54,240 >> So julle ouens kan onthou, is die eerste dag van klas Dawid het die lampe op. 17 00:00:54,240 --> 00:00:59,650 So in wese, alles wat daarmee op onder die enjinkap van 'n rekenaar is 18 00:00:59,650 --> 00:01:00,860 gedoen in binêre. 19 00:01:00,860 --> 00:01:04,080 Binary beteken wat dit klink soos, 0 en 1's. 20 00:01:04,080 --> 00:01:09,290 Dit het twee waardes wat verteenwoordig kan word. 21 00:01:09,290 --> 00:01:14,675 >> So, net soos in die eerste dag van artikel Toe Dawid omgedraai op 'n ligte 22 00:01:14,675 --> 00:01:21,990 gloeilamp te verteenwoordig op, of 1, ons rekenaar verstaan ​​binêre as 0 en 23 00:01:21,990 --> 00:01:24,110 1's, op of af. 24 00:01:24,110 --> 00:01:25,360 Basiese beginsels van die program nie. 25 00:01:25,360 --> 00:01:29,440 26 00:01:29,440 --> 00:01:32,470 Elke plek is verteenwoordig in die basis twee. 27 00:01:32,470 --> 00:01:36,260 So jy voeg 2 by die 0 aan die 1 tot die 2 al die pad tot. 28 00:01:36,260 --> 00:01:41,970 >> Te bereken wat jou program is om desimale, volg jy net die vergelyking 29 00:01:41,970 --> 00:01:42,840 tipe ding. 30 00:01:42,840 --> 00:01:49,510 As jy 'n 1 in enige van dié plekke, jy dit vermenigvuldig met watter 31 00:01:49,510 --> 00:01:53,820 baseer dit is in, voeg dit op, en jy die desimaal. 32 00:01:53,820 --> 00:01:57,930 So dit is hoe jy tel 5 in binêre. 33 00:01:57,930 --> 00:02:01,400 Net soos wat ons doen op die laaste skuif, dit is hoe jy sou 34 00:02:01,400 --> 00:02:02,650 verteenwoordig 1 deur middel van 5. 35 00:02:02,650 --> 00:02:05,320 36 00:02:05,320 --> 00:02:09,660 >> Net so, net soos wat jy kan byvoeg en aftrek in desimale of baseer 10, of 37 00:02:09,660 --> 00:02:13,040 regtig 'n basis op kan byvoeg en trek in binêre. 38 00:02:13,040 --> 00:02:18,400 Presies wat jy sal verwag wanneer jy voeg die twee te maak, as dit gelyk groter 39 00:02:18,400 --> 00:02:24,220 as 1, jy dra 'n 1, maak dit 'n 0, en doen die toevoeging dat die pad, net 40 00:02:24,220 --> 00:02:29,910 soos jy met gereelde sou verwag desimale of enige ander basis. 41 00:02:29,910 --> 00:02:30,970 Cool. 42 00:02:30,970 --> 00:02:35,140 >> So soos ek gesê het, alles wat gaan op onder die kap van ons rekenaar 43 00:02:35,140 --> 00:02:37,560 gedoen word in 0 en 1's, of binêre. 44 00:02:37,560 --> 00:02:43,470 So hoe kan ons druk, byvoorbeeld, letters, of syfers, of karakters? 45 00:02:43,470 --> 00:02:45,560 En die antwoord is ASCII. 46 00:02:45,560 --> 00:02:49,380 >> ASCII is 'n skakel tussen karakters dat ons normaalweg sou sien in die 47 00:02:49,380 --> 00:02:53,360 Engelse taal soos A's, B's, C's, onderstreep, strepies, en 48 00:02:53,360 --> 00:02:54,910 iets soos dit. 49 00:02:54,910 --> 00:02:57,260 En dit kaarte wat aan 'n ASCII waarde. 50 00:02:57,260 --> 00:03:03,080 'N ASCII waarde is net 'n getal wat kan verstaan ​​word deur jou rekenaar. 51 00:03:03,080 --> 00:03:07,430 En net soos wat jy kan doen en Verder aftrekking van getalle, kan jy doen 52 00:03:07,430 --> 00:03:10,890 hulle met ASCII waardes. 53 00:03:10,890 --> 00:03:14,050 >> So in hierdie voorbeeld, wat sal hierdie druk? 54 00:03:14,050 --> 00:03:26,790 55 00:03:26,790 --> 00:03:35,480 Ja, so net 'n ruimte B ruimte C ruimte D. Waar het my muis gaan? 56 00:03:35,480 --> 00:03:39,200 57 00:03:39,200 --> 00:03:43,380 Kennisgewing wat jy kan 'n int op 65 definieer. 58 00:03:43,380 --> 00:03:47,080 En wanneer jy druk wat uit die gebruik van persent C, sal dit interpreteer dat as 'n 59 00:03:47,080 --> 00:03:49,330 karakter en sal druk A. 60 00:03:49,330 --> 00:03:52,800 >> Net so, kan jy verklaar dit as 'n kar. 61 00:03:52,800 --> 00:03:56,860 En wanneer jy druk dit uit met behulp persent C, sal dit interpreteer dat as 62 00:03:56,860 --> 00:04:05,240 persent D. En net soos wat jy kan voeg 'n nommer, kan jy voeg karakters 63 00:04:05,240 --> 00:04:06,878 ASCII waardes, in hierdie geval. 64 00:04:06,878 --> 00:04:11,370 65 00:04:11,370 --> 00:04:16,130 >> So 'n bietjie wyser vir almal. 66 00:04:16,130 --> 00:04:19,610 5, as 'n string, nie eintlik is gelyk aan 5. 67 00:04:19,610 --> 00:04:26,610 So, hoe kan ons skakel die string 5 tot die heelgetal 5? 68 00:04:26,610 --> 00:04:28,930 Enige idees? 69 00:04:28,930 --> 00:04:31,630 Ja. 70 00:04:31,630 --> 00:04:36,720 >> So as ons 5 as 'n string, ons kan aftrek 0. 71 00:04:36,720 --> 00:04:37,820 En dit sal vir ons 5. 72 00:04:37,820 --> 00:04:41,670 En so, as ons 5 as 'n integer, voeg wat aan die string 0. 73 00:04:41,670 --> 00:04:43,112 En dit gee ons die string 5. 74 00:04:43,112 --> 00:04:46,350 75 00:04:46,350 --> 00:04:48,350 Cool. 76 00:04:48,350 --> 00:04:52,940 >> Nou, onthou terug een waar lesings het ons gepraat oor algoritmes. 77 00:04:52,940 --> 00:04:57,260 So hoe kan ons eintlik wil 'n rekenaar interessante dinge te doen? 78 00:04:57,260 --> 00:05:00,460 Jy weet, net die optel en aftrek getalle en druk dinge is nie 79 00:05:00,460 --> 00:05:01,730 wat opwindend. 80 00:05:01,730 --> 00:05:04,620 Gewoonlik, ons wil hê dat ons rekenaar voer 'n soort van die algoritme. 81 00:05:04,620 --> 00:05:07,820 Iets wat 'n bietjie meer kompleks as net 'n eenvoudige rekenkundige. 82 00:05:07,820 --> 00:05:11,930 >> 'N Algoritme is net 'n stap vir stap stel instruksies vir hoe om te presteer 83 00:05:11,930 --> 00:05:14,640 'n sekere task-- 84 00:05:14,640 --> 00:05:15,660 net soos 'n resep. 85 00:05:15,660 --> 00:05:19,990 Jy kan die eerste dag van onthou klas waar Dawid het ons tel 'n kamer 86 00:05:19,990 --> 00:05:22,550 van mense en hoeveel mense was in die kamer. 87 00:05:22,550 --> 00:05:24,480 Jy kan gebruik word om te tel een vir een. 88 00:05:24,480 --> 00:05:25,860 1, 2, 3, 4. 89 00:05:25,860 --> 00:05:28,010 In daardie geval, 'n lineêre tyd algoritme. 90 00:05:28,010 --> 00:05:31,710 >> Maar Dawid bekendgestel 'n algoritme vir jy die mense in die kamer te tel 91 00:05:31,710 --> 00:05:37,340 waar almal staan, sê dat jy jou aantal ander persoon, byvoeg dat 92 00:05:37,340 --> 00:05:39,200 getal op, en een persoon sit. 93 00:05:39,200 --> 00:05:40,410 En jy herhaal dat. 94 00:05:40,410 --> 00:05:42,910 Dit is 'n tipe van die algoritme. 95 00:05:42,910 --> 00:05:47,520 Ons kan analiseer hoe doeltreffend 'n algoritme is gebaseer op dit hardloop tyd. 96 00:05:47,520 --> 00:05:49,680 Maar ons sal 'n bietjie praat meer oor dit later. 97 00:05:49,680 --> 00:05:52,740 98 00:05:52,740 --> 00:05:57,090 >> So al algoritmes kan ook word in pseudokode geskryf. 99 00:05:57,090 --> 00:06:01,120 Pseudokode is net 'n Engelse soos sintaksis gebruik te verteenwoordig 100 00:06:01,120 --> 00:06:02,420 'n programmeertaal. 101 00:06:02,420 --> 00:06:06,070 Byvoorbeeld, as ons wou 'n gebruiker te vra my gunsteling nommer om te raai, ons 102 00:06:06,070 --> 00:06:08,390 dalk pseudokode as sodanig. 103 00:06:08,390 --> 00:06:09,850 >> Kry 'n gebruikers raai. 104 00:06:09,850 --> 00:06:13,570 As die raaiskoot korrek is, vertel hulle hulle is korrek, anders hulle vertel 105 00:06:13,570 --> 00:06:15,560 hulle is nie korrek nie. 106 00:06:15,560 --> 00:06:22,530 En pseudokode is 'n manier om maklik verteenwoordig 'n idee of 'n algoritme. 107 00:06:22,530 --> 00:06:26,910 So nou het ons dalk wil eintlik skryf hierdie is in die taal wat die rekenaar 108 00:06:26,910 --> 00:06:27,980 mag verstaan. 109 00:06:27,980 --> 00:06:35,660 So kan ons ons pseudokode skryf en interpreteer wat in die bron-kode. 110 00:06:35,660 --> 00:06:41,320 >> Tot dusver, moet die bron-kode voldoen tot 'n sekere sintaksis van 111 00:06:41,320 --> 00:06:42,490 'n programmeertaal. 112 00:06:42,490 --> 00:06:45,430 En so ver, in CS50, ons het gebruik meestal c. 113 00:06:45,430 --> 00:06:48,320 So dit kan bron-kode vir c wees. 114 00:06:48,320 --> 00:06:51,440 Later in die kursus, kan jy die nag kom in kontak met ander programme 115 00:06:51,440 --> 00:06:52,480 tale soos PHP. 116 00:06:52,480 --> 00:06:57,540 Of as jy selfs ander klasse, jy kan doen Java, Python, of selfs OCML. 117 00:06:57,540 --> 00:07:01,570 Maar in ons c program taal, is dit hoe ons die bron-kode vir skryf 118 00:07:01,570 --> 00:07:04,760 die pseudokode algoritme wat Ek het net vroeër beskryf. 119 00:07:04,760 --> 00:07:08,630 120 00:07:08,630 --> 00:07:11,430 >> So, hoe werk jou rekenaar eintlik verstaan ​​dat? 121 00:07:11,430 --> 00:07:14,490 Soos ek gesê het, dit eintlik net verstaan ​​nulle en ene. 122 00:07:14,490 --> 00:07:17,880 So hoe werk dit kry uit die bron kode na iets wat kan wees 123 00:07:17,880 --> 00:07:18,960 verstaan? 124 00:07:18,960 --> 00:07:22,920 Wel, ons het iets bekend as 'n samesteller. 125 00:07:22,920 --> 00:07:28,450 >> As jy onthou terug in die meeste van jou psets, jy het 'n soort van program 126 00:07:28,450 --> 00:07:30,370 geskryf in 'n dot c lêer. 127 00:07:30,370 --> 00:07:32,550 En dan sal jy tik maak nie. 128 00:07:32,550 --> 00:07:35,970 So, wat doen nie? 129 00:07:35,970 --> 00:07:39,970 >> Jy kan tik make te stel jou program, want someone-- 130 00:07:39,970 --> 00:07:42,730 wie jou p stel geskryf het; waarskynlik David-- 131 00:07:42,730 --> 00:07:44,190 het 'n make-lêer. 132 00:07:44,190 --> 00:07:51,320 En dit vertel maak om te weet om te loop jou samesteller, genoem klang, dit sal 133 00:07:51,320 --> 00:07:55,560 stel dan jou bron kode om beswaar kode, wat nulle en ene 134 00:07:55,560 --> 00:07:57,720 dat jou rekenaar verstaan. 135 00:07:57,720 --> 00:08:01,610 Maar 'n bietjie later, sal ons gaan meer in diepte oor opstellers. 136 00:08:01,610 --> 00:08:05,640 137 00:08:05,640 --> 00:08:10,800 >> So onthou pset 0, where-- ja, jy 'n vraag? 138 00:08:10,800 --> 00:08:11,620 >> Publiek: [onhoorbaar]? 139 00:08:11,620 --> 00:08:12,490 >> Spreker 1: Ja. 140 00:08:12,490 --> 00:08:14,960 Ek dink hulle eintlik moet aanlyn wees. 141 00:08:14,960 --> 00:08:15,120 Ja. 142 00:08:15,120 --> 00:08:16,572 >> Publiek: Is dit soos [onhoorbaar]? 143 00:08:16,572 --> 00:08:19,476 144 00:08:19,476 --> 00:08:20,830 >> Spreker 1: Dit is nie. 145 00:08:20,830 --> 00:08:25,810 Die op cs50.net/quizzes. 146 00:08:25,810 --> 00:08:32,900 >> GEHOOR: Sny vasvrae, streep 2013 streep 0, en kliek net deur 147 00:08:32,900 --> 00:08:35,956 vasvrae 2013 en quiz 0, hersien artikel skyfies. 148 00:08:35,956 --> 00:08:40,380 >> Spreker 1: Ja, so as jy ouens wil trek dit op en kyk na dit op jou 149 00:08:40,380 --> 00:08:42,740 eie rekenaar, is dit goed ook. 150 00:08:42,740 --> 00:08:43,130 Sê dit weer. 151 00:08:43,130 --> 00:08:44,546 >> Publiek: [onhoorbaar]. 152 00:08:44,546 --> 00:08:48,780 >> Spreker 1: Ja, [onhoorbaar] is die dummy veranderlike. 153 00:08:48,780 --> 00:08:49,644 O ja? 154 00:08:49,644 --> 00:08:51,372 >> Publiek: [onhoorbaar]? 155 00:08:51,372 --> 00:08:54,300 >> Spreker 1: Nee, stakings is nie op die eksamen. 156 00:08:54,300 --> 00:08:55,950 Jammer, haar vraag was, was aanvalle op die eksamen. 157 00:08:55,950 --> 00:08:59,530 En dit is nie. 158 00:08:59,530 --> 00:09:05,780 So pset 0, moet julle almal geïmplementeer iets met behulp van nuuts af. 159 00:09:05,780 --> 00:09:13,100 En ons geleer 'n paar basiese programmering boustene gebruik nuuts af. 160 00:09:13,100 --> 00:09:15,590 >> So laat ons neem 'n blik op 'n sekere van hierdie boustene 161 00:09:15,590 --> 00:09:18,170 waaruit 'n program. 162 00:09:18,170 --> 00:09:20,570 Eerste is Boole-uitdrukking. 163 00:09:20,570 --> 00:09:24,540 Boolse uitdrukkings is kinders en 0's of enigiets wat 164 00:09:24,540 --> 00:09:25,700 twee moontlike waardes. 165 00:09:25,700 --> 00:09:30,320 In hierdie geval, waar of vals, op of af, en ja of nee. 166 00:09:30,320 --> 00:09:35,390 'N voorbeeld van 'n eenvoudige, baie eenvoudig, program wat gebruik maak van 'n Boole 167 00:09:35,390 --> 00:09:39,140 uitdrukking hier. 168 00:09:39,140 --> 00:09:43,220 >> So ten einde Boolse uitdrukkings te nuttig wees, ons het Boole-operateurs. 169 00:09:43,220 --> 00:09:48,920 Hierdie is die operateurs wat gebruik kan word sekere waardes te vergelyk. 170 00:09:48,920 --> 00:09:52,820 So ons het en of nie gelyk aan minder as of gelyk aan groter as of 171 00:09:52,820 --> 00:09:55,130 gelyk aan, en minder as of groter as. 172 00:09:55,130 --> 00:09:59,060 Maar hierdie operateurs is nie baie nuttig tensy ons kan kombineer hulle in 173 00:09:59,060 --> 00:10:00,320 voorwaardes. 174 00:10:00,320 --> 00:10:04,370 >> So julle ouens kan onthou van nuuts af en uit jou p stel dat ons 175 00:10:04,370 --> 00:10:05,400 moes voorwaardes. 176 00:10:05,400 --> 00:10:09,710 Hulle is, in wese, soos vurk in die logika van jou program wat 177 00:10:09,710 --> 00:10:12,670 voer, afhangende van of 'n voorwaarde voldoen word. 178 00:10:12,670 --> 00:10:18,150 So een van die voorwaardes wat ons gehad het gebruik baie keer in hierdie kursus is die 179 00:10:18,150 --> 00:10:21,470 indien anders as, en anders voorwaardes. 180 00:10:21,470 --> 00:10:24,060 >> Hier is 'n voorbeeld van hoe jy kan gebruik nie. 181 00:10:24,060 --> 00:10:28,430 Is daar iemand wat weet wat die verskil tussen net die gebruik van if-stellings al 182 00:10:28,430 --> 00:10:32,530 die pad af verse indien anders, As en anders gekombineer? 183 00:10:32,530 --> 00:10:33,013 Ja? 184 00:10:33,013 --> 00:10:34,263 >> Publiek: [onhoorbaar]. 185 00:10:34,263 --> 00:10:40,741 186 00:10:40,741 --> 00:10:42,160 >> Spreker 1: Presies. 187 00:10:42,160 --> 00:10:50,210 So as ek as al die pad af hierdie manier, selfs as hierdie toestand opbrengste 188 00:10:50,210 --> 00:10:52,800 Sekerlik, dit sal nog steeds die toets van die volgende twee. 189 00:10:52,800 --> 00:11:00,120 Terwyl, met 'n anders-as, 'n ander verklaring, indien die een keer terug waar, 190 00:11:00,120 --> 00:11:02,640 die ander is nie getoets. 191 00:11:02,640 --> 00:11:05,955 Enige vrae oor wat? 192 00:11:05,955 --> 00:11:06,890 Cool. 193 00:11:06,890 --> 00:11:12,240 >> So gebruik jy 'n if-else van 'n ander stelling as jy weet dat dit kan net 194 00:11:12,240 --> 00:11:14,470 een van hierdie gevalle. 195 00:11:14,470 --> 00:11:21,550 So ons weet as x is minder as 0, dit is beslis nie gaan wees 196 00:11:21,550 --> 00:11:22,890 groter as 0. 197 00:11:22,890 --> 00:11:26,940 198 00:11:26,940 --> 00:11:31,480 >> Volgende, 'n bousteen dat ons geleer is sirkelroetes. 199 00:11:31,480 --> 00:11:33,310 Ons het drie tipes lusse. 200 00:11:33,310 --> 00:11:35,830 Vir loops, terwyl loops, en doen terwyl loops. 201 00:11:35,830 --> 00:11:38,730 En in die algemeen, wanneer jy gaan sit om te iets skryf, moet jy om te besluit 202 00:11:38,730 --> 00:11:40,060 watter van die drie wat jy wil gebruik. 203 00:11:40,060 --> 00:11:41,900 So hoe besluit ons watter een? 204 00:11:41,900 --> 00:11:44,920 205 00:11:44,920 --> 00:11:48,790 >> Ons oor die algemeen gebruik om 'n lus vir as ons weet Hoeveel keer wil ons Itereer 206 00:11:48,790 --> 00:11:53,650 deur iets of hoeveel keer ons wil 'n taak uit te voer. 207 00:11:53,650 --> 00:11:58,830 Ons gebruik terwyl loops as ons 'n paar toestand waar die gang te hou nie. 208 00:11:58,830 --> 00:12:03,730 En ons gebruik nie, terwyl baie soortgelyk aan terwyl, maar ons wil ons kode uit te voer op 209 00:12:03,730 --> 00:12:04,880 minste een keer. 210 00:12:04,880 --> 00:12:09,410 >> So doen terwyl, wat is in die doen, sal altyd hardloop ten minste een keer. 211 00:12:09,410 --> 00:12:13,120 Terwyl met die tyd, is dit mag nie hardloop nie indien die 212 00:12:13,120 --> 00:12:15,490 voorwaarde is nie tevrede nie. 213 00:12:15,490 --> 00:12:16,740 Enige vrae met wat? 214 00:12:16,740 --> 00:12:20,480 215 00:12:20,480 --> 00:12:22,860 >> So struktuur van 'n lus vir. 216 00:12:22,860 --> 00:12:23,620 Julle het al gesien. 217 00:12:23,620 --> 00:12:25,320 Jy inisialiseer. 218 00:12:25,320 --> 00:12:26,600 Jy het 'n soort van toestand. 219 00:12:26,600 --> 00:12:32,340 So, byvoorbeeld, kan ons inisialiseer as vir i gelyk 0. 220 00:12:32,340 --> 00:12:34,040 Ek is minder as 10. 221 00:12:34,040 --> 00:12:35,442 En ek ++. 222 00:12:35,442 --> 00:12:39,010 Baie eenvoudige een wat ons gedoen het. 223 00:12:39,010 --> 00:12:42,210 >> Vir 'n rukkie loop, op soortgelyke wyse, jy het 'n soort van inisialisering te hê, 224 00:12:42,210 --> 00:12:44,980 'n soort van toestand, en 'n soort van werk. 225 00:12:44,980 --> 00:12:51,990 So kan ons ons implementeer vir lus ook as 'n while lus gebruik van hierdie. 226 00:12:51,990 --> 00:12:56,000 En net so met 'n do while lus, ons dalk 'n inisialisering het, 227 00:12:56,000 --> 00:12:58,640 voer iets, werk dit, en dan gaan die toestand. 228 00:12:58,640 --> 00:13:03,500 229 00:13:03,500 --> 00:13:05,140 >> So nou funksies. 230 00:13:05,140 --> 00:13:06,460 Ons het alles saam. 231 00:13:06,460 --> 00:13:10,140 Ons wil dalk 'n paar te skryf soort funksie. 232 00:13:10,140 --> 00:13:12,790 Gemeenskaplike funksie wat jy dalk reeds gesien het, is groot. 233 00:13:12,790 --> 00:13:13,770 Main is 'n funksie. 234 00:13:13,770 --> 00:13:16,160 Dit het 'n opbrengs tipe, int. 235 00:13:16,160 --> 00:13:18,470 Dit het 'n funksie naam, hoof. 236 00:13:18,470 --> 00:13:20,810 En dit het argumente, argc en argv. 237 00:13:20,810 --> 00:13:24,040 So belangrikste is net 'n funksie. 238 00:13:24,040 --> 00:13:27,230 >> Ander funksies wat jy kan gebruik het, printf-- printf is 'n function-- 239 00:13:27,230 --> 00:13:29,330 GetInt, toupper. 240 00:13:29,330 --> 00:13:32,010 Maar hierdie gebeur het deur vir ons geïmplementeer 241 00:13:32,010 --> 00:13:33,270 'n soort van biblioteek. 242 00:13:33,270 --> 00:13:37,400 As julle onthou insluitend hierdie CS50.h biblioteek of die 243 00:13:37,400 --> 00:13:38,510 standaard I / O biblioteek. 244 00:13:38,510 --> 00:13:39,200 Ja, die vraag? 245 00:13:39,200 --> 00:13:41,610 >> Publiek: Is hoof net inherent in c? 246 00:13:41,610 --> 00:13:44,740 Is dit net 'n soort van [onhoorbaar]? 247 00:13:44,740 --> 00:13:47,370 >> Spreker 1: Die vraag is As hoof is inherent in c. 248 00:13:47,370 --> 00:13:51,460 En ja, al die funksies het 'n belangrike funksie. 249 00:13:51,460 --> 00:13:55,290 Dit is soort van wat nodig is vir die rekenaar om te weet waar om te begin 250 00:13:55,290 --> 00:13:55,993 die bestuur van die kode. 251 00:13:55,993 --> 00:13:58,108 >> GEHOOR: So jy wil nie [onhoorbaar]? 252 00:13:58,108 --> 00:13:59,480 >> Spreker 1: Nee 253 00:13:59,480 --> 00:14:00,760 Enige ander vrae? 254 00:14:00,760 --> 00:14:03,430 255 00:14:03,430 --> 00:14:04,770 Cool. 256 00:14:04,770 --> 00:14:08,050 So net soos jy kan 'n funksie gebruik wat vir jou geskryf het, kan jy ook 257 00:14:08,050 --> 00:14:10,380 skryf jou eie funksie. 258 00:14:10,380 --> 00:14:17,050 Dit is 'n funksie wat iemand dalk geskryf het die volume te bereken 259 00:14:17,050 --> 00:14:18,395 van 'n Q, byvoorbeeld. 260 00:14:18,395 --> 00:14:21,300 261 00:14:21,300 --> 00:14:29,500 Daar is 'n terugkeer tipe hier, in hierdie geval int, ons funksie naam Q en ons 262 00:14:29,500 --> 00:14:31,360 lys van parameters. 263 00:14:31,360 --> 00:14:34,550 >> En let daarop dat jy die data te skryf tipe van die parameter wat jy wil 264 00:14:34,550 --> 00:14:38,660 gebruik of anders die funksie nie weet watter soort 265 00:14:38,660 --> 00:14:41,650 parameter moet ek aanvaar word nie. 266 00:14:41,650 --> 00:14:48,110 So, in hierdie geval, ons wil 'n heelgetal as ons insette. 267 00:14:48,110 --> 00:14:50,390 So hoekom sou ons wil funksies te gebruik? 268 00:14:50,390 --> 00:14:52,800 >> Eerste van alles, 'n groot vir organisasie. 269 00:14:52,800 --> 00:14:56,350 Hulle help breek jou kode in meer georganiseerde stukke en maak 270 00:14:56,350 --> 00:14:57,960 dit makliker om te lees. 271 00:14:57,960 --> 00:14:59,760 Vereenvoudiging. 272 00:14:59,760 --> 00:15:01,740 Dit is goed vir die ontwerp. 273 00:15:01,740 --> 00:15:04,570 As jy 'n stuk kode lees en die belangrikste funksie is regtig, 274 00:15:04,570 --> 00:15:07,750 baie lang, kan dit moeiliker wees redeneer oor wat aangaan. 275 00:15:07,750 --> 00:15:11,710 So as jy breek dit af in die funksies, dit dalk makliker wees om te lees. 276 00:15:11,710 --> 00:15:12,750 En onthou-vermoë. 277 00:15:12,750 --> 00:15:16,940 As jy 'n stuk van die kode wat die wese genoem of hardloop verskeie kere, 278 00:15:16,940 --> 00:15:20,690 in plaas van herskryf wat kode 10 keer in jou belangrikste funksie is, kan jy 279 00:15:20,690 --> 00:15:21,440 dit wil onthou. 280 00:15:21,440 --> 00:15:25,740 En dan elke keer as jy nodig het om te gebruik wat stukkie van die kode, noem die funksie. 281 00:15:25,740 --> 00:15:30,550 282 00:15:30,550 --> 00:15:35,380 >> So nou as ons onthou terug te krap, Ons het ook gepraat oor 'n paar konsepte, 283 00:15:35,380 --> 00:15:37,680 waarvan een is threading. 284 00:15:37,680 --> 00:15:41,120 Draad is die konsep van verskeie rye van die kode 285 00:15:41,120 --> 00:15:43,040 uitvoering op dieselfde tyd. 286 00:15:43,040 --> 00:15:47,490 So dink terug aan die eerste dag waar Dawid gehad julle tel van die aantal 287 00:15:47,490 --> 00:15:48,440 mense in die kamer. 288 00:15:48,440 --> 00:15:50,550 >> In wese, wat aan die gang op is almal van julle ouens was 289 00:15:50,550 --> 00:15:52,370 hardloop aparte drade. 290 00:15:52,370 --> 00:15:55,540 En die drade bymekaar kom 'n soort van antwoord te kry. 291 00:15:55,540 --> 00:15:58,890 Net so, in Scratch, wanneer jy verskeie sprites, kan jy 292 00:15:58,890 --> 00:16:01,070 het 'n kat en 'n hond. 293 00:16:01,070 --> 00:16:08,770 En hulle sal gelyktydig om hul eie skrifte. 294 00:16:08,770 --> 00:16:10,020 Dit is 'n voorbeeld van stringe. 295 00:16:10,020 --> 00:16:12,860 296 00:16:12,860 --> 00:16:18,000 >> En die ander konsep wat bekendgestel in kras was gebeure. 297 00:16:18,000 --> 00:16:22,550 En gebeure is wanneer verskeie dele van jou kode met mekaar kommunikeer. 298 00:16:22,550 --> 00:16:26,840 In nuuts af, dit was toe jy gebruik om die uitsending beheer en die Toe ek 299 00:16:26,840 --> 00:16:29,500 Ontvang blokke. 300 00:16:29,500 --> 00:16:35,170 >> En ook in Probleem Stel 4, het ons gesien 'n bietjie van die gebeure as well. 301 00:16:35,170 --> 00:16:38,250 Julle kan gebruik het die Gevent biblioteek. 302 00:16:38,250 --> 00:16:42,450 En daar was 'n funksie waitForClick waarin jy wag 303 00:16:42,450 --> 00:16:44,300 vir die gebruiker te klik. 304 00:16:44,300 --> 00:16:47,870 En jou kliek, in hierdie geval, sou wees die geleentheid en wag vir kliek is jou 305 00:16:47,870 --> 00:16:49,120 event handler. 306 00:16:49,120 --> 00:16:53,690 307 00:16:53,690 --> 00:16:58,630 >> En ook, die hele bestuur van jou psets en werk op jou psets, jy 308 00:16:58,630 --> 00:17:01,920 dalk in aanraking kom het sommige van hierdie opdragte. 309 00:17:01,920 --> 00:17:05,579 Dit is wat jy in jou getik terminale venster of wat ookal venster 310 00:17:05,579 --> 00:17:12,119 wat dui op jou g wysig om, wese, opgevolg jou rekenaar. 311 00:17:12,119 --> 00:17:19,440 >> So byvoorbeeld, LS lys die inhoud van 'n gids. 312 00:17:19,440 --> 00:17:22,510 Maak gids skep 'n nuwe gids. 313 00:17:22,510 --> 00:17:24,819 CD, verander die gids. 314 00:17:24,819 --> 00:17:28,400 RM, verwyder, verwyder 'n lêer of 'n gids. 315 00:17:28,400 --> 00:17:31,050 En dan verwyder gids verwyder 'n gids. 316 00:17:31,050 --> 00:17:32,300 >> Publiek: [onhoorbaar]? 317 00:17:32,300 --> 00:17:36,978 318 00:17:36,978 --> 00:17:38,370 >> Spreker 1: Ja, seker nie. 319 00:17:38,370 --> 00:17:42,530 320 00:17:42,530 --> 00:17:46,040 Jammer, die vraag was as jy sou stel om hierdie 321 00:17:46,040 --> 00:17:48,840 op die oneerlik vel. 322 00:17:48,840 --> 00:17:49,440 Dit kan help. 323 00:17:49,440 --> 00:17:51,490 As jy 'n kamer, kan jy sit dit op. 324 00:17:51,490 --> 00:17:56,170 Dit is ook net oor die algemeen goed genoeg om te onthou, want as jy dit gebruik 325 00:17:56,170 --> 00:17:59,060 jy dalk wil net het dit gememoriseer. 326 00:17:59,060 --> 00:18:02,750 Dit sal jou lewe baie makliker maak. 327 00:18:02,750 --> 00:18:04,000 Het ek jou vraag beantwoord? 328 00:18:04,000 --> 00:18:10,528 329 00:18:10,528 --> 00:18:14,290 >> So nou het ons gepraat 'n bietjie kortliks oor biblioteke. 330 00:18:14,290 --> 00:18:18,570 Maar die twee belangrikste is dat ons het al gebruik tot dusver in die kursus is 331 00:18:18,570 --> 00:18:20,860 standaard I / O en cs50. 332 00:18:20,860 --> 00:18:25,410 Watter soort dinge is ingesluit in die standaard I / O biblioteek? 333 00:18:25,410 --> 00:18:28,410 >> Ja, so ver ons printf gebruik. 334 00:18:28,410 --> 00:18:31,150 In cs50, het ons GetInt gebruik en GetString. 335 00:18:31,150 --> 00:18:37,200 En die data tipe string gebeur ook in hierdie cs50 biblioteek verklaar word. 336 00:18:37,200 --> 00:18:40,250 Ons sal praat 'n bietjie meer in diepte oor hoe biblioteke werk en hoe hulle 337 00:18:40,250 --> 00:18:41,870 interaksie met die res van jou kode. 338 00:18:41,870 --> 00:18:46,220 Maar dit is die twee belangrikste is dat ons in kontak gekom het met tot dusver in 339 00:18:46,220 --> 00:18:48,430 die kursus. 340 00:18:48,430 --> 00:18:50,050 >> Tipes. 341 00:18:50,050 --> 00:18:58,120 Dit is goed om te onthou hoeveel elke tipe is verteenwoordig deur of hoe 342 00:18:58,120 --> 00:19:02,840 baie grepe elk van die tipe requires-- 343 00:19:02,840 --> 00:19:04,990 int, 4 grepe; kar, 1 byte. 344 00:19:04,990 --> 00:19:06,550 Float is 4 grepe. 345 00:19:06,550 --> 00:19:07,782 Wat is 'n dubbele? 346 00:19:07,782 --> 00:19:09,032 >> Publiek: [onhoorbaar]. 347 00:19:09,032 --> 00:19:11,398 348 00:19:11,398 --> 00:19:16,240 >> Spreker 1: Ja, so 'n float maar dubbel die grootte. 349 00:19:16,240 --> 00:19:17,150 Wat van 'n lang? 350 00:19:17,150 --> 00:19:18,400 >> Publiek: [onhoorbaar]. 351 00:19:18,400 --> 00:19:21,614 352 00:19:21,614 --> 00:19:24,680 >> Spreker 1: OK. 353 00:19:24,680 --> 00:19:25,410 Wat is 'n lang? 354 00:19:25,410 --> 00:19:26,660 >> Publiek: [onhoorbaar]. 355 00:19:26,660 --> 00:19:29,400 356 00:19:29,400 --> 00:19:31,450 >> Spreker 1: Ja, verdubbel 'n int. 357 00:19:31,450 --> 00:19:34,240 358 00:19:34,240 --> 00:19:34,705 Ja. 359 00:19:34,705 --> 00:19:36,100 >> Publiek: [onhoorbaar]. 360 00:19:36,100 --> 00:19:38,030 >> Spreker 1: Long [onhoorbaar]. 361 00:19:38,030 --> 00:19:41,860 En dan 'n lang lang dubbel dit. 362 00:19:41,860 --> 00:19:42,814 >> Publiek: Nee, nee. 363 00:19:42,814 --> 00:19:47,107 'N Lang is net 'n int. 364 00:19:47,107 --> 00:19:50,910 Dit hang af van die argitektuur voor die [onhoorbaar] 365 00:19:50,910 --> 00:19:52,922 en int het dieselfde grootte. 366 00:19:52,922 --> 00:19:54,172 [Onhoorbaar]. 367 00:19:54,172 --> 00:19:58,841 368 00:19:58,841 --> 00:20:00,920 >> Spreker 1: So 'n lang en 'n int is dieselfde. 369 00:20:00,920 --> 00:20:02,943 En dan 'n lang lang is dubbel die int. 370 00:20:02,943 --> 00:20:03,910 Cool. 371 00:20:03,910 --> 00:20:05,550 En dan, wat is die laaste soort? 372 00:20:05,550 --> 00:20:06,510 >> Publiek: Pointer. 373 00:20:06,510 --> 00:20:10,350 >> Spreker 1: Ja, so het ons geleer 'n bietjie oor wysers. 374 00:20:10,350 --> 00:20:14,015 En ten spyte van wat 'n wyser is wys aan- dit kan 'n kar ster 375 00:20:14,015 --> 00:20:15,880 of 'n int star-- 376 00:20:15,880 --> 00:20:20,530 dit is altyd 4 grepe vir 'n muis. 377 00:20:20,530 --> 00:20:21,633 Vrae oor wat? 378 00:20:21,633 --> 00:20:22,116 Ja? 379 00:20:22,116 --> 00:20:24,531 >> Publiek: [onhoorbaar]? 380 00:20:24,531 --> 00:20:29,530 >> Spreker 1: So 'n lang en 'n int is dieselfde in hierdie cs50 toestel. 381 00:20:29,530 --> 00:20:32,302 >> Publiek: Die toestel is heeltemal verwissel. 382 00:20:32,302 --> 00:20:33,510 >> Spreker 1: Ja. 383 00:20:33,510 --> 00:20:36,610 So dan 'n lang lang dubbel 'n int. 384 00:20:36,610 --> 00:20:39,250 >> Publiek: Dit is die 32 bit? 385 00:20:39,250 --> 00:20:40,620 >> Spreker 1: 32 bit, ja. 386 00:20:40,620 --> 00:20:43,572 >> Publiek: So [onhoorbaar]? 387 00:20:43,572 --> 00:20:46,790 >> Spreker 1: Ja, as dit nie uitdruklik sê, jy 388 00:20:46,790 --> 00:20:47,870 moet 'n 32 bit aanvaar. 389 00:20:47,870 --> 00:20:50,040 >> Publiek: Dit sal iets sê soos die aanvaarding van 'n 390 00:20:50,040 --> 00:20:51,498 argitektuur soos die toestel. 391 00:20:51,498 --> 00:20:58,800 392 00:20:58,800 --> 00:21:01,710 Vir 64 bit, die enigste dinge wat verandering is verlang en wenke. 393 00:21:01,710 --> 00:21:05,614 Hulle het albei [onhoorbaar]. 394 00:21:05,614 --> 00:21:06,590 >> Spreker 1: Ja? 395 00:21:06,590 --> 00:21:07,566 >> Publiek: Vraag. 396 00:21:07,566 --> 00:21:10,982 So op een van die praktyk vasvrae, dit vra oor 'n ongetekende int. 397 00:21:10,982 --> 00:21:15,374 So hoe sal dit bepaal word van 'n int [onhoorbaar]? 398 00:21:15,374 --> 00:21:18,140 >> Spreker 1: 'n ongetekende in is ook 4 grepe. 399 00:21:18,140 --> 00:21:21,172 Maar wat anders is oor 'n getekende int en 'n ongetekende int? 400 00:21:21,172 --> 00:21:22,422 >> Publiek: [onhoorbaar]. 401 00:21:22,422 --> 00:21:24,868 402 00:21:24,868 --> 00:21:25,630 >> Spreker 1: Right. 403 00:21:25,630 --> 00:21:27,570 'N Mens kan negatiewe waardes verteenwoordig. 404 00:21:27,570 --> 00:21:28,580 Maar hoe doen? 405 00:21:28,580 --> 00:21:30,536 >> Publiek: [onhoorbaar]. 406 00:21:30,536 --> 00:21:36,370 >> Spreker 1: Ja, dit spaar 1 bietjie die teken te verteenwoordig. 407 00:21:36,370 --> 00:21:40,910 408 00:21:40,910 --> 00:21:45,040 Die onderteken het 'n bietjie wat verteenwoordig die teken. 409 00:21:45,040 --> 00:21:48,886 En unsigned is net al die positiewe. 410 00:21:48,886 --> 00:21:50,365 >> Publiek: OK. 411 00:21:50,365 --> 00:21:54,230 So jy sê dat 'n dubbel is twee keer die grootte van 'n float? 412 00:21:54,230 --> 00:21:58,202 >> Spreker 1: Double is twee keer die grootte van 'n vlot, ja. 413 00:21:58,202 --> 00:22:01,639 >> Publiek: Hoe kan 'n wyser na 'n lang lang [onhoorbaar]? 414 00:22:01,639 --> 00:22:06,058 415 00:22:06,058 --> 00:22:10,870 >> Spreker 1: Die vraag is dus hoe die wyser na 'n lang long-- 416 00:22:10,870 --> 00:22:13,800 hoe is dit net vier grepe toe 'n lang lang sy 8 grepe. 417 00:22:13,800 --> 00:22:17,310 So onthou wat is 'n wyser, wese, op die bak waarde. 418 00:22:17,310 --> 00:22:19,046 >> Publiek: [onhoorbaar]. 419 00:22:19,046 --> 00:22:22,670 >> Spreker 1: Ja, so 'n wyser is net 'n herinnering plek. 420 00:22:22,670 --> 00:22:28,040 So dit maak nie saak hoeveel ruimte dat wyser wys na. 421 00:22:28,040 --> 00:22:32,060 Dit moet net 4 grepe om tred te hou van daardie geheue plek. 422 00:22:32,060 --> 00:22:34,760 423 00:22:34,760 --> 00:22:36,010 Enige ander vrae? 424 00:22:36,010 --> 00:22:39,800 425 00:22:39,800 --> 00:22:41,050 Cool. 426 00:22:41,050 --> 00:22:42,920 427 00:22:42,920 --> 00:22:47,460 >> So het die laaste ding wat ek het standaard uitset. 428 00:22:47,460 --> 00:22:51,020 Jy moet hulle gereeld gebruik genoeg dat jy kan onthou. 429 00:22:51,020 --> 00:22:54,800 Maar dit is wanneer ons gebruik printf, byvoorbeeld. 430 00:22:54,800 --> 00:22:59,260 En ons het hierdie plekhouers wat geroep formaat kodes. 431 00:22:59,260 --> 00:23:03,910 >> So persent c kar, persent i vir int, en ons kan ook gebruik persent d. 432 00:23:03,910 --> 00:23:05,130 Dit is dieselfde ding. 433 00:23:05,130 --> 00:23:08,200 Maar, oor die algemeen, in CS50 ons probeer persent i te gebruik. 434 00:23:08,200 --> 00:23:09,860 Persent f vir float. 435 00:23:09,860 --> 00:23:15,620 Persent ld vir 'n lang lang en persent s vir string. 436 00:23:15,620 --> 00:23:18,550 >> Net so, het ons met behulp van 'n paar van die ontsnapping rye. 437 00:23:18,550 --> 00:23:22,431 Byvoorbeeld, agteroorskuinsstreep n nuwe lyn. 438 00:23:22,431 --> 00:23:26,910 Dit is net vir wanneer jy opmaak jou kode vir die gedrukte f. 439 00:23:26,910 --> 00:23:27,260 Ja? 440 00:23:27,260 --> 00:23:28,906 >> Publiek: Wat is persent d vir? 441 00:23:28,906 --> 00:23:31,850 >> Spreker 1: Dus die vraag is wat persent d vir? 442 00:23:31,850 --> 00:23:33,270 Persent d is vir ints. 443 00:23:33,270 --> 00:23:37,392 Persent d en persent i is dieselfde. 444 00:23:37,392 --> 00:23:41,130 >> Publiek: Wat is die verskil tussen agteroorskuinsstreep N en agteroorskuinsstreep r? 445 00:23:41,130 --> 00:23:45,300 >> Spreker 1: Die vraag is wat is die verskil tussen teenreaksie N en 446 00:23:45,300 --> 00:23:48,615 teenreaksie r? 447 00:23:48,615 --> 00:23:50,906 Ek dink agteroorskuinsstreep r is-- 448 00:23:50,906 --> 00:23:54,340 >> Publiek: So agteroorskuinsstreep r net impliseer terug na die begin van die lyn 449 00:23:54,340 --> 00:23:56,670 sonder eintlik gaan na 'n nuwe lyn. 450 00:23:56,670 --> 00:24:01,000 So as jy druk 'n back slash r en jy gaan terug na die begin van die lyn 451 00:24:01,000 --> 00:24:04,005 dan moet jy druk meer dinge, jy oorskryf die dinge wat reeds op 452 00:24:04,005 --> 00:24:04,390 [Onhoorbaar]. 453 00:24:04,390 --> 00:24:06,725 AANGESIEN N eintlik gaan om 'n nuwe lyn en gaan na [onhoorbaar]. 454 00:24:06,725 --> 00:24:10,525 455 00:24:10,525 --> 00:24:13,915 >> Spreker 1: Wel, enige ander vrae? 456 00:24:13,915 --> 00:24:15,430 Alle regte. 457 00:24:15,430 --> 00:24:18,617 Ek gaan dit aan die hand af te Dan wat sal voortgaan. 458 00:24:18,617 --> 00:24:25,078 >> [Applous] 459 00:24:25,078 --> 00:25:08,814 460 00:25:08,814 --> 00:25:09,720 >> Dan Alle righty. 461 00:25:09,720 --> 00:25:18,590 So ek sal praat oor 'n ander groot verskeidenheid van idees uit die klas wat 462 00:25:18,590 --> 00:25:23,220 rofweg verteenwoordiger van week twee en die begin van die week drie begin af 463 00:25:23,220 --> 00:25:28,690 met giet, wat net 'n manier van behandeling van 'n waarde van 'n sekere tipe as 464 00:25:28,690 --> 00:25:30,830 'n waarde van 'n ander soort. 465 00:25:30,830 --> 00:25:34,110 So kan ons dit doen met karakters te ints, dryf tot ints, en 466 00:25:34,110 --> 00:25:35,360 lang verlang te verdubbel. 467 00:25:35,360 --> 00:25:38,170 468 00:25:38,170 --> 00:25:44,500 >> Al hierdie dinge kan as maniere gebruik word van die behandeling van sommige numeriese waarde 469 00:25:44,500 --> 00:25:48,370 minus kar as 'n paar ander numeriese waarde. 470 00:25:48,370 --> 00:25:54,480 So daar is 'n paar probleme met hierdie, Natuurlik, wat kom wanneer jy gooi 471 00:25:54,480 --> 00:25:57,860 dinge soos float te ints. 472 00:25:57,860 --> 00:26:00,500 So, dit is 'n bietjie vreemd. 473 00:26:00,500 --> 00:26:03,170 Ons het 'n float wat 1,31. 474 00:26:03,170 --> 00:26:05,220 Ons vermenigvuldig dit met 10,000. 475 00:26:05,220 --> 00:26:08,380 En dan is ons druk dit as 'n int. 476 00:26:08,380 --> 00:26:09,630 Wat doen dit uitset? 477 00:26:09,630 --> 00:26:11,600 478 00:26:11,600 --> 00:26:14,020 10,000 keer 1.31. 479 00:26:14,020 --> 00:26:18,761 So 13.000, is dat die raai? 480 00:26:18,761 --> 00:26:20,685 >> Publiek: Ek dink dit is 10.000. 481 00:26:20,685 --> 00:26:24,234 >> Dan So ek vermenigvuldig dit met 10,000 voor ek gooi dit. 482 00:26:24,234 --> 00:26:25,202 >> Publiek: Oh. 483 00:26:25,202 --> 00:26:27,622 Sou daar nie een 9 en 'n paar 0 getalle? 484 00:26:27,622 --> 00:26:29,270 >> Dan Jy kan 'n paar vreemde syfers. 485 00:26:29,270 --> 00:26:32,410 486 00:26:32,410 --> 00:26:37,670 So reg, dit is 1,3 keer 10,000. 487 00:26:37,670 --> 00:26:40,040 So dit is 13.000. 488 00:26:40,040 --> 00:26:41,313 En dit ekstra weird-- 489 00:26:41,313 --> 00:26:42,160 >> Publiek: 13.100. 490 00:26:42,160 --> 00:26:42,650 >> Dan 13.100. 491 00:26:42,650 --> 00:26:44,910 Dankie, Rob. 492 00:26:44,910 --> 00:26:46,610 En dit ekstra weirdness-- 493 00:26:46,610 --> 00:26:48,060 hierdie 9,9-- 494 00:26:48,060 --> 00:26:53,860 is bloot omdat die beslissende beland afronding waar 495 00:26:53,860 --> 00:26:55,394 dit moet nie. 496 00:26:55,394 --> 00:26:55,871 Ja. 497 00:26:55,871 --> 00:26:58,256 >> Publiek: Die beslissende gebeur na iets anders? 498 00:26:58,256 --> 00:27:03,865 >> Dan So, want ek het dit in die gedrukte media, is dit doen dit vermenigvuldiging voordat dit 499 00:27:03,865 --> 00:27:05,230 doen dit giet. 500 00:27:05,230 --> 00:27:06,140 >> Publiek: [onhoorbaar]. 501 00:27:06,140 --> 00:27:11,350 >> Dan: Ek dink dit sal die eerste gooi, ja, wat sou wees 10,000. 502 00:27:11,350 --> 00:27:12,610 Enigiets anders? 503 00:27:12,610 --> 00:27:13,330 Cool. 504 00:27:13,330 --> 00:27:16,344 So, dit is 13.099. 505 00:27:16,344 --> 00:27:17,840 Hoekom gebeur dit? 506 00:27:17,840 --> 00:27:18,900 Onakkuraatheid. 507 00:27:18,900 --> 00:27:21,020 >> Dryf is nie volmaak nie. 508 00:27:21,020 --> 00:27:27,550 Hulle kan net getalle na 'n stel sekere aantal beduidende syfers. 509 00:27:27,550 --> 00:27:35,120 So as ons druk 8 sig vye aan hierdie float, kry ons 'n soort 510 00:27:35,120 --> 00:27:36,800 lelike soek nommer. 511 00:27:36,800 --> 00:27:45,580 En dit is omdat 1.31 kan nie akkuraat word verteenwoordig deur 'n eenvoudige 512 00:27:45,580 --> 00:27:49,000 magte van twee in die masjien. 513 00:27:49,000 --> 00:27:53,530 So dit eindig met die naaste raai wat eindig 514 00:27:53,530 --> 00:27:55,710 'n bietjie laag. 515 00:27:55,710 --> 00:27:57,730 Sin maak? 516 00:27:57,730 --> 00:27:59,110 OK. 517 00:27:59,110 --> 00:28:05,840 >> Nou, aangeskakel is 'n ander manier van doen voorwaardelike stellings waar al 518 00:28:05,840 --> 00:28:09,900 ons omgee is 'n enkele veranderlike. 519 00:28:09,900 --> 00:28:16,570 So in hierdie spesifieke voorbeeld, ons is om 'n heelgetal van die gebruiker. 520 00:28:16,570 --> 00:28:21,070 En dan is ons op soek na wat dit heelgetal is. 521 00:28:21,070 --> 00:28:23,500 Vermoedelik, dit se nommer tussen een en vier. 522 00:28:23,500 --> 00:28:24,800 Dit is wat ons vra. 523 00:28:24,800 --> 00:28:28,450 >> So jy doen 'n skakelaar van die veranderlike naam. 524 00:28:28,450 --> 00:28:34,290 Dan moet jy die opstel van gevalle van moontlike waardes wat dit kan wees. 525 00:28:34,290 --> 00:28:37,730 So geval ', sê dit is laag. 526 00:28:37,730 --> 00:28:41,080 En dan moet jy breek om uit te kry van die skakelaar toestand so 527 00:28:41,080 --> 00:28:43,270 jy gaan hou nie. 528 00:28:43,270 --> 00:28:44,830 >> In die volgende case-- 529 00:28:44,830 --> 00:28:46,940 so geval twee en geval three-- 530 00:28:46,940 --> 00:28:51,920 As dit is die geval twee is dit net druppels neer te die eerste reël van die kode dit sien as met 531 00:28:51,920 --> 00:28:55,400 gevallestudies drie tot dit sien 'n breek. 532 00:28:55,400 --> 00:29:00,430 So die rede jy geval een net druk lae is omdat ek 533 00:29:00,430 --> 00:29:01,890 hierdie break hier. 534 00:29:01,890 --> 00:29:05,360 As ek sê, geïgnoreer hierdie break-- As ek gooi hierdie breakaway-- 535 00:29:05,360 --> 00:29:09,740 dit sou druk laag is, en dan sou dit druk middel, en dan sal dit breek. 536 00:29:09,740 --> 00:29:12,200 >> So breek is 'n belangrike deel skakelaar voorwaardes en 537 00:29:12,200 --> 00:29:14,340 hulle moet daar wees. 538 00:29:14,340 --> 00:29:20,070 Enige gevalle wat nie uitdruklik is deur die verstek hanteer 539 00:29:20,070 --> 00:29:26,645 geval in die skakelaar en gegooi moet word. 540 00:29:26,645 --> 00:29:31,363 >> Publiek: 1, 2, 3, en 4 sal n wees? 541 00:29:31,363 --> 00:29:33,310 >> Dan Waardes dat n kan wees. 542 00:29:33,310 --> 00:29:34,654 Ja. 543 00:29:34,654 --> 00:29:35,146 Ja? 544 00:29:35,146 --> 00:29:37,606 >> Publiek: So wanneer jy dat [onhoorbaar]? 545 00:29:37,606 --> 00:29:44,002 546 00:29:44,002 --> 00:29:46,830 >> Dan Jy sal druk laag is, en dan dit sou druk middel, en 547 00:29:46,830 --> 00:29:47,400 dan sou dit breek. 548 00:29:47,400 --> 00:29:50,244 >> Publiek: Hoekom sou dit druk middel as [onhoorbaar]? 549 00:29:50,244 --> 00:29:54,036 550 00:29:54,036 --> 00:30:00,550 >> Dan So alles onder 'n geval voor 'n breek val onder. 551 00:30:00,550 --> 00:30:09,390 So geval een druk is onder geval een soos hierdie volgende druk. 552 00:30:09,390 --> 00:30:09,890 Ja? 553 00:30:09,890 --> 00:30:11,140 >> Publiek: [onhoorbaar]? 554 00:30:11,140 --> 00:30:15,890 555 00:30:15,890 --> 00:30:22,170 >> Dan So hierdie nommer is net 'n bepaalde waarde wat hierdie veranderlike 556 00:30:22,170 --> 00:30:23,420 kan neem nie, reg? 557 00:30:23,420 --> 00:30:26,740 558 00:30:26,740 --> 00:30:28,490 Maak dit sin maak? 559 00:30:28,490 --> 00:30:28,990 Ja. 560 00:30:28,990 --> 00:30:31,490 >> Publiek: [onhoorbaar]? 561 00:30:31,490 --> 00:30:34,130 >> DAN: Ja, geval twee sou druk middel en dan breek. 562 00:30:34,130 --> 00:30:35,380 >> Publiek: [onhoorbaar]? 563 00:30:35,380 --> 00:30:37,954 564 00:30:37,954 --> 00:30:40,050 >> Dan dink ek enige? 565 00:30:40,050 --> 00:30:43,855 Wat ander data tipes kan jy oorskakel? 566 00:30:43,855 --> 00:30:46,320 >> Publiek: Jy kan wissel oor enige data tipes. 567 00:30:46,320 --> 00:30:50,905 Maar dit beteken net iets oor karakters en ints en dinge soos dat, omdat 568 00:30:50,905 --> 00:30:55,600 As jy die skakel oor 'n muis wat nie regtig sin maak nie, 569 00:30:55,600 --> 00:30:59,555 oorskakeling vragte, as dit selfs laat jy dit doen, as gevolg van drywende punt 570 00:30:59,555 --> 00:31:02,840 in presisie, sou jy nie regtig wil dit in elk geval doen. 571 00:31:02,840 --> 00:31:07,320 So mooi veel nie, net ints en karakters en dinge soos dat. 572 00:31:07,320 --> 00:31:12,360 >> DAN: Ja, dit is wanneer jy eksplisiete waardes wat jy weet, ek dink, kan 573 00:31:12,360 --> 00:31:14,250 dat 'n skakelaar is werklik nuttig. 574 00:31:14,250 --> 00:31:17,094 575 00:31:17,094 --> 00:31:18,990 Goed? 576 00:31:18,990 --> 00:31:21,370 OK. 577 00:31:21,370 --> 00:31:26,180 >> Omvang is die reeks wat 'n verklaarde veranderlike strek. 578 00:31:26,180 --> 00:31:32,190 So in hierdie klein stuk van die kode wat ek het, sou dit vol foute wees. 579 00:31:32,190 --> 00:31:41,450 En die rede is ek verklaar hierdie int Ek binne die bestek van hierdie lus. 580 00:31:41,450 --> 00:31:46,390 En dan is ek probeer om te verwys dat i buite wat vir lus omvang. 581 00:31:46,390 --> 00:31:50,330 >> So basies, kan jy dink oor die omvang as enigiets wat jy verklaar 582 00:31:50,330 --> 00:31:59,750 met binne 'n stel van krulhakies net bestaan ​​binne die krulhakies. 583 00:31:59,750 --> 00:32:04,990 En as jy probeer en gebruik daardie veranderlike buite die krulhakies, sal jy 584 00:32:04,990 --> 00:32:08,356 'n fout van die samesteller. 585 00:32:08,356 --> 00:32:08,812 Ja? 586 00:32:08,812 --> 00:32:09,724 >> Publiek: So hierdie een nie werk nie? 587 00:32:09,724 --> 00:32:11,790 >> Dan Dit werk nie, ja. 588 00:32:11,790 --> 00:32:17,190 589 00:32:17,190 --> 00:32:18,660 Strings. 590 00:32:18,660 --> 00:32:19,780 String n kar *. 591 00:32:19,780 --> 00:32:22,250 Hulle is presies dieselfde. 592 00:32:22,250 --> 00:32:25,540 Hulle is net verwysings na karakters. 593 00:32:25,540 --> 00:32:33,000 En enige snare wat jy moet eindig met agteroorskuinsstreep nul, wat net 594 00:32:33,000 --> 00:32:34,410 'n C-konvensie. 595 00:32:34,410 --> 00:32:36,680 >> Dit word genoem die NULL Terminator. 596 00:32:36,680 --> 00:32:39,050 En NULL-- 597 00:32:39,050 --> 00:32:41,670 kapitaal N, kapitaal U, kapitaal L, kapitaal L-- 598 00:32:41,670 --> 00:32:44,290 is nie dieselfde as die NULL Terminator. 599 00:32:44,290 --> 00:32:46,640 Dit is 'n wyser. 600 00:32:46,640 --> 00:32:48,280 Dit is 'n karakter. 601 00:32:48,280 --> 00:32:49,530 Hulle is baie duidelike. 602 00:32:49,530 --> 00:32:50,200 Onthou dit. 603 00:32:50,200 --> 00:32:52,320 Dit sal wees op die toets, waarskynlik. 604 00:32:52,320 --> 00:32:54,040 Ek het nie gesien die quiz. 605 00:32:54,040 --> 00:32:57,880 606 00:32:57,880 --> 00:32:58,840 Ja? 607 00:32:58,840 --> 00:33:01,232 >> Publiek: So NULL is, sê, die wyser? 608 00:33:01,232 --> 00:33:01,995 >> DAN: Ja. 609 00:33:01,995 --> 00:33:05,170 >> Publiek: Wat beteken [onhoorbaar]? 610 00:33:05,170 --> 00:33:10,050 >> Dan As, sê, is malloc genoem wanneer jy nie genoeg geheue te kry het 611 00:33:10,050 --> 00:33:14,400 wat die grootte wat jy vra vir, malloc sal terugkeer NULL. 612 00:33:14,400 --> 00:33:19,550 Dit is, basies, wanneer 'n funksie is veronderstel om 'n wyser om terug te keer, het jy 613 00:33:19,550 --> 00:33:22,600 nodig het om te gaan teen NULL omdat NULL is 'n mooi good-- 614 00:33:22,600 --> 00:33:25,260 dit is, soort van, die vullis waarde. 615 00:33:25,260 --> 00:33:27,050 Dit is 'n zero sover wysers gaan. 616 00:33:27,050 --> 00:33:29,630 617 00:33:29,630 --> 00:33:32,250 >> Wanneer jy bel 'n funksie, wat stuur 'n wyser. 618 00:33:32,250 --> 00:33:35,960 Jy gaan wil gaan om te wees seker dat wyser is nie NULL 619 00:33:35,960 --> 00:33:37,760 omdat NULL is baie algemeen. 620 00:33:37,760 --> 00:33:40,160 Dit is soort van 'n gemors terugkeer. 621 00:33:40,160 --> 00:33:44,902 So as iets nie reg gaan nie, net terugkeer NULL plaas. 622 00:33:44,902 --> 00:33:45,898 >> Publiek: [onhoorbaar]? 623 00:33:45,898 --> 00:33:48,922 >> DAN: Ja, en dit is hierdie. 624 00:33:48,922 --> 00:33:51,750 >> Publiek: [onhoorbaar]? 625 00:33:51,750 --> 00:33:52,800 >> Dan Spel dit soos hierdie. 626 00:33:52,800 --> 00:33:54,150 Dit is die NULL Terminator. 627 00:33:54,150 --> 00:33:56,560 Dit is klein N-U-L-L as jy spel dit. 628 00:33:56,560 --> 00:33:59,860 >> Publiek: En ek het net rug en dit getoets. 629 00:33:59,860 --> 00:34:03,010 En as jy probeer om 'n drywende punt te sit waarde in 'n skakelaar, sal dit skree jy 630 00:34:03,010 --> 00:34:05,916 sê, verklaring vereis uitdrukking van heeltallige tipe. 631 00:34:05,916 --> 00:34:07,166 >> Dan Daar gaan jy. 632 00:34:07,166 --> 00:34:09,639 633 00:34:09,639 --> 00:34:12,246 Maar ja, wat was die vraag nou weer? 634 00:34:12,246 --> 00:34:13,496 >> Publiek: [onhoorbaar]? 635 00:34:13,496 --> 00:34:16,150 636 00:34:16,150 --> 00:34:23,679 >> Dan So hoofstad N, kapitaal U, kapitaal L, kapitaal L is 'n werklike c ding. 637 00:34:23,679 --> 00:34:29,719 Dit is die NULL pointer en sal net so hanteer word. 638 00:34:29,719 --> 00:34:33,530 Jy sal nie ooit probeer en spel die NULL karakter en sien nie enige 639 00:34:33,530 --> 00:34:35,630 ander manier as hierdie. 640 00:34:35,630 --> 00:34:36,610 Ja? 641 00:34:36,610 --> 00:34:42,490 >> Publiek: So terugkeer na char maksimum of iets in die notas, sou dit 642 00:34:42,490 --> 00:34:43,960 verpersoonlik dieselfde funksie as [onhoorbaar]? 643 00:34:43,960 --> 00:34:50,655 644 00:34:50,655 --> 00:34:54,949 >> Publiek: So is jy verwys na terug kar maksimum van getChar, of 645 00:34:54,949 --> 00:34:55,444 wat dit ookal is? 646 00:34:55,444 --> 00:34:55,940 >> Publiek: Ja. 647 00:34:55,940 --> 00:34:58,620 >> Publiek: Ja, so die algemene term vir al die dinge 648 00:34:58,620 --> 00:34:59,920 is brandwag waardes. 649 00:34:59,920 --> 00:35:03,640 Dus, net soos die terugkeer van int maksimum van GetInt en kar maksimum van getChar, dit is 650 00:35:03,640 --> 00:35:06,010 veronderstel is om te wees, al die regte, indien hierdie dinge is terug te keer na ons, 651 00:35:06,010 --> 00:35:07,210 iets verkeerd geloop het. 652 00:35:07,210 --> 00:35:09,950 >> Vir wenke, ons het net gebeur het hierdie brandwag waarde wat almal 653 00:35:09,950 --> 00:35:10,750 eens op. 654 00:35:10,750 --> 00:35:13,210 En dit is die ding wat jy terugkeer wanneer dinge verkeerd gaan. 655 00:35:13,210 --> 00:35:15,910 So kar maksimum is wat ons gebruik iets te verteenwoordig 656 00:35:15,910 --> 00:35:18,100 soos NULL of getChar. 657 00:35:18,100 --> 00:35:23,420 >> Publiek: So as jy die toets getChar, Jy kan net sit NULL? 658 00:35:23,420 --> 00:35:23,910 Sou dit 'n verskil maak? 659 00:35:23,910 --> 00:35:25,400 >> Dan Jy kan nie net kyk NULL. 660 00:35:25,400 --> 00:35:30,130 Jy wil hê kar maksimum omdat die na te gaan terugkeer waarde van die funksie is 661 00:35:30,130 --> 00:35:35,416 'n karakter nie 'n wyser. 662 00:35:35,416 --> 00:35:35,888 Ja? 663 00:35:35,888 --> 00:35:38,248 >> Publiek: Hierdie vraag vra vir die string lengte. 664 00:35:38,248 --> 00:35:40,136 Is dit die NULL karakter sluit? 665 00:35:40,136 --> 00:35:41,000 >> Dan: Nee 666 00:35:41,000 --> 00:35:45,930 En dit is eintlik hoe string lengte weet om op te hou, want dit gaan deur 667 00:35:45,930 --> 00:35:49,070 jou verskeidenheid van karakters totdat dit sien 'n NULL karakter. 668 00:35:49,070 --> 00:35:51,030 En dan is dit soos alle reg, ek is klaar. 669 00:35:51,030 --> 00:35:52,130 >> Publiek: [onhoorbaar] vyf? 670 00:35:52,130 --> 00:35:53,990 >> Dan Hallo sou vyf wees. 671 00:35:53,990 --> 00:35:55,240 Yep. 672 00:35:55,240 --> 00:35:59,580 673 00:35:59,580 --> 00:36:02,880 So skikkings is deurlopende blokke van die geheue. 674 00:36:02,880 --> 00:36:08,480 Hulle het direkte toegang deur te sê die naam van die skikking en dan, in krullerige 675 00:36:08,480 --> 00:36:16,720 draadjies, ongeag indeks jy wil gaan te, hulle kruip van nul deur 676 00:36:16,720 --> 00:36:20,100 die lengte van die skikking minus 1. 677 00:36:20,100 --> 00:36:23,070 >> En hulle is verklaar deur die tipe van die ding wat jy stoor in die 678 00:36:23,070 --> 00:36:29,750 skikking, die naam van die skikking, en dan ongeag die omvang van daardie verskeidenheid. 679 00:36:29,750 --> 00:36:36,660 So dit is 'n kar verskeidenheid van lengte ses wat hierdie waardes. 680 00:36:36,660 --> 00:36:42,050 681 00:36:42,050 --> 00:36:42,700 Ja? 682 00:36:42,700 --> 00:36:43,950 >> Publiek: [onhoorbaar]? 683 00:36:43,950 --> 00:36:47,980 684 00:36:47,980 --> 00:36:48,460 >> Dan Ja. 685 00:36:48,460 --> 00:36:51,340 >> Publiek: [onhoorbaar]? 686 00:36:51,340 --> 00:36:56,700 >> Dan as jy het wat gaan in die skikking reeds gemaak het. 687 00:36:56,700 --> 00:37:02,260 So kan jy hierdie spesifiseer plaas as, sê, kar, wat ook al die naam van jou 688 00:37:02,260 --> 00:37:12,200 skikking is, leë hakies gelyk krullerige stut H komma E komma L komma L komma 689 00:37:12,200 --> 00:37:16,290 O komma NULL karakter en krullerige stut. 690 00:37:16,290 --> 00:37:18,180 Dit sou ook werk as 'n verklaring. 691 00:37:18,180 --> 00:37:20,886 >> Publiek: [onhoorbaar]? 692 00:37:20,886 --> 00:37:23,110 >> Dan Dan moet jy 'n die grootte wat reeds gemaak is. 693 00:37:23,110 --> 00:37:23,896 >> Publiek: [onhoorbaar]? 694 00:37:23,896 --> 00:37:25,146 >> DAN: Ja. 695 00:37:25,146 --> 00:37:30,114 696 00:37:30,114 --> 00:37:32,420 Alle righty. 697 00:37:32,420 --> 00:37:36,430 Command line argumente is 'n manier om om insette van die gebruiker as 698 00:37:36,430 --> 00:37:39,380 argumente na. 699 00:37:39,380 --> 00:37:40,600 Main neem twee argumente. 700 00:37:40,600 --> 00:37:47,680 Die aantal argumente wat tans geslaag langs die command line en 'n 701 00:37:47,680 --> 00:37:55,340 string vektor of 'n string array van al die argumente. 702 00:37:55,340 --> 00:38:07,840 >> So as ek, sê, die sogenaamde 'n funksie soos 'n dot uit 1 ruimte, 2 ruimte, drie, 703 00:38:07,840 --> 00:38:10,110 argc sou wees 4. 704 00:38:10,110 --> 00:38:17,370 En die argv 0 sal 'n punt uit te wees. 705 00:38:17,370 --> 00:38:19,130 Argv1 sou wees 1. 706 00:38:19,130 --> 00:38:23,030 argv2 sou wees 2 argv3 sou wees 3, in hierdie spesifieke geval. 707 00:38:23,030 --> 00:38:23,310 Ja? 708 00:38:23,310 --> 00:38:25,400 >> Publiek: [onhoorbaar]? 709 00:38:25,400 --> 00:38:34,010 >> DAN: Die laaste element in die skikking omdat die skikking is lengte argc plus 710 00:38:34,010 --> 00:38:41,050 een van ARGB, die laaste element is die NULL pointer. 711 00:38:41,050 --> 00:38:42,580 Dit is argc plus 1. 712 00:38:42,580 --> 00:38:46,210 713 00:38:46,210 --> 00:38:52,150 So in die geval dat ek net sê, dit sou argv word 0 is 'n dot uit. 714 00:38:52,150 --> 00:38:56,330 argv 1 is 1 argv2 2 is argv 3 is 3. 715 00:38:56,330 --> 00:39:03,490 argv 4, wat een groter as argc sou nul. 716 00:39:03,490 --> 00:39:04,870 >> En dit is die NULL pointer. 717 00:39:04,870 --> 00:39:06,590 Ja. 718 00:39:06,590 --> 00:39:11,250 En dit is omdat string is 'n kar ster is 'n wyser. 719 00:39:11,250 --> 00:39:14,102 So het dit dieselfde soort te wees. 720 00:39:14,102 --> 00:39:14,595 Ja? 721 00:39:14,595 --> 00:39:16,074 >> Publiek: Twee vrae. 722 00:39:16,074 --> 00:39:21,004 So een, wat is die verskil tussen hierdie en ander as een tipe GetString 723 00:39:21,004 --> 00:39:22,483 in die gebruiker enjin? 724 00:39:22,483 --> 00:39:25,934 En twee, is dit binne gestoor jou onlangse geheue? 725 00:39:25,934 --> 00:39:28,399 Dus, net soos, GetString sou wees [onhoorbaar]? 726 00:39:28,399 --> 00:39:31,357 727 00:39:31,357 --> 00:39:33,650 >> Dan Waar word dit gestoor? 728 00:39:33,650 --> 00:39:34,905 Ek weet nie waar dit geberg word. 729 00:39:34,905 --> 00:39:40,000 >> GEHOOR: So, eintlik, jy weet hoe om 'n funksioneer jy noem dit is argumente 730 00:39:40,000 --> 00:39:42,170 word in die stapel gestoor? 731 00:39:42,170 --> 00:39:46,610 So argc en argv argumente na en hulle is op die stapel, of werklik 732 00:39:46,610 --> 00:39:49,131 net bokant wat jy dink as die begin van die stapel. 733 00:39:49,131 --> 00:39:53,490 Wat was die ander deel van die vraag? 734 00:39:53,490 --> 00:39:56,821 >> Publiek: So, wat is die [onhoorbaar]? 735 00:39:56,821 --> 00:40:00,990 >> DAN: Ja, dit is net 'n ander manier om insette van die gebruiker. 736 00:40:00,990 --> 00:40:06,030 Hierdie een is effens meer doeltreffend en dit is eenvoudiger vir skrifte omdat jy 737 00:40:06,030 --> 00:40:10,070 kan net argumente slaag om jou hoof funksie eerder as om te wag 738 00:40:10,070 --> 00:40:13,400 vir gebruikers as jy nie het nie enige gebruikers. 739 00:40:13,400 --> 00:40:16,280 >> Publiek: En ja, kry snare sou wees [onhoorbaar]. 740 00:40:16,280 --> 00:40:17,922 Dit sou die dinge wat jy nodig het om te stoor. 741 00:40:17,922 --> 00:40:18,834 >> Dan Ja? 742 00:40:18,834 --> 00:40:21,114 >> Publiek: [onhoorbaar]? 743 00:40:21,114 --> 00:40:27,545 >> DAN: Ja, argv 0 sluit altyd die dot streep van die funksie oproep. 744 00:40:27,545 --> 00:40:28,042 Ja? 745 00:40:28,042 --> 00:40:29,292 >> Publiek: [onhoorbaar]? 746 00:40:29,292 --> 00:40:33,509 747 00:40:33,509 --> 00:40:37,310 >> DAN: Ja, elkeen van die argumente geëindig in NULL karakter omdat hulle 748 00:40:37,310 --> 00:40:38,310 is snare. 749 00:40:38,310 --> 00:40:40,892 >> Publiek: [onhoorbaar]? 750 00:40:40,892 --> 00:40:44,116 >> DAN: Ja, argv argc is 'n NULL pointer. 751 00:40:44,116 --> 00:40:45,112 >> Publiek: [onhoorbaar]? 752 00:40:45,112 --> 00:40:47,104 >> Dan O ja. 753 00:40:47,104 --> 00:40:48,100 Ja, jammer. 754 00:40:48,100 --> 00:40:49,594 >> Publiek: So [onhoorbaar]? 755 00:40:49,594 --> 00:41:08,518 756 00:41:08,518 --> 00:41:16,340 >> Dan So die vraag is of jy het die command line dot streep 'n dot uit 1, 2, 757 00:41:16,340 --> 00:41:20,410 sou die aantal command line argumente wees twee of sou dit drie? 758 00:41:20,410 --> 00:41:24,420 759 00:41:24,420 --> 00:41:28,240 >> Publiek: Ek dink dit maak nie regtig saak nie. 760 00:41:28,240 --> 00:41:31,370 Ek is geneig om te sê, o, jy nie geslaag het nie command line argumente toe, 761 00:41:31,370 --> 00:41:32,730 natuurlik, jy het die funksie. 762 00:41:32,730 --> 00:41:37,950 So ek is geneig om vokaal sluit die funksie van die opdrag lyn 763 00:41:37,950 --> 00:41:40,350 argumente, selfs al is dit ingesluit in argv. 764 00:41:40,350 --> 00:41:42,600 >> Dan Maar as dit was op die test-- 765 00:41:42,600 --> 00:41:46,550 yeah-- en ook as jy iets sê soos argc gelyk aan 3, 766 00:41:46,550 --> 00:41:48,512 jy is in veilige staan. 767 00:41:48,512 --> 00:41:49,416 Ja? 768 00:41:49,416 --> 00:41:50,666 >> Publiek: [onhoorbaar]? 769 00:41:50,666 --> 00:42:00,990 770 00:42:00,990 --> 00:42:09,510 >> Dan: Ek dink as in plaas van die roeping van hierdie in argc en string argv hakies 771 00:42:09,510 --> 00:42:14,350 maar het dieselfde tipes en net genoem hulle iets anders soos 'n 772 00:42:14,350 --> 00:42:16,640 en b, sou dit nog steeds werk? 773 00:42:16,640 --> 00:42:18,790 En dit sal nog steeds werk, jy sou just-- 774 00:42:18,790 --> 00:42:21,520 in plaas van die gebruik van argc-- jy wil gebruik om 'n en b. 775 00:42:21,520 --> 00:42:24,436 776 00:42:24,436 --> 00:42:25,408 Ja? 777 00:42:25,408 --> 00:42:26,658 >> Publiek: [onhoorbaar]? 778 00:42:26,658 --> 00:42:34,642 779 00:42:34,642 --> 00:42:38,850 >> Dan So die vraag is GetString is gaan geheue in die hoop om te stoor 780 00:42:38,850 --> 00:42:42,280 omdat GetString is char *. 781 00:42:42,280 --> 00:42:47,530 Dit slaan geheue in die hoop, want dit roep nou malloc binne die werklike 782 00:42:47,530 --> 00:42:49,258 implementering van GetString. 783 00:42:49,258 --> 00:42:53,210 784 00:42:53,210 --> 00:42:55,090 OK, wat op. 785 00:42:55,090 --> 00:42:55,950 >> Sekuriteit. 786 00:42:55,950 --> 00:43:01,090 So werklik veilig te wees, jy vertrou op geen een en jy toelaat dat niemand toegang tot enige 787 00:43:01,090 --> 00:43:04,540 van jou inligting, wat is die rede waarom almal bou hul eie masjiene, 788 00:43:04,540 --> 00:43:09,580 hul eie bedryfstelsels, al hulle programme van nuuts af, en natuurlik 789 00:43:09,580 --> 00:43:13,410 nie koppel aan enige ander masjiene via die internet. 790 00:43:13,410 --> 00:43:17,350 So rekenaars is onseker. 791 00:43:17,350 --> 00:43:19,200 Hulle werklik is. 792 00:43:19,200 --> 00:43:20,940 Ons het ander mense te vertrou. 793 00:43:20,940 --> 00:43:26,500 >> En die idee van sekuriteit is dat jy probeer om die bedrag van te beperk 794 00:43:26,500 --> 00:43:27,540 vertroue wat jy nodig het. 795 00:43:27,540 --> 00:43:32,080 En een van die maniere wat jy doen is deur middel van kriptografie. 796 00:43:32,080 --> 00:43:34,950 Kriptografie is, in wese, ons het geheime. 797 00:43:34,950 --> 00:43:38,880 >> Soms het ons ons geheime te slaag saam deur, sê, die internet of 798 00:43:38,880 --> 00:43:39,980 ander dinge. 799 00:43:39,980 --> 00:43:43,180 En ons wil nie mense hierdie geheime te leer ken. 800 00:43:43,180 --> 00:43:50,100 So ons enkripteer ons geheime in 'n manier wat ons hoop niemand kan uitvind. 801 00:43:50,100 --> 00:43:51,600 >> So ons used-- 802 00:43:51,600 --> 00:43:54,340 deur die loop van hierdie class-- 803 00:43:54,340 --> 00:44:00,750 dinge soos Caesar cipher en [Onhoorbaar], wat beide baie, baie 804 00:44:00,750 --> 00:44:03,200 onseker maniere versleutelen dinge. 805 00:44:03,200 --> 00:44:07,930 Hulle is maklik om uit te vind wat hulle is en wat jou geheime is. 806 00:44:07,930 --> 00:44:12,130 Die werklike wêreld gebruik baie meer ingewikkelde enkripsie skemas. 807 00:44:12,130 --> 00:44:13,880 En ons sal nie in veel meer as dit. 808 00:44:13,880 --> 00:44:18,280 809 00:44:18,280 --> 00:44:19,430 >> Debugging. 810 00:44:19,430 --> 00:44:20,785 GDB is die beste. 811 00:44:20,785 --> 00:44:24,014 812 00:44:24,014 --> 00:44:25,810 Ek gaan om dit weer beklemtoon. 813 00:44:25,810 --> 00:44:30,920 Gebruik GDB al die tyd elke tyd wat jy het 'n probleem. 814 00:44:30,920 --> 00:44:36,030 Opdragte wat is nuttig in GDB is breek, wat jy óf 'n lyn te slaag 815 00:44:36,030 --> 00:44:41,330 nommer, 'n funksie naam, wese Waar in jou kode wat jy wil om te stop, 816 00:44:41,330 --> 00:44:45,600 en in staat wees om beheer te neem. 817 00:44:45,600 --> 00:44:54,140 >> Druk neem 'n veranderlike en druk uit wat dit ook al veranderlike is op daardie 818 00:44:54,140 --> 00:44:55,990 punt in jou uitvoering. 819 00:44:55,990 --> 00:45:00,130 Volgende beweeg jou uitvoering langs een stap. 820 00:45:00,130 --> 00:45:05,050 En stap stappe in 'n funksie in jou uitvoering. 821 00:45:05,050 --> 00:45:10,480 >> Ander dinge hardloop, en dit is hoe jy self jou kode. 822 00:45:10,480 --> 00:45:16,630 Gaan voort neem al die stappe wat nodig is te kry om die volgende breekpunt. 823 00:45:16,630 --> 00:45:18,300 En daar is baie, baie ander. 824 00:45:18,300 --> 00:45:19,040 Kyk hulle. 825 00:45:19,040 --> 00:45:19,901 Hulle is groot. 826 00:45:19,901 --> 00:45:20,863 Ja? 827 00:45:20,863 --> 00:45:22,113 >> Publiek: [onhoorbaar]? 828 00:45:22,113 --> 00:45:26,635 829 00:45:26,635 --> 00:45:28,200 >> DAN: Ja, wat is 'n debugger. 830 00:45:28,200 --> 00:45:34,230 So 'n debugger is 'n program wat kan jy ontfout jou program. 831 00:45:34,230 --> 00:45:39,931 Dit is nie 'n program wat bevind foute vir jy sal al die groot wees. 832 00:45:39,931 --> 00:45:43,020 833 00:45:43,020 --> 00:45:46,040 >> En die laaste vir my is soek. 834 00:45:46,040 --> 00:45:51,470 So het die tipes soek dat ons gepraat oor in hierdie klas is lineêre soek, 835 00:45:51,470 --> 00:45:55,960 wat is net dat jy kyk deur elke element van die soek spasie, een 836 00:45:55,960 --> 00:46:00,410 element op 'n slag, totdat jy weet wat jy soek, of totdat jy bereik 837 00:46:00,410 --> 00:46:03,350 die einde van jou soektog ruimte waarteen wys jy sê dat jy nie kan vind 838 00:46:03,350 --> 00:46:06,360 die element wat jy soek. 839 00:46:06,360 --> 00:46:13,450 En dit neem om die beste konstante tyd, wat is 0 van 1 en op die ergste lineêre 840 00:46:13,450 --> 00:46:16,070 tyd, wat is 0 van n. 841 00:46:16,070 --> 00:46:19,250 >> Binêre soek, wat nodig ongure elemente. 842 00:46:19,250 --> 00:46:24,230 Jy gaan na die middel van jou elemente, sien as die element wat jy soek 843 00:46:24,230 --> 00:46:30,120 is groter of kleiner as die element dat jy teen die middel. 844 00:46:30,120 --> 00:46:36,510 Dit is dit groter, jy sê dat die onderste van jou soektog ruimte is jou 845 00:46:36,510 --> 00:46:41,550 huidige ligging, die middel, en jy begin die proses. 846 00:46:41,550 --> 00:46:46,150 As dit kleiner, jy kyk sê dat the-- ja, wat gaan aan? 847 00:46:46,150 --> 00:46:47,400 >> Publiek: [onhoorbaar]? 848 00:46:47,400 --> 00:46:51,000 849 00:46:51,000 --> 00:46:54,260 >> DAN: Ja. 850 00:46:54,260 --> 00:46:58,360 Enige soort van soort wat is geleer is in die klas is fair game vir die toets. 851 00:46:58,360 --> 00:47:01,504 852 00:47:01,504 --> 00:47:04,920 >> [Gelag] 853 00:47:04,920 --> 00:47:10,260 >> Dan En die feit dat jy nie het om dit te doen vir 'n probleem stel, is dit regverdig 854 00:47:10,260 --> 00:47:12,420 spel vir die toets. 855 00:47:12,420 --> 00:47:15,186 >> Publiek: Kan ons gaan oor dit hoe aan- 856 00:47:15,186 --> 00:47:17,052 >> DAN: Dit sal weg wees oor. 857 00:47:17,052 --> 00:47:20,496 >> Spreker 2: Die werklike kode vir [Onhoorbaar] is op study.cs50.net. 858 00:47:20,496 --> 00:47:25,910 859 00:47:25,910 --> 00:47:32,680 So as jy kyk na die praktyk probleem in die merge soort bladsy van 860 00:47:32,680 --> 00:47:35,880 study.cs50.net, daar is die kode vir die implementering saamsmelt soort. 861 00:47:35,880 --> 00:47:38,550 So jy hoef nie te implementeer dit self vanaand. 862 00:47:38,550 --> 00:47:42,090 Maar maak seker dat jy dit verstaan ​​eerder as net memoriseer dit. 863 00:47:42,090 --> 00:47:45,035 >> Publiek: [onhoorbaar]? 864 00:47:45,035 --> 00:47:49,720 >> Spreker 2: Die merge soort bladsy op study.cs50.net, daar is 'n praktyk 865 00:47:49,720 --> 00:47:53,570 probleem dat, as jy deur die klik probleem, aan die einde is daar 'n 866 00:47:53,570 --> 00:47:56,280 oplossing, wat is die merge soort implementering. 867 00:47:56,280 --> 00:47:58,510 Maar maak seker dat jy dit verstaan eerder as om net te memoriseer dit 868 00:47:58,510 --> 00:47:59,760 of kopiëring dit af. 869 00:47:59,760 --> 00:48:02,870 870 00:48:02,870 --> 00:48:06,340 >> Publiek: En 'n volkome geldige probleem vir die eksamen sou wees 871 00:48:06,340 --> 00:48:07,990 iets soos hier is 'n lys. 872 00:48:07,990 --> 00:48:12,100 Wat beteken hierdie lys lyk na een stap van keuses soort of 873 00:48:12,100 --> 00:48:13,330 voeg soort of wat ook al. 874 00:48:13,330 --> 00:48:14,940 Een volle iterasie van die lys. 875 00:48:14,940 --> 00:48:18,530 So selfs as jy nie eindig hoef te kode vir dit, moet jy om dit te verstaan 876 00:48:18,530 --> 00:48:20,440 genoeg om te weet hoe dit gaan word die wysiging van die skikking. 877 00:48:20,440 --> 00:48:24,144 878 00:48:24,144 --> 00:48:25,394 >> Dan Dit is dit vir my. 879 00:48:25,394 --> 00:48:30,604 880 00:48:30,604 --> 00:48:32,588 >> [Applous] 881 00:48:32,588 --> 00:49:06,316 882 00:49:06,316 --> 00:49:07,410 >> LUCAS: Hey almal. 883 00:49:07,410 --> 00:49:08,390 My naam is Lucas. 884 00:49:08,390 --> 00:49:16,840 Ek gaan om te praat oor rekursie, al die soort wat ons geleer het, en 'n 885 00:49:16,840 --> 00:49:18,050 bietjie van alle wysers. 886 00:49:18,050 --> 00:49:18,740 OK? 887 00:49:18,740 --> 00:49:20,340 So eerste van alles, rekursie. 888 00:49:20,340 --> 00:49:22,951 Wat beteken dit om te sê dat 'n funksie is rekursiewe? 889 00:49:22,951 --> 00:49:24,675 >> Publiek: Oproepe self. 890 00:49:24,675 --> 00:49:26,500 >> LUCAS: OK, noem hom, ja. 891 00:49:26,500 --> 00:49:27,700 Dus, net soos die foto, byvoorbeeld. 892 00:49:27,700 --> 00:49:30,280 Dit is soos die foto van die binnekant van 'n foto en so aan. 893 00:49:30,280 --> 00:49:35,740 So byvoorbeeld, kan jy have-- as Dan wat praat oor binêre soek. 894 00:49:35,740 --> 00:49:41,840 Een manier waarop binêre soek is rekursiewe, is die feit dat jy 895 00:49:41,840 --> 00:49:43,130 probeer om 'n getal te vind. 896 00:49:43,130 --> 00:49:44,250 So jy gaan na die middel. 897 00:49:44,250 --> 00:49:47,130 En dan moet jy kyk of die getalle daar in die linker-en in die regte. 898 00:49:47,130 --> 00:49:49,650 >> En dan as jy uitvind die getal gaan wees op die linkerkant, dit is dieselfde 899 00:49:49,650 --> 00:49:53,340 ding as wat die weer soek, maar net aan die linkerkant van die lys. 900 00:49:53,340 --> 00:49:57,350 So dit is hoe dit klink soos dit is rekursiewe. 901 00:49:57,350 --> 00:50:01,870 So dit is waarom jy ouens het rekursiewe oplossing vir merge soort. 902 00:50:01,870 --> 00:50:04,270 >> OK, so hier is 'n voorbeeld. 903 00:50:04,270 --> 00:50:07,280 So kom ons sê dat ek wil hê om van te kies al die getalle van 1 tot n. 904 00:50:07,280 --> 00:50:13,790 Ek kan besef dat die som van die n getal is n plus n minus 1 tot 1. 905 00:50:13,790 --> 00:50:17,810 Maar dan, as ek kyk na n minus 1 plus N minus 2 plus 1, dit is dieselfde 906 00:50:17,810 --> 00:50:20,680 iets soos optel nommers tot N minus 1. 907 00:50:20,680 --> 00:50:25,890 So ek kan die som van 'n gelyke bedrag sê gelyk N plus die bedrag van N minus 1. 908 00:50:25,890 --> 00:50:28,010 Maak dit sin maak? 909 00:50:28,010 --> 00:50:32,630 >> En ek het ook iets anders wil hê genoem die basis geval, en dit is dat 910 00:50:32,630 --> 00:50:37,440 die som van die getalle tot nul sou nul wees. 911 00:50:37,440 --> 00:50:42,770 So gou as ek by die aantal nul, stop ek tel. 912 00:50:42,770 --> 00:50:45,330 Maak dit sin maak? 913 00:50:45,330 --> 00:50:48,120 >> So hier is 'n voorbeeld van hoe Ek kan implementeer nie. 914 00:50:48,120 --> 00:50:49,860 So ek het hierdie funksie in 'n paar. 915 00:50:49,860 --> 00:50:51,700 Dit neem 'n heelgetal n. 916 00:50:51,700 --> 00:50:56,300 So hier is ek eers kyk of N is minder of gelyk is aan nul. 917 00:50:56,300 --> 00:51:00,310 So as dit is minder of gelyk is aan nul, ek terugkeer nul, wat is ons basis geval. 918 00:51:00,310 --> 00:51:05,690 Anders, ek kan net weer n plus die som van die getalle van 919 00:51:05,690 --> 00:51:07,190 een tot n minus een. 920 00:51:07,190 --> 00:51:09,360 Sin maak? 921 00:51:09,360 --> 00:51:10,100 OK. 922 00:51:10,100 --> 00:51:11,610 >> So hier is wat dit lyk. 923 00:51:11,610 --> 00:51:15,260 Jy het som van 2 gelykes 2 plus die som van 1. 924 00:51:15,260 --> 00:51:18,930 En sommige van 1 is 1 plus die som van 0, wat is 0. 925 00:51:18,930 --> 00:51:20,216 Sin maak? 926 00:51:20,216 --> 00:51:25,342 So as ons kyk na die stapel van jou program, dit is wat dit lyk. 927 00:51:25,342 --> 00:51:26,820 >> Eerstens, ons het die hoof funksie. 928 00:51:26,820 --> 00:51:30,320 En dan is die belangrikste funksie genoem som 2. 929 00:51:30,320 --> 00:51:36,690 En dan som 2 gaan om te sê, o, som 2 is gelyk aan 2 plus die som van een. 930 00:51:36,690 --> 00:51:39,460 So voeg ek som van 1 tot die stapel. 931 00:51:39,460 --> 00:51:43,860 En die som van 1 gaan som van te bel 0, wat ook gaan word bygevoeg 932 00:51:43,860 --> 00:51:44,630 aan die stapel. 933 00:51:44,630 --> 00:51:49,240 En dan elkeen van hierdie kinders wat op die top van 'n ander het om terug te keer 934 00:51:49,240 --> 00:51:52,020 voor die ander kinders kan gaan hou. 935 00:51:52,020 --> 00:51:56,240 >> So byvoorbeeld, hier, som van 0, eerste, gaan terug 0. 936 00:51:56,240 --> 00:51:58,320 En kies dan som van 1. 937 00:51:58,320 --> 00:52:00,850 Dan som van 1 gaan terug 1 tot som van 2. 938 00:52:00,850 --> 00:52:03,900 En ten slotte, is som van 2 gaan om terug te keer na die hoof 3. 939 00:52:03,900 --> 00:52:05,320 Maak dit sin maak? 940 00:52:05,320 --> 00:52:09,496 >> Dit is baie belangrik om te verstaan ​​hoe die stapel werk en probeer om te 941 00:52:09,496 --> 00:52:11,980 sien of dit sin maak. 942 00:52:11,980 --> 00:52:13,260 OK, so sorteer. 943 00:52:13,260 --> 00:52:16,170 So hoekom is sortering belangrik, eerste van almal? 944 00:52:16,170 --> 00:52:18,260 Hoekom moet ons omgee? 945 00:52:18,260 --> 00:52:20,310 Enigiemand? 946 00:52:20,310 --> 00:52:20,695 Gee my 'n voorbeeld? 947 00:52:20,695 --> 00:52:21,040 Ja? 948 00:52:21,040 --> 00:52:22,968 >> Publiek: [onhoorbaar]. 949 00:52:22,968 --> 00:52:24,700 >> LUCAS: Ja, OK. 950 00:52:24,700 --> 00:52:26,090 So kan jy meer doeltreffend te soek. 951 00:52:26,090 --> 00:52:28,580 Dit is 'n goeie manier. 952 00:52:28,580 --> 00:52:32,462 So, byvoorbeeld, het ons 'n baie dinge, eintlik, in ons lewens wat 953 00:52:32,462 --> 00:52:32,920 gesorteer. 954 00:52:32,920 --> 00:52:34,830 Byvoorbeeld, woordeboeke. 955 00:52:34,830 --> 00:52:39,210 >> Dit is baie belangrik om al die te hê woorde in 'n soort van orde dat ons 956 00:52:39,210 --> 00:52:41,970 kan maklik toegang tot. 957 00:52:41,970 --> 00:52:43,280 So dit is wat hy gesê het. 958 00:52:43,280 --> 00:52:45,530 Jy kan meer doeltreffend te soek. 959 00:52:45,530 --> 00:52:48,740 Dink net hoe moeilik dit sou wees om 'n ' woordeboek waarin die woorde in 960 00:52:48,740 --> 00:52:49,500 ewekansige volgorde. 961 00:52:49,500 --> 00:52:53,120 Jy sal hê om na te kyk, redelik baie, elke enkele woord totdat jy die 962 00:52:53,120 --> 00:52:54,720 woord wat jy soek. 963 00:52:54,720 --> 00:52:58,710 >> As jy met behulp van Facebook, ook as jy kyk na jou vriende, jy 964 00:52:58,710 --> 00:53:03,540 gaan om te sien dat Facebook sit jou nader vriend is op die top van die kinders 965 00:53:03,540 --> 00:53:05,470 dat jy nie te praat nie veel nie. 966 00:53:05,470 --> 00:53:08,080 As jy gaan al die pad na die onderkant van jou vriend lys, jy gaan om te sien 967 00:53:08,080 --> 00:53:11,250 mense wat jy waarskynlik nie eens onthou dat jy vriende met. 968 00:53:11,250 --> 00:53:14,590 En dit is omdat Facebook vorme vriende op grond van hoe 969 00:53:14,590 --> 00:53:16,472 sluit jy aan hulle. 970 00:53:16,472 --> 00:53:17,930 >> So organisering van data. 971 00:53:17,930 --> 00:53:18,450 Ook Pokemon. 972 00:53:18,450 --> 00:53:21,400 So jy sien dat al die Pokemons nommers. 973 00:53:21,400 --> 00:53:27,210 En dit is soos 'n maklike wyse van toegang tot inligting. 974 00:53:27,210 --> 00:53:29,050 >> Publiek: Toegang Pokemon. 975 00:53:29,050 --> 00:53:29,890 >> LUCAS: Ja. 976 00:53:29,890 --> 00:53:32,395 >> Publiek: [onhoorbaar]. 977 00:53:32,395 --> 00:53:33,460 >> LUCAS: Yep. 978 00:53:33,460 --> 00:53:35,140 OK, so seleksie soort. 979 00:53:35,140 --> 00:53:41,610 Seleksie soort gaan die te kies kleinste ongesorteerde waarde van 'n lys elke 980 00:53:41,610 --> 00:53:43,300 tyd in elke iterasie. 981 00:53:43,300 --> 00:53:46,800 Dit is soort van soos die soort wat jy doen in jou kop wanneer jy probeer om te 982 00:53:46,800 --> 00:53:48,430 sorteer 'n lys op die hand. 983 00:53:48,430 --> 00:53:51,990 >> Kortom, alles wat jy doen, is jy kyk vir die kleinste getal. 984 00:53:51,990 --> 00:53:54,280 Jy het dit in die gesorteerde lys. 985 00:53:54,280 --> 00:53:56,230 En dan moet jy kyk vir die volgende kleinste getal. 986 00:53:56,230 --> 00:54:00,080 En dan moet jy hou doen dat en so aan. 987 00:54:00,080 --> 00:54:04,600 >> So seleksie soort is basies wat jy Kies elke keer die kleinste 988 00:54:04,600 --> 00:54:05,750 ongesorteerde waarde. 989 00:54:05,750 --> 00:54:10,840 Sit aan die einde van die gesorteer deel van die lys. 990 00:54:10,840 --> 00:54:12,370 En hou om dit te doen. 991 00:54:12,370 --> 00:54:15,890 So laat ons gou sien wat dit lyk soos. 992 00:54:15,890 --> 00:54:19,340 So hier is die gesorteer en ongesorteerde lys. 993 00:54:19,340 --> 00:54:23,350 >> So vir die gesorteer lys, dit is aanvanklik leeg. 994 00:54:23,350 --> 00:54:26,760 En dan gaan ek die te kies kleinste getal hier, wat is 2. 995 00:54:26,760 --> 00:54:30,650 So kry ek die nommer 2 en ek in die voorkant van die lys. 996 00:54:30,650 --> 00:54:34,910 En dan kyk ek vir die volgende kleinste element, wat is 3. 997 00:54:34,910 --> 00:54:37,050 So ek het dit aan die einde van die lys gesorteer. 998 00:54:37,050 --> 00:54:38,140 En dan het ek hou om dit te doen. 999 00:54:38,140 --> 00:54:40,040 Ek vind 4 en sit dit aan die einde. 1000 00:54:40,040 --> 00:54:41,360 Vind 5 en sit dit aan die einde. 1001 00:54:41,360 --> 00:54:44,830 >> En kyk hoe al daardie tye wat Ek sê dit aan die einde is, 1002 00:54:44,830 --> 00:54:46,850 basies, uitruiling twee waardes. 1003 00:54:46,850 --> 00:54:48,100 OK? 1004 00:54:48,100 --> 00:54:50,140 1005 00:54:50,140 --> 00:54:52,825 En dan is die laaste een, jy moet net het nog 'n element. 1006 00:54:52,825 --> 00:54:55,870 So dit is reeds gesorteer. 1007 00:54:55,870 --> 00:54:57,800 >> OK, so voeg soort. 1008 00:54:57,800 --> 00:55:03,180 Invoeging soort jy gaan ook ' dat die ding dat hy 'n gesorteer en 1009 00:55:03,180 --> 00:55:04,690 'n ongesorteerde lys. 1010 00:55:04,690 --> 00:55:14,540 Die enigste ding is dat elke keer wat jy 'n element is wat bydra tot die gesorteer 1011 00:55:14,540 --> 00:55:18,170 lys, jy net kies die element wat is in die voorkant van die ongesorteerde lys. 1012 00:55:18,170 --> 00:55:20,880 En dan gaan jy vind wat posisie in die gesorteerde moet wees 1013 00:55:20,880 --> 00:55:22,300 deel van die lys. 1014 00:55:22,300 --> 00:55:25,840 >> Kom ons kyk wat dit is, sodat dit maak meer sin. 1015 00:55:25,840 --> 00:55:29,360 So aanvanklik, byvoorbeeld, ek probeer die nommer drie in te voeg in die 1016 00:55:29,360 --> 00:55:30,680 gesorteer deel van die lys. 1017 00:55:30,680 --> 00:55:31,800 So het die lys nie iets. 1018 00:55:31,800 --> 00:55:34,160 So ek kan net die nommer 3. 1019 00:55:34,160 --> 00:55:37,480 >> Nou wil ek die nommer 5 te voeg die gesorteerde deel van die lys. 1020 00:55:37,480 --> 00:55:38,900 So ek kyk na die nommer 5. 1021 00:55:38,900 --> 00:55:40,450 Ek sien dat dit is groter as 3. 1022 00:55:40,450 --> 00:55:41,980 So ek weet dat dit moet na 3. 1023 00:55:41,980 --> 00:55:44,100 So ek het 3 en 5. 1024 00:55:44,100 --> 00:55:45,940 >> Dan wil ek die nommer 2 in te voeg. 1025 00:55:45,940 --> 00:55:51,630 Ek sien dat die nommer 2 is eintlik hou dan beide 3 en 5. 1026 00:55:51,630 --> 00:55:54,580 So ek het eintlik al die te sit manier in die begin van die lys. 1027 00:55:54,580 --> 00:55:59,030 So ek moet, soort, skuif al die elemente in die lys gesorteer so kan ek 1028 00:55:59,030 --> 00:56:01,970 kamer maak vir die nommer 2. 1029 00:56:01,970 --> 00:56:03,160 >> Dan sien ek die nommer 6. 1030 00:56:03,160 --> 00:56:05,450 Ek sien dat dit behoort te wees na 5. 1031 00:56:05,450 --> 00:56:06,240 So het ek dit daar. 1032 00:56:06,240 --> 00:56:07,965 En ten slotte, ek kyk na die nommer 4. 1033 00:56:07,965 --> 00:56:11,030 En ek sien dit moet tussen 3 en 5. 1034 00:56:11,030 --> 00:56:14,870 En dan het ek het dit daar en verskuiwing al die ander elemente. 1035 00:56:14,870 --> 00:56:16,120 Sin maak? 1036 00:56:16,120 --> 00:56:17,880 1037 00:56:17,880 --> 00:56:19,150 >> Borrel sorteer. 1038 00:56:19,150 --> 00:56:25,730 So borrel soort is basies wat jy gaan do-- ons noem dit borrel 1039 00:56:25,730 --> 00:56:30,113 soort, want jy gaan deur middel van die list-- dit is eintlik beter as ek net wys 1040 00:56:30,113 --> 00:56:32,300 jy wil this-- 1041 00:56:32,300 --> 00:56:35,030 en jy gaan om te vergelyk aangrensende nommers. 1042 00:56:35,030 --> 00:56:38,410 En jy gaan om te ruil hul posisies as hulle nie 1043 00:56:38,410 --> 00:56:39,190 in die regte volgorde. 1044 00:56:39,190 --> 00:56:42,570 >> So basies, wat gaan gebeur, is hier, byvoorbeeld, 1045 00:56:42,570 --> 00:56:44,160 jy het 8 en 6. 1046 00:56:44,160 --> 00:56:47,270 Jy weet dat die gesorteerde volgorde sal eintlik 6 en 5, reg? 1047 00:56:47,270 --> 00:56:49,540 So jy gaan die bestellings te ruil. 1048 00:56:49,540 --> 00:56:51,370 Dan sien ek 8 en 4 hier. 1049 00:56:51,370 --> 00:56:52,250 En ek doen dieselfde ding. 1050 00:56:52,250 --> 00:56:53,400 Ek ruil weer. 1051 00:56:53,400 --> 00:56:55,070 En uiteindelik, 2 en 8. 1052 00:56:55,070 --> 00:56:56,670 Ek het ook ruil hulle. 1053 00:56:56,670 --> 00:57:01,690 >> Dit is bekend borrel sorteer want na elk van hierdie iterasies, eintlik, 1054 00:57:01,690 --> 00:57:05,910 die grootste getal in die lys kry al die pad na die einde van die lys. 1055 00:57:05,910 --> 00:57:06,940 Maak dit sin maak? 1056 00:57:06,940 --> 00:57:11,880 Want dit hou uitruiling dit en beweeg dit na die regte. 1057 00:57:11,880 --> 00:57:14,440 >> OK, so dit is die tweede iterasie. 1058 00:57:14,440 --> 00:57:17,200 Dit sou dieselfde ding wees. 1059 00:57:17,200 --> 00:57:20,190 Ek sal een omruil doen en dan is die laaste een. 1060 00:57:20,190 --> 00:57:23,290 Ek dat daar is geen swaps en die lys is gesorteer. 1061 00:57:23,290 --> 00:57:27,460 So in borrel sorteer, ons basies hou gaan deur die lys en uitruiling 1062 00:57:27,460 --> 00:57:32,310 dinge totdat ek agterkom dat ek nie gedoen het nie enige swaps doen iterasie, wat 1063 00:57:32,310 --> 00:57:34,270 beteken dat die lys is reeds gesorteer. 1064 00:57:34,270 --> 00:57:35,520 Sin maak? 1065 00:57:35,520 --> 00:57:38,400 1066 00:57:38,400 --> 00:57:40,870 >> Kom ons praat 'n bietjie oor die uitvoer van die tyd. 1067 00:57:40,870 --> 00:57:45,165 So julle ouens onthou Big nie O, Omega, en Theta? 1068 00:57:45,165 --> 00:57:49,290 1069 00:57:49,290 --> 00:57:50,990 Ja? 1070 00:57:50,990 --> 00:57:53,070 OK, wat Big O, die eerste van alles? 1071 00:57:53,070 --> 00:57:54,315 >> Publiek: [onhoorbaar]. 1072 00:57:54,315 --> 00:57:59,070 >> LUCAS: Ja, dit is bekend as 'n ergste geval runtime, wat net beteken dat dit 1073 00:57:59,070 --> 00:58:03,470 hoeveel jy verwag dat die program te neem om te hardloop. 1074 00:58:03,470 --> 00:58:04,910 Soos in terme of-- 1075 00:58:04,910 --> 00:58:06,660 in hierdie case-- n. 1076 00:58:06,660 --> 00:58:09,150 Die aantal elemente in die lys in die ergste geval. 1077 00:58:09,150 --> 00:58:12,520 Soos in die ergste moontlike geval. 1078 00:58:12,520 --> 00:58:17,100 >> So vir borrel sorteer, byvoorbeeld, Ons het groot O van n vierkant. 1079 00:58:17,100 --> 00:58:20,580 Hoekom moet ons dit? 1080 00:58:20,580 --> 00:58:24,716 Hoekom is borrel sorteer Big O N vierkant? 1081 00:58:24,716 --> 00:58:27,614 >> Publiek: [onhoorbaar]. 1082 00:58:27,614 --> 00:58:35,670 >> LUCAS: Ja, so die ergste geval sal wees dat ek sal moet n iterasies te doen. 1083 00:58:35,670 --> 00:58:39,260 So elkeen van die iterasies gaan bring die grootste element tot die einde 1084 00:58:39,260 --> 00:58:40,290 van die lys. 1085 00:58:40,290 --> 00:58:44,230 So het die ergste geval is dat ek ' dat die ding n keer te doen. 1086 00:58:44,230 --> 00:58:48,550 En vir elkeen van daardie tyd, ek het om te doen n swaps, want ek het te vergelyk 1087 00:58:48,550 --> 00:58:49,870 elke twee elemente. 1088 00:58:49,870 --> 00:58:53,730 So dit is waarom dit is n vierkant want dit is n keer n. 1089 00:58:53,730 --> 00:59:00,120 >> Dan, seleksie soort is ook n vierkant want vir elke iterasie, ek het om te 1090 00:59:00,120 --> 00:59:02,650 kyk na elke enkele element in die lys. 1091 00:59:02,650 --> 00:59:04,980 En dan vind die kleinste, wat beteken dat ek moet 1092 00:59:04,980 --> 00:59:06,130 kyk deur n elemente. 1093 00:59:06,130 --> 00:59:11,750 En ek het om te doen wat n keer omdat Ek het al die elemente N te kies. 1094 00:59:11,750 --> 00:59:18,273 >> 'N invoeging soort is ook n vierkant omdat die ergste geval scenario sal 1095 00:59:18,273 --> 00:59:20,950 wees, een, ek het om te voeg N nommers, reg? 1096 00:59:20,950 --> 00:59:22,765 So ek weet reeds dat ek gaan N iterasies te hê. 1097 00:59:22,765 --> 00:59:25,466 1098 00:59:25,466 --> 00:59:29,840 Maar vir elkeen van dié nommers, as ek om te kyk na al die getalle in 1099 00:59:29,840 --> 00:59:34,380 die gesorteerde lys en dit al die pad aan die voorkant, sal dit n vierkant 1100 00:59:34,380 --> 00:59:36,230 want dit sal n keer n weer. 1101 00:59:36,230 --> 00:59:38,280 Sin maak? 1102 00:59:38,280 --> 00:59:41,512 Wat van omega? 1103 00:59:41,512 --> 00:59:42,886 >> Publiek: [onhoorbaar]. 1104 00:59:42,886 --> 00:59:44,620 >> LUCAS: Dit is die beste scenario. 1105 00:59:44,620 --> 00:59:48,810 So dit is soos, in 'n baie keer vir sorteer, die beste geval is 1106 00:59:48,810 --> 00:59:50,660 Wanneer die lys is reeds gesorteer. 1107 00:59:50,660 --> 00:59:52,670 So jy het nie regtig om iets te doen. 1108 00:59:52,670 --> 00:59:56,290 Borrel sorteer die beste scenario van n. 1109 00:59:56,290 --> 00:59:58,820 Weet julle hoekom? 1110 00:59:58,820 --> 01:00:00,620 >> Publiek: [onhoorbaar]. 1111 01:00:00,620 --> 01:00:05,640 >> LUCAS: Ja, as jy hou van of data rantsoen het enige swaps of 1112 01:00:05,640 --> 01:00:10,533 nie, as jy iets soos gestel waar as daar was 'n herhaling, indien die 1113 01:00:10,533 --> 01:00:15,140 lys is reeds gesorteer, basies, wat gaan gebeur, is Ek gaan 1114 01:00:15,140 --> 01:00:17,890 probeer om elke twee te ruil aangrensende elemente. 1115 01:00:17,890 --> 01:00:19,920 Ek is van plan om dit te sien daar is geen ooreenkomste. 1116 01:00:19,920 --> 01:00:21,230 En ek het net dadelik terug te keer. 1117 01:00:21,230 --> 01:00:24,240 >> So dit beteken dat ek net moes gaan deur die lys een keer. 1118 01:00:24,240 --> 01:00:28,990 So dit is n omdat ek sien op n elemente. 1119 01:00:28,990 --> 01:00:30,930 Hoekom seleksie soort N vierkant? 1120 01:00:30,930 --> 01:00:35,150 1121 01:00:35,150 --> 01:00:45,520 >> Ja, selfs al is die lys is gesorteer, vir elke iterasie van seleksie soort, ek 1122 01:00:45,520 --> 01:00:47,590 die minimum element te kies. 1123 01:00:47,590 --> 01:00:49,980 So dit beteken dat ek het om uit te kyk na al die elemente in die ongesorteerde 1124 01:00:49,980 --> 01:00:53,350 lys en vind die minimum vir elke iterasie. 1125 01:00:53,350 --> 01:00:54,600 Maak dit sin maak? 1126 01:00:54,600 --> 01:00:56,880 1127 01:00:56,880 --> 01:01:04,690 >> En voeg swaard, want N in die geval dat ek probeer om die te voeg 1128 01:01:04,690 --> 01:01:09,320 getalle en al die getalle, toe ek probeer om hulle te voeg, ek sien dat hulle 1129 01:01:09,320 --> 01:01:10,510 is in die regte posisie. 1130 01:01:10,510 --> 01:01:15,120 Ek het nie om te gaan kyk al die ander getalle in die ongesorteerde lys. 1131 01:01:15,120 --> 01:01:17,170 So dit is hoekom dit n sal wees nie. 1132 01:01:17,170 --> 01:01:19,480 Sin maak? 1133 01:01:19,480 --> 01:01:21,035 En wat is theta? 1134 01:01:21,035 --> 01:01:23,410 >> Publiek: [onhoorbaar]. 1135 01:01:23,410 --> 01:01:24,380 >> LUCAS: Wat, jammer? 1136 01:01:24,380 --> 01:01:24,960 Sê dit weer. 1137 01:01:24,960 --> 01:01:25,666 >> Publiek: [onhoorbaar]. 1138 01:01:25,666 --> 01:01:26,490 >> LUCAS: Presies. 1139 01:01:26,490 --> 01:01:31,280 Sodat jy kan sien dat slegs seleksie gestoor in Merge soort het thetas. 1140 01:01:31,280 --> 01:01:39,920 En dit is omdat jy net theta indien beide Big O en Omega is dieselfde. 1141 01:01:39,920 --> 01:01:41,520 OK. 1142 01:01:41,520 --> 01:01:44,210 En uiteindelik, saam te smelt soort in log n. 1143 01:01:44,210 --> 01:01:48,910 >> En dan, as Dan het gesê, Merge soort is 'n soort van soos die dieselfde manier wat 1144 01:01:48,910 --> 01:01:50,320 jy doen binêre soek. 1145 01:01:50,320 --> 01:01:53,530 So kry jy die lys. 1146 01:01:53,530 --> 01:01:55,170 En jy gaan in die helfte gesny. 1147 01:01:55,170 --> 01:02:00,580 En dan moet jy sny hulle in kleiner helftes. 1148 01:02:00,580 --> 01:02:01,730 En dan moet jy hulle saamsmelt. 1149 01:02:01,730 --> 01:02:02,960 Julle onthou dat, reg? 1150 01:02:02,960 --> 01:02:04,960 OK, as hy sê nie. 1151 01:02:04,960 --> 01:02:08,330 >> OK, wysers. 1152 01:02:08,330 --> 01:02:11,078 So, wat is 'n aanduiding? 1153 01:02:11,078 --> 01:02:12,050 >> Publiek: [onhoorbaar]. 1154 01:02:12,050 --> 01:02:12,820 >> LUCAS: 'n adres. 1155 01:02:12,820 --> 01:02:13,720 OK. 1156 01:02:13,720 --> 01:02:18,530 Ek weet dat Dawid toon 'n klomp van die videos van binky en dinge te wys 1157 01:02:18,530 --> 01:02:19,080 mekaar. 1158 01:02:19,080 --> 01:02:22,960 Maar ek wil om te dink van wysers as bloot 'n adres. 1159 01:02:22,960 --> 01:02:26,110 So dit is 'n veranderlike wat gaan 'n adres te stoor. 1160 01:02:26,110 --> 01:02:31,940 >> So dit is net hierdie spesiale veranderlike wat vier grepe lank. 1161 01:02:31,940 --> 01:02:36,550 Onthou, dat wyser na enigiets altyd vier grepe lank vir ons 32-bit 1162 01:02:36,550 --> 01:02:39,370 masjien so in die geval van die toestel. 1163 01:02:39,370 --> 01:02:41,920 1164 01:02:41,920 --> 01:02:47,050 En dit is net oor die plek van 'n veranderlike binnekant van dit. 1165 01:02:47,050 --> 01:02:50,240 >> OK, so daar is die geheue, basies. 1166 01:02:50,240 --> 01:02:57,420 So elke blok van die geheue het eintlik 'n etiket, wat is die adres van die 1167 01:02:57,420 --> 01:02:58,890 slotty geheue. 1168 01:02:58,890 --> 01:03:02,370 So dit beteken dat ek kan 'n wyser wat verwys na 1169 01:03:02,370 --> 01:03:03,380 enige van hierdie adresse. 1170 01:03:03,380 --> 01:03:09,930 So die rede hoekom ons wenke sal gebruik is As ek die plek om te onthou 1171 01:03:09,930 --> 01:03:12,300 dat 'n spesifieke veranderlike is 'n geheue. 1172 01:03:12,300 --> 01:03:16,560 >> En julle onthou dat een van daardie gevalle was as ek 'n funksie 1173 01:03:16,560 --> 01:03:20,820 As ek eintlik wil hê jy moet ruil vir reale, het ek eintlik 1174 01:03:20,820 --> 01:03:22,110 'n wyser te stuur. 1175 01:03:22,110 --> 01:03:23,460 Nie die veranderlike. 1176 01:03:23,460 --> 01:03:25,200 Het jy ouens onthou dat? 1177 01:03:25,200 --> 01:03:26,450 Die verskil between-- 1178 01:03:26,450 --> 01:03:33,350 1179 01:03:33,350 --> 01:03:34,120 wat is die naam? 1180 01:03:34,120 --> 01:03:36,010 Oproep deur waarde en roep deur verwysing, reg? 1181 01:03:36,010 --> 01:03:36,840 >> OK, ja. 1182 01:03:36,840 --> 01:03:38,330 So noem waarde. 1183 01:03:38,330 --> 01:03:43,570 Wanneer jy stuur 'n veranderlike te funksioneer jy net die stuur van 'n waarde. 1184 01:03:43,570 --> 01:03:45,610 So jy is eintlik die stuur 'n afskrif van die veranderlike. 1185 01:03:45,610 --> 01:03:49,720 En jou program kon nie minder omgee oor as dieselfde veranderlike eintlik 1186 01:03:49,720 --> 01:03:51,650 maak 'n kopie. 1187 01:03:51,650 --> 01:03:56,330 >> En roeping deur verwysing beteken dat Ek is eintlik die stuur van 'n afskrif van die 1188 01:03:56,330 --> 01:03:57,550 wyser na daardie veranderlike. 1189 01:03:57,550 --> 01:04:00,970 So dit beteken dat ek die stuur van die plek van daardie veranderlike. 1190 01:04:00,970 --> 01:04:04,440 So voel ek die plek van die veranderlike, wanneer ek noem die funksie 1191 01:04:04,440 --> 01:04:09,700 met wysers, ek is in staat om werklik verander die data wat in die belangrikste. 1192 01:04:09,700 --> 01:04:12,050 Sin maak? 1193 01:04:12,050 --> 01:04:17,560 >> Alhoewel, die wyser is 'n afskrif, die wyser het nog steeds die regte adres van 1194 01:04:17,560 --> 01:04:20,090 die veranderlike wat ek wil verander. 1195 01:04:20,090 --> 01:04:21,920 Sin maak? 1196 01:04:21,920 --> 01:04:24,290 >> So skep wysers. 1197 01:04:24,290 --> 01:04:28,410 Onthou, die wyser altyd die tipe wat dit is wys 1198 01:04:28,410 --> 01:04:29,890 te en dan 'n ster. 1199 01:04:29,890 --> 01:04:31,030 En dan sit jy die naam. 1200 01:04:31,030 --> 01:04:35,765 So onthou dat wanneer jy watter ster, dit is soos 'n verwysing na 1201 01:04:35,765 --> 01:04:38,990 dat alles wat veranderlike tik wat jy gehad het. 1202 01:04:38,990 --> 01:04:42,850 >> So hier in ster, byvoorbeeld, is dit 'n wyser en 'n heelgetal. 1203 01:04:42,850 --> 01:04:47,680 En dan kar ster is 'n aanduiding kar ster en so meer. 1204 01:04:47,680 --> 01:04:47,960 Ja? 1205 01:04:47,960 --> 01:04:52,710 >> Publiek: Wat as ons 'n wyser na N te ster x. 1206 01:04:52,710 --> 01:04:55,255 Ek weet wat 'n wyser na x. 1207 01:04:55,255 --> 01:04:59,432 Is dit ook verklaar x 'n heelgetal? 1208 01:04:59,432 --> 01:05:05,170 >> LUCAS: OK, so as jy sê n ster x, jy nie die skep van 'n verwysing na 'n 1209 01:05:05,170 --> 01:05:06,000 veranderlike x. 1210 01:05:06,000 --> 01:05:08,170 Jy maak 'n wyser vernoem x. 1211 01:05:08,170 --> 01:05:09,396 >> Publiek: [onhoorbaar]. 1212 01:05:09,396 --> 01:05:14,250 >> LUCAS: So as ek sê n ster x, ek is sê, hey, in die geheue, ek gaan om te 1213 01:05:14,250 --> 01:05:16,390 kry een van hierdie drie bokse. 1214 01:05:16,390 --> 01:05:20,750 En ek gaan om te sê dat gaan x te wees, wat 1215 01:05:20,750 --> 01:05:22,000 gaan 'n wyser te wees. 1216 01:05:22,000 --> 01:05:26,860 1217 01:05:26,860 --> 01:05:30,640 En iets interessant oor wysers is dat ons sê dat hulle 1218 01:05:30,640 --> 01:05:32,620 4 grepe vir 'n 32-bit masjien. 1219 01:05:32,620 --> 01:05:36,320 En die rede daarvoor is omdat 4 grepe 32-stukkies. 1220 01:05:36,320 --> 01:05:40,490 >> En masjiene wat 64 stukkies eintlik het wysers adresse 1221 01:05:40,490 --> 01:05:43,480 wat 64 stukkies lank. 1222 01:05:43,480 --> 01:05:49,820 So dit beteken net dat die grootte van die adresse in die masjien is anders. 1223 01:05:49,820 --> 01:05:52,270 >> So verwysings en Dereferencing. 1224 01:05:52,270 --> 01:05:54,310 Daar is twee operateurs wat Julle moet onthou. 1225 01:05:54,310 --> 01:05:55,450 Die eerste is ampersand. 1226 01:05:55,450 --> 01:05:56,810 Die tweede is sterre. 1227 01:05:56,810 --> 01:06:05,060 Moenie deurmekaar raak deur die sterre en hierdie star want onthou, in 1228 01:06:05,060 --> 01:06:06,950 hierdie geval, jy het n ster. 1229 01:06:06,950 --> 01:06:08,700 >> Dit is soos 'n hele ding saam. 1230 01:06:08,700 --> 01:06:10,720 Daar is geen ruimte n ster. 1231 01:06:10,720 --> 01:06:12,070 So dit beteken dat dit is die tipe. 1232 01:06:12,070 --> 01:06:14,870 Onthou dat wanneer jy die veranderlike ster, jy 1233 01:06:14,870 --> 01:06:16,230 praat oor die tipe. 1234 01:06:16,230 --> 01:06:20,540 >> Wanneer jy net sterre en dan die naam van die veranderlike, beteken dit dat 1235 01:06:20,540 --> 01:06:24,100 jy die wyser, is dereferencing wat beteken dat jy kyk na die 1236 01:06:24,100 --> 01:06:28,290 wyser, die vind van die adres dis gewys het, gaan na die adres, 1237 01:06:28,290 --> 01:06:30,850 en kyk na wanneer jy is daar. 1238 01:06:30,850 --> 01:06:34,310 So ek vertel my studente dat wanneer jy ster, moet jy dink dat dit 1239 01:06:34,310 --> 01:06:36,850 die afkorting van die inhoud van. 1240 01:06:36,850 --> 01:06:39,770 >> So as jy 'n muis en jy doen ster wyser, dit is die 1241 01:06:39,770 --> 01:06:41,720 inhoud van die wyser. 1242 01:06:41,720 --> 01:06:44,580 So jy gaan na wat ookal dit is wys om te en kyk na die voortdurende inhoud. 1243 01:06:44,580 --> 01:06:47,730 En die ampersand is dieselfde ding as adres van. 1244 01:06:47,730 --> 01:06:52,560 >> So as ek 'n veranderlike a-- soos, laat sê dat ek het 'n int gelyk 3-- 1245 01:06:52,560 --> 01:06:56,900 as ek wil die adres van daardie te vind veranderlike 'n herinnering, ek kan net nie 1246 01:06:56,900 --> 01:06:58,240 en-teken a. 1247 01:06:58,240 --> 01:07:00,280 So dit is adres van 'n. 1248 01:07:00,280 --> 01:07:01,530 Sin maak? 1249 01:07:01,530 --> 01:07:03,790 1250 01:07:03,790 --> 01:07:05,040 >> So hier is 'n voorbeeld. 1251 01:07:05,040 --> 01:07:08,370 1252 01:07:08,370 --> 01:07:11,530 Dit ontbreek int b en int c. 1253 01:07:11,530 --> 01:07:16,520 So int n gelyk 3 beteken dat Ek gaan om te gaan na die geheue. 1254 01:07:16,520 --> 01:07:19,870 En ek gaan 'n slot te vind en sit die nommer 3 hier. 1255 01:07:19,870 --> 01:07:22,200 >> En dan int b is gelyk aan 4. 1256 01:07:22,200 --> 01:07:23,100 Ek gaan dieselfde ding om te doen. 1257 01:07:23,100 --> 01:07:25,840 Gaan na geheue en sit 'n aantal 4 in een van die bokse. 1258 01:07:25,840 --> 01:07:27,100 En int gelyk 5. 1259 01:07:27,100 --> 01:07:29,740 Vind nog 'n boks en sit 'n nommer 5. 1260 01:07:29,740 --> 01:07:36,160 >> So, wat is hierdie lyn doen nie? N ster pa gelyk ampersand a. 1261 01:07:36,160 --> 01:07:37,800 So eerste van alles, n ster pa. 1262 01:07:37,800 --> 01:07:39,050 Wat is dit? 1263 01:07:39,050 --> 01:07:40,930 1264 01:07:40,930 --> 01:07:42,298 >> Publiek: [onhoorbaar]. 1265 01:07:42,298 --> 01:07:47,890 >> LUCAS: Ja, so n ster pa, die eerste, verklaar 'n wyser genoem pa. 1266 01:07:47,890 --> 01:07:53,720 En dan is dit die toeken van die waarde van dat wyser om die adres van 'n te wees. 1267 01:07:53,720 --> 01:07:55,790 So-teken a. 1268 01:07:55,790 --> 01:07:58,510 Dan, as ek dit doen ster pb, Wat is 'n ster pb? 1269 01:07:58,510 --> 01:08:02,418 1270 01:08:02,418 --> 01:08:03,150 >> Ag, jammer. 1271 01:08:03,150 --> 01:08:06,330 Dit word ook vermis. N ster pb. 1272 01:08:06,330 --> 01:08:07,905 Ek bedoel ster rekenaar. 1273 01:08:07,905 --> 01:08:11,200 Ek is so jammer. 1274 01:08:11,200 --> 01:08:11,940 Dit is dieselfde ding. 1275 01:08:11,940 --> 01:08:16,408 Maar nou is ek 'n goeie artikels skep 'n wyser na B ​​en dan 'n verwysing na c. 1276 01:08:16,408 --> 01:08:16,886 Ja? 1277 01:08:16,886 --> 01:08:18,136 >> Publiek: [onhoorbaar]? 1278 01:08:18,136 --> 01:08:25,490 1279 01:08:25,490 --> 01:08:26,670 >> LUCAS: Ja. 1280 01:08:26,670 --> 01:08:32,630 So as jy gaan na die geheue en jy gaan die boks wat aanwyscr vir pa, 1281 01:08:32,630 --> 01:08:37,149 jy eintlik gaan om te sien 'n adres van 'n. 1282 01:08:37,149 --> 01:08:38,399 OK? 1283 01:08:38,399 --> 01:08:42,970 1284 01:08:42,970 --> 01:08:43,300 Ja? 1285 01:08:43,300 --> 01:08:45,605 >> Publiek: [onhoorbaar]? 1286 01:08:45,605 --> 01:08:49,260 >> LUCAS: Ja, wyser is 'n adres. 1287 01:08:49,260 --> 01:08:50,120 Nooit vergeet nie. 1288 01:08:50,120 --> 01:08:52,800 Dit is soos die belangrikste deel oor wysers. 1289 01:08:52,800 --> 01:08:56,180 Daar is die stoor en adres sommige veranderlike. 1290 01:08:56,180 --> 01:08:56,890 Enigiets anders? 1291 01:08:56,890 --> 01:08:58,370 Enige ander vrae? 1292 01:08:58,370 --> 01:08:59,189 OK. 1293 01:08:59,189 --> 01:09:00,399 >> So wysers en skikkings. 1294 01:09:00,399 --> 01:09:08,189 Onthou dat wanneer ek doen int skikking 3, basies, wat ek doen is ek is, soort 1295 01:09:08,189 --> 01:09:12,779 van, verklaar in 'n wyser. 1296 01:09:12,779 --> 01:09:18,960 So skikking is soort van soos 'n verwysing na 'n spesifieke plek in die geheue waarin ek 1297 01:09:18,960 --> 01:09:21,999 toegeken drie posisies vir heelgetalle. 1298 01:09:21,999 --> 01:09:23,430 Maak dit sin maak? 1299 01:09:23,430 --> 01:09:30,250 >> So wanneer ek doen int skikking 3, wat ek doen, basies, is die skep van drie 1300 01:09:30,250 --> 01:09:31,479 slots in die geheue. 1301 01:09:31,479 --> 01:09:33,899 So het ek net vind drie posisies in die geheue. 1302 01:09:33,899 --> 01:09:38,810 So as ek dit doen, dan, 'n ster skikking, dit basies beteken die inhoud van skikking, 1303 01:09:38,810 --> 01:09:46,180 wat beteken dat ek vee die wyser, ek gaan na die plek wat dit is wys om, 1304 01:09:46,180 --> 01:09:47,939 en ek het die nommer een. 1305 01:09:47,939 --> 01:09:53,729 >> En dan, as ek dit doen ster verskeidenheid plus 1, dit is dieselfde ding as om skikking 1306 01:09:53,729 --> 01:09:59,690 inperk een, wat net beteken dat ek gaan na die plek wat dit is wys. 1307 01:09:59,690 --> 01:10:03,000 En dan is die plus 1 fabrikate my skuif een posisie. 1308 01:10:03,000 --> 01:10:06,510 So ek gaan na hierdie posisie, eintlik, en sit die nommer twee. 1309 01:10:06,510 --> 01:10:10,900 >> En dan, uiteindelik, wanneer ek verskeidenheid plus 2, ek gaan na die plek waar 1310 01:10:10,900 --> 01:10:11,825 skikking is wys. 1311 01:10:11,825 --> 01:10:14,690 En dan beweeg ek na die geheue blokke. 1312 01:10:14,690 --> 01:10:16,240 En dan het ek die nommer drie hier. 1313 01:10:16,240 --> 01:10:16,600 Ja? 1314 01:10:16,600 --> 01:10:21,400 >> Publiek: So ster skikking is eenvoudig sê die heel eerste punt. 1315 01:10:21,400 --> 01:10:25,090 En jy kan voeg 1, net omdat ons is eintlik net 1316 01:10:25,090 --> 01:10:27,295 verwysing dat die eerste adres. 1317 01:10:27,295 --> 01:10:28,545 >> LUCAS: Ja. 1318 01:10:28,545 --> 01:10:32,720 1319 01:10:32,720 --> 01:10:36,020 Hoekom moet ons, byvoorbeeld, sê skikking 0, 1 verskeidenheid, en verskeidenheid 2? 1320 01:10:36,020 --> 01:10:38,970 1321 01:10:38,970 --> 01:10:42,790 Ek sê, hoekom doen jy 0, 1, 2, 3 in plaas van 1, 2, 3? 1322 01:10:42,790 --> 01:10:46,550 Een van die redes is, een, rekenaar programmeerders verkies om te begin 1323 01:10:46,550 --> 01:10:47,750 tel van 0. 1324 01:10:47,750 --> 01:10:52,370 Twee is omdat wanneer jy dit doen skikking 0, dit is dieselfde ding as om skikking 1325 01:10:52,370 --> 01:10:56,330 plus 0, wat beteken dat ek gaan na daardie posisie, en ek doen nie 1326 01:10:56,330 --> 01:10:59,320 slaan 'n geheue blokke. 1327 01:10:59,320 --> 01:11:01,750 So ek geen geheue blokke te beweeg nie. 1328 01:11:01,750 --> 01:11:02,015 Ja? 1329 01:11:02,015 --> 01:11:03,265 >> Publiek: [onhoorbaar]? 1330 01:11:03,265 --> 01:11:05,928 1331 01:11:05,928 --> 01:11:12,670 >> LUCAS: So vra sy wat die verskil tussen die doen 1332 01:11:12,670 --> 01:11:14,000 hierdie of doen malloc. 1333 01:11:14,000 --> 01:11:17,550 Een van die verskille is dat int skikking 3 is die skep van 'n 1334 01:11:17,550 --> 01:11:19,260 skikking op die stapel. 1335 01:11:19,260 --> 01:11:23,080 En wanneer ek malloc, dit skep op die hoop. 1336 01:11:23,080 --> 01:11:25,250 Maak dit sin maak? 1337 01:11:25,250 --> 01:11:28,870 >> So hoe malloc eintlik werk? 1338 01:11:28,870 --> 01:11:32,245 So hoekom ons selfs hoef malloc te gebruik? 1339 01:11:32,245 --> 01:11:35,730 1340 01:11:35,730 --> 01:11:39,700 Jou samesteller soort figure uit alle die veranderlikes wat jy verklaar. 1341 01:11:39,700 --> 01:11:44,040 En hy skep ruimte vir alle van hulle in die stapel. 1342 01:11:44,040 --> 01:11:47,180 So al jou veranderlikes gaan iewers in die stapel te wees. 1343 01:11:47,180 --> 01:11:49,460 So hier is die omgewing veranderlikes. 1344 01:11:49,460 --> 01:11:53,850 >> So basies, ruimte vir daardie veranderlikes in die geheue is toegeken aan 1345 01:11:53,850 --> 01:11:55,080 stel tyd. 1346 01:11:55,080 --> 01:11:58,790 So beteken dit dat jou rekenaar al daardie veranderlikes te ken 1347 01:11:58,790 --> 01:11:59,790 vooraf. 1348 01:11:59,790 --> 01:12:02,500 Dit hoef nie te weet watter waarde jy gaan om te sit in hulle. 1349 01:12:02,500 --> 01:12:05,490 Maar dit moet weet hoe veel geheue wat jy nodig het. 1350 01:12:05,490 --> 01:12:09,380 >> Maar nou kom ons sê dat, byvoorbeeld, jy skep 'n skikking of die neem van 'n 1351 01:12:09,380 --> 01:12:13,430 string wat jy neem van die gebruiker. 1352 01:12:13,430 --> 01:12:17,300 Jy weet nie hoe lank die string gaan wees, byvoorbeeld. 1353 01:12:17,300 --> 01:12:20,600 So jy weet nie presies hoeveel geheue blokke jy ken, reg? 1354 01:12:20,600 --> 01:12:24,120 >> So dit maak nie regtig sin maak nie vir julle te sê het 100 karakters. 1355 01:12:24,120 --> 01:12:26,420 En dan, wat as die gebruiker skryf 150? 1356 01:12:26,420 --> 01:12:27,670 Jy gaan geskroef word. 1357 01:12:27,670 --> 01:12:30,160 1358 01:12:30,160 --> 01:12:34,620 >> So basies, kan jy nie seker is van hoe wees veel geheue wat jy hoef te ken 1359 01:12:34,620 --> 01:12:35,960 wanneer jy die program saamstel. 1360 01:12:35,960 --> 01:12:38,240 Jy weet net dat op loop tyd. 1361 01:12:38,240 --> 01:12:39,950 So dit is waarom jy het die hoop. 1362 01:12:39,950 --> 01:12:47,610 So het die hoop gaan geheue te hê dat jy die toekenning tydens die 1363 01:12:47,610 --> 01:12:50,810 duur van die program loop. 1364 01:12:50,810 --> 01:12:55,780 >> So basies, as jy nie malloc, wat jy doen is die toekenning van geheue 1365 01:12:55,780 --> 01:13:00,160 runtime, wat beteken dat jy besluit op daardie oomblik dat jy 1366 01:13:00,160 --> 01:13:02,670 moet daardie geheue. 1367 01:13:02,670 --> 01:13:04,210 So dit is wanneer jy die toekenning van dit. 1368 01:13:04,210 --> 01:13:06,430 Maak dit sin maak? 1369 01:13:06,430 --> 01:13:11,690 >> So onthou, die stapel het veranderlikes wat geskep word op kompilering. 1370 01:13:11,690 --> 01:13:14,560 En dan is die hoop het veranderlikes wat geskep word as jy gaan 1371 01:13:14,560 --> 01:13:15,600 met malloc, byvoorbeeld. 1372 01:13:15,600 --> 01:13:16,850 >> Publiek: [onhoorbaar]? 1373 01:13:16,850 --> 01:13:19,179 1374 01:13:19,179 --> 01:13:24,340 >> LUCAS: So GetString is gaan malloc te bel. 1375 01:13:24,340 --> 01:13:26,710 Laat my praat oor malloc, en Ek sal verduidelik GetString. 1376 01:13:26,710 --> 01:13:32,000 So malloc is dieselfde ding as die toekenning van geheue. 1377 01:13:32,000 --> 01:13:34,600 So dit gaan toe te ken geheue op die hoop. 1378 01:13:34,600 --> 01:13:40,010 En dit gaan 'n wyser terug te keer na waar dat die geheue is toegeken aan. 1379 01:13:40,010 --> 01:13:43,090 >> So wanneer jy do-- 1380 01:13:43,090 --> 01:13:44,910 hier vir example-- 1381 01:13:44,910 --> 01:13:45,830 N ster wyser. 1382 01:13:45,830 --> 01:13:50,520 En dan wyser gelyk malloc grootte van duim keer 10. 1383 01:13:50,520 --> 01:13:52,110 Ek skep 'n wyser. 1384 01:13:52,110 --> 01:13:59,020 En dan is ek toeken wat wyser te die waarde van die wyser wat malloc 1385 01:13:59,020 --> 01:13:59,680 gee my nie. 1386 01:13:59,680 --> 01:14:04,150 >> So ek vra malloc kan jy ken ruimte vir 10 heelgetalle. 1387 01:14:04,150 --> 01:14:05,390 Dit is wat dit sê. 1388 01:14:05,390 --> 01:14:09,020 En malloc gee my terug 'n wyser na daardie plek. 1389 01:14:09,020 --> 01:14:11,460 Sin maak? 1390 01:14:11,460 --> 01:14:12,270 OK. 1391 01:14:12,270 --> 01:14:17,940 Ek En GetString is, basies, besig met 'n roep malloc, sodat jy kan wys 1392 01:14:17,940 --> 01:14:21,680 geheue tydens looptyd. 1393 01:14:21,680 --> 01:14:26,460 >> Altyd onthou om te kyk vir null omdat malloc gaan null om terug te keer 1394 01:14:26,460 --> 01:14:28,200 indien dit nie geheue toeken. 1395 01:14:28,200 --> 01:14:31,660 Kom ons sê dat jy vra vir 'n belaglike bedrag van die geheue. 1396 01:14:31,660 --> 01:14:33,950 Jou rekenaar is nie van plan om te wees staat wees om te veel toeken. 1397 01:14:33,950 --> 01:14:36,410 >> So malloc net gaan om terug te keer null. 1398 01:14:36,410 --> 01:14:42,210 Onthou So altyd om te kyk of die wyser wat jy het gekry van malloc is 1399 01:14:42,210 --> 01:14:45,640 nul of nie, want as dit is, kan jy word dereferencing 'n wyser en 1400 01:14:45,640 --> 01:14:48,340 veroorsaak kant foute. 1401 01:14:48,340 --> 01:14:50,930 En uiteindelik, nie vergeet jou vrye geheue. 1402 01:14:50,930 --> 01:14:57,800 1403 01:14:57,800 --> 01:15:00,560 >> Malloc skep geheue in die hoop. 1404 01:15:00,560 --> 01:15:03,436 En jy het die geheue te bevry voordat die program eindig. 1405 01:15:03,436 --> 01:15:05,370 OK, dit is al wat vir my. 1406 01:15:05,370 --> 01:15:07,900 Jammer, Rob. 1407 01:15:07,900 --> 01:15:07,950 Dankie. 1408 01:15:07,950 --> 01:15:09,878 >> [Applous] 1409 01:15:09,878 --> 01:15:12,679 >> LUCAS: Enige laaste vrae voor Rob kom? 1410 01:15:12,679 --> 01:15:13,138 Nee? 1411 01:15:13,138 --> 01:15:13,597 Ja? 1412 01:15:13,597 --> 01:15:15,892 >> Publiek: Ek het nie gesien hierdie een aanlyn. 1413 01:15:15,892 --> 01:15:17,269 Het jy dit opgelaai nie? 1414 01:15:17,269 --> 01:15:19,106 >> LUCAS: Ek dink Dave is laai dit gou. 1415 01:15:19,106 --> 01:15:19,880 >> DAVE: Dit sal gepos word. 1416 01:15:19,880 --> 01:15:20,310 >> LUCAS: Dit sal wees aanlyn. 1417 01:15:20,310 --> 01:15:21,175 >> Publiek: Dit is aan. 1418 01:15:21,175 --> 01:15:22,090 >> LUCAS: Dit is nie? 1419 01:15:22,090 --> 01:15:23,157 OK. 1420 01:15:23,157 --> 01:15:23,644 Ja? 1421 01:15:23,644 --> 01:15:27,053 >> Publiek: [onhoorbaar]? 1422 01:15:27,053 --> 01:15:30,285 >> LUCAS: Ja, moet jy bevry al die geheue wat sit in die hoop. 1423 01:15:30,285 --> 01:15:31,535 >> Publiek: [onhoorbaar]? 1424 01:15:31,535 --> 01:15:34,518 1425 01:15:34,518 --> 01:15:36,160 >> LUCAS: Ja. 1426 01:15:36,160 --> 01:15:39,980 Enige tyd wat jy het 'n kultuur malloc, jy moet 'n kultuur gratis hê 1427 01:15:39,980 --> 01:15:42,640 nadat jy ophou met behulp van die veranderlike. 1428 01:15:42,640 --> 01:15:44,800 So malloc en gratis is altyd saam. 1429 01:15:44,800 --> 01:15:45,410 Hul beste vriende. 1430 01:15:45,410 --> 01:15:46,720 Ja. 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: Ek sal gou gaan. 1434 01:15:56,850 --> 01:16:00,466 En ook die video sal opgesit word. 1435 01:16:00,466 --> 01:16:01,716 Ek het die mic op. 1436 01:16:01,716 --> 01:16:24,060 1437 01:16:24,060 --> 01:16:26,230 >> OK, so week vyf dinge. 1438 01:16:26,230 --> 01:16:27,970 Eerste ding wat ons het, is die stapel. 1439 01:16:27,970 --> 01:16:33,390 So onthou dat daar net een stapel raam per aktiewe funksie oproep. 1440 01:16:33,390 --> 01:16:34,710 Ons sal sien dat in 'n tweede. 1441 01:16:34,710 --> 01:16:37,850 En onthou ook wat eintlik gaan in elke stapel raam gaan wees 1442 01:16:37,850 --> 01:16:41,880 die plaaslike veranderlikes van ons funksies, die argumente wat geslaag het, word in ons 1443 01:16:41,880 --> 01:16:43,880 funksies, saam met 'n paar ander dinge wat jy nie regtig 1444 01:16:43,880 --> 01:16:45,260 hoef te bekommer oor. 1445 01:16:45,260 --> 01:16:50,950 >> So hier is 'n voorbeeld program waar kennisgewing, is hoof printfing die terugkeer 1446 01:16:50,950 --> 01:16:52,830 waarde van cat 4. 1447 01:16:52,830 --> 01:16:57,930 cat net gaan die terugkeer waarde van maat 4 komma 6. 1448 01:16:57,930 --> 01:17:02,380 En bar gaan 'n paar plaaslike te stel veranderlike n gelyk aan 4 keer 6. 1449 01:17:02,380 --> 01:17:03,920 En dan n terugkeer. 1450 01:17:03,920 --> 01:17:09,130 >> So laat ons kyk na die stapel regdeur die werklike iterasie van hierdie program. 1451 01:17:09,130 --> 01:17:10,500 So is daar die onderkant van ons stapel. 1452 01:17:10,500 --> 01:17:12,620 Onthou dat die stapel grootword. 1453 01:17:12,620 --> 01:17:15,370 So aan die onderkant van ons stapel, ons het 'n stapel raam vir die hoof. 1454 01:17:15,370 --> 01:17:17,000 Wanneer die program begin, hoof is altyd gaan wees by die 1455 01:17:17,000 --> 01:17:18,560 onderkant van ons stapel. 1456 01:17:18,560 --> 01:17:20,880 >> En wat is die binnekant van ons stapel raam vir die hoof? 1457 01:17:20,880 --> 01:17:23,810 So selfs al is daar nie 'n plaaslike veranderlikes hoof, soos ek gesê het, 1458 01:17:23,810 --> 01:17:29,670 Ons het argc en RGV toegang tot die ruimte binnekant van die belangrikste stapel raam. 1459 01:17:29,670 --> 01:17:33,260 So hoof gaan nou noem die funksie cat. 1460 01:17:33,260 --> 01:17:35,125 En dit beteken dat cat gaan kry sy eie stapel raam. 1461 01:17:35,125 --> 01:17:36,970 >> So nou is ons binne die funksie cat. 1462 01:17:36,970 --> 01:17:38,610 En wat nodig is om in te gaan cat se stapel raam? 1463 01:17:38,610 --> 01:17:41,100 Wel, cat het 'n argument n. 1464 01:17:41,100 --> 01:17:45,440 En n is gelyk aan 4 want dit is wat belangrikste is verby as cat se argument. 1465 01:17:45,440 --> 01:17:48,490 >> So nou cat gaan bar te bel. 1466 01:17:48,490 --> 01:17:52,070 Wat is bar gaan binne-in van sy 'n stapel raam? 1467 01:17:52,070 --> 01:17:55,610 Dit het x gelyk aan y 4 gelyk aan ses. 1468 01:17:55,610 --> 01:17:58,540 Dit is nie al wat ons gaan hê in die stapel raam, want bar 1469 01:17:58,540 --> 01:18:00,580 het ook 'n plaaslike veranderlike n. 1470 01:18:00,580 --> 01:18:03,370 En n ons gaan gelyk aan 24 op te stel. 1471 01:18:03,370 --> 01:18:05,750 >> So nou bar gaan terug n. 1472 01:18:05,750 --> 01:18:09,300 So bar terugkeer 24 tot die stapel raam cat. 1473 01:18:09,300 --> 01:18:12,560 En omdat bar is nou terug, dat beteken dat ons knal die stapel raam 1474 01:18:12,560 --> 01:18:14,250 vir bar van die stapel. 1475 01:18:14,250 --> 01:18:18,430 So al die geheue wat bar was gebruik is nou af van die stapel. 1476 01:18:18,430 --> 01:18:21,550 >> Nou, cat gaan ook om terug te keer na die hoof 24. 1477 01:18:21,550 --> 01:18:25,470 So nou dat cat terugkeer, die geheue dat cat gebruik het in sy " 1478 01:18:25,470 --> 01:18:27,550 stapel raam is ook weg. 1479 01:18:27,550 --> 01:18:29,660 En nou, hoof gaan printf te bel. 1480 01:18:29,660 --> 01:18:31,660 So printf is net nog 'n funksie. 1481 01:18:31,660 --> 01:18:35,320 Wanneer ons printf noem, is dit gaan wees 'n ander stapel raamwerk vir die printf 1482 01:18:35,320 --> 01:18:36,470 funksie oproep. 1483 01:18:36,470 --> 01:18:37,990 >> Wat is ons verby printf? 1484 01:18:37,990 --> 01:18:40,090 Dit is wat gaan om te gaan op sy stapel raam. 1485 01:18:40,090 --> 01:18:44,970 Op die heel minste, ons verby dat persent i agteroorskuinsstreep N en 1486 01:18:44,970 --> 01:18:47,180 die argument 24. 1487 01:18:47,180 --> 01:18:50,370 Dit mag dalk meer in dit is stapel raam As printf gebeur word met behulp van 'n paar 1488 01:18:50,370 --> 01:18:51,200 plaaslike veranderlikes. 1489 01:18:51,200 --> 01:18:51,920 Ons weet nie. 1490 01:18:51,920 --> 01:18:53,810 >> Maar alles wat daarmee in printf se stapel raam. 1491 01:18:53,810 --> 01:18:55,740 Dit gaan die printf te voer. 1492 01:18:55,740 --> 01:18:56,830 Dan printf gedoen. 1493 01:18:56,830 --> 01:18:57,820 Dit sal terugkeer. 1494 01:18:57,820 --> 01:18:58,960 Ten slotte, hoof gedoen word. 1495 01:18:58,960 --> 01:18:59,860 Main sal terugkeer. 1496 01:18:59,860 --> 01:19:02,020 En dan is ons program gedoen word. 1497 01:19:02,020 --> 01:19:02,480 Ja? 1498 01:19:02,480 --> 01:19:04,505 >> Publiek: Is jy sien [onhoorbaar] 1499 01:19:04,505 --> 01:19:05,900 argumente [onhoorbaar] 1500 01:19:05,900 --> 01:19:06,830 parameters? 1501 01:19:06,830 --> 01:19:09,970 >> ROB: So is daar 'n subtiele verskil tussen argumente en parameters. 1502 01:19:09,970 --> 01:19:14,400 En regtig, in gemeen praat, is mense geneig net meng dit al die tyd. 1503 01:19:14,400 --> 01:19:17,550 Maar parameters is die formele Naam van die dinge. 1504 01:19:17,550 --> 01:19:20,180 >> So argc en argv is die parameters na. 1505 01:19:20,180 --> 01:19:23,440 Argumente is wat jy eintlik slaag in dié parameters. 1506 01:19:23,440 --> 01:19:28,340 So is daar as ek roep foo van 4, 4 is die argument wat ek verby in. 1507 01:19:28,340 --> 01:19:31,460 En die parameter n, binne cat, neem op die waarde 4 1508 01:19:31,460 --> 01:19:32,880 sedert 4 was die argument. 1509 01:19:32,880 --> 01:19:35,826 >> Publiek: [onhoorbaar]? 1510 01:19:35,826 --> 01:19:37,880 >> ROB: N is 'n plaaslike veranderlike te staaf. 1511 01:19:37,880 --> 01:19:41,420 1512 01:19:41,420 --> 01:19:44,960 N is nog plaaslike tot cat, maar dit is 'n parameter te foo. 1513 01:19:44,960 --> 01:19:48,190 Dit is nie 'n plaaslike veranderlike. 1514 01:19:48,190 --> 01:19:48,546 Ja? 1515 01:19:48,546 --> 01:19:51,180 >> Publiek: [onhoorbaar]? 1516 01:19:51,180 --> 01:19:55,400 >> ROB: cat is net 'n beroep bar en terugkeer wat bar opbrengste. 1517 01:19:55,400 --> 01:19:56,786 >> Publiek: [onhoorbaar]? 1518 01:19:56,786 --> 01:19:59,591 >> ROB: Ja, net om te sien verskeie stapel rame. 1519 01:19:59,591 --> 01:20:00,082 Ja? 1520 01:20:00,082 --> 01:20:03,519 >> Publiek: Hoekom is cat genoem voor printf? 1521 01:20:03,519 --> 01:20:05,920 >> ROB: Hoekom is cat genoem voordat printf? 1522 01:20:05,920 --> 01:20:10,740 So ek kon het, in plaas daarvan, iets gedoen soos int x gelyk foo van 4 1523 01:20:10,740 --> 01:20:12,980 en dan gedruk x. 1524 01:20:12,980 --> 01:20:17,900 Maar in plaas daarvan, het ek saam die funksie noem in die printf argument. 1525 01:20:17,900 --> 01:20:23,670 >> Maar let op dat ons kan nie eintlik die oproep te printf totdat ons voer 1526 01:20:23,670 --> 01:20:25,610 uit te vind wat foo van 4 is. 1527 01:20:25,610 --> 01:20:27,480 So ons gaan om dit te evalueer. 1528 01:20:27,480 --> 01:20:32,504 En net sodra dit gedoen gaan om terug te kom en te evalueer nie. 1529 01:20:32,504 --> 01:20:32,990 Ja? 1530 01:20:32,990 --> 01:20:37,364 >> Publiek: Aangesien beide bar [onhoorbaar] 1531 01:20:37,364 --> 01:20:41,738 waarde, waarom nie ons [onhoorbaar]? 1532 01:20:41,738 --> 01:20:44,400 >> ROB: Hulle moet heeltemal int wees. 1533 01:20:44,400 --> 01:20:46,260 Dit is nie vasgevang oor verskeie passe. 1534 01:20:46,260 --> 01:20:49,010 So dit moet int bar en int wees cat aangesien beide van hulle 1535 01:20:49,010 --> 01:20:50,460 terugkeer heelgetalle. 1536 01:20:50,460 --> 01:20:54,214 Leemte is slegs as hulle gaan nie werklike waardes om terug te keer. 1537 01:20:54,214 --> 01:20:54,692 Ja? 1538 01:20:54,692 --> 01:20:58,038 >> Publiek: As jy 'n lyn bo die terugkeer, [onhoorbaar]? 1539 01:20:58,038 --> 01:21:01,862 1540 01:21:01,862 --> 01:21:03,730 >> ROB: A lyn bo die opbrengs? 1541 01:21:03,730 --> 01:21:04,410 >> Publiek: Ja. 1542 01:21:04,410 --> 01:21:10,780 Soos as jy het printf en [onhoorbaar], sou dit twee keer druk? 1543 01:21:10,780 --> 01:21:12,992 >> ROB: So binnekant van cat? 1544 01:21:12,992 --> 01:21:15,945 As ons 'n printf hier? 1545 01:21:15,945 --> 01:21:16,750 >> Publiek: Ja. 1546 01:21:16,750 --> 01:21:19,510 >> ROB: So as ons 'n printf reg hier, sal dit een keer te druk. 1547 01:21:19,510 --> 01:21:23,400 Aangesien ons 'n beroep cat keer reg hier, dan sal ons die printf getref. 1548 01:21:23,400 --> 01:21:24,620 Dan sal ons bar noem. 1549 01:21:24,620 --> 01:21:25,710 En dan sal cat terugkeer. 1550 01:21:25,710 --> 01:21:26,275 En dit is dit. 1551 01:21:26,275 --> 01:21:30,985 Ons het net ooit teëkom die printf keer. 1552 01:21:30,985 --> 01:21:31,482 Ja? 1553 01:21:31,482 --> 01:21:32,973 >> Publiek: [onhoorbaar] 1554 01:21:32,973 --> 01:21:37,950 printf roeping cat, want ons is die eerste roep printf en dan is ons verby 1555 01:21:37,950 --> 01:21:38,580 die argumente. 1556 01:21:38,580 --> 01:21:40,960 >> ROB: So in teorie, is nie printf roeping cat? 1557 01:21:40,960 --> 01:21:42,220 So nie. 1558 01:21:42,220 --> 01:21:47,360 Net die einde dat c gaan voer hierdie dinge is, voordat ons kan 1559 01:21:47,360 --> 01:21:49,800 noem 'n funksie, al die argumente om die funksie te 1560 01:21:49,800 --> 01:21:51,600 heeltemal geëvalueer word. 1561 01:21:51,600 --> 01:21:53,540 So is dit heeltemal geëvalueer? 1562 01:21:53,540 --> 01:21:54,610 Ja, dit is net 'n string. 1563 01:21:54,610 --> 01:21:55,480 Dit is net 'n waarde. 1564 01:21:55,480 --> 01:21:57,200 >> Dan het ons heeltemal evalueer nie. 1565 01:21:57,200 --> 01:21:59,720 Sodra dit gedoen is, wat nou al sy argumente geëvalueer. 1566 01:21:59,720 --> 01:22:01,982 En nou kan ons die bel om te printf. 1567 01:22:01,982 --> 01:22:02,478 Ja? 1568 01:22:02,478 --> 01:22:03,966 >> Publiek: Een vraag. 1569 01:22:03,966 --> 01:22:06,942 As jy 'n leemte funksie, moet jy terugkeer kommapunt? 1570 01:22:06,942 --> 01:22:09,910 >> ROB: Jy doen nie 'n terugkeer kommapunt as jy 'n leemte funksie. 1571 01:22:09,910 --> 01:22:13,370 1572 01:22:13,370 --> 01:22:14,780 OK. 1573 01:22:14,780 --> 01:22:15,830 So nou 'n paar hoop dinge. 1574 01:22:15,830 --> 01:22:19,640 So hoop is hoe ons dit gaan hanteer met 'n dinamiese geheue bestuur. 1575 01:22:19,640 --> 01:22:23,100 En dit direk in teenstelling met die stapel wat ons sou noem outomatiese 1576 01:22:23,100 --> 01:22:24,100 geheue-bestuur. 1577 01:22:24,100 --> 01:22:27,140 >> So op die stapel, jy nooit regtig om te gaan met hoe die plaaslike veranderlikes 1578 01:22:27,140 --> 01:22:30,400 word gestoot en inloer al hierdie stapel rame en al daardie dinge. 1579 01:22:30,400 --> 01:22:31,070 Jy hoef nie te bekommer nie. 1580 01:22:31,070 --> 01:22:32,070 Dit is 'n outomatiese. 1581 01:22:32,070 --> 01:22:36,990 So het die hoop is handleiding. 1582 01:22:36,990 --> 01:22:38,070 En die [onhoorbaar] 1583 01:22:38,070 --> 01:22:41,260 kom van hierdie funksies malloc en gratis. 1584 01:22:41,260 --> 01:22:43,550 >> So hier is 'n ander program. 1585 01:22:43,550 --> 01:22:47,145 Al wat ons doen is mallocing 'n heelgetal. 1586 01:22:47,145 --> 01:22:49,360 Ons stoor dit in ster x. 1587 01:22:49,360 --> 01:22:52,520 Natuurlik, ons het om te kyk om te sien of x is leeg. 1588 01:22:52,520 --> 01:22:56,400 Dan gaan ons net soos wat x dui op 50. 1589 01:22:56,400 --> 01:23:00,350 1590 01:23:00,350 --> 01:23:03,260 Druk wat x dui op, Druk x, en dan gratis x. 1591 01:23:03,260 --> 01:23:08,920 >> So, hoe is dit eintlik gaan om te kyk As ons kyk na ons stapel en hoop? 1592 01:23:08,920 --> 01:23:10,950 So sal ons weer begin. 1593 01:23:10,950 --> 01:23:12,580 Die onderkant van ons stapel soos tevore. 1594 01:23:12,580 --> 01:23:15,930 Onthou dat jou hoop direk teen die stapel? 1595 01:23:15,930 --> 01:23:18,850 So ons gaan die te hê top van ons hoop daar. 1596 01:23:18,850 --> 01:23:22,590 >> So het die onderkant van ons stapel, ons het ons stapel raam vir die hoof. 1597 01:23:22,590 --> 01:23:28,000 Dit het die ruimte vir argc, argv, en ons nou 'n plaaslike veranderlike x, wat 1598 01:23:28,000 --> 01:23:30,030 is 'n int ster. 1599 01:23:30,030 --> 01:23:32,240 So ons gaan Itereer deur middel van hierdie program. 1600 01:23:32,240 --> 01:23:34,420 Eerste ding wat ons het, is 'n oproep tot malloc. 1601 01:23:34,420 --> 01:23:36,250 >> So maak ons ​​'n oproep te malloc. 1602 01:23:36,250 --> 01:23:37,100 Malloc is 'n funksie. 1603 01:23:37,100 --> 01:23:38,770 Dit gaan 'n stapel raam te kry. 1604 01:23:38,770 --> 01:23:40,180 Wat is ons verby te malloc? 1605 01:23:40,180 --> 01:23:41,610 Dit gaan om in te gaan van die stapel raam. 1606 01:23:41,610 --> 01:23:45,130 Ons is verby die grootte van n, wat is 4. 1607 01:23:45,130 --> 01:23:49,700 So wat geslaag om malloc. 1608 01:23:49,700 --> 01:23:50,910 >> Wat beteken malloc doen? 1609 01:23:50,910 --> 01:23:53,820 Dit gryp ons 'n paar ruimte op die hoop. 1610 01:23:53,820 --> 01:23:55,320 So ons gaan om te gaan na die hoop. 1611 01:23:55,320 --> 01:23:57,990 En ons gaan om te gryp 4 grepe uit die hoop. 1612 01:23:57,990 --> 01:24:01,500 So laat ons net gee wat 'n arbitrêre adres. 1613 01:24:01,500 --> 01:24:06,680 0x123 Net voorgee dat 'n adres wat op die hoop. 1614 01:24:06,680 --> 01:24:12,300 >> So, wat is eintlik binnekant van die streek van die geheue by adres Ox123? 1615 01:24:12,300 --> 01:24:13,080 Gemors. 1616 01:24:13,080 --> 01:24:15,270 So ons het nie gestoor iets in dit. 1617 01:24:15,270 --> 01:24:18,830 So sover ons weet, is dit kan enigiets wees. 1618 01:24:18,830 --> 01:24:20,560 Jy moet nie aanvaar dit is nul. 1619 01:24:20,560 --> 01:24:23,870 Dit is waarskynlik nie nul nie. 1620 01:24:23,870 --> 01:24:26,260 >> So nou malloc opbrengste. 1621 01:24:26,260 --> 01:24:28,020 En wat doen ons wanneer malloc opbrengste? 1622 01:24:28,020 --> 01:24:29,800 Ons het wat dit terugkeer. 1623 01:24:29,800 --> 01:24:32,290 Ons stel x gelyk aan wat dit terugkeer. 1624 01:24:32,290 --> 01:24:33,690 So, wat is dit terug? 1625 01:24:33,690 --> 01:24:38,150 Dit is die terugkeer 0x123 want dit is die adres van die blok van die geheue dat dit 1626 01:24:38,150 --> 01:24:40,850 net toegeken in die hoop. 1627 01:24:40,850 --> 01:24:47,160 >> So terug 0x123 x gaan nou ingestel word gelyk aan 0x123 wat picturaal, 1628 01:24:47,160 --> 01:24:52,940 ons dikwels trek as x 'n werklike pyl na die blok. 1629 01:24:52,940 --> 01:24:55,820 Maar x is net die stoor van die adres. 1630 01:24:55,820 --> 01:24:58,670 So nou het ons om te kyk of x is leeg. 1631 01:24:58,670 --> 01:24:59,120 Dit is nie null. 1632 01:24:59,120 --> 01:25:02,170 Ons voorgee dat malloc opgevolg. 1633 01:25:02,170 --> 01:25:04,950 >> So nou ster x is gelyk aan 50. 1634 01:25:04,950 --> 01:25:08,450 So ster onthou dit beteken gaan na daardie adres. 1635 01:25:08,450 --> 01:25:12,700 So 0x123 Ons gaan gaan na daardie adres. 1636 01:25:12,700 --> 01:25:14,660 So dit bring ons tot daar. 1637 01:25:14,660 --> 01:25:16,310 Wat doen ons by daardie adres? 1638 01:25:16,310 --> 01:25:19,020 Ons stoor 50. 1639 01:25:19,020 --> 01:25:22,500 >> So na hierdie lyn, dit is wat dinge gaan lyk. 1640 01:25:22,500 --> 01:25:24,640 So nou is dit nie meer vullis daar. 1641 01:25:24,640 --> 01:25:28,910 Nou weet ons dat 50 is in daardie besonder adres, want 1642 01:25:28,910 --> 01:25:32,410 ons stel dit dat. 1643 01:25:32,410 --> 01:25:32,790 OK? 1644 01:25:32,790 --> 01:25:34,370 So nou gaan ons f te druk. 1645 01:25:34,370 --> 01:25:38,490 >> So eerste gaan ons ster x te druk. 1646 01:25:38,490 --> 01:25:39,640 So, wat is ster x? 1647 01:25:39,640 --> 01:25:44,300 Weereens, ster x beteken gaan na die ding wat x dui op. 1648 01:25:44,300 --> 01:25:47,140 So x stoor 0x123 Gaan na daardie. 1649 01:25:47,140 --> 01:25:48,490 Ons kry 50. 1650 01:25:48,490 --> 01:25:50,540 So druk f dat. 1651 01:25:50,540 --> 01:25:54,900 En dit beteken dat dit gaan druk 50. 1652 01:25:54,900 --> 01:25:56,850 En dan is dit terug. 1653 01:25:56,850 --> 01:25:58,340 >> En dan het ons die tweede printf. 1654 01:25:58,340 --> 01:25:59,370 Ons is nou persent p. 1655 01:25:59,370 --> 01:26:01,680 As jy nog nie gesien het nie, dit is net hoe jy druk 'n wyser. 1656 01:26:01,680 --> 01:26:04,960 So het ons persent i, persent f, en almal van diegene wat reeds. 1657 01:26:04,960 --> 01:26:07,160 So persent p, druk van 'n muis. 1658 01:26:07,160 --> 01:26:08,920 >> So x is 'n wyser. 1659 01:26:08,920 --> 01:26:13,440 So as ons gaan om te druk x self, ons druk wat eintlik binne 1660 01:26:13,440 --> 01:26:19,220 x, wat is 0x123 So het die eerste druk f gaan druk 50. 1661 01:26:19,220 --> 01:26:23,620 Die tweede druk f gaan druk 0x123 Ja? 1662 01:26:23,620 --> 01:26:27,460 >> GEHOOR: Het jy persent gebruik x 'n wyser te druk? 1663 01:26:27,460 --> 01:26:31,200 >> ROB: So persent gebruik jy x 'n wyser te druk? 1664 01:26:31,200 --> 01:26:38,350 So jy kan maar persent x is net, algemeen, vir soos as jy 'n paar 1665 01:26:38,350 --> 01:26:40,325 integer en jy wil druk dit as 'n heksadesimaal. 1666 01:26:40,325 --> 01:26:43,250 1667 01:26:43,250 --> 01:26:44,880 Dit is net hoe jy dit doen. 1668 01:26:44,880 --> 01:26:47,160 >> AANGESIEN persent d sou druk as desimaal. 1669 01:26:47,160 --> 01:26:50,310 Dit is was ons kry persent d. Ek is net 'n heelgetal. 1670 01:26:50,310 --> 01:26:52,690 persent p is spesifiek vir wenke. 1671 01:26:52,690 --> 01:26:54,060 >> So x is 'n wyser. 1672 01:26:54,060 --> 01:26:56,360 Ons wil persent p te gebruik. 1673 01:26:56,360 --> 01:26:57,937 Maar persent x kon werk. 1674 01:26:57,937 --> 01:26:58,414 Ja? 1675 01:26:58,414 --> 01:26:59,664 >> Publiek: [onhoorbaar]? 1676 01:26:59,664 --> 01:27:04,138 1677 01:27:04,138 --> 01:27:05,388 >> ROB: Ja. 1678 01:27:05,388 --> 01:27:07,870 1679 01:27:07,870 --> 01:27:13,440 Ten minste vir hierdie call-- so ek het nie, sluit dit in hier. 1680 01:27:13,440 --> 01:27:19,850 Maar hierdie twee argumente noodwendig binnekant van die stapel raam 1681 01:27:19,850 --> 01:27:23,040 saam met 'n plaaslike veranderlikes printf gebeur word met behulp van. 1682 01:27:23,040 --> 01:27:27,020 En dan die volgende oproep tot nou printf binnekant van printf stapel raam is 1683 01:27:27,020 --> 01:27:33,960 persent p agteroorskuinsstreep N en wat die waarde van x is, wat is 0x123. 1684 01:27:33,960 --> 01:27:34,425 Ja? 1685 01:27:34,425 --> 01:27:35,675 >> Publiek: [onhoorbaar]? 1686 01:27:35,675 --> 01:27:38,145 1687 01:27:38,145 --> 01:27:40,880 >> ROB: Dit sal iets druk wat lyk soos hierdie. 1688 01:27:40,880 --> 01:27:41,846 >> Publiek: [onhoorbaar]. 1689 01:27:41,846 --> 01:27:44,510 >> ROB: So dit druk dit in posadres vorm. 1690 01:27:44,510 --> 01:27:47,003 Dit lyk soos 'n adres. 1691 01:27:47,003 --> 01:27:47,494 Ja? 1692 01:27:47,494 --> 01:27:49,458 >> Publiek: [onhoorbaar]? 1693 01:27:49,458 --> 01:27:51,075 >> ROB: Hoekom is wat? 1694 01:27:51,075 --> 01:27:52,920 >> Publiek: [onhoorbaar]? 1695 01:27:52,920 --> 01:27:55,240 >> ROB: Hoekom is dit wyser 4 grepe? 1696 01:27:55,240 --> 01:27:58,500 So is daar 'n hele klomp van 0's in die voorkant van hierdie. 1697 01:27:58,500 --> 01:28:03,740 So dit is regtig 0x0000000123. 1698 01:28:03,740 --> 01:28:06,510 Op 'n 64-bis-stelsel, sal daar 'n hele klomp van die meer nulle. 1699 01:28:06,510 --> 01:28:11,410 1700 01:28:11,410 --> 01:28:11,900 Ja? 1701 01:28:11,900 --> 01:28:13,150 >> Publiek: [onhoorbaar]. 1702 01:28:13,150 --> 01:28:17,290 1703 01:28:17,290 --> 01:28:21,130 >> ROB: So het die eerste printf gaan print-- 1704 01:28:21,130 --> 01:28:21,980 >> Publiek: [onhoorbaar]. 1705 01:28:21,980 --> 01:28:24,420 >> ROB: Ja, dit gaan te druk wat x dui op. 1706 01:28:24,420 --> 01:28:27,030 1707 01:28:27,030 --> 01:28:29,070 Star sê wat is hierdie ding te wys op. 1708 01:28:29,070 --> 01:28:30,300 Gryp dit. 1709 01:28:30,300 --> 01:28:31,455 So, wat is dit verwys na? 1710 01:28:31,455 --> 01:28:31,850 50. 1711 01:28:31,850 --> 01:28:32,410 Gryp dit. 1712 01:28:32,410 --> 01:28:33,390 Dit is wat ons gaan druk. 1713 01:28:33,390 --> 01:28:37,020 Terwyl die volgende een, ons is net druk x self. 1714 01:28:37,020 --> 01:28:38,850 Wat is die binnekant van f? 1715 01:28:38,850 --> 01:28:43,710 0x123. 1716 01:28:43,710 --> 01:28:44,500 OK. 1717 01:28:44,500 --> 01:28:46,620 >> En dan, uiteindelik, ons het die vrye. 1718 01:28:46,620 --> 01:28:48,040 Wat is ons verby te bevry? 1719 01:28:48,040 --> 01:28:49,470 Ons is verby x. 1720 01:28:49,470 --> 01:28:52,380 Daardie tyd het ek eintlik vertoon dit in die stapel raam. 1721 01:28:52,380 --> 01:28:56,370 >> So ons die waarde verby 0x123 te bevry. 1722 01:28:56,370 --> 01:28:59,070 So nou vry weet, al die regte, Ek het om te gaan na die hoop 1723 01:28:59,070 --> 01:29:00,050 en vry dat die geheue. 1724 01:29:00,050 --> 01:29:03,920 Dit is nie meer gebruik wat is by adres 0x123. 1725 01:29:03,920 --> 01:29:07,010 >> So vry gaan vry te laat wat van die wal. 1726 01:29:07,010 --> 01:29:09,490 Nou ons hoop is weer leeg. 1727 01:29:09,490 --> 01:29:11,120 Ons het geen geheue lekkasies. 1728 01:29:11,120 --> 01:29:12,940 Nou gratis sal terugkeer. 1729 01:29:12,940 --> 01:29:16,130 Let daarop dat x is nog 0x123. 1730 01:29:16,130 --> 01:29:18,240 Maar dit is nou nie geldig geheue. 1731 01:29:18,240 --> 01:29:21,220 1732 01:29:21,220 --> 01:29:23,986 Ons moet nie meer dereference x. 1733 01:29:23,986 --> 01:29:24,440 Ja? 1734 01:29:24,440 --> 01:29:27,240 >> Publiek: Is terugkeer 0 oorbodig? 1735 01:29:27,240 --> 01:29:28,290 >> ROB: Is returen 0 oorbodig? 1736 01:29:28,290 --> 01:29:31,110 Ja. 1737 01:29:31,110 --> 01:29:33,950 Ons het net sit dit daar, want Ons het 'n opbrengs een vir lug. 1738 01:29:33,950 --> 01:29:36,830 So dit is soos, ja, laat sluit die terugkeer 0. 1739 01:29:36,830 --> 01:29:37,310 Ja? 1740 01:29:37,310 --> 01:29:38,560 >> Publiek: [onhoorbaar]? 1741 01:29:38,560 --> 01:29:42,110 1742 01:29:42,110 --> 01:29:45,580 >> ROB: So na gratis x, wat gebeur as ons probeer om dereference die wyser? 1743 01:29:45,580 --> 01:29:47,240 Dit is moontlik dat daar niks verkeerd gaan. 1744 01:29:47,240 --> 01:29:49,330 Dit is moontlik dat ons nog kry 50. 1745 01:29:49,330 --> 01:29:53,590 >> Dit is moontlik, ook, dat die geheue is nou gebruik word vir iets anders. 1746 01:29:53,590 --> 01:29:57,140 So dit is nie gedefinieer gedrag. 1747 01:29:57,140 --> 01:30:00,772 En ongedefinieerde beteken niks kan gebeur. 1748 01:30:00,772 --> 01:30:01,250 Ja? 1749 01:30:01,250 --> 01:30:02,500 >> Publiek: [onhoorbaar]? 1750 01:30:02,500 --> 01:30:07,942 1751 01:30:07,942 --> 01:30:10,830 >> ROB: Nee, so as jy ken x na iets anders. 1752 01:30:10,830 --> 01:30:15,870 So as hier ons sê x is gelyk aan malloc iets else-- 1753 01:30:15,870 --> 01:30:17,100 malloc grootte event-- 1754 01:30:17,100 --> 01:30:20,180 dan dat die oorspronklike blok geheue nie bevry. 1755 01:30:20,180 --> 01:30:21,490 En ons het amptelik verloor. 1756 01:30:21,490 --> 01:30:23,150 Dit is 'n geheue lek. 1757 01:30:23,150 --> 01:30:25,090 Ons het alle verwysings verloor na die blok van die geheue. 1758 01:30:25,090 --> 01:30:26,827 So daar is geen manier wat ons ooit kan bevry nie. 1759 01:30:26,827 --> 01:30:32,074 1760 01:30:32,074 --> 01:30:36,630 OK, so dan terug 0 beteken gedoen. 1761 01:30:36,630 --> 01:30:37,900 >> Alle reg, sodat stapel oorloop. 1762 01:30:37,900 --> 01:30:39,320 Wat is die idee hier? 1763 01:30:39,320 --> 01:30:41,210 So onthou, is hoop om af te gaan. 1764 01:30:41,210 --> 01:30:43,480 Stapel gaan op. 1765 01:30:43,480 --> 01:30:48,000 So dit was die voorbeeld van lesing Ek dink, waar belangrikste is net gaan om te 1766 01:30:48,000 --> 01:30:51,380 noem hierdie funksie foo, wat gaan homself te rekursief noem oor en 1767 01:30:51,380 --> 01:30:52,320 weer. 1768 01:30:52,320 --> 01:30:55,370 >> So stapel rame gaan werk presies dieselfde. 1769 01:30:55,370 --> 01:30:58,130 So ons gaan begin met die belangrikste as die onderste stapel raam. 1770 01:30:58,130 --> 01:31:02,000 Dan hoof gaan cat te roep, wat gaan 'n stapel raam te kry. 1771 01:31:02,000 --> 01:31:04,260 >> Dan cat gaan cat te bel weer, wat die gang te kry 1772 01:31:04,260 --> 01:31:05,500 'n ander stapel raam. 1773 01:31:05,500 --> 01:31:08,270 En dan weer, en weer en weer, en weer totdat, uiteindelik, ons hardloop 1774 01:31:08,270 --> 01:31:09,190 in die hoop. 1775 01:31:09,190 --> 01:31:11,990 So dit is hoe ons 'n stapel oorloop. 1776 01:31:11,990 --> 01:31:14,910 En op hierdie punt, jy seg skuld. 1777 01:31:14,910 --> 01:31:17,335 Of jy wil regtig seg skuld voor hierdie punt, maar ja. 1778 01:31:17,335 --> 01:31:19,660 >> Publiek: Is die kern stort die dieselfde as seg skuld? 1779 01:31:19,660 --> 01:31:26,140 >> ROB: So jy sien segmentering skuld kern gestort. 1780 01:31:26,140 --> 01:31:28,760 Jy kry 'n stort wanneer jy seg skuld. 1781 01:31:28,760 --> 01:31:32,580 En dit is soos 'n stort van al die inhoud van jou huidige geheue, sodat 1782 01:31:32,580 --> 01:31:36,670 wat jy kan probeer en identifiseer waarom jy seg myn. 1783 01:31:36,670 --> 01:31:37,135 Ja? 1784 01:31:37,135 --> 01:31:38,385 >> Publiek: [onhoorbaar]? 1785 01:31:38,385 --> 01:31:40,855 1786 01:31:40,855 --> 01:31:45,460 >> ROB: So 'n segmentering skuld middel daar is 'n stapel oorloop. 1787 01:31:45,460 --> 01:31:47,060 So nie noodwendig nie. 1788 01:31:47,060 --> 01:31:49,880 'N segmentering skuld beteken dat jy raak geheue op 'n manier 1789 01:31:49,880 --> 01:31:50,880 jy moet nie. 1790 01:31:50,880 --> 01:31:54,750 So 'n manier dat dit sal gebeur is, toe jy stapel oorloop, ons begin raak 1791 01:31:54,750 --> 01:31:58,736 geheue in 'n manier wat ons nie moet wees nie. 1792 01:31:58,736 --> 01:31:59,208 Ja? 1793 01:31:59,208 --> 01:32:00,458 >> Publiek: [onhoorbaar]? 1794 01:32:00,458 --> 01:32:03,456 1795 01:32:03,456 --> 01:32:05,830 >> ROB: So binnekant van 'n oneindige lus. 1796 01:32:05,830 --> 01:32:08,770 Soos dit is soos 'n rekursiewe oneindige lus en so kry ons 'n ander 1797 01:32:08,770 --> 01:32:09,770 stapel raam elke keer. 1798 01:32:09,770 --> 01:32:13,540 Maar net binnekant van 'n gereelde oneindige terwyl one-- 1799 01:32:13,540 --> 01:32:16,390 Wel, laat ons nie eens druk f-- 1800 01:32:16,390 --> 01:32:17,040 iets te doen. 1801 01:32:17,040 --> 01:32:18,390 Wat ook al. 1802 01:32:18,390 --> 01:32:20,610 >> Ons gaan nie te wees om 'n ander stapel raam. 1803 01:32:20,610 --> 01:32:22,530 Ons gaan net herhaling te hou oor hierdie enkele opdrag. 1804 01:32:22,530 --> 01:32:23,920 Die stapel is nie groei. 1805 01:32:23,920 --> 01:32:27,290 Dit is die feit dat elke rekursiewe oproep gee ons 'n stapel raam. 1806 01:32:27,290 --> 01:32:31,231 Dit is hoekom ons 'n stapel oorloop. 1807 01:32:31,231 --> 01:32:31,728 Ja? 1808 01:32:31,728 --> 01:32:38,189 >> Publiek: So as jy sê die te kry while lus en dan [onhoorbaar]? 1809 01:32:38,189 --> 01:32:42,000 >> ROB: So as die binnekant van die while lus daar was 'n printf, sou jy nog steeds 1810 01:32:42,000 --> 01:32:42,790 nie seg skuld. 1811 01:32:42,790 --> 01:32:46,090 Ek het net nie wil dinge verwar. 1812 01:32:46,090 --> 01:32:46,610 Dit sou loop. 1813 01:32:46,610 --> 01:32:48,225 Jy wil 'n enkele stapel kry raam vir die printf. 1814 01:32:48,225 --> 01:32:49,580 >> Dan printf sou terugkeer. 1815 01:32:49,580 --> 01:32:50,280 Dan moet jy lus weer. 1816 01:32:50,280 --> 01:32:51,460 Jy wil 'n enkele stapel kry raam vir die printf. 1817 01:32:51,460 --> 01:32:52,850 Dit sou terugkeer. 1818 01:32:52,850 --> 01:32:54,060 Enkele stapel raam. 1819 01:32:54,060 --> 01:33:00,215 So jy kry nie hierdie oneindige ophoop stapel rame. 1820 01:33:00,215 --> 01:33:03,185 >> Publiek: [onhoorbaar]? 1821 01:33:03,185 --> 01:33:04,040 >> ROB: Ja. 1822 01:33:04,040 --> 01:33:09,360 So hierdie stapel oorloop gebeur want nie een van hierdie 1823 01:33:09,360 --> 01:33:11,600 oproepe na cat terugkeer. 1824 01:33:11,600 --> 01:33:15,250 So as ons terugkeer, dan sou ons begin verloor stapel rame. 1825 01:33:15,250 --> 01:33:17,870 En dan sou ons nie stapel oorloop. 1826 01:33:17,870 --> 01:33:20,070 En dit is die rede waarom jy nodig het om 'n basis geval vir jou persoonlike funksies. 1827 01:33:20,070 --> 01:33:22,992 1828 01:33:22,992 --> 01:33:23,479 Ja? 1829 01:33:23,479 --> 01:33:27,375 >> Publiek: Is die potensiaal grootte en die stapel vir die hoop dieselfde vir 1830 01:33:27,375 --> 01:33:29,880 alle programme? 1831 01:33:29,880 --> 01:33:31,910 >> ROB: Ongeveer. 1832 01:33:31,910 --> 01:33:35,090 Is die potensiaal grootte van die stapel en die hoop dieselfde vir alle programme? 1833 01:33:35,090 --> 01:33:37,180 Sowat. 1834 01:33:37,180 --> 01:33:40,080 Daar is 'n paar randomisatietechnieken te waar die stapel begin en 1835 01:33:40,080 --> 01:33:42,400 waar die hoop begin. 1836 01:33:42,400 --> 01:33:45,870 As jy 'n hele klomp van die te hê globale veranderlikes en dinge, kan jy 1837 01:33:45,870 --> 01:33:49,520 weg te neem van 'n ruimte vir jou hoop. 1838 01:33:49,520 --> 01:33:54,060 >> Op 'n 64-bis-stelsel, kan jy feitlik oneindige geheue. 1839 01:33:54,060 --> 01:33:55,820 Daar is net so baie. 1840 01:33:55,820 --> 01:33:59,250 Tussen 32 en 64 stukkies stukkies, wat is 'n groot verskil. 1841 01:33:59,250 --> 01:34:02,350 >> Jy gaan 'n hele klomp meer kry stapel en hoop ruimte op 'n 64-bit 1842 01:34:02,350 --> 01:34:05,810 stelsel, want daar is net meer spreek wat hulle kan gebruik. 1843 01:34:05,810 --> 01:34:09,360 Maar op 'n individuele stelsel, sal dit wees min of meer dieselfde bedrag van stapel 1844 01:34:09,360 --> 01:34:10,785 en hoop ruimte. 1845 01:34:10,785 --> 01:34:13,635 1846 01:34:13,635 --> 01:34:15,530 Alle regte. 1847 01:34:15,530 --> 01:34:18,220 >> So laaste ding is samestelling. 1848 01:34:18,220 --> 01:34:19,810 So moet jy hierdie proses leer ken. 1849 01:34:19,810 --> 01:34:22,240 Daar is vier groot stappe. 1850 01:34:22,240 --> 01:34:24,400 Dus moet die eerste een maklik wees om te onthou. 1851 01:34:24,400 --> 01:34:25,085 Pre-verwerking. 1852 01:34:25,085 --> 01:34:28,390 Dit het die voorvoegsel pre in dit. 1853 01:34:28,390 --> 01:34:32,080 So dit kom voor alles anders. 1854 01:34:32,080 --> 01:34:34,000 >> Die ding om te onthou is die hash. 1855 01:34:34,000 --> 01:34:37,250 So hash definieer en hash sluit in al daardie. 1856 01:34:37,250 --> 01:34:39,560 Dit is al die pre-verwerker voorskrifte. 1857 01:34:39,560 --> 01:34:42,030 Dit is die dinge wat die pre-verwerker sorg. 1858 01:34:42,030 --> 01:34:43,680 >> So, wat nie 'n pre-verwerker doen? 1859 01:34:43,680 --> 01:34:44,850 Dit is 'n baie dom ding. 1860 01:34:44,850 --> 01:34:49,380 Al wat dit is in staat om is om al hierdie afskrif, en sny, en plak. 1861 01:34:49,380 --> 01:34:51,790 >> So hash sluit standaard I0 dot h. 1862 01:34:51,790 --> 01:34:52,990 Wat is dat dit te doen? 1863 01:34:52,990 --> 01:34:56,610 Dit gryp die standaard I0 dot h lêer en plak dit in die top 1864 01:34:56,610 --> 01:34:58,960 waar dit sê hash sluit standaard I0 dot h. 1865 01:34:58,960 --> 01:35:02,480 >> En enige gemors definieer wat ons het gesien het, is wat dit doen? 1866 01:35:02,480 --> 01:35:06,730 Die kopiëring van die waarde wat die hash gedefinieer word gedefinieer as en plak dat 1867 01:35:06,730 --> 01:35:08,500 waar jy is met behulp van die waarde. 1868 01:35:08,500 --> 01:35:13,400 So het die voorverwerker nie net regtig eenvoudige teks gebaseerde bedrywighede. 1869 01:35:13,400 --> 01:35:15,870 Dit doen niks smart. 1870 01:35:15,870 --> 01:35:18,920 So alles is meer ingewikkeld. 1871 01:35:18,920 --> 01:35:22,970 >> So nou dat voorverwerker is gedaan, ons eintlik stel. 1872 01:35:22,970 --> 01:35:24,320 So wat beteken die samestelling beteken? 1873 01:35:24,320 --> 01:35:27,310 Ons gaan nou van c-kode te vergadering kode. 1874 01:35:27,310 --> 01:35:27,570 Ja? 1875 01:35:27,570 --> 01:35:28,820 >> Publiek: [onhoorbaar]? 1876 01:35:28,820 --> 01:35:32,390 1877 01:35:32,390 --> 01:35:34,220 >> ROB: Ja, ons gevang. 1878 01:35:34,220 --> 01:35:36,880 1879 01:35:36,880 --> 01:35:38,660 So opstel van. 1880 01:35:38,660 --> 01:35:40,310 Ons gaan van C na die gemeente. 1881 01:35:40,310 --> 01:35:42,470 So, dit is 'n werklike taal verandering. 1882 01:35:42,470 --> 01:35:45,240 Opstel van self beteken gaan van 'n hoër vlak taal 1883 01:35:45,240 --> 01:35:47,340 'n laer vlak taal. 1884 01:35:47,340 --> 01:35:50,720 >> En c is 'n hoë vlak taal in vergelyking met die gemeente. 1885 01:35:50,720 --> 01:35:52,320 Wat is die gemeente? 1886 01:35:52,320 --> 01:35:56,440 Die instruksies wat, mooi baie, gemaak vir jou CPU. 1887 01:35:56,440 --> 01:35:59,130 Maar jou rekenaar nog steeds nie verstaan ​​nie die gemeente. 1888 01:35:59,130 --> 01:36:01,570 Hulle verstaan ​​net kinders en nulle. 1889 01:36:01,570 --> 01:36:06,160 So die volgende stap is die samestelling, wat bring ons by die instruksies wat 1890 01:36:06,160 --> 01:36:08,760 jou CPU verstaan ​​en eintlik vertaal hulle te 1891 01:36:08,760 --> 01:36:10,820 die kinders en nulle. 1892 01:36:10,820 --> 01:36:13,570 >> So C te vergadering te binêre. 1893 01:36:13,570 --> 01:36:15,870 Maar ek het nie 'n uitvoerbare nog nie. 1894 01:36:15,870 --> 01:36:19,550 So dink die cs50 biblioteek. 1895 01:36:19,550 --> 01:36:23,070 Ons het jou voorsien van 'n binêre vir hierdie cs50 biblioteek, wat GetString 1896 01:36:23,070 --> 01:36:24,400 en GetInt en alles wat. 1897 01:36:24,400 --> 01:36:25,700 >> Maar die cs50 library-- 1898 01:36:25,700 --> 01:36:27,650 in en van die itself-- is nie uitvoerbaar nie. 1899 01:36:27,650 --> 01:36:29,570 Dit hoef nie 'n hoof-funksie. 1900 01:36:29,570 --> 01:36:32,230 Dit is net 'n klomp van die binêre wat jy kan gebruik. 1901 01:36:32,230 --> 01:36:41,730 So 'n skakel is hoe ons saam te bring al van hierdie verskillende binêre lêers 1902 01:36:41,730 --> 01:36:43,110 in 'n werklike uitvoerbare. 1903 01:36:43,110 --> 01:36:45,900 Een wat jy kan tik dot streep 'n dot uit. 1904 01:36:45,900 --> 01:36:51,660 >> So dit is soos die lêer wat jy geskryf het, - wat jou program is-- 1905 01:36:51,660 --> 01:36:53,620 Caesar dot c. 1906 01:36:53,620 --> 01:36:55,100 Maar nou is dit is saamgestel af te binêre. 1907 01:36:55,100 --> 01:36:56,480 So Caesar dot o. 1908 01:36:56,480 --> 01:36:59,620 En dit is ons cs50 biblioteke binêre. 1909 01:36:59,620 --> 01:37:02,284 En hulle word gekombineer in 'n enkele uitvoerbare. 1910 01:37:02,284 --> 01:37:02,758 Ja? 1911 01:37:02,758 --> 01:37:04,008 >> Publiek: [onhoorbaar]? 1912 01:37:04,008 --> 01:37:08,800 1913 01:37:08,800 --> 01:37:12,710 >> ROB: So eerste sluit, onthou, die hash sluit is eintlik 'n 1914 01:37:12,710 --> 01:37:13,810 pre-verwerker stap. 1915 01:37:13,810 --> 01:37:14,750 Maar dit is apart. 1916 01:37:14,750 --> 01:37:20,730 As jy nie die gebruik van enige funksies wat is buite jou enkele lêer dan 1917 01:37:20,730 --> 01:37:26,100 Nee, jy hoef nie iets te koppel want jy het alles. 1918 01:37:26,100 --> 01:37:30,310 >> Dit gesê, printf word gekoppel. 1919 01:37:30,310 --> 01:37:32,820 As jy al ooit gebruik printf, dit is iets wat wat moet in gekoppel word 1920 01:37:32,820 --> 01:37:35,740 omdat jy nie skryf nie. 1921 01:37:35,740 --> 01:37:39,530 En, in werklikheid, printf is outomaties gekoppel. 1922 01:37:39,530 --> 01:37:42,760 Jy weet hoe om by die command line of wanneer Jy tik maak, sien jy dit het 1923 01:37:42,760 --> 01:37:46,690 Dash l cs50, wat skakel in die cs50 biblioteek? 1924 01:37:46,690 --> 01:37:49,070 Printf, en dinge soos wat, gaan word outomaties gekoppel. 1925 01:37:49,070 --> 01:37:51,730 1926 01:37:51,730 --> 01:37:53,930 Enige ander vrae oor enigiets? 1927 01:37:53,930 --> 01:37:56,280 >> Publiek: [onhoorbaar]? 1928 01:37:56,280 --> 01:37:58,300 >> ROB: skakel? 1929 01:37:58,300 --> 01:38:03,450 Ons het 'n hele klomp van die verskillende binêre lêers. 1930 01:38:03,450 --> 01:38:06,410 Dit is die kanonieke voorbeeld wat ons gebruik is cs50 biblioteek. 1931 01:38:06,410 --> 01:38:09,960 Ons het saamgestel en aan jou gegee die binêre vir hierdie cs50 biblioteek. 1932 01:38:09,960 --> 01:38:12,410 >> Jy wil GetString te gebruik in jou program. 1933 01:38:12,410 --> 01:38:14,750 So jy gaan en gebruik GetString. 1934 01:38:14,750 --> 01:38:19,700 Maar sonder my binêre kode vir GetString, wanneer jy jou kode stel 1935 01:38:19,700 --> 01:38:23,140 af, kan jy nie self jou program, want GetString String is 1936 01:38:23,140 --> 01:38:25,080 nog nie volledig omskryf. 1937 01:38:25,080 --> 01:38:29,220 >> Dit is eers wanneer jy 'n skakel in my binêre wat bevat GetString wat nou al 1938 01:38:29,220 --> 01:38:31,130 reg, ek kan eintlik voer GetString. 1939 01:38:31,130 --> 01:38:32,330 My lêer is voltooi. 1940 01:38:32,330 --> 01:38:34,208 En ek kan loop nie. 1941 01:38:34,208 --> 01:38:34,697 Ja? 1942 01:38:34,697 --> 01:38:37,631 >> Publiek: Is die kombinering omskep die binêre uitvoerbare? 1943 01:38:37,631 --> 01:38:42,032 So selfs as jy nie ander nie biblioteke, sou dit nie nog steeds 1944 01:38:42,032 --> 01:38:44,477 nodig is om te vertaal die [onhoorbaar]? 1945 01:38:44,477 --> 01:38:48,640 >> ROB: So 'n uitvoerbare is steeds in binêre. 1946 01:38:48,640 --> 01:38:51,750 Dit is net die kombinasie van 'n hele n klomp van die program. 1947 01:38:51,750 --> 01:38:55,124 1948 01:38:55,124 --> 01:38:56,591 >> Publiek: Baie dankie. 1949 01:38:56,591 --> 01:38:58,560 >> ROB: Geen probleem. 1950 01:38:58,560 --> 01:38:59,540 Enige ander vrae? 1951 01:38:59,540 --> 01:39:02,001 Andersins, ons almal stel. 1952 01:39:02,001 --> 01:39:02,690 Alle regte. 1953 01:39:02,690 --> 01:39:02,990 Dankie. 1954 01:39:02,990 --> 01:39:03,590 >> [Applous] 1955 01:39:03,590 --> 01:39:04,490 >> GEHOOR: Dankie. 1956 01:39:04,490 --> 01:39:05,740 >> ROB: Ja. 1957 01:39:05,740 --> 01:39:06,582