1 00:00:00,000 --> 00:00:02,310 [Powered by Google Translate] [Vika 4, Áframhaldandi] 2 00:00:02,310 --> 00:00:04,240 [David J. Malan - Harvard University] 3 00:00:04,240 --> 00:00:07,290 [Þetta er CS50. - CS50.TV] 4 00:00:07,290 --> 00:00:11,290 >> Þetta er CS50, og það er í lok 4. viku. 5 00:00:11,290 --> 00:00:14,030 Svo sumir góðar fréttir og slæmar fréttir. 6 00:00:14,030 --> 00:00:26,240 Enginn fyrirlestur á mánudag, ekkert mál að setja í næstu viku. [Nemendur uppörvandi] 7 00:00:26,240 --> 00:00:28,680 Þú ert ekki að fara að eins og hvar það er að fara. 8 00:00:28,680 --> 00:00:31,590 En við höfum þetta í staðinn næsta Miðvikudagur, 9 00:00:31,590 --> 00:00:37,740 og það er einnig á kennsluáætlun 1 Föstudagur fyrirlestri á föstudaginn svo að við getum verið á beinu brautinni. 10 00:00:37,740 --> 00:00:40,580 En allt verður tekið eins og venjulega, svo ekki hafa áhyggjur. 11 00:00:40,580 --> 00:00:44,100 >> Og með tilliti til quiz 0 hvað við munum gera til enda viku 12 00:00:44,100 --> 00:00:47,140 er staða á cs50.net heimasíðu Námskeiðið er varða 13 00:00:47,140 --> 00:00:50,160 á hvaða tegund af væntingum sem þú ættir að hafa þegar það kemur að fyrsta próf. 14 00:00:50,160 --> 00:00:55,100 Almennt, það verður krossapróf, rétt-rangt, stutt svar, stutt kóðun vandamál. 15 00:00:55,100 --> 00:00:57,360 Þú ert ekki að fara að gera ráð fyrir að framkvæma samsvarandi 16 00:00:57,360 --> 00:01:00,030 um vandamál sem þú vilt sjá á pset, sem þú ert með tölvu 17 00:01:00,030 --> 00:01:03,240 og aflúsara og þess háttar, en það verður að vera smá kóðun vandamál. 18 00:01:03,240 --> 00:01:06,900 >> Og reyndar er besta fylgja til að fá tilfinningu fyrir því hvað CS50 test eins 19 00:01:06,900 --> 00:01:09,180 er að fara til cs50.net, fara í Skyndipróf tengilinn, 20 00:01:09,180 --> 00:01:11,920 og þú getur séð á undanförnum ár virði af Skyndipróf. 21 00:01:11,920 --> 00:01:16,600 Bara átta sig á því að námskrá hafi ekki alltaf verið það sama í gegnum árin. 22 00:01:16,600 --> 00:01:18,510 Stundum erum við að bæta, stundum leggja 23 00:01:18,510 --> 00:01:20,670 þannig að ef þú sérð einhvern þráð á einn af þessum gömlu Skyndipróf 24 00:01:20,670 --> 00:01:25,380 að þú hefur ekki hugmynd um hvað það er að tala um, er það hvort að við vildum ná því 25 00:01:25,380 --> 00:01:27,210 eða að við höfum ekki ná því. 26 00:01:27,210 --> 00:01:31,110 En í formi umsagna, á sunnudaginn, mánudaginn, og Þriðjudagur 27 00:01:31,110 --> 00:01:34,770 auk að sjálfsögðu alls endurskoðun fundur á sunnudaginn nótt - 28 00:01:34,770 --> 00:01:37,500 tíma og stað til að tilkynna á heimasíðu Námskeiðið er - 29 00:01:37,500 --> 00:01:40,120 þú hefur öll tækifæri til að endurskoða og félagar kennslu á námskeiðinu er 30 00:01:40,120 --> 00:01:44,830 efni á þessu ári, bæði í kafla og eins og fullt bekknum, 31 00:01:44,830 --> 00:01:48,400 og þá verða teknar eins og venjulega eins og heilbrigður. 32 00:01:48,400 --> 00:01:53,380 >> Allt í lagi. Svo án frekari fjaðrafok, ein athugasemd um staðið / ekki staðið og bæta við / falla. 33 00:01:53,380 --> 00:01:57,980 Þú gætir hafa séð minnisblöð í gærkvöldi, og þetta er í raun bara viðbót fullvissu 34 00:01:57,980 --> 00:02:01,250 að ef þú ert meðal þeirra sérstaklega minna þægilegt eða einhvers staðar þar á milli 35 00:02:01,250 --> 00:02:04,870 og þú ert að tilfinning bara smá í yfir höfuðið, 36 00:02:04,870 --> 00:02:08,430 átta sig á því er örugglega alveg eðlilegt, og það er nægur stuðningur uppbygging í stað, 37 00:02:08,430 --> 00:02:13,530 einn sem skrifstofutímarnir ætluðu sér að bæta allt meira á tölvupósti í gærkvöldi mínum, 38 00:02:13,530 --> 00:02:16,520 og átta sig líka að valkostur eins staðið / ekki fyrir flokk eins og þetta 39 00:02:16,520 --> 00:02:21,540 raunverulega er ætlað sem kerfi til að taka á brún burt af sjálfsögðu eins og þetta, 40 00:02:21,540 --> 00:02:24,200 svo aftur ef þú ert að eyða þeim 10, 15, 20 klst 41 00:02:24,200 --> 00:02:28,160 bara að reyna að fá smá pset að vinna og þú veist að þú ert 90-95% af leiðinni þangað 42 00:02:28,160 --> 00:02:32,100 en þú getur ekki fundið einhverja helvítis padda, í framhjá / mistakast líkan sem er tegund af lagi. 43 00:02:32,100 --> 00:02:36,230 >> Hugmyndin er sú að með því kerfi sem þú getur þá farið fókus á öðrum psets þínum 44 00:02:36,230 --> 00:02:39,530 eða sofa eða hvað sem það er sem þú vilt leggja áherslu á. 45 00:02:39,530 --> 00:02:43,390 Svo ljóst að þú hefur til þessa komandi þriðjudagur - tæknilega 5. Mánudagur, 46 00:02:43,390 --> 00:02:50,840 en það er frí, þannig að þetta kemur Þriðjudagur - að skipta úr staðið / ekki að farið eða öfugt. 47 00:02:50,840 --> 00:02:54,450 Og ef þú ert í raun á heljarþröm og eru að hugsa um að sleppa alveg, 48 00:02:54,450 --> 00:02:56,440 vinsamlegast skilið mig eftir fyrirlestri eða sendu mér minnismiða. 49 00:02:56,440 --> 00:02:59,990 Við viljum gjarnan að minnsta kosti spjall áður en tilboð adieu. 50 00:02:59,990 --> 00:03:03,470 Allt í lagi. Svo við byrjuðum að taka þjálfun hjól á síðasta tíma. 51 00:03:03,470 --> 00:03:06,030 Einkum, með áherslu við á band. 52 00:03:06,030 --> 00:03:09,740 Band er eitthvað sem er lýst í CS50 bókasafn, 53 00:03:09,740 --> 00:03:14,340 sérstaklega í þeirri skrá sem heitir cs50.h sem við munum byrja að líta á í þessari viku og næstu. 54 00:03:14,340 --> 00:03:17,250 En strengur er í raun bara einföldun á eitthvað 55 00:03:17,250 --> 00:03:20,980 það er a lítill fleiri arcanely lýst sem char *. 56 00:03:20,980 --> 00:03:24,090 Bleikju við erum kunnugir. Það er bara einn stafur. 57 00:03:24,090 --> 00:03:28,010 En * frá Mánudagur táknað hvað? >> [Nemandi] A músina. 58 00:03:28,010 --> 00:03:31,290 A músina. Og hvað er bendi? >> [Nemandi] An heimilisfang. 59 00:03:31,290 --> 00:03:33,420 >> Það er eins og heimilisfang, stað í minni. 60 00:03:33,420 --> 00:03:35,910 Hvað er heimilisfang eða staðsetningu eða minni? 61 00:03:35,910 --> 00:03:40,290 Aftur, hafa allir af okkur fartölvur með tónleikum eða 2 gígabæta vinnsluminni líklega þessa dagana, 62 00:03:40,290 --> 00:03:44,160 og það þýðir að þú ert með milljarð eða 2 milljarða bæti virði af minni. 63 00:03:44,160 --> 00:03:46,240 Og það skiptir ekki máli hvað það lítur líkamlega út, 64 00:03:46,240 --> 00:03:51,220 en taka á trú að þú getur Númer einstakra bæti sem eiga fartölvu hefur - 65 00:03:51,220 --> 00:03:54,580 þetta er bæti 0, þetta er bæti 1, þetta er bæti 2 milljarðar - 66 00:03:54,580 --> 00:03:56,100 og það er einmitt það sem tölvan gerir. 67 00:03:56,100 --> 00:04:00,030 Þegar þú úthluta pláss fyrir einn staf, til dæmis, 68 00:04:00,030 --> 00:04:02,480 það hefur augljóslega til að búa einhvers staðar í minni tölvunnar, 69 00:04:02,480 --> 00:04:05,860 og kannski er það á fjölda bæti 12345, 70 00:04:05,860 --> 00:04:08,470 og það er einhvers staðar hérna í minni tölvunnar. 71 00:04:08,470 --> 00:04:12,630 Og heimilisfang svo að þessi karakter er 12345. 72 00:04:12,630 --> 00:04:16,140 >> Nú, í viku 0 gegnum nú svona langt, höfum við í raun ekki aðgát 73 00:04:16,140 --> 00:04:19,170 hvar í hlutum minni er geymd vegna þess að við notum venjulega tákn, 74 00:04:19,170 --> 00:04:22,540 breytur, og fylki til raunverulega fá á okkar gögn. 75 00:04:22,540 --> 00:04:24,950 En eins og á mánudag og allt meira í dag, ætlar þú nú að fara að hafa 76 00:04:24,950 --> 00:04:27,710 allt meira svipmikill hæfileiki með að skrifa forrit 77 00:04:27,710 --> 00:04:31,330 að virkilega vinna minni a tölva 'en þú sýnist, 78 00:04:31,330 --> 00:04:33,720 bæði góðum tilgangi og slæmt, 79 00:04:33,720 --> 00:04:39,620 bugs vera mjög algeng afleiðing á þessum tímapunkti í að læra þetta efni. 80 00:04:39,620 --> 00:04:42,460 En hvað þýðir það í raun að vera char *? 81 00:04:42,460 --> 00:04:46,140 Við skulum fara á undan aftur - og við munum koma aftur til Binky eins og lofað í dag. 82 00:04:46,140 --> 00:04:48,670 Við skulum fara í einfalt dæmi hér. 83 00:04:48,670 --> 00:04:53,060 Leyfðu mér að vista þessa skrá sem compare.c, og láta mig fá bara sumir sniðmát kóða hér 84 00:04:53,060 --> 00:05:00,490 svo eru stdio.h, láta mig gefa einnig sjálfur ma cs50.h. Ég stækka í allt þarna. 85 00:05:00,490 --> 00:05:05,850 Leyfðu mér að byrja að skrifa helstu int main (tóm), og nú vil ég gera eitthvað eins og this: 86 00:05:05,850 --> 00:05:13,520 printf ("Gefðu mér band") og þá mun ég nota s STRING fær GetString 87 00:05:13,520 --> 00:05:16,750 að fá band frá notanda, svo ég ætla að spyrja notanda um annað. 88 00:05:16,750 --> 00:05:21,870 ("Gefðu mér annan streng:") og ég ætla að biðja þá um GetString að fá það. 89 00:05:21,870 --> 00:05:27,020 Ég kalla það t Þar sem T kemur eftir s og s er gott nafn á streng ef það er nokkuð almenn. 90 00:05:27,020 --> 00:05:30,030 Svo GetString, og nú vil ég bara að gera geðheilsu stöðva og ég ætla að segja 91 00:05:30,030 --> 00:05:39,770 if (s == T) þá er ég bara að fara að segja að notandinn printf ("Þú gafst það sama \ n"); 92 00:05:39,770 --> 00:05:45,520 annað sem ég er að fara að prenta út eitthvað eins og ("þú gafst eitthvað öðruvísi! \ n") 93 00:05:45,520 --> 00:05:48,460 eða hvað setningin verður. Svo eitthvað svoleiðis. 94 00:05:48,460 --> 00:05:52,200 Þá eins og venjulega, ég aftur 0 en bara signified að ekkert slæmt gerðist, 95 00:05:52,200 --> 00:05:54,400 og ég ætla að halda áfram og safna saman og keyra þetta forrit. 96 00:05:54,400 --> 00:05:56,540 >> En á mánudaginn förum við rann þetta forrit, 97 00:05:56,540 --> 00:06:00,420 og reyndar var sagt að HELLO ekki HELLO og Bless er ekki bless. 98 00:06:00,420 --> 00:06:03,140 Hegðun við sáum var aðeins meira svona. 99 00:06:03,140 --> 00:06:11,450 Leyfðu mér að fara inn í skrá uppspretta minn, zoom hér, og við skulum gera bera. 100 00:06:11,450 --> 00:06:14,570 Tekið lagi. Ég ætla að hlaupa saman. Gefðu mér band: HELLO. 101 00:06:14,570 --> 00:06:16,300 Gefðu mér annan streng: HELLO. 102 00:06:16,300 --> 00:06:18,000 Þú slóst eitthvað annað! 103 00:06:18,000 --> 00:06:22,650 Jæja, láttu mig reyna eitthvað einfaldara eins og 50, 50. Þú slóst eitthvað annað! 104 00:06:22,650 --> 00:06:25,740 hi, hi. Svo greinilega, eitthvað er að gerast hér. 105 00:06:25,740 --> 00:06:28,440 En hvað var skýringin fyrir því hvers vegna? 106 00:06:28,440 --> 00:06:33,850 Apparently, lína 12 er alveg dysfunctional. 107 00:06:34,300 --> 00:06:39,430 Hver er grundvallar vandamál hér? Já. >> [Nemandi] Það er að bera saman tölur. 108 00:06:39,430 --> 00:06:41,850 Já, nákvæmlega. Það er í raun að bera saman heimilisföng 109 00:06:41,850 --> 00:06:44,580 sem HELLO og HELLO eru geymdar. 110 00:06:44,580 --> 00:06:48,290 Það er ekki að bera saman bréf Halló aftur og aftur, 111 00:06:48,290 --> 00:06:52,370 vegna þess að það er í raun gerðist, allan þennan tíma sem við höfum verið að nota GetString - 112 00:06:52,370 --> 00:06:56,130 Þetta Blackboard er aftur minni tölva okkar, 113 00:06:56,130 --> 00:07:00,100 og við skulum segja að ég kalla GetString eftir að lýsa breytilega s. 114 00:07:00,100 --> 00:07:01,930 Hvað er minnið mitt að líta út? 115 00:07:01,930 --> 00:07:07,070 Segjum geðþótta að s lítur svona út. Það er ferningur. 116 00:07:07,070 --> 00:07:09,040 Og nánast hvert sinn sem ég hef dregið stykki af minni á skjánum 117 00:07:09,040 --> 00:07:12,860 Ef það er 32 bita sem ég hef verið að teikna ferninga eins og þetta vegna þess að örugglega í tækið, 118 00:07:12,860 --> 00:07:17,380 bendi, netfang, er 32 bita. Það er sama sem int. 119 00:07:17,380 --> 00:07:19,420 Það getur verið byggt á kerfi tölva. 120 00:07:19,420 --> 00:07:24,630 Þau ykkar sem eru óljóst kunnugt þá staðreynd að Mac eða PC er 64 bita, 121 00:07:24,630 --> 00:07:28,120 sem táknar í raun að tölvan þín sé að nota 64-bita punkta, 122 00:07:28,120 --> 00:07:33,730 64-bita tölur og meðal upsides af því er tölvur 123 00:07:33,730 --> 00:07:35,560 getur haft miklu meira vinnsluminni en fyrra. 124 00:07:35,560 --> 00:07:39,240 Long saga stutt, aftur í dag þegar tölvur nota aðeins 32 bita 125 00:07:39,240 --> 00:07:42,740 að tákna tölur, stærsti fjöldi bytes þú gætir tákna 126 00:07:42,740 --> 00:07:46,280 í því tilfelli var það ef þú ert með 32 bita? 127 00:07:46,280 --> 00:07:49,590 Svo 4 milljörðum, ekki satt, því að 2 til 32 er 4 milljarðar króna. 128 00:07:49,590 --> 00:07:51,370 Þessi tala hefur verið endurteknar í námskeiðinu. 129 00:07:51,370 --> 00:07:55,240 >> Svo ef þú ert bara 32 bita, hæsta númerið sem þú getur treyst á er u.þ.b. 4 milljarða. 130 00:07:55,240 --> 00:07:58,750 En það var grundvallaratriði takmörkun tölvum þar til fyrir nokkrum árum síðan 131 00:07:58,750 --> 00:08:01,180 því ef þú getur aðeins treyst eins hátt og 4 milljarða 132 00:08:01,180 --> 00:08:05,270 það skiptir ekki máli ef þú kaupir 8 gígabæta vinnsluminni eða jafnvel 5 gígabæta vinnsluminni; 133 00:08:05,270 --> 00:08:07,780 þú getur ekki treyst því að hár, þannig að það var gagnslaust. 134 00:08:07,780 --> 00:08:11,430 Þú gætir bara sjá fyrstu 3 eða 4 gígabæta af minni tölvunnar. 135 00:08:11,430 --> 00:08:14,410 Það er minna mál núna, og þú getur keypt MacBook Pros og Dells 136 00:08:14,410 --> 00:08:17,680 með 8 gígabæta vinnsluminni eða jafnvel meira þessa dagana. 137 00:08:17,680 --> 00:08:24,100 En ef ég úthluta einfaldlega í þessari áætlun bendi, bendi heitir s, 138 00:08:24,100 --> 00:08:28,370 Það getur litið svona á skjánum því reyndar að við þurfum að afhýða aftur þetta lag. 139 00:08:28,370 --> 00:08:33,520 Ég að halda áfram að segja band, en frá Mánudagur, band er mjög char *, 140 00:08:33,520 --> 00:08:35,590 heimilisfang einhvern staf. 141 00:08:35,590 --> 00:08:39,280 Svo skulum taka þessi þjálfun hjól burt jafnvel þó að við munum halda áfram að nota GetString fyrir nú. 142 00:08:39,280 --> 00:08:42,600 Þannig að ég hef lýst er, og þetta er klumpur af minni, 32 bita. 143 00:08:42,600 --> 00:08:47,370 Hvað er hér í minni sjálfgefið? >> [Inaudible nemandi svar] 144 00:08:47,370 --> 00:08:50,040 Hvað er það? >> [Nemandi] Sorp. >> Sorp. Einmitt. 145 00:08:50,040 --> 00:08:54,610 Ef þú forritari setur ekki gildi í breytu, sem veit hvað það er? 146 00:08:54,610 --> 00:08:57,990 Stundum þú færð heppinn og það er 0, sem er góður af a ágætur, hreinn sjálfgefið gildi, 147 00:08:57,990 --> 00:09:00,310 En eins og við sáum Mánudagur, stundum er það heill bull, 148 00:09:00,310 --> 00:09:04,130 sumir mjög stór jákvæð eða neikvæð tala sem kom þar? 149 00:09:05,350 --> 00:09:07,010 Já. >> [Nemandi] Hlutverk áður. >> Já. 150 00:09:07,010 --> 00:09:10,170 >> Oft virka sem fékk kallað áður vegna muna, 151 00:09:10,170 --> 00:09:13,920 eins og þú kalla aðgerðir í minni, þeir taka meira og meira pláss frá grunni, 152 00:09:13,920 --> 00:09:17,040 og um leið og skilar, fær það minni endurnýtt 153 00:09:17,040 --> 00:09:20,890 fyrir næsta gaur sem fær heitir, sem notar sama sneið þína á minni. 154 00:09:20,890 --> 00:09:23,450 Og ef að þú ert farin sorp þar, fyrri gildum, 155 00:09:23,450 --> 00:09:28,190 við gætum mistök s sem hafa sumir gildi þegar í raun höfum við ekki setja neitt þar. 156 00:09:28,190 --> 00:09:30,960 Svo lítur RAM okkar á þessum tímapunkti svona. 157 00:09:30,960 --> 00:09:36,030 Nú á hægri hönd hlið af línu 7 sem við köllum GetString, 158 00:09:36,030 --> 00:09:40,150 sem við höfum verið að gera núna í margar vikur, en það er GetString raunverulega gera? 159 00:09:40,150 --> 00:09:43,350 GetString skrifað af CS50 starfsfólk er lítið greindur 160 00:09:43,350 --> 00:09:46,500 á að um leið og notandinn byrjar að slá lykla og smellir á Enter, 161 00:09:46,500 --> 00:09:50,010 GetString tölur út hversu margar mínútum gerði notandi högg, 162 00:09:50,010 --> 00:09:53,360 hversu marga stafi þarf ég að úthluta RAM fyrir. 163 00:09:53,360 --> 00:09:55,660 Og þar sem RAM kemur frá, hver veit? 164 00:09:55,660 --> 00:09:58,930 Það er einhvers staðar í 2 gígabæta tölvunnar eða whatnot á minni. 165 00:09:58,930 --> 00:10:05,200 En við skulum gera ráð fyrir að tölvan fann pláss fyrir orð HELLO hérna. 166 00:10:05,200 --> 00:10:08,710 Orðið Ég gafst var H-E-L-L-O. 167 00:10:08,710 --> 00:10:13,510 Og ef við drögum þetta sem röð af stöfum, gætum við draga það svona. 168 00:10:13,510 --> 00:10:17,860 En ég þarf að gera 1 auka hlutur. Hvað tilheyrir í lok hvers streng í C? 169 00:10:17,860 --> 00:10:20,710 Núll eðli, sem við skrifum sem \ 0. 170 00:10:20,710 --> 00:10:23,980 Það er tæknilega númer 0, en sviga skiptir öllu skýrari 171 00:10:23,980 --> 00:10:28,150 að þetta er bókstaflega númer 0 er heiltala 0; 172 00:10:28,150 --> 00:10:32,440 það er ekki til dæmis vitna-unquote 0 sem þú getur slegið á lyklaborðinu. 173 00:10:32,440 --> 00:10:33,940 Svo er þetta HELLO. 174 00:10:33,940 --> 00:10:36,350 >> Og hvað gerði við segjum á mánudag að virka eins GetString 175 00:10:36,350 --> 00:10:39,580 er í raun að skila öllum þessum vikum? 176 00:10:39,580 --> 00:10:43,960 Það er ekki að skila streng á sjálfu því það er í raun ekki að hafa merkingu 177 00:10:43,960 --> 00:10:47,710 því strengir eru ekki fyrir hendi. Þeir eru tegund af smà í CS50 bókasafn. 178 00:10:47,710 --> 00:10:51,300 Hvað er raunverulega a band, meira tæknilega? >> [Nemandi] Þetta er í fyrsta staf. 179 00:10:51,300 --> 00:10:55,950 Einmitt. Það er einfaldlega heimilisfang fyrsta staf að notandinn slegið inn 180 00:10:55,950 --> 00:11:02,810 Svo ef orð mín HELLO endar það upp að bæti númer 123 og síðan bæti númer 124, 181 00:11:02,810 --> 00:11:08,320 125, 126, og svo framvegis, ef ég tala bara bæti mínum frá 0 á allt, 182 00:11:08,320 --> 00:11:12,650 hvað raunverulega GetString er aftur er bókstaflega númer 123. 183 00:11:12,650 --> 00:11:19,270 Svo er það sem fær setja á s númer 123, ekki bréf H, ekki orðið HELLO, 184 00:11:19,270 --> 00:11:23,130 einfaldlega heimilisfang þar sem ég get fundið fyrstu stafina HELLO. 185 00:11:23,130 --> 00:11:26,500 En það virðist ekki eins og nóg. Ég bað þig um streng, ekki staf. 186 00:11:26,500 --> 00:11:32,970 Svo hvernig vitum við eða tölva sem ELLO konar koma með H? 187 00:11:35,760 --> 00:11:37,460 Hvað er tegund af samkomulagi sem við höfum? Já. 188 00:11:37,460 --> 00:11:40,100 [Nemandi] Hún heldur að segja sig að finna nokkrar fleiri stafi. >> Einmitt. 189 00:11:40,100 --> 00:11:44,570 >> Það er þetta manna-tölva venju þar þegar þú ert að takast á við strengi, 190 00:11:44,570 --> 00:11:49,410 annars þekkt nú sem bleikju stjörnur, hefur þú einfaldlega að reikna út 191 00:11:49,410 --> 00:11:54,350 þar í lok hvers band í lífinu er því í raun bara iterating yfir það með for lykkju, 192 00:11:54,350 --> 00:11:57,820 á meðan lykkja, hvað, þannig að þegar þú finna í lok band 193 00:11:57,820 --> 00:12:02,160 nú er hægt að álykta af því, ó, allt orðið var HELLO. 194 00:12:02,160 --> 00:12:04,820 Þessir af þú með fyrri forritun reynslu gæti vita í Java 195 00:12:04,820 --> 00:12:09,880 þú getur bara hringt. lengd og í öðrum tungumálum sem þú getur hringt í lengd eða álíka. 196 00:12:09,880 --> 00:12:14,060 Það er vegna þess að í fullt af tungumálum, sérstaklega það sem kallast hlutbundin tungumál, 197 00:12:14,060 --> 00:12:18,580 lengd eitthvað er góður af encapsulated innan verksins gagna sig, 198 00:12:18,580 --> 00:12:24,000 mikið eins og við encapsulated auðkenni og nöfn og hús inni í nemanda á mánudag. 199 00:12:24,000 --> 00:12:28,700 En C er miklu lægri. Það eru engir hlutir eða flokka, ef þú hefur heyrt þau orð áður. 200 00:12:28,700 --> 00:12:31,490 Allt sem þú þarft er í raun minni heimilisföng. 201 00:12:31,490 --> 00:12:35,540 Svo er svona gamaldags leið fulltrúi áhugaverð gögn uppbygging. 202 00:12:35,540 --> 00:12:38,760 Þú ert með upphafstíma gildi eins og heimilisfang fyrsta staf 203 00:12:38,760 --> 00:12:42,340 og þá bara handahófskennt venju sem allir sammála að fylgja. 204 00:12:42,340 --> 00:12:46,420 Svo hvernig er band lengd framkvæmda, gerði við leggja? 205 00:12:46,420 --> 00:12:51,360 Strlen, strlen, sem sum ykkar hafa nú notað nokkrum sinnum. Það er frekar einfalt, ekki satt? 206 00:12:51,360 --> 00:12:53,060 Það er eins og 2 línur af kóða. 207 00:12:53,060 --> 00:12:56,140 Það er ansi mikið að lykkja af einhverju tagi, kannski með fleiri sveitarfélaga breytu. 208 00:12:56,140 --> 00:13:00,540 En strlen hefur bara til að taka músina og þá byrja að leita \ 0. 209 00:13:00,540 --> 00:13:05,190 >> Og um leið og hún finnur það, það getur aftur á heildarfjölda skref sem það er tekið á þeim streng. 210 00:13:05,190 --> 00:13:07,150 Þannig að við getum álykta af þessu hvað fer næst. 211 00:13:07,150 --> 00:13:11,850 Segjum svo að ég lýsi t eins og ég hef gert í línu 10. 212 00:13:11,850 --> 00:13:14,280 Þetta er einhver sorp gildi. Hver veit í fyrstu? 213 00:13:14,280 --> 00:13:18,490 En á hægri hönd hlið af línu 10 Ég er að hringja GetString aftur. 214 00:13:18,490 --> 00:13:20,050 Hver veit hvar það endar? 215 00:13:20,050 --> 00:13:23,830 Segjum geðþótta að stýrikerfið fann pláss fyrir það leið hérna. 216 00:13:23,830 --> 00:13:28,610 Ég gerst að tilviljun h-E-L-L-O aftur, 217 00:13:28,610 --> 00:13:31,260 og svo getum við draga sams konar mynd. 218 00:13:31,260 --> 00:13:34,290 En sú staðreynd að ég hef redrawn Þessi mynd er viljandi 219 00:13:34,290 --> 00:13:37,720 vegna þess að það er öðruvísi HELLO en þetta eina. 220 00:13:37,720 --> 00:13:43,920 Svo hér það gæti verið staðsetning 456, þetta er 457, og svo framvegis. 221 00:13:43,920 --> 00:13:47,170 Og hvað fær setja þar spurningarmerki einu sinni var? 222 00:13:47,170 --> 00:13:50,190 Í þessu tilfelli 456. 223 00:13:50,190 --> 00:13:53,540 Við erum að tína þessar tölur geðþótta því raunverulega eftir í dag 224 00:13:53,540 --> 00:13:57,110 við erum ekki að fara að hugsa svo mikið um hvað heimilisfang nokkuð er. 225 00:13:57,110 --> 00:14:02,690 Allt sem við hugsa um er að við getum reikna út heimilisfang sumir stykki af gögnum eins og Hello. 226 00:14:02,690 --> 00:14:07,100 >> Svo í raun það sem flestir gera í tölvunarfræði þegar tala um heimilisföng minni 227 00:14:07,100 --> 00:14:10,210 og tala um punkta sérstaklega, 228 00:14:10,210 --> 00:14:14,220 frekar en nennir vangaveltur út 123 - Hverjum er ekki sama þar sem þetta dót er í raun, 229 00:14:14,220 --> 00:14:17,440 Við vitum bara að það er á einhverjum tölulegum heimilisfang - 230 00:14:17,440 --> 00:14:22,180 við einfalda heiminn og segja bara að s bendir á að eðli 231 00:14:22,180 --> 00:14:25,080 og t er að benda á þá persónu. 232 00:14:25,080 --> 00:14:27,430 Og sú staðreynd að það er ör er alveg vísvitandi 233 00:14:27,430 --> 00:14:31,610 því bókstaflega nú s er bendir á H og T er að benda á aðra H 234 00:14:31,610 --> 00:14:34,720 því í lok dagsins, það skiptir ekki máli hvað heimilisfangið er, 235 00:14:34,720 --> 00:14:40,240 en það skiptir máli að við höfum getu til að tjá þetta netfang með nokkur stykki af kóða. 236 00:14:40,240 --> 00:14:42,730 Við höfum í raun ekki handleika þessar tölur strax 237 00:14:42,730 --> 00:14:47,770 þannig að við munum sjá hvar við getum interject og svona gera það með ábendingum, 238 00:14:47,770 --> 00:14:52,030 en nú í línu 12 bókstaflega hvaða gildi eru við samanburð 239 00:14:52,030 --> 00:14:55,500 samkvæmt þessari sögu í línu 12? 240 00:14:56,570 --> 00:15:01,290 Við erum að segja er 123 jafn jafnt 456? Og það er örugglega ekki raunin. 241 00:15:01,290 --> 00:15:05,320 Og jafnvel eðli, þetta bendillinn er örugglega ekki það sama og þetta 242 00:15:05,320 --> 00:15:09,500 vegna þess að þú heitir GetString tvisvar og GetString ekki að reyna að vera frábær snjall, 243 00:15:09,500 --> 00:15:12,470 það þýðir ekki að reyna að átta sig á, ó, tegund þú HELLO 5 mínútur síðan; 244 00:15:12,470 --> 00:15:15,090 láta mig gefa þér sömu músina sem ég gaf þér fyrir, 245 00:15:15,090 --> 00:15:18,450 það úthlutar bara nýtt klumpur af minni í hvert skipti sem þú kallar það. 246 00:15:18,450 --> 00:15:20,350 >> Hvernig lögum við þetta vandamál? 247 00:15:20,350 --> 00:15:24,270 Ef hærra stigi Ég vil bera strengi Halló og Halló - 248 00:15:24,270 --> 00:15:28,680 Mér er alveg sama um ábendingum - hvernig get ég farið um að svara þeirri spurningu, 249 00:15:28,680 --> 00:15:31,980 gerði notandi slá það sama? Hvað er nauðsynlegt hér? Já. 250 00:15:31,980 --> 00:15:35,200 [Nemandi] Nota aðgerð. >> Ég get notað virka út af the kassi. 251 00:15:35,200 --> 00:15:38,170 Ég get notað fall kallast strcmp, s-T-R-C-m-p, 252 00:15:38,170 --> 00:15:41,190 bara stytt útgáfa af segja strengur saman. 253 00:15:41,190 --> 00:15:45,070 Og ef við förum inn í, til dæmis, bera 2, sem er meðal handouts í dag, 254 00:15:45,070 --> 00:15:46,690 Ég einmitt það. 255 00:15:46,690 --> 00:15:51,750 Ég hélt allt annað það sama frá línu 1 og niður í 26 eða svo, 256 00:15:51,750 --> 00:15:54,360 og nú taka þessi hluti hefur breyst bara svolítið. 257 00:15:54,360 --> 00:15:57,690 Skulum hunsa línu 28 í smá stund og einbeita sér aðeins á þessu. 258 00:15:57,690 --> 00:16:00,410 Hvað höfum vér að segja mánudagur sem STR bera gerir? 259 00:16:00,410 --> 00:16:05,200 Það sér ferlið við að taka 2 ábendingum, S og T í þessu tilviki, 260 00:16:05,200 --> 00:16:08,480 konar nánast að setja fingur sína á þessum 2 bókstafi, 261 00:16:08,480 --> 00:16:11,530 og hvað það þarf að gera er eitthvað eins og while lykkju eða fyrir lykkju, 262 00:16:11,530 --> 00:16:16,050 og það segir er þetta það sama? Ef svo er, færist það fingur eða ábendingum áfram. 263 00:16:16,050 --> 00:16:17,970 Eru þær á sama, þetta sama, þetta sama, 264 00:16:17,970 --> 00:16:22,710 þetta sama, þetta sama? Og ooh, ég er í lok band á bæði S og t. 265 00:16:22,710 --> 00:16:26,780 Ég hef ekki fundið neinar mótsagnir. Já, þessir strengir sama. 266 00:16:26,780 --> 00:16:31,940 Og hvað þýðir STR bera aftur ef 2 strengir eru þau sömu, virðist? Zero. 267 00:16:31,940 --> 00:16:35,900 Svo 0 er gott í þessu tilfelli vegna þess að ef það skilar -1 eða 1, 268 00:16:35,900 --> 00:16:40,560 sem þýðir að er bara gerist að koma fyrir t stafrófsröð eða eftir t. 269 00:16:40,560 --> 00:16:43,760 Og hvers vegna vildi að vera gagnlegt að hafa fall sem segir þér hvaða strengur kemur fyrir 270 00:16:43,760 --> 00:16:46,720 eða eftir að í orðabók? 271 00:16:46,720 --> 00:16:48,740 [Nemandi] leita. >> Rannsakandi og flokkun. 272 00:16:48,740 --> 00:16:51,730 >> Svo þú getur gert hlutina eins og tvöfaldur leit eða kúla tegund eða sameina svoleiðis 273 00:16:51,730 --> 00:16:53,230 þar sem þú þarft að bera það. 274 00:16:53,230 --> 00:16:56,420 Svona langt að við höfum konar skera nokkur horn og aðeins talað um flokkun 275 00:16:56,420 --> 00:16:59,430 í samhengi við tölur vegna þess að það er gaman og auðvelt að tala um, 276 00:16:59,430 --> 00:17:02,430 en þú getur vissulega bera strengi, epli og banani, 277 00:17:02,430 --> 00:17:05,349 því ef Apple er þekkt fyrir að koma fyrir banana, á sama hátt, 278 00:17:05,349 --> 00:17:09,319 hægt að flytja strengi í kring í minni rétt eins og Rob gerði við Mergesort í the vídeó 279 00:17:09,319 --> 00:17:15,880 og við gerðum hér á sviðinu með tegund val, insertion sort, og kúla tagi. 280 00:17:15,880 --> 00:17:18,710 Svo hvar annars getum við tekið þetta? Við skulum reyna þetta. 281 00:17:18,710 --> 00:17:23,980 Tegund skulum við gleyma því lexíu um stund og reyna núna og afrita 1.c að gera eftirfarandi. 282 00:17:23,980 --> 00:17:26,800 Í línu 21 Ég er að segja prenta eitthvað, 283 00:17:26,800 --> 00:17:28,520 þá er ég að fá band frá notanda, 284 00:17:28,520 --> 00:17:30,690 þá er ég að athuga þetta. 285 00:17:30,690 --> 00:17:33,620 Við höfum í raun ekki fengið inn í þennan vana enn, en við skulum nú gera þetta. 286 00:17:33,620 --> 00:17:40,990 Við skulum reyndar afhýða aftur í lag. Þetta er mjög char *. Þessi strákur er mjög char *. 287 00:17:40,990 --> 00:17:45,690 Og hvað þýðir það að vera athuga hvort s == null? 288 00:17:45,690 --> 00:17:48,380 Það kemur í ljós að þegar þú hringja í aðgerð eins GetString 289 00:17:48,380 --> 00:17:51,540 eða almennt bara að biðja tölvuna að gefa þér minni, 290 00:17:51,540 --> 00:17:53,030 eitthvað gæti farið úrskeiðis. 291 00:17:53,030 --> 00:17:56,630 Þú getur verið brjálaður og biðja tölvuna fyrir Terabyte minni 292 00:17:56,630 --> 00:18:01,780 með því að biðja fyrir trillions bæti af minni sem bara eru ekki til í tölvunni, 293 00:18:01,780 --> 00:18:05,130 en GetString og aðrar aðgerðir þurfa einhvern hátt að æpa á þig 294 00:18:05,130 --> 00:18:06,820 Ef þú hefur beðið um of mikið. 295 00:18:06,820 --> 00:18:10,450 Og hvernig GetString gerir þetta er ef þú hefur beðið um meira minni 296 00:18:10,450 --> 00:18:14,250 en er í boði í tölvunni, jafnvel ef það er frábær, frábær litlar líkur 297 00:18:14,250 --> 00:18:17,730 því enginn af okkur eru að fara að slá inn trilljón stafi og ýta síðan á Enter, 298 00:18:17,730 --> 00:18:21,980 en litlar líkur þó það kann að vera, ég vil samt að athuga það bara í tilfelli, 299 00:18:21,980 --> 00:18:26,120 og sérstakt gildi sem GetString, svar, og aðrar aðgerðir skilar 300 00:18:26,120 --> 00:18:30,630 ef eitthvað hefur farið úrskeiðis er NÚLL í öllum húfur. 301 00:18:30,630 --> 00:18:36,520 >> Og hvað er NULL? NULL bara gerist svo að tákna músina. Það er minni heimilisfang 0. 302 00:18:36,520 --> 00:18:40,800 Heimurinn ákvað að geðþótta, ef þetta er minni tölvunnar minnar - þú veist hvað? - 303 00:18:40,800 --> 00:18:46,260 við erum að fara að stela bara 1 bæti af minni sérhver tölva, og það er staðsetning 0. 304 00:18:46,260 --> 00:18:49,560 Við ætlum að gefa honum gælunafn NÚLL, og við erum að fara að lofa 305 00:18:49,560 --> 00:18:52,660 að við munum aldrei setja alvöru gögn þar 306 00:18:52,660 --> 00:18:56,770 vegna þess að við þurfum bara geðþótta sérstakt gildi, 0, aka NULL, 307 00:18:56,770 --> 00:19:00,230 svo að við getum æpa á notendur ef eitthvað fer úrskeiðis. 308 00:19:00,230 --> 00:19:03,590 Annars þú might ekki vita er 0 meina setja eitthvað hér 309 00:19:03,590 --> 00:19:05,490 eða þýðir það eitthvað fór úrskeiðis? 310 00:19:05,490 --> 00:19:09,190 Við verðum að öll sammála um að NULL þýðir ekkert var skilað, 311 00:19:09,190 --> 00:19:11,700 enginn raunverulegur heimilisfang var skilað. 312 00:19:11,700 --> 00:19:15,210 Nú, aftur hér ég ætla bara að taka mannlega hátt minn I 1 frá helstu 313 00:19:15,210 --> 00:19:17,040 ef eitthvað fer úrskeiðis. 314 00:19:17,040 --> 00:19:20,650 Það er vegna þess að aftur venju helsta er að skila 0 ef góð, 315 00:19:20,650 --> 00:19:22,990 1 eða einhver önnur gildi ef slæmt. 316 00:19:22,990 --> 00:19:28,200 En GetString og allir aðgerð sem fæst í ávöxtun minni NULL ef eitthvað fer illa. 317 00:19:28,200 --> 00:19:33,480 >> Allt í lagi. Svo því miður, lína 27, frábær einfalt þó það er ekki alveg að afrita strenginn. 318 00:19:33,480 --> 00:19:35,740 Hvers vegna? Við sjáum þetta sem hér segir. 319 00:19:35,740 --> 00:19:40,120 Ég krafa í línu 27 til að gera afrit af S og kalla það t. 320 00:19:40,120 --> 00:19:45,790 Þannig að ég ætla ekki að spyrja notanda um 2 strengi í þetta sinn, ég ætla bara að segja að gildi í S 321 00:19:45,790 --> 00:19:47,870 ætti að setja í t eins og heilbrigður. 322 00:19:47,870 --> 00:19:52,890 Svo nú bara til að sýna hvernig brotið er, í línu 29 Onward hvað er ég að gera? 323 00:19:52,890 --> 00:19:56,980 Fyrst ég er að athuga hvort lengd t er meiri en 0. 324 00:19:56,980 --> 00:19:59,330 Það er einhver strengur þarna. Notandinn slegið eitthvað inn 325 00:19:59,330 --> 00:20:03,410 Hvað er lína 32 gera, virðist? 326 00:20:03,410 --> 00:20:08,910 [Inaudible nemandi svar] >> Right. Þú getur konar ætlað það frá því sem ég sagði að það er að gera. 327 00:20:08,910 --> 00:20:13,200 En tæknilega, hvað er þetta að gera? T [0] táknar hvað? 328 00:20:13,200 --> 00:20:15,140 [Nemandi] The 0 staf. >> [Malan] The 0 staf. 329 00:20:15,140 --> 00:20:19,620 Eða, meira manna-eins, fyrsta staf í t, hvað það er, H kannski í þessu tilfelli. 330 00:20:19,620 --> 00:20:24,990 Og toupper gerir það sem það segir. Það capitalizes á 0 eðli t og það breytist það. 331 00:20:24,990 --> 00:20:28,430 Þannig að þetta þýðir að taka 0 eðli t, gera það hástafi 332 00:20:28,430 --> 00:20:30,320 og setja það aftur í sama stað. 333 00:20:30,320 --> 00:20:35,540 Svo ef ég tegund halló í lágstöfum, ætti þetta að breyta lágstafir h í höfuðborg H. 334 00:20:35,540 --> 00:20:41,400 En vandamálið er að í línum 35 og 36 það sem ég er að fara að gera er að prenta út fyrir okkur s og t. 335 00:20:41,400 --> 00:20:43,120 Og hvað er hunch þín? 336 00:20:43,120 --> 00:20:47,250 Hvað er ég að fara í raun til að sjá hvort ég slóst í Hello í öllum lágstöfum? 337 00:20:47,250 --> 00:20:52,280 Hvað er að fara að fá prenta? >> [Inaudible nemandi svar] >> Hvað er það? 338 00:20:52,280 --> 00:20:58,360 [Nemandi] Big H og restin lítið. >> Stóri H og restin lítið fyrir sem er eða ekki? 339 00:20:58,360 --> 00:21:03,170 [Nemandi] Bæði. >> Bæði. Einmitt. Nú skulum við skoða hvað er að gerast hér. 340 00:21:03,170 --> 00:21:08,380 >> Leyfðu mér að fara á undan og taka saman þetta. Þetta er copy1, svo að copy1. Allt í lagi. 341 00:21:08,380 --> 00:21:14,840 Þysja inn Leyfðu mér að fara á undan og keyra copy1, Enter, Segja eitthvað: Hello með lágstöfum. 342 00:21:14,840 --> 00:21:19,570 Það færð eintak, en það eignar virðist upprunalega eins og heilbrigður, 343 00:21:19,570 --> 00:21:22,070 vegna þess að það gerist núna í þessari sögu? 344 00:21:22,070 --> 00:21:27,030 Í línu 27 Ég er ekki í raun að vera að afrita streng, 345 00:21:27,030 --> 00:21:30,450 en jafnvel þó að þú gætir hafa innsæi vonast til þess að vera að ræða, 346 00:21:30,450 --> 00:21:33,680 Ef þér finnst um þessa mynd, hvað raunverulega hef ég gert? 347 00:21:33,680 --> 00:21:35,410 Helmingur myndinni er sú sama. 348 00:21:35,410 --> 00:21:39,390 Svo skulum rúlla aftur í tímann svo að T er ekki enn til í sögunni. 349 00:21:39,390 --> 00:21:43,160 S getur verið í sögunni, en við skulum lágstafir halló þetta tíma. 350 00:21:43,160 --> 00:21:46,710 Svo láta mig festa það sem ég gafst í raun inn 351 00:21:46,710 --> 00:21:51,280 Í þessu tilfelli hér höfum við h-e-l-l-O. 352 00:21:51,280 --> 00:21:58,050 Við munum draga það sem röð af stöfum, setja SEPARATOR línur mínar hér og \ 0 mín. 353 00:21:58,050 --> 00:22:05,980 Svo er þetta þar sem við erum eins fljótt og línu 1 í gegnum 24-ish, gefa eða taka, hafa gengið. 354 00:22:05,980 --> 00:22:07,800 Þetta er mynd af minni mínu. 355 00:22:07,800 --> 00:22:10,800 Þegar ég fá að línu 27, hvað gerist? 356 00:22:10,800 --> 00:22:14,730 Rétt eins og áður, ég bendi, sem ég ætla að draga sem þetta veldi. 357 00:22:14,730 --> 00:22:19,740 Það heitir t. Og hvað er gildi þess sjálfgefið? Hver veit? Sumir sorp gildi. 358 00:22:19,740 --> 00:22:22,060 >> Þannig að ég ætla ágrip það í burtu sem spurningarmerki. 359 00:22:22,060 --> 00:22:27,670 Og um leið og hægri hönd hlið af línu 27 keyrir, er hvað ég að setja inn t? 360 00:22:27,670 --> 00:22:30,770 Það sama sem er í s. 361 00:22:30,770 --> 00:22:34,120 Svo ef við um stund fjarlægja þetta abstrakt á örina og við segjum, 362 00:22:34,120 --> 00:22:40,330 ó, þetta er minni hlaða tölu 123, þegar þú segir ekki fær s, semíkommur, 363 00:22:40,330 --> 00:22:42,700 þú ert bókstaflega að setja 123 hér. 364 00:22:42,700 --> 00:22:45,200 Nú ef við einfalda konar heim okkar aftur með myndum, 365 00:22:45,200 --> 00:22:48,750 hvað þú hefur í raun gert er bara bætt öðru örina við umheiminn 366 00:22:48,750 --> 00:22:52,910 sem er að benda á frá t á sama nákvæmlega band. 367 00:22:52,910 --> 00:22:59,730 Svo þegar í línu 31 og 32 fer ég í raun um að breyta t [0] 368 00:22:59,730 --> 00:23:05,580 hvað er T [0] virðist samheiti núna? s [0] 369 00:23:05,580 --> 00:23:07,030 Svo er það allt sem er að gerast. 370 00:23:07,030 --> 00:23:09,900 Og jafnvel þótt þessi tegund af líður svolítið lágt stig og Bogagöng 371 00:23:09,900 --> 00:23:12,760 og svona er eins og kannski innsæi ætti þetta að hafa bara unnið - 372 00:23:12,760 --> 00:23:15,410 Ég hef gert afrit af hlutum áður og það gekk bara - 373 00:23:15,410 --> 00:23:18,590 Ef þú heldur í raun um hvað sem band í raun er, er það char *. 374 00:23:18,590 --> 00:23:21,700 Jæja, hvað er það? Það er heimilisfang sumra staf. 375 00:23:21,700 --> 00:23:24,930 Þá kannski gerir það meira vit að þegar þú reynir að gera eitthvað 376 00:23:24,930 --> 00:23:29,220 frábær virðist einfalt eins og þetta, allt sem þú ert að gera er að afrita minni tölu. 377 00:23:29,220 --> 00:23:32,530 Þú ert í raun ekki að gera neitt með band sig. 378 00:23:32,530 --> 00:23:37,500 Svo jafnvel ef þú hefur ekki hugmynd um hvernig þú myndir leysa þetta vandamál í kóða, 379 00:23:37,500 --> 00:23:45,080 mikil, eðli, hvað við þurfum að gera til að gera Ta afrit af S, virðist? 380 00:23:46,670 --> 00:23:48,820 Já. >> [Nemandi] Gefðu henni nýja staðsetningu? >> Einmitt. 381 00:23:48,820 --> 00:23:50,800 >> Við þurfum að gefa T glænýjar staðsetningu. 382 00:23:50,800 --> 00:23:55,230 Við þurfum einhvern veginn að búa til heim þar sem við fáum nýja klumpur af minni, 383 00:23:55,230 --> 00:24:00,090 sem bara fyrir sakir skýrleika er ég draga rétt undir þessu einn, en það þarf ekki að vera þar. 384 00:24:00,090 --> 00:24:04,880 En það þarf að vera í sömu stærð, svo ég ætla að draga þessar lóðréttar línur í sama stað. 385 00:24:04,880 --> 00:24:09,720 Það er allt í lagi ef þetta er allt sorp í upphafi. Hver veit hvað var það? 386 00:24:09,720 --> 00:24:13,850 En skref 1 er að fara til verða að vera að gefa mér eins mikið minni eins og ég þarf 387 00:24:13,850 --> 00:24:18,630 að passa afrit af halló, þá reikna út hvernig á að afrita klst hér, e hér, 388 00:24:18,630 --> 00:24:20,390 L hér og svo framvegis. 389 00:24:20,390 --> 00:24:24,880 En þetta þegar að líða svolítið augljóst jafnvel þótt sumir af the smáatriði eru enn ágrip. 390 00:24:24,880 --> 00:24:28,690 Til að afrita þennan streng inn í þetta, það er bara til lykkju eða meðan lykkja 391 00:24:28,690 --> 00:24:31,580 eða eitthvað sem þú hefur orðið allt meira kunnugleg. 392 00:24:31,580 --> 00:24:35,970 Svo skulum reyna þetta. Leyfðu mér að fara inn copy2.c. 393 00:24:35,970 --> 00:24:43,270 Í copy2.c við höfum nánast sömu dagskrá nema fyrir línu 27. 394 00:24:43,270 --> 00:24:47,260 Það lítur svolítið flókið, en ef við brjóta hann niður stykkjum, 395 00:24:47,260 --> 00:24:48,950 vinstri-hönd hlið er það sama. 396 00:24:48,950 --> 00:24:52,790 Char * T skapar þetta í minni, að vísu með spurningarmerki 397 00:24:52,790 --> 00:24:54,680 vegna þess að við höfum ekki hugmynd um hvað er þarna sjálfgefið. 398 00:24:54,680 --> 00:24:57,920 Á hægri hönd við erum nú að innleiða nýtt hlutverk, malloc, 399 00:24:57,920 --> 00:25:00,640 fyrir minni úthluta, gefa mér minni, 400 00:25:00,640 --> 00:25:06,900 og það tekur víst hversu mörg rök, hversu margir hlutir innan sviga? 401 00:25:09,660 --> 00:25:12,130 Ég heyrði murmurings af 1 og 2, en það er bara 1. 402 00:25:12,130 --> 00:25:15,320 Það er engin komma, sem þýðir að það er bara 1 hlutur inni í sviga. 403 00:25:15,320 --> 00:25:17,720 Jafnvel þó að það er öðrum sviga, láta mig benda 404 00:25:17,720 --> 00:25:21,460 hvað er inni á ystu sviga, og það er þetta mál: 405 00:25:21,460 --> 00:25:25,880 (Strlen (s) + 1) * sizeof (char). 406 00:25:25,880 --> 00:25:29,190 Þannig að ef við teljum í raun þetta í gegnum, þetta er að segja gefa mér lengd s. 407 00:25:29,190 --> 00:25:34,440 Hvers vegna er ég, þó að bæta 1 á lengd? >> [Inaudible nemandi svar] 408 00:25:34,440 --> 00:25:40,200 Einmitt. Við þurfum pláss fyrir þennan mann á skotti, sjötta karakter sem hefur enga enska merkingu 409 00:25:40,200 --> 00:25:42,250 en hjartarskinn hafa sérstaka programmatic merkingu. 410 00:25:42,250 --> 00:25:46,800 >> Þannig að við þurfum + 1 fyrir það vegna þess að strlen skilar mönnum von á lengd, 411 00:25:46,800 --> 00:25:50,890 halló eða 5, er það ekki að gefa þér frekari null staf. 412 00:25:50,890 --> 00:25:52,980 Svo ég bæta handvirkt þetta með + 1. 413 00:25:52,980 --> 00:25:56,060 Og svo þetta, (char) * stærð, við höfum ekki séð þetta áður. 414 00:25:56,060 --> 00:25:57,480 Þetta er ekki tæknilega fall. 415 00:25:57,480 --> 00:26:04,150 Það er sérstakt leitarorð sem einfaldlega segir þér hvað stærð er á nokkur gögn tegund á tölvu 416 00:26:04,150 --> 00:26:06,980 vegna þess að í raun hafa sumir af okkur 32-bita tölvur. 417 00:26:06,980 --> 00:26:10,900 Ég er með nokkuð gamla tölvu heima, og það notar aðeins 32 bita til að tákna ábendingum. 418 00:26:10,900 --> 00:26:13,900 Og svo ef ég gerði stærð gögn tegund, gæti verið 32 bita. 419 00:26:13,900 --> 00:26:18,300 En ef ég er að nota nýja ímynda tölvuna mína, gæti ég fengið aftur gildið 64 bitum 420 00:26:18,300 --> 00:26:20,510 fyrir eitthvað eins og að heimilisfangi. 421 00:26:20,510 --> 00:26:25,400 Svo í þessu tilfelli, bara til að vera frábær öruggt, við erum ekki að fara á harða kóða eitthvað eins - 422 00:26:25,400 --> 00:26:28,740 Jæja, það er á stærð við bleikju í samræmi við það sem við höfum sagt svo langt? 423 00:26:28,740 --> 00:26:34,450 Við höfum ansi mikið sagt munnlega að það er 1 bæti, og það er nokkuð mikið satt yfir borð. 424 00:26:34,450 --> 00:26:37,000 En aftur, hafa tilhneigingu forsendur að vera slæmt. 425 00:26:37,000 --> 00:26:40,850 Þeir leiða til buggy hugbúnaður ef fólk nota hugbúnaðinn á þann hátt að þú hafir ekki ætla. 426 00:26:40,850 --> 00:26:44,750 Svo við skulum ágrip þetta í burtu og bara meira generically segja 427 00:26:44,750 --> 00:26:46,830 Ég þarf svona marga klumpur af minni 428 00:26:46,830 --> 00:26:50,210 og hver klumpur af minni ætti að vera jafngild á stærð við eðli, 429 00:26:50,210 --> 00:26:54,870 sem er í raun jafn 1 í þessu tilviki, en það er meira almenna leið að skrifa það. 430 00:26:54,870 --> 00:27:00,460 Þannig ef orðið er halló, hversu mörg bæti er malloc úthluta greinilega að heilsa? 431 00:27:00,460 --> 00:27:04,980 [Nemandi] Sex. >> Six. Einmitt eins og margir eins og við höfum spurningarmerki á skjánum. 432 00:27:04,980 --> 00:27:07,800 Og þá taka giska nú á skilning þinn á GetString 433 00:27:07,800 --> 00:27:12,790 hvað þýðir malloc aftur sennilega? >> [Nemandi] An heimilisfang. 434 00:27:12,790 --> 00:27:17,020 An heimilisfang hvað? Af fyrsta klumpur af minni. 435 00:27:17,020 --> 00:27:20,670 >> Við höfum ekki hugmynd um hvað er það vegna þess að einhver annar virka 436 00:27:20,670 --> 00:27:23,010 gæti hafa verið að nota þetta minni áður. 437 00:27:23,010 --> 00:27:28,380 En malloc, eins GetString, skilar veffang fyrstu bæti af minni 438 00:27:28,380 --> 00:27:30,540 að það hefur sett til hliðar fyrir þig. 439 00:27:30,540 --> 00:27:38,380 En hvað það er ekki að gera er að fylla út í auða með núll sviga eðli 440 00:27:38,380 --> 00:27:43,030 vegna þess að það kemur í ljós að þú getur notað malloc að úthluta neitt: ints, strengir, fylki, 441 00:27:43,030 --> 00:27:45,700 fljóta, nemandi mannvirki. 442 00:27:45,700 --> 00:27:47,750 Þú getur notað malloc alveg generically. 443 00:27:47,750 --> 00:27:51,470 Það er ekki sama og að vita hvað þú ert að úthluta minni fyrir. 444 00:27:51,470 --> 00:27:55,810 Svo það væri hroka fyrir malloc að setja \ 0 445 00:27:55,810 --> 00:27:58,340 í lok hvers klumpur af minni og það er að gefa þér 446 00:27:58,340 --> 00:28:02,620 því þetta \ 0 hlutur er bara venju fyrir strengi. 447 00:28:02,620 --> 00:28:06,310 Það er ekki notað til ints, það er ekki notað til að fljóta, það er ekki notað fyrir nemendur. 448 00:28:06,310 --> 00:28:11,730 Og svo er Gotcha með malloc að byrði er algjörlega á þér forritari 449 00:28:11,730 --> 00:28:16,790 að muna hversu margir bæti þér úthlutað og ekki alltaf nota for lykkju 450 00:28:16,790 --> 00:28:21,570 eða á meðan lykkja og fara framhjá mörk klumpur af minni sem þú hefur verið gefið. 451 00:28:21,570 --> 00:28:23,540 Setjið annan hátt, eins fljótt og þú úthluta minni, 452 00:28:23,540 --> 00:28:28,510 þú getur ekki beðið um stýrikerfi, ó, við the vegur, hversu stór af a klumpur af minni var þetta? 453 00:28:28,510 --> 00:28:32,080 Það er algjörlega undir þér komið að muna ef þú þarft að gildi. 454 00:28:32,080 --> 00:28:34,330 >> Svo skulum sjá hvernig ég halda áfram að nota þetta minni. 455 00:28:34,330 --> 00:28:38,430 Í línu 28 og 29 af hverju er ég að þessu? 456 00:28:39,850 --> 00:28:42,260 Bara alls geðheilbrigði stöðva. 457 00:28:42,260 --> 00:28:45,110 Bara ef eitthvað fór úrskeiðis, spyr ég fyrir nokkrum brjálaður magn af minni 458 00:28:45,110 --> 00:28:48,690 eða ég hef svo margt í gangi á tölvunni að það bara er ekki nóg minni, 459 00:28:48,690 --> 00:28:51,780 eitthvað svoleiðis, ég vil að minnsta kosti að athuga for null. 460 00:28:51,780 --> 00:28:55,260 Í raun og veru, flestar tölvur mun gefa þér þá ímynd að hvert forrit 461 00:28:55,260 --> 00:28:57,080 hægt að nota heild af RAM, 462 00:28:57,080 --> 00:29:00,740 en þó svo, ef notandinn slær í sumum brjálaður langstrenginn kannski vegna þess að þeir eru slæmur strákur 463 00:29:00,740 --> 00:29:03,440 og þeir eru í raun að reyna að hrun program eða reiðhestur inn í það, 464 00:29:03,440 --> 00:29:07,300 þú vilt að minnsta kosti athuga skilagildi malloc og hvort það jafngildi null. 465 00:29:07,300 --> 00:29:11,630 Og ef það er, við skulum bara hætta núna því ég veit ekki hvað ég á að gera í þessu máli. 466 00:29:11,630 --> 00:29:13,950 Hvernig afrita Èg the band? Það er nokkrar leiðir til að gera þetta. 467 00:29:13,950 --> 00:29:18,850 Það eru STR afrita aðgerðir í C, en það er frábær auðvelt fyrir okkur að gera þetta á gamaldags hátt. 468 00:29:18,850 --> 00:29:23,110 >> Fyrst láta mig reikna út hvað lengd s er. 469 00:29:23,110 --> 00:29:26,930 Ég hefði getað sett þetta í lykkju heldur ég setti bara það út hér fyrir skýrleika. 470 00:29:26,930 --> 00:29:30,610 Svo geymir N nú lengd upprunalegu band, sem er greinilega 5. 471 00:29:30,610 --> 00:29:35,290 Þá á að lykkja ég er iterating frá 0 á allt að n, 472 00:29:35,290 --> 00:29:40,940 og á hverjum endurtekning ég setja s [i] innan t [i]. 473 00:29:40,940 --> 00:29:45,060 Svo er það sem ég gefið í skyn með 2 fingrum mínum bendir á strengi áður. 474 00:29:45,060 --> 00:29:49,260 Eins og þetta fyrir lykkju iterates svona, ég ætla að afrita h inn hér, 475 00:29:49,260 --> 00:29:52,890 E inn hér, ég inn hér vegna þess að þetta er s, þetta er t. 476 00:29:52,890 --> 00:29:58,770 Og svo loks, í línu 35 af hverju er ég að þessu? 477 00:29:58,770 --> 00:30:03,770 Ég þarf að ganga úr skugga um að ég er að binda enda á band t. 478 00:30:03,770 --> 00:30:06,170 Og ég gerði það með þessum hætti til að vera frábær skýr. 479 00:30:06,170 --> 00:30:09,510 En leggja, einhvern, ef þú gætir, aðra leið til að gera þetta. 480 00:30:09,510 --> 00:30:13,930 ÉG dont 'raunverulega þörf línu 35. Það er önnur leið til að gera þetta. 481 00:30:13,930 --> 00:30:18,880 Já. >> [Inaudible nemandi svar] >> segja það hávær. 482 00:30:18,880 --> 00:30:20,960 [Nemandi] Minna en eða jafnt. >> Einmitt. 483 00:30:20,960 --> 00:30:24,450 Við gætum bara segja minna en eða jafnt og n, sem almennt hefur verið slæmt 484 00:30:24,450 --> 00:30:28,190 vegna þess að næstum alltaf þegar við förum upp að jafn hlutur sem við erum að telja 485 00:30:28,190 --> 00:30:30,000 við förum 1 skref of langt. 486 00:30:30,000 --> 00:30:32,170 En mundu, hversu mörg bæti höfum vér tekið? 487 00:30:32,170 --> 00:30:37,210 Við úthlutað strlen af ​​s og 5 + 1 fyrir samtals 6. 488 00:30:37,210 --> 00:30:39,980 Þannig að í þessu tilfelli að við gátum gert eitthvað eins og this 489 00:30:39,980 --> 00:30:46,450 þannig að við erum að afrita ekki bara halló heldur einnig \ 0 aftast. 490 00:30:46,450 --> 00:30:49,860 Einnig gætum við notað fall kallast Str afrita, strcpy, 491 00:30:49,860 --> 00:30:51,700 en það væri ekki nærri eins skemmtilegt. 492 00:30:51,700 --> 00:30:54,000 En það er allt það er undir hetta. 493 00:30:54,000 --> 00:30:56,050 Þá loks, að gera við það sama og áður. 494 00:30:56,050 --> 00:31:01,620 Ég nýta t og þá skal ég halda því fram að upphaflega lítur út eins og þetta og eintak lítur út eins og þessi. 495 00:31:01,620 --> 00:31:08,570 Svo skulum reyna þetta núna. Leyfðu mér að fara í hér. Gera copy2. Við munum zoom í og ​​hlaupa copy2. 496 00:31:08,570 --> 00:31:13,840 Ég ætla að slá í Hello með lágstöfum, og reyndar fæ ég lágstafir Halló eins og upprunalega 497 00:31:13,840 --> 00:31:16,930 en fjármagn Halló fyrir eintak. 498 00:31:16,930 --> 00:31:20,300 En ég er ekki gert strax. Ég þarf að gera 1 síðastur hlutur hér. 499 00:31:20,300 --> 00:31:28,000 46 og 47 er greinilega frjáls minni, en hvað þýðir það í raun þýtt? 500 00:31:28,000 --> 00:31:33,250 Hvað er ég að gera, finnst þér, með því að kalla línu 46 og línu 47? 501 00:31:33,250 --> 00:31:38,900 Hvaða áhrif hefur það með? Já. 502 00:31:38,900 --> 00:31:43,140 [Inaudible nemandi svar] >> Einmitt. 503 00:31:43,140 --> 00:31:46,380 >> Þú ert bara að segja stýrikerfi, hey, takk fyrir þessa minni. 504 00:31:46,380 --> 00:31:48,320 Þú getur núna notað það til einhvers annars. 505 00:31:48,320 --> 00:31:50,790 Og hér er fullkomið dæmi um gildi sorp. 506 00:31:50,790 --> 00:31:55,430 Ég hef bara notað þetta minni til að skrifa niður orð halló í 2 stöðum, 507 00:31:55,430 --> 00:31:57,490 hér, hér, hér og hér. 508 00:31:57,490 --> 00:32:00,910 Svo er þetta h-E-L-L-o-\ 0. 509 00:32:00,910 --> 00:32:06,960 En ég kalla línu 46 og línu 47, og þú veist hvað gerist þá í skilmálar af myndinni? 510 00:32:06,960 --> 00:32:10,010 Reyndar, bíddu, þetta er sú gamla. 511 00:32:10,010 --> 00:32:12,550 Þegar við tökum afrit, þessi strákur er í raun að benda hér, 512 00:32:12,550 --> 00:32:16,110 Svo skulum við fjarlægja tölurnar og bara abstrakt burtu sem örvarnar okkar aftur. 513 00:32:16,110 --> 00:32:19,370 Hvað gerist í þessari mynd þegar ég kalla frjáls? 514 00:32:19,370 --> 00:32:22,750 [Inaudible nemandi svar] >> Ekki einu sinni. 515 00:32:22,750 --> 00:32:29,510 Ef ég kalla frjáls á s og t - konar bragð spurningu - þessi mynd er ekki breytt á öllum 516 00:32:29,510 --> 00:32:33,880 því að hringja í s og kallar ekki segir bara stýrikerfi, 517 00:32:33,880 --> 00:32:39,010 hey, þú getur notað þetta minni aftur, en það breytir ekki að þetta null 518 00:32:39,010 --> 00:32:41,840 eða sumir sérstakur karakter, er það ekki breyta þessu, 519 00:32:41,840 --> 00:32:47,350 það breytir ekki klst eða e eða L eða l eða o hvorum stað fyrir nokkuð annað. 520 00:32:47,350 --> 00:32:51,610 Miðað við myndina, um leið og þú kallar á ókeypis, ekkert breytist. 521 00:32:51,610 --> 00:32:56,570 Og þar liggur uppruna gilda sorp því ef ég síðar í þessari áætlun 522 00:32:56,570 --> 00:33:01,010 spyrja stýrikerfi fyrir meira minni með GetString eða malloc eða eitthvað svoleiðis 523 00:33:01,010 --> 00:33:04,900 og stýrikerfi segir viss, ég hef 12 bæti af minni bara leystur upp, 524 00:33:04,900 --> 00:33:08,080 nota þetta, hvað þú ert að fara að skila? 525 00:33:08,080 --> 00:33:10,830 Þú ert að fara að skila klumpur af minni að við myndum venjulega draga 526 00:33:10,830 --> 00:33:13,700 með spurningarmerkjum, en hvað eru þeir spurningarmerki? 527 00:33:13,700 --> 00:33:17,000 Þeir koma til að vera h-E-L-L-O, h-e-L-L-o. 528 00:33:17,000 --> 00:33:20,940 Þetta eru ný sorp okkar gildi eins fljótt og þú frjáls upp að minni. 529 00:33:20,940 --> 00:33:22,750 >> There er a raunverulegur veröld vísbendingu hér líka. 530 00:33:22,750 --> 00:33:24,720 Þetta gerist til að gera með vinnsluminni, en tölvur 531 00:33:24,720 --> 00:33:26,720 í raun að gera það sama með diskinn. 532 00:33:26,720 --> 00:33:30,620 Við munum tala um þetta sérstaklega með framtíð vandamál setja sem leggur áherslu á réttar. 533 00:33:30,620 --> 00:33:36,170 En hvað gerist í raun og veru ef þú hafa sumir viðkvæmum fjárhagslegum skrá á skjáborðinu þínu 534 00:33:36,170 --> 00:33:39,600 eða einhver sketchy JPEG og þú dregur það í ruslið, 535 00:33:39,600 --> 00:33:44,390 hvað gerist þegar þú draga það í ruslið eða ruslafötuna? 536 00:33:44,390 --> 00:33:47,240 Þú vissir hvað ég var að tala um. [Hlátur] 537 00:33:47,240 --> 00:33:52,370 Hvað gerist þegar þú hefur dregið að vísbendingar í ruslafötuna eða ruslakarfa? 538 00:33:52,370 --> 00:33:55,920 [Inaudible nemandi svar] 539 00:33:55,920 --> 00:33:58,000 Jæja, svo varkár. Hvað gerist þegar þú gerir það? 540 00:33:58,000 --> 00:34:01,030 Stutta svarið er ekkert, ekki satt? 541 00:34:01,030 --> 00:34:04,790 Sketchy eða viðkvæmar skrá er enn bara sat þarna einhvers staðar í harða diskinum. 542 00:34:04,790 --> 00:34:07,940 Flest af okkur að minnsta kosti hafa lært erfiðu leiðina sem þú þarft til að tæma ruslið 543 00:34:07,940 --> 00:34:10,429 eða endurvinna kassi í raun eyða skrám. 544 00:34:10,429 --> 00:34:13,440 Og reyndar, þegar þú smellir á rétt eða Control smelltu á ruslið getur 545 00:34:13,440 --> 00:34:15,580 eða veldu File Empty Trash eða hvað 546 00:34:15,580 --> 00:34:21,420 og þú tæma raun ruslakarfa eða endurvinna kassi, hvað raunverulega gerist þá við þessa mynd? 547 00:34:22,810 --> 00:34:25,969 Meira ekkert. Svo gerist ekkert í raun á diski. 548 00:34:25,969 --> 00:34:30,880 >> Og ef við bara tímabundið út fyrir efnið og skrifa - Ég skal nota bara aftan á þetta. 549 00:34:30,880 --> 00:34:34,639 Svo nú er sagan er að breytast frá RAM, sem er þar sem forrit eru 550 00:34:34,639 --> 00:34:39,250 meðan þú ert að keyra þá, á disk, sem er þar sem þeir eru geymdar til langs tíma 551 00:34:39,250 --> 00:34:42,920 jafnvel þegar vald fer út, í bili - og við munum koma aftur til þetta í framtíðinni - 552 00:34:42,920 --> 00:34:46,380 skulum þykjast bara að þetta táknar diskinn inni í tölvunni þinni 553 00:34:46,380 --> 00:34:50,110 því aftur í dag og þeir nota til að vera hringlaga diskur, eins og disklingadrifið. 554 00:34:50,110 --> 00:34:55,130 Svo ef þú hafa sumir viðkvæmum Excel skrá, gæti það tekið upp þessa klumpur af minni 555 00:34:55,130 --> 00:34:59,770 á diski tölvunnar og ég er bara að teikna sömu handahófi 1s og 0s. 556 00:34:59,770 --> 00:35:03,970 Þegar þú draga the skrá eins og það að ruslið er og endurvinna kassi, 557 00:35:03,970 --> 00:35:07,750 bókstaflega ekkert gerist vegna þess að Apple og Microsoft hafa bara ákveðið 558 00:35:07,750 --> 00:35:10,450 sem ruslakarfa og endurvinna kassi er í raun bara tímabundin tákn. 559 00:35:10,450 --> 00:35:14,710 Kannski lokum OS mun tæma það fyrir þig, en yfirleitt, það er ekki neitt, 560 00:35:14,710 --> 00:35:17,090 að minnsta kosti þangað til þú ert mjög lág í rúm. 561 00:35:17,090 --> 00:35:20,870 >> Hins vegar, þegar þú ferð að tæma ruslið eða tómur endurvinna kassi, 562 00:35:20,870 --> 00:35:23,460 álíka, ekkert gerist í þessari mynd. 563 00:35:23,460 --> 00:35:28,590 Allt sem gerist annars staðar á tölvunni þinni, það er einhvers konar töflu. 564 00:35:28,590 --> 00:35:35,400 Það er tegund af eins og a lítill Cheat Sheet sem segir að, við skulum segja, resume.doc, 565 00:35:35,400 --> 00:35:40,920 svo ný þinn í Microsoft Word skrá notuð til að búa á stað 123 á harða diskinn þinn, 566 00:35:40,920 --> 00:35:43,710 ekki í minni og ekki í RAM en á harða disknum þínum, 567 00:35:43,710 --> 00:35:49,050 og sketchy JPEG lífi þínu á 456, og Excel skrá þinn býr í 789 eða hvar. 568 00:35:49,050 --> 00:35:53,640 Þegar þú eyðir skrá við raunverulega tæma ruslið eða ruslafötuna, 569 00:35:53,640 --> 00:35:59,530 þessi mynd er ekki breytt. The 0s og 1s á harða diskinum sem ekki fara neitt. 570 00:35:59,530 --> 00:36:03,930 En þetta borð, þetta litla gagnagrunnur konar, breytist. 571 00:36:03,930 --> 00:36:08,750 Þegar þú eyðir aftur þinn, er það eins og skrá er eytt í einhverjum skilningi, 572 00:36:08,750 --> 00:36:12,790 en öll tölvan gerir er að gleyma hvar þessi hlutur býr á harða disknum þínum. 573 00:36:12,790 --> 00:36:17,870 The 0s og 1s sem semja aftur eða einhver af þessum skrám eru enn ósnortinn. 574 00:36:17,870 --> 00:36:21,960 >> Svo ef þú gerðir þetta óvart, það er enn a non-núll líkur 575 00:36:21,960 --> 00:36:25,800 sem hægt er að endurheimta gögn með því að nota Norton Utilities eða einhver auglýsing hugbúnaður 576 00:36:25,800 --> 00:36:29,810 Megintilgangur hennar í lífinu er að finna 0s og 1s sem hafa svoleiðis verið munaðarlaus, 577 00:36:29,810 --> 00:36:33,300 gleymt hér en eftir hér, svo að þú getur fengið þinn gögn bak. 578 00:36:33,300 --> 00:36:38,410 Eða réttar rannsóknarmenn með lögreglu eða FBI myndi reyndar taka a harður ökuferð 579 00:36:38,410 --> 00:36:42,550 og í raun að leita að mynstur 0s og 1s að líta út eins og JPEG, líta út eins og Excel skrá, 580 00:36:42,550 --> 00:36:46,400 og endurheimta þeim þannig jafnvel ef the tölva hefur gleymt þeim þar. 581 00:36:46,400 --> 00:36:49,820 Þannig að eina leiðin í raun að eyða gögnum, sem við munum ræða í framtíðinni, 582 00:36:49,820 --> 00:36:54,190 að skrúbba eða þurrka skrá eða harður diskur með - 583 00:36:54,190 --> 00:36:56,540 Þú getur ekki raunverulega fá losa af the 0s og 1s 584 00:36:56,540 --> 00:36:59,440 því annars myndi byrja með gígabæti disknum 585 00:36:59,440 --> 00:37:02,380 og þú vilt enda með megabæti harður ökuferð ef þú stöðugt voru að eyða, 586 00:37:02,380 --> 00:37:04,380 bókstaflega, 0s og 1s. 587 00:37:04,380 --> 00:37:06,310 Svo hvað myndir þú gera ef þú vildir virkilega að ná lögin þín 588 00:37:06,310 --> 00:37:10,510 og grundvallar vandamál er að það er enn 0s og 1s á diskinn? 589 00:37:10,510 --> 00:37:14,930 Ég sé einhvern gesticulating sem þú vilt líkamlega brjóta tækið. Það vilja vinna. 590 00:37:14,930 --> 00:37:19,600 [Hlátur] en ef það er góður af dýr lausn, hvað væri sanngjarnt? 591 00:37:19,600 --> 00:37:23,270 Já. >> [Nemandi] Yfirskrifa þeim. >> Skrifa þá með hverju? >> [Nemandi] Aðrar upplýsingar. 592 00:37:23,270 --> 00:37:29,070 Önnur gögn. Þú getur bara skrifa diskinn með 0s eða 1s eða öllum 0s, allt 1s. 593 00:37:29,070 --> 00:37:31,230 >> Og það er örugglega það sem sumir af the hugbúnaður gerir. 594 00:37:31,230 --> 00:37:33,570 Hægt er að kaupa hugbúnað eða jafnvel fá ókeypis hugbúnað, 595 00:37:33,570 --> 00:37:36,610 og jafnvel byggt á Mac OS þessa dagana, minna í Windows, 596 00:37:36,610 --> 00:37:38,660 er að geta til öruggur eyða. 597 00:37:38,660 --> 00:37:41,960 Reyndar, ef þú vilt alls hlaupa heim í dag ef þú ert með Mac og gera þetta, 598 00:37:41,960 --> 00:37:45,740 Ef þú hefur fengið smá dót í ruslið getur er hægt að gera Secure Empty Trash, 599 00:37:45,740 --> 00:37:47,610 sem er einmitt það. 600 00:37:47,610 --> 00:37:53,350 Frekar en bara eyða skrá hér, er það ekki eyða 0s og 1s hér 601 00:37:53,350 --> 00:38:01,240 heldur breytist það bara þeim öllum, til dæmis, að 0s og punktur, punktur, punktur. 602 00:38:01,240 --> 00:38:05,330 Svo ein af framtíð psets verður í raun að vera að viljandi batna gögn - 603 00:38:05,330 --> 00:38:08,430 ljósmyndir sem við höfum tekið af fólki, stöðum og hlutum á háskólasvæðinu 604 00:38:08,430 --> 00:38:12,810 sem við munum gera réttar mynd af minniskortinu á stafræna myndavél er, 605 00:38:12,810 --> 00:38:17,120 sem er nákvæmlega sama hugmynd - og þú verður að vera áskorun til raunverulega finna 606 00:38:17,120 --> 00:38:20,160 mynstur sem tákna JPEG á harða disknum þínum, 607 00:38:20,160 --> 00:38:23,610 mikið eins og þessi fyrrum nemanda sem tölvupóst sem ég las fyrir nokkrum vikum gerði 608 00:38:23,610 --> 00:38:25,860 að endurheimta ljósmyndir systur sinnar. 609 00:38:25,860 --> 00:38:30,300 Hvers vegna eigum við ekki að taka 5-mínútna hlé hér, og við munum naumlega við meira minni. 610 00:38:33,030 --> 00:38:38,610 Svo er hér þar sem hlutirnir fá smá huga-beygja, en það er mjög öflugt skref 611 00:38:38,610 --> 00:38:40,480 til að skilja þetta allt meira. 612 00:38:40,480 --> 00:38:42,900 Hér er forrit sem heitir pointers.c. 613 00:38:42,900 --> 00:38:45,430 Það er meðal kóða sýnishorn dag. 614 00:38:45,430 --> 00:38:51,280 Takið eftir að í fyrstu línum, 19 í 22, allt sem við erum að gera er eitthvað eins GetString 615 00:38:51,280 --> 00:38:54,460 og aftur heimilisfang, geyma það í s. 616 00:38:54,460 --> 00:38:58,380 Héðan til pset jafnvel 3 ef þú vilt en pset 4 og 617 00:38:58,380 --> 00:39:01,030 þar sem þú getur byrjað að taka þessa þjálfun hjól burt sjálfur, 618 00:39:01,030 --> 00:39:04,030 Það er engin ástæða til að láta sem strengir til lengur. 619 00:39:04,030 --> 00:39:07,030 Það er vissulega allt í lagi að bara byrja að segja char *. 620 00:39:07,030 --> 00:39:12,610 >> Sem innskot, í online tilvísanir og í bókum sem þú getur oft séð stjörnuna við hliðina á breytu. 621 00:39:12,610 --> 00:39:15,600 Þú gætir jafnvel séð bil kringum báðum hliðum þess. 622 00:39:15,600 --> 00:39:17,680 Allar þeirra eru virka rétt. 623 00:39:17,680 --> 00:39:21,180 Fyrir nú, þó munum við staðla á þessari aðferð til að gera frábær skýr 624 00:39:21,180 --> 00:39:24,000 að char * er eins og að segja karakter músina. 625 00:39:24,000 --> 00:39:25,680 Það er gögn gerð. 626 00:39:25,680 --> 00:39:28,730 Og þá er nafn breytunnar s í þessu tilfelli. 627 00:39:28,730 --> 00:39:31,180 Þannig að við höfum fengið band og við höfum kallað það s. 628 00:39:31,180 --> 00:39:35,180 Og svo niður eftir því ég er að gera í raun og veru smá brögðum. 629 00:39:35,180 --> 00:39:39,080 Þetta er kallað músina tölur, sem er tegund af frábær einfalt. 630 00:39:39,080 --> 00:39:41,790 Það þýðir bara að bæta við og draga númer á ábendingum. 631 00:39:41,790 --> 00:39:43,660 En þetta virkar í raun. 632 00:39:43,660 --> 00:39:49,170 Þetta forrit prentar virðist 1 staf í streng s á línu svo að niðurstaðan - 633 00:39:49,170 --> 00:39:54,920 Bara svo við getum spilla þar sem þetta er að fara, að ábendingum, hlaupa ábendingum, láttu mig súmma inn 634 00:39:54,920 --> 00:39:58,940 Nú láta mig tegund í eitthvað eins og HELLO og tegund inn 635 00:39:58,940 --> 00:40:01,080 og það prentar 1 staf í hverja línu. 636 00:40:01,080 --> 00:40:04,730 Allt þar til annað síðan, hefðum við gert þetta með ferningur krappi merki. 637 00:40:04,730 --> 00:40:09,760 Við myndum hafa for lykkju og við myndum gera printf af S [i] og við myndum gera það aftur og aftur og aftur 638 00:40:09,760 --> 00:40:11,950 með sviga n í lok hverrar línu. 639 00:40:11,950 --> 00:40:16,800 En þetta forrit er öðruvísi. Þetta forrit er að nota, bókstaflega, tölur. 640 00:40:16,800 --> 00:40:18,860 Svo hvað er að gerast hér? 641 00:40:18,860 --> 00:40:24,720 Fyrst af öllu, áður en lykkja jafnvel framkvæmir, hvað, bara til að vera skýr, er í raun? 642 00:40:24,720 --> 00:40:27,270 S er? >> [Nemandi] An heimilisfang. >> Netfang. 643 00:40:27,270 --> 00:40:32,980 >> Og það er heimilisfang, um er að ræða halló, fyrsta staf í því orði, sem er h. 644 00:40:32,980 --> 00:40:37,370 Svo er er, í þessu tiltekna dæmi, heimilisfang h. 645 00:40:37,370 --> 00:40:41,850 Og hvað þýðir það að gera s + i? 646 00:40:41,850 --> 00:40:46,280 Jæja, fer ég á 0 í þetta fyrir lykkju. Við höfum gert það mörgum sinnum. 647 00:40:46,280 --> 00:40:49,760 Ég er að fara að fara upp á lengd band, greinilega. 648 00:40:49,760 --> 00:40:53,950 Svo á fyrsta endurtekning þessarar lykkju er ég augljóslega 0. 649 00:40:53,950 --> 00:41:01,740 Svo þetta mál er að segja s + i - heldur s +0--það er augljóslega bara s. 650 00:41:01,740 --> 00:41:04,320 Svo er það * er hér? 651 00:41:04,320 --> 00:41:08,530 Nú við erum að nota á stjörnuna í örlítið mismunandi hátt. 652 00:41:08,530 --> 00:41:13,080 Leyfðu mér að fara á undan og fá losa af t vegna þess að við erum búin að tala um t og afrit af s. 653 00:41:13,080 --> 00:41:15,540 Nú viljum við bara til að segja sögu sem felur í s. 654 00:41:15,540 --> 00:41:20,090 Og svo á þessari stundu, eftir að hafa tegund band, veröld okkar lítur alveg eins og það gerði áður 655 00:41:20,090 --> 00:41:26,630 með bara s geymslu heimilisfang h og almennt benda á band halló. 656 00:41:26,630 --> 00:41:33,170 Ef ég nú línu eins * (s + i), við skulum reyna þetta. 657 00:41:33,170 --> 00:41:40,140 Svo * (s + i). Leyfðu mér að einfalda þetta því þetta er 0, svo er þetta * (s +0). 658 00:41:40,140 --> 00:41:43,790 Jæja, bíddu í eina mínútu. Einfalda frekar. Þetta er * (s). 659 00:41:43,790 --> 00:41:47,020 Jæja, nú svigum eru konar heimskur, svo nú skulum bara gera * s. 660 00:41:47,020 --> 00:41:50,540 Svo í fyrsta endurtekning þessa lykkju, þessi lína sem er lögð áhersla á, 26, 661 00:41:50,540 --> 00:41:53,650 er ansi mikið jafngildir prentun þetta. 662 00:41:53,650 --> 00:41:56,040 Hvað er gögn tegund af s *? 663 00:41:56,040 --> 00:42:00,770 Í þessu samhengi, vegna þess að stjarna verður að vera við hliðina á S sig, 664 00:42:00,770 --> 00:42:04,930 en nánar tiltekið, vegna þess að við erum ekki lengur að lýsa s, 665 00:42:04,930 --> 00:42:09,730 við erum ekki að búa til breytu lengur, það er ekki minnst á char * í línu 26, 666 00:42:09,730 --> 00:42:14,280 það er ekkert minnst á leitarorð band, við erum bara að nota breytu sem heitir s, 667 00:42:14,280 --> 00:42:19,650 það kemur í ljós nú stjarna örlítið öðruvísi og að vísu, ruglingslegt merkingu. 668 00:42:19,650 --> 00:42:26,590 * S merkir hér fara á heimilisfang í S og prenta hvað sem er þar. 669 00:42:26,590 --> 00:42:33,750 Svo er hér, * s er - tegund af eins Chutes og stigar, fylgja á örina - hér. 670 00:42:33,750 --> 00:42:35,850 Svo er þetta * s. 671 00:42:35,850 --> 00:42:39,060 >> Og hvað fær prentaðar á fyrsta endurtekning þess lykkja í línu 26? 672 00:42:39,060 --> 00:42:42,170 Ég prenta út% c, sem er tákn fyrir staf 673 00:42:42,170 --> 00:42:48,520 þá \ n í nýja línu. * (S + i) þar sem ég er 0 er bara þetta. 674 00:42:48,520 --> 00:42:53,670 Svo hvað bleikju birti ég í fyrir c%? H. 675 00:42:53,670 --> 00:42:56,900 Í næsta endurtekning af Loop - þú getur sennilega séð hvar þetta er að fara - 676 00:42:56,900 --> 00:43:01,350 næsta endurtekning ég er augljóslega 1, þannig að þetta þýðir s +1, 677 00:43:01,350 --> 00:43:05,580 og svo núna er ég dont þurfa sviga því nú þarf stjarna að segja 678 00:43:05,580 --> 00:43:08,620 fara til minni heimilisfang s +1. 679 00:43:08,620 --> 00:43:14,170 Hvað er s? Skulum rúlla aftur í tímann og segja þetta ör nú er í raun ekki að gera okkur einhverjar favors. 680 00:43:14,170 --> 00:43:18,450 Let er nánar tiltekið að segja að þetta er að geyma númerið 123 681 00:43:18,450 --> 00:43:25,110 því að byrja á þessari band halló, þetta er tölu 123, þetta er 124, og svo framvegis. 682 00:43:25,110 --> 00:43:30,550 Svo á seinni endurtekning þegar ég er að segja s +1, það er eins og að segja 123 1, 683 00:43:30,550 --> 00:43:35,340 annars þekkt sem 124, svo það bleikju fær prentuð á annarri endurtekning? 684 00:43:35,340 --> 00:43:37,850 E á netfangið minni 124. 685 00:43:37,850 --> 00:43:44,440 Þá + aftur, 125, 126, 127, og þetta lykkja hættir sem betur fer áður en við fáum hér 686 00:43:44,440 --> 00:43:49,040 því ég er að nota strlen til að tryggja að ég er ekki að telja of há. 687 00:43:49,040 --> 00:43:50,810 Svo sem líka er það. 688 00:43:50,810 --> 00:43:55,000 Aftur, þetta er bara eins og við hefðum gert fyrir viku síðan. 689 00:43:55,000 --> 00:43:59,200 Leyfðu mér að skrifa það á línu hér að neðan, jafnvel þó við viljum ekki að gera bæði. 690 00:43:59,200 --> 00:44:02,500 Þetta er eins og nú þetta. 691 00:44:02,500 --> 00:44:08,310 >> Svo jafnvel þó s er strengur, sem við höfum verið að kalla það í margar vikur, er í raun a char *. 692 00:44:08,310 --> 00:44:13,270 Svo ef við viljum vera frábær endaþarms, það er í raun rétt að skrifa sérstaka eðli 693 00:44:13,270 --> 00:44:17,490 á ith stað með þessar tölur og tölur og þessa stjörnu rekstraraðila, 694 00:44:17,490 --> 00:44:20,470 en satt, þetta er bara svo mikið hreinni. Svo er þetta ekki slæmt. 695 00:44:20,470 --> 00:44:26,720 Engin ástæða til að hætta að gera línu 27 hér, en 26 er virkni sama, 696 00:44:26,720 --> 00:44:31,570 og það er virkni sama fyrir nákvæmlega þeim ástæðum sem við höfum verið að ræða svona langt. 697 00:44:31,570 --> 00:44:33,650 Og loks, 29 er bara gott starf. 698 00:44:33,650 --> 00:44:38,420 Starf án s þýðir að nú þú ert að gefa til baka á minni sem GetString gaf þér 699 00:44:38,420 --> 00:44:41,630 því aftur, eins og ég nefndi Mánudagur, GetString í margar vikur 700 00:44:41,630 --> 00:44:44,180 hefur verið að kynna galla í kóðanum þínum. 701 00:44:44,180 --> 00:44:46,490 Númerið fyrir vikur hefur haft minni lekur 702 00:44:46,490 --> 00:44:49,970 þar sem þú hefur verið að biðja GetString fyrir minni en þú hefur aldrei verið að gefa hana aftur. 703 00:44:49,970 --> 00:44:53,410 Og það var vísvitandi valin af okkur pedagogically 704 00:44:53,410 --> 00:44:55,880 því það er bara of mikið að hugsa um snemma. 705 00:44:55,880 --> 00:44:57,710 En nú þurfum við meiri samhverfu. 706 00:44:57,710 --> 00:45:00,830 Ef þú biður um tölvu fyrir minni, eins og raunin er um GetString, 707 00:45:00,830 --> 00:45:02,820 eins og raunin er greinilega fyrir malloc, 708 00:45:02,820 --> 00:45:07,970 þú verður nú að pset 4 og áfram einnig frjáls slík minni. 709 00:45:07,970 --> 00:45:11,650 Takið þetta er annað að segja int n. 710 00:45:11,650 --> 00:45:15,040 Þú þarft ekki að losa þetta vegna þess að þú ekki kalla GetString 711 00:45:15,040 --> 00:45:16,890 og þú ekki kalla malloc. 712 00:45:16,890 --> 00:45:20,610 >> Og jafnvel ef þú kallaðir GetInt sem við munum að lokum sjá, 713 00:45:20,610 --> 00:45:25,520 GetInt ekki tekið frá minni fyrir þig vegna þess að þú getur raunverulega fara um heiltölur 714 00:45:25,520 --> 00:45:29,430 og flýtur og chars bara hvernig við höfum verið að gera í margar vikur. 715 00:45:29,430 --> 00:45:33,960 Strengi, þó eru sérstök vegna þess í raun þeir eru að samtenging margra tákn. 716 00:45:33,960 --> 00:45:37,450 Svo þeir eru bara öðruvísi chars og flot og ints og þess háttar. 717 00:45:37,450 --> 00:45:39,980 En við munum koma aftur til þess fyrir löngu. 718 00:45:39,980 --> 00:45:44,920 Einhverjar spurningar þá á þessa byrjun ábendingum? Já. 719 00:45:44,920 --> 00:45:49,690 [Inaudible nemandi spurning] 720 00:45:49,690 --> 00:45:51,440 Ah, mjög góð spurning. 721 00:45:51,440 --> 00:45:55,790 Eitt af fáum hlutum C raunverulega gerir fyrir þig, sem er þægilegt, 722 00:45:55,790 --> 00:46:00,110 er það tölur út fyrir þig hvaða stærð er á gögn tegund 723 00:46:00,110 --> 00:46:03,060 og þá er svona margföldun fyrir þig. 724 00:46:03,060 --> 00:46:06,610 Þetta er óviðeigandi að ræða chars því næstum alltaf bleikju er 1 bæti, 725 00:46:06,610 --> 00:46:08,150 þannig virkar þetta bara. 726 00:46:08,150 --> 00:46:11,220 En fyrir sakir umræðu, ef þú værir í raun að prenta heilar tölur 727 00:46:11,220 --> 00:46:15,500 og þú varst að reyna að prenta út nokkur gildi s sem var að benda á heiltölu, 728 00:46:15,500 --> 00:46:20,720 þú álíka myndi ekki þurfa að gera + 4 * i því bara int er 4 bæti. 729 00:46:20,720 --> 00:46:25,780 Pointer tölur þýðir að C og þýðanda gera allt sem stærðfræði fyrir þig. 730 00:46:25,780 --> 00:46:29,190 Allt sem þú þarft að hugsa um er talning í konar mannlega skilningi. Já. 731 00:46:29,190 --> 00:46:35,200 [Nemandi] Ef þú lýsa streng inni a for lykkju, þú þarft að losa hana seinna? 732 00:46:35,200 --> 00:46:36,760 Góð spurning. 733 00:46:36,760 --> 00:46:41,390 >> Ef þú lýst band inni á fyrir lykkja, þú þarft að losa hana seinna? 734 00:46:41,390 --> 00:46:47,520 Þú þarft aðeins að losa um minni sem þú skiptir við GetString eða með malloc. 735 00:46:47,520 --> 00:46:53,110 Svo ef þú segir bara eitthvað eins og - láta mig setja hrokkið axlabönd núna svo allur kóðinn tengist. 736 00:46:53,110 --> 00:46:58,580 Ef þú gerðir eitthvað, að vísu buggily, svona, char * t = s, 737 00:46:58,580 --> 00:47:03,450 þú þarft ekki að losa t því ekki ekki í sér að tala um malloc eða GetString. 738 00:47:03,450 --> 00:47:08,960 Ef hins þú gjörðir þetta, GetString, þá já, myndir þú þurfa að losa t. 739 00:47:08,960 --> 00:47:14,350 Og í raun, aðeins tækifæri til að gera það er nú innan þessa lykkju, fyrir sömu útgáfu gildissvið 740 00:47:14,350 --> 00:47:16,060 að við höfum rætt í fortíðinni. 741 00:47:16,060 --> 00:47:18,830 Annars þú vilt að úthluta minni, úthluta minni, úthluta minni, 742 00:47:18,830 --> 00:47:21,230 og í lok áætlunarinnar vegna þess að þú ert utan þess lykkju, 743 00:47:21,230 --> 00:47:24,240 T er ekki til, en þú hefur aldrei sagt stýrikerfi 744 00:47:24,240 --> 00:47:26,750 að þú hafir ekki þurft að minni lengur. 745 00:47:26,750 --> 00:47:30,430 Og áður en langt um pset 4 eða 5 við munum búa þér forrit sem heitir Valgrind, 746 00:47:30,430 --> 00:47:34,160 sem er svipað og í anda við GDB á að það er með nokkuð af Bogagöng tengi, 747 00:47:34,160 --> 00:47:35,750 en tilgangur þess í lífinu er að hjálpa þér. 748 00:47:35,750 --> 00:47:39,380 Og Valgrind er forrit sem mun í framtíðinni leita forrit 749 00:47:39,380 --> 00:47:42,550 leita að leka minni, hvort sem GetString eða malloc, 750 00:47:42,550 --> 00:47:47,800 sem við munum byrja að nota það því fremur sem við hætta að nota CS50 bókasafn eins mikið. 751 00:47:47,800 --> 00:47:53,030 Við lokum nú svoleiðis á orðaforða og einhverskonar andlegt líkan í orði 752 00:47:53,030 --> 00:47:55,170 sem að leysa þetta brotinn forrit. 753 00:47:55,170 --> 00:47:59,410 >> Þannig að í þessum brotinn forrit, skipti virkar inni á skipti, 754 00:47:59,410 --> 00:48:05,280 en það aldrei unnið í helstu því helsta liðið í x og y, muna, 755 00:48:05,280 --> 00:48:07,260 og þá voru samþykkt á um gildi, svo að segja. 756 00:48:07,260 --> 00:48:09,330 Afrit þeirra voru gefin til að skipta. 757 00:48:09,330 --> 00:48:12,520 Í lok skipti, a og b-hefði örugglega verið skipst á, 758 00:48:12,520 --> 00:48:16,120 en auðvitað x og y, sem við ræddum á mánudag, hafði ekki verið. 759 00:48:16,120 --> 00:48:19,940 Þannig að ég legg í grænu hér að þetta er í raun lausnin hér. 760 00:48:19,940 --> 00:48:22,640 Og í raun, láta mig fara stjörnurnar mína bara til að vera í samræmi 761 00:48:22,640 --> 00:48:24,440 jafnvel þó, aftur, virkni skiptir ekki máli. 762 00:48:24,440 --> 00:48:28,730 Í framtíðinni vikum munum útskýra hvenær og hvers vegna það skiptir máli. 763 00:48:28,730 --> 00:48:30,600 Svo í grænu nú er til lausn. 764 00:48:30,600 --> 00:48:33,700 Frankly lítur það a heild einhver fjöldi Messier því að ég hef allar þessar stjörnur. 765 00:48:33,700 --> 00:48:35,380 Leyfðu mér að benda á eitt. 766 00:48:35,380 --> 00:48:40,040 Efsta lína hér þar sem það segir int * a og int * B 767 00:48:40,040 --> 00:48:42,820 er í grundvallaratriðum gera the sami hlutur eins og það hefur alltaf gert. 768 00:48:42,820 --> 00:48:47,070 Það er lýsa 2 rök eða breytur til að skipta, 769 00:48:47,070 --> 00:48:49,940 fyrsta sem er int bendillinn kallað, 770 00:48:49,940 --> 00:48:53,100 annað sem er int bendill sem heitir b. 771 00:48:53,100 --> 00:48:55,770 Það eina sem er nýtt á þessum tímapunkti er sú staðreynd að það er stjarna þarna. 772 00:48:55,770 --> 00:48:59,340 >> Hvað þýðir það? A er ekki int, b er ekki int. 773 00:48:59,340 --> 00:49:04,100 A er heimilisfang af int og b er heimilisfang mismunandi Int. 774 00:49:04,100 --> 00:49:06,980 Hérna, þetta er þar sem ég viðurkenni C fær ruglingslegt. 775 00:49:06,980 --> 00:49:09,790 Nú erum við með stjörnu, en það hefur mismunandi merkingu í þessu samhengi. 776 00:49:09,790 --> 00:49:13,150 Þar sem við erum ekki að lýsa yfir ábendingum sem við erum hérna, 777 00:49:13,150 --> 00:49:15,500 hér erum við að dereferencing hluti. 778 00:49:15,500 --> 00:49:21,520 Svo tæknilega, stjarnan í þessu samhengi við fyrsta, annað, og þriðja lína inni í skipti 779 00:49:21,520 --> 00:49:24,560 er dereference stjórnandi, sem þýðir bara að fara þarna. 780 00:49:24,560 --> 00:49:27,400 Svo bara eins og fingur minn fylgdi á örina h, 781 00:49:27,400 --> 00:49:31,100 * Þýðir að fara á þetta netfang og finna mér int sem er þar. 782 00:49:31,100 --> 00:49:34,250 * B muni fara á heimilisfang og framhjá mér hvað er þarna. 783 00:49:34,250 --> 00:49:40,730 Svo skulum gera annað uppkast að mynd frá mánudegi nú með stafla af römmum, 784 00:49:40,730 --> 00:49:43,130 neðri einn sem er að fara að vera aðal, 785 00:49:43,130 --> 00:49:47,600 efri einn sem er að fara að vera skipti, 786 00:49:47,600 --> 00:49:50,880 þannig að heimurinn okkar lítur, eins og Mánudagur, eins og þetta. 787 00:49:50,880 --> 00:49:53,620 Hér er klumpur af minni sem helstu er að fara að nota. 788 00:49:53,620 --> 00:49:56,520 >> Muna frá mánudegi að áætlunin hafði bara 2 breytur, 789 00:49:56,520 --> 00:50:01,930 einn heitir x og einn hét y, og ég hafði sett tölurnar 1 og 2 þar. 790 00:50:01,930 --> 00:50:06,580 Nú þegar ég kalla skipta eins og ég gerði á mánudaginn, 791 00:50:06,580 --> 00:50:11,000 áður þegar ég notaði rauða útgáfu af þessu forriti, sem lítur út eins og þetta, 792 00:50:11,000 --> 00:50:17,470 Ég fékk 2 breytur, A og B, og hvað við vorum að skrifa hér og hér? 793 00:50:17,470 --> 00:50:21,160 Bara 1 og 2, bókstaflega afrit af x og y. 794 00:50:21,160 --> 00:50:23,070 Í dag við að breyta því. 795 00:50:23,070 --> 00:50:28,510 Nú í stað þess að farið er í ints a og b við ætlum að fara í 2 tölur. 796 00:50:28,510 --> 00:50:34,290 Þeir netföng gerast að benda á ints, en þau netföng eru ints ekki sjálfir. 797 00:50:34,290 --> 00:50:37,330 Þeir eru heimilisföng. Það er eins og póstfang í staðinn. 798 00:50:37,330 --> 00:50:40,580 Svo nú þurfum við bara að gefa mér aðeins meiri upplýsingar á skjánum. 799 00:50:40,580 --> 00:50:43,250 Þetta er minni tölvan mín eins og það hefur verið í allan dag. 800 00:50:43,250 --> 00:50:45,120 Nú þurfum sumir handahófi númerakerfið. 801 00:50:45,120 --> 00:50:50,580 Svo við skulum bara segja, bara tilviljun, að þetta er minni heimilisfang 123, 124. 802 00:50:50,580 --> 00:50:55,660 Við skulum bara segja að þetta er 125, það er 126, og svo framvegis, en það er algerlega handahófskennt. 803 00:50:55,660 --> 00:50:58,590 Við þurfum bara sumir númerakerfi í minni mínu. 804 00:50:58,590 --> 00:51:04,030 Svo nú þegar ég fara í raun í X og Y, ég er ekki að fara að fara í x og y; 805 00:51:04,030 --> 00:51:08,400 Ég ætla að fara í á póstfangið, svo að segja, af x og y 806 00:51:08,400 --> 00:51:11,870 þannig að það verður geymt hér og hér er ekki 1 og 2, 807 00:51:11,870 --> 00:51:16,030 en ef þú getur séð lítill textinn minn, hvað fær liðið hér og hér? 808 00:51:16,030 --> 00:51:23,340 [Inaudible nemandi svar] >> Einmitt. 123 fær setja hér og 124 verður sett hér. 809 00:51:23,340 --> 00:51:28,910 >> Nú, vegna þess að ég nota á stjörnuna í fyrstu línu leið upp hér að ofan, 810 00:51:28,910 --> 00:51:34,340 áætlun mín veit bara að 123 og 124, jafnvel þótt þeir séu augljóslega heiltölur 811 00:51:34,340 --> 00:51:40,160 að nokkur maður gæti taka eftir, ættu þeir að túlka sem viðtakandi, tölustafir viðtakandi. 812 00:51:40,160 --> 00:51:43,250 Þeir eru ekki í sjálfu sér ints, þeir heimilisföng, 813 00:51:43,250 --> 00:51:46,120 og það er vegna þess að ég hef sett skýrt stjörnum þar. 814 00:51:46,120 --> 00:51:51,360 Svo nú í fyrsta, annað, og þriðja lína mína raunverulegu kóða hvað gerist hér? 815 00:51:51,360 --> 00:51:53,380 Við skulum draga restina af myndinni. 816 00:51:53,380 --> 00:51:56,980 Tmp er bara eins og það var á mánudaginn. Ekkert sérstakt tmp. 817 00:51:56,980 --> 00:52:03,060 Það er bara staðbundin 32 bita breyta, og inni að ég er greinilega að geyma verðmæti * a. 818 00:52:03,060 --> 00:52:08,580 Nú, ef ég sagði bara tmp = a, hvað myndi ég setja hér? >> [Nemandi] 123. 819 00:52:08,580 --> 00:52:10,370 123. En það er ekki það sem ég er að gera. 820 00:52:10,370 --> 00:52:13,670 Ég er að segja tmp = * a. Stjörnur muni fara þar. 821 00:52:13,670 --> 00:52:19,370 Svo hér a, 123. Hvernig fer ég þangað? Þykjast eins og það er ör. 822 00:52:19,370 --> 00:52:24,460 Jæja, það er, 1. Svo hvað verður geymd í tmp, virðist? Bara 1. 823 00:52:24,460 --> 00:52:29,620 Svo í öðrum orðum, tmp er * a, * þýðir að fara á heimilisfang sem er nú í, 824 00:52:29,620 --> 00:52:31,320 sem er greinilega 123. 825 00:52:31,320 --> 00:52:33,910 >> Jæja, hér erum við í stað 123, ég á 1, 826 00:52:33,910 --> 00:52:35,670 þannig að ég ætla að setja númer 1 þarna. 827 00:52:35,670 --> 00:52:39,020 Nú hvað á ég að gera í línu 2, * a = * b? 828 00:52:39,020 --> 00:52:44,570 Þessi er svolítið meiri þátt því nú hvað er? Það er 123. 829 00:52:44,570 --> 00:52:50,220 Svo * sem er þar? Rétt þar sem ég var áður. Svo fara þangað. Allt í lagi. 830 00:52:50,220 --> 00:52:53,420 Nú, loksins, og þá loksins mun byrja að skynsamleg, vonandi, 831 00:52:53,420 --> 00:53:00,280 * B þýðir hvað er í b? 124. Þannig að ég þarf að fara þangað, sem er 2. 832 00:53:00,280 --> 00:53:03,430 Hvað set ég þar? 833 00:53:03,430 --> 00:53:10,100 2 fer í hér því * B fer í * a. Svo ég geri það. 834 00:53:10,100 --> 00:53:13,120 Og þú getur nú þegar séð, ef til vill, að við erum svo mikið nær 835 00:53:13,120 --> 00:53:17,710 að leysa þetta heimskur, einfalt vandamál rétt í fyrsta skipti 836 00:53:17,710 --> 00:53:20,920 því að nú höfum við enn recollection um hvað x var 837 00:53:20,920 --> 00:53:23,230 við höfum 2 eintök, að vísu, að y, 838 00:53:23,230 --> 00:53:25,850 en lína 3 segir nú * b. 839 00:53:25,850 --> 00:53:31,080 Svo er hér b. * B muni fara þar. Svo hvar er staðsetning 124? 840 00:53:31,080 --> 00:53:35,560 Það er greinilega hér. Hvað set ég hér? Vitanlega, tmp. 841 00:53:35,560 --> 00:53:39,600 Svo nú er ég að gera þetta. Þannig að ég hef 1 hér og 2 hér. 842 00:53:39,600 --> 00:53:43,560 Og nú hvað um þetta allt, að 123, og 124, og 1? 843 00:53:43,560 --> 00:53:47,910 Um leið og skilar skipti, þetta minni er svo gott sem misst 844 00:53:47,910 --> 00:53:51,070 því eins fljótt og skilar skipti, stýrikerfi 845 00:53:51,070 --> 00:53:54,190 er frjálst að nota þessi minni í framtíðinni. 846 00:53:54,190 --> 00:53:58,870 Aðeins minni aðal-neðst á þessari svokölluðu stakkur festist í kring. 847 00:53:58,870 --> 00:54:01,470 >> Og svo við höfum loksins nú að vinna útgáfa. 848 00:54:01,470 --> 00:54:06,310 Leyfðu mér að fara í swap.c og taka eftirfarandi. 849 00:54:06,310 --> 00:54:11,280 Efst á dagskrá sem ég hef breytt frumgerð mína að vera int * a og int * b. 850 00:54:11,280 --> 00:54:15,000 Svo það eina sem ég breytt til að fara úr rauðu, sem var slæmt, í grænt, sem er gott, 851 00:54:15,000 --> 00:54:17,350 er ég við þessar stjörnur í dag. 852 00:54:17,350 --> 00:54:21,520 En hérna í skipta sig ég þurfti að afrita, líma það var bara á mynd. 853 00:54:21,520 --> 00:54:24,140 Ég er með stjörnu hér, stjarna hér - sem passar við frumgerð - 854 00:54:24,140 --> 00:54:27,930 og svo öll þessi atriði hafa nú stjörnurnar nema tmp 855 00:54:27,930 --> 00:54:30,680 því að nota tímabundið breytu, það er ekkert nýtt þar. 856 00:54:30,680 --> 00:54:33,040 Ég þarf bara tímabundna geymslu fyrir INT. 857 00:54:33,040 --> 00:54:34,820 Þannig að við þurfum ekki stjörnu þar. 858 00:54:34,820 --> 00:54:39,310 Við þurfum bara á stjörnuna þannig að við getum yfir þessa tegund af handahófi mörk 859 00:54:39,310 --> 00:54:42,900 milli þessara 2 ramma í minni tölvunnar minnar. 860 00:54:42,900 --> 00:54:45,630 En eitt síðasta sem þarf að breyta, og þú gætir hafa glittir það nú þegar. 861 00:54:45,630 --> 00:54:48,810 Hvaða önnur lína er augljóslega öðruvísi núna? >> [Nemandi] & x. 862 00:54:48,810 --> 00:54:53,270 >> Já, þannig að 25 er síðasta lína af kóða sem ég þarf að breyta til að þetta virki. 863 00:54:53,270 --> 00:54:58,360 A viku síðan og jafnvel á mánudaginn lína 25 leit út eins og þetta, skipta x og y, 864 00:54:58,360 --> 00:55:02,020 og þetta var bara brotinn vegna þess að ef þú segir skipti (x, y) 865 00:55:02,020 --> 00:55:05,660 þú ert að gefa afrit af x og y til að skipta á, þá er það að gera hlutur hennar, 866 00:55:05,660 --> 00:55:09,080 en þú ert aldrei að breyta X og Y sjálft. 867 00:55:09,080 --> 00:55:12,880 Svo jafnvel ef þú hefur aldrei séð þetta staf áður með merkið í kóða, 868 00:55:12,880 --> 00:55:15,860 bara taka giska. Hvað merkið gera, virðist? 869 00:55:15,860 --> 00:55:17,890 [Nemandi] Tekur á netfangið. >> Tekur á netfangið. 870 00:55:17,890 --> 00:55:21,160 Svo merkið er að segja gefa mér heimilisfang x. 871 00:55:21,160 --> 00:55:25,590 Hver veit hvar það er? Það verður að vera 123. Mér er sama. Bara gefa mér heimilisfang x. 872 00:55:25,590 --> 00:55:28,340 & Y þýðir að gefa mér heimilisfang y. 873 00:55:28,340 --> 00:55:34,450 Og á þeim tímapunkti sagan er fullkomlega í samræmi við myndina við brá fyrir augnabliki. 874 00:55:34,450 --> 00:55:38,310 >> Svo ég ætla að viðurkenna ábendingum, vissulega fyrir mig þegar ég byrjaði fyrst að læra þetta, 875 00:55:38,310 --> 00:55:40,570 var ákveðið einn af the herða hluti til að vefja huga mínum í kring. 876 00:55:40,570 --> 00:55:43,760 En átta sig, sérstaklega þar sem við halda áfram að spila með þessar tegundir af hlutum, 877 00:55:43,760 --> 00:55:48,030 Ef þú brýtur það niður í þessum frábær einfalt konar intellectually uninteresting vandamál 878 00:55:48,030 --> 00:55:52,270 á bara að færa tölur um, svarið við mikið af rugli með ábendingum 879 00:55:52,270 --> 00:55:56,590 raun má úr þessum mjög undirstöðu búnað. 880 00:55:56,590 --> 00:55:59,070 Hér er heimilisfang. Farðu þarna með stjörnu. 881 00:55:59,070 --> 00:56:03,830 Eða öfugt, hér er merkið. Reikna út hvað heimilisfangið raunverulega er. 882 00:56:03,830 --> 00:56:06,270 Allt í lagi. 883 00:56:06,270 --> 00:56:09,000 Svo hvar er allt þetta minni koma frá? 884 00:56:09,000 --> 00:56:12,360 Við höfum dregið þessa mynd nokkrum sinnum, og ég halda efnilegur að við munum koma aftur að honum, 885 00:56:12,360 --> 00:56:14,920 en hér er byggður á minni tölvunnar 886 00:56:14,920 --> 00:56:17,420 það er a lítill fleiri merktar en chalkboard okkar hér er. 887 00:56:17,420 --> 00:56:21,590 Textinn hluti efst sýnir hvað varðar program? 888 00:56:21,590 --> 00:56:26,090 [Inaudible nemandi svar] >> miður? Segðu aftur. 889 00:56:26,090 --> 00:56:28,660 [Nemandi] Raunveruleg program. >> Raunveruleg program. 890 00:56:28,660 --> 00:56:32,430 >> Svo 0s og 1s sem þú hefur safnað saman eftir að skrifa C kóða og þá gangi Clang 891 00:56:32,430 --> 00:56:35,910 og búa 0s og 1s endar getting matur þar í minni 892 00:56:35,910 --> 00:56:38,570 vegna þess að þegar þú tvísmellir á táknið á Mac eða PC 893 00:56:38,570 --> 00:56:43,010 eða keyra skipun eins og Mario á hvetja þinn, 0s þitt og 1s úr diski 894 00:56:43,010 --> 00:56:45,700 fá hlaðinn inn í minni þannig að tölvan getur vinna þá 895 00:56:45,700 --> 00:56:47,540 og framkvæma þær hraðar. 896 00:56:47,540 --> 00:56:50,880 Svo frumstilla gögn og forsniðinn gögn, munum við ekki tala mikið um þá, 897 00:56:50,880 --> 00:56:52,420 en þeir eru bara alþjóðlegt breytur. 898 00:56:52,420 --> 00:56:54,710 Frumstilla þýðir alþjóðlegum breytur sem þú gafst gildi til; 899 00:56:54,710 --> 00:56:59,300 forsniðinn þýðir alþjóðlegum breytur sem þú hefur ekki enn gefa gildi til. 900 00:56:59,300 --> 00:57:01,900 Þá er það þessi umhverfisbreytur sem ég alveg Wave hönd mína á, 901 00:57:01,900 --> 00:57:04,860 en þeir eru og sem geymir hluti eins og notandanafn þitt 902 00:57:04,860 --> 00:57:08,090 og önnur tegund af lægri upplýsingar. 903 00:57:08,090 --> 00:57:12,880 En juiciest stykki skipulag minni þitt er þetta hlutur sem kallast að stafla og hrúga. 904 00:57:12,880 --> 00:57:17,470 The stakkur aftur, að vera ljóst, er minni sem er notað þegar aðgerðir eru kallaðir, 905 00:57:17,470 --> 00:57:19,710 þegar það eru staðbundnar breytur 906 00:57:19,710 --> 00:57:22,120 og þegar það eru þættir sem liðin í kring. 907 00:57:22,120 --> 00:57:24,490 Allt sem gerist í stafla. 908 00:57:24,490 --> 00:57:29,570 Hrúga við höfum ekki talað um, en taka giska sem notar hrúga. 909 00:57:31,120 --> 00:57:32,690 Bara mismunandi klumpur af minni. 910 00:57:32,690 --> 00:57:36,620 Það gerist að vera dregin hér efst, en það er handahófskennt myndrænu samningur. 911 00:57:36,620 --> 00:57:41,670 Hver er greinilega verið að nota minni frá hrúga í margar vikur? 912 00:57:41,670 --> 00:57:44,830 Það er tæknilega þú heldur óbeint. >> [Nemandi] GetString. 913 00:57:44,830 --> 00:57:47,950 GetString og malloc. Svo hér er grundvallar munur. 914 00:57:47,950 --> 00:57:51,300 >> Þú veist að á undanförnum vikum að ef þú þarft minni, bara að lýsa yfir breytu. 915 00:57:51,300 --> 00:57:54,560 Ef þú þarft mikið af minni, lýsa fylki rétt inni í virka. 916 00:57:54,560 --> 00:57:59,620 En vandamálið sem við höfum haldið frammi fyrir er ef þú lýsa breytum staðnum inni í aðgerðum, 917 00:57:59,620 --> 00:58:05,340 eins fljótt og skilar, hvað verður minni og þeim breytur? 918 00:58:05,340 --> 00:58:09,620 Bara svona það er ekki lengur þitt, ekki satt? Það hverfur bara konar eðli. 919 00:58:09,620 --> 00:58:13,950 Það er enn líkamlega þar, augljóslega, en það er ekki lengur rétt til að nota. 920 00:58:13,950 --> 00:58:17,160 Þetta er augljóslega erfið ef þú vilt að skrifa aðgerðir í lífinu 921 00:58:17,160 --> 00:58:20,440 sem í raun tekið frá minni og ekki gefa það til baka strax. 922 00:58:20,440 --> 00:58:24,180 Tilfelli í benda: tilgangur GetString í lífinu er að hafa ekki hugmynd um fyrirfram 923 00:58:24,180 --> 00:58:26,390 hversu stór af a band ég ætla að slá á lyklaborð, 924 00:58:26,390 --> 00:58:30,390 en það hlýtur að vera fær um að verja minni að halda Davíð eða Hello 925 00:58:30,390 --> 00:58:32,860 eða í heild ritgerð sem notandinn gæti hafa slegið inn 926 00:58:32,860 --> 00:58:35,280 Svo GetString hefur verið með malloc. 927 00:58:35,280 --> 00:58:38,910 Malloc því verður að nota ekki á mánudaginn; 928 00:58:38,910 --> 00:58:40,770 Þess í stað er að nota þetta hlutur sem kallast hrúga. 929 00:58:40,770 --> 00:58:44,430 Það er ekkert öðruvísi minni. Það er ekki hraðar eða hægar eða eitthvað svoleiðis. 930 00:58:44,430 --> 00:58:46,570 Það er bara líkamlega á öðrum stað. 931 00:58:46,570 --> 00:58:50,120 >> En reglan er að minnið sem er úthlutað á hrúga 932 00:58:50,120 --> 00:58:56,180 verður aldrei tekið frá þér fyrr en þú hringja - til að taka giska - frjáls. 933 00:58:56,180 --> 00:59:00,510 Með því móti, hvaða minni þú biður um á mánudaginn bara með því að lýsa fjölda 934 00:59:00,510 --> 00:59:03,320 eða lýsa breytu eins og við höfum verið að gera í margar vikur, 935 00:59:03,320 --> 00:59:05,640 að með því að vanræksla endar á mánudaginn. 936 00:59:05,640 --> 00:59:09,550 Og það virkar mikið 90% af þeim tíma, en á þeim rarer tilefni 937 00:59:09,550 --> 00:59:12,470 þar sem þú vilt að úthluta minni og halda því í kring, 938 00:59:12,470 --> 00:59:14,730 þá þarftu að nota virka eins malloc. 939 00:59:14,730 --> 00:59:19,370 Eða höfum við notað virka eins GetString, sem síðan notar malloc. 940 00:59:19,370 --> 00:59:23,300 Við skulum sjá hvar það gæti brjóta niður og kíktu á Binky. 941 00:59:23,300 --> 00:59:25,820 Við munum koma aftur til að í framtíðinni. 942 00:59:25,820 --> 00:59:29,270 Hér er frábær einfalt forrit sem í fyrstu 2 línurnar gerir hvað? 943 00:59:29,270 --> 00:59:33,460 Á ensku, hvað þessar fyrstu 2 línur af kóða gera innan helstu? 944 00:59:33,460 --> 00:59:35,600 [Inaudible nemandi svar] 945 00:59:35,600 --> 00:59:37,880 Varlega. Það þýðir ekki að gefa mér heimilisfang x eða y. 946 00:59:37,880 --> 00:59:41,840 [Nemandi] Veitir ábendingum til ints. >> Good. Gefðu mér 2 ábendingum til heiltölur. 947 00:59:41,840 --> 00:59:45,130 Með öðrum orðum, að gefa mér 2 klumpur af minni sem ég halda teikningu í dag, 948 00:59:45,130 --> 00:59:46,950 jafnvel þótt ég eytt það nú, eins og reitum. 949 00:59:46,950 --> 00:59:50,000 Gefðu mér 2 klumpur af minni, er einn hét X, kallaði einn y - 950 00:59:50,000 --> 00:59:54,320 Fyrr ég nefndi það s og t - og það er tegund af að klumpur af minni? 951 00:59:54,320 --> 00:59:57,160 Það er að fara að geyma heimilisfang. 952 00:59:57,160 --> 00:59:59,110 Það er af gerðinni int *. 953 00:59:59,110 --> 01:00:01,630 >> Svo heimilisfang heiltala verður að lifa í X, 954 01:00:01,630 --> 01:00:03,860 heimilisfang heiltala verður að lifa í y, 955 01:00:03,860 --> 01:00:08,460 en í upphafi, hvað er inni í x og y? Hver veit? Sorp gildi. 956 01:00:08,460 --> 01:00:10,180 Það hefur ekkert að gera með ábendingum. 957 01:00:10,180 --> 01:00:12,720 Ef við höfum ekki setja eitthvað þarna, hver veit hvað er í raun það? 958 01:00:12,720 --> 01:00:18,950 Nú, x. Hvað gerist hér? Þetta er legit nú því x er bendir. Það er int *. 959 01:00:18,950 --> 01:00:21,870 Svo þýðir að ég get sett í x heimilisfang sumir klumpur af minni. 960 01:00:21,870 --> 01:00:25,120 Hvað er malloc aftur? Perfect, skilar það heimilisföng, 961 01:00:25,120 --> 01:00:28,510 heimilisfang fyrsta bæti í heild klumpur af minni. 962 01:00:28,510 --> 01:00:31,140 Hversu margir bæti þetta úthlutun virðist, til dæmis, í tækið? 963 01:00:31,140 --> 01:00:33,510 Hvað er stærð á int? 4. 964 01:00:33,510 --> 01:00:36,600 Ef þú hugsa til baka til 1. viku, það er ekki frábær mikilvægt að alltaf að muna að 965 01:00:36,600 --> 01:00:38,870 en í þessu tilviki það er gagnlegt að vita, 4 bæti. 966 01:00:38,870 --> 01:00:41,770 Þannig að þetta er úthlutun á hrúga 4 bæti 967 01:00:41,770 --> 01:00:46,110 og það er aftur veffang fyrstu mér geðþótta. 968 01:00:46,110 --> 01:00:47,700 Nú, hvað er x að gera? 969 01:00:47,700 --> 01:00:52,200 A * x = 42 er að gera hvað? 970 01:00:52,200 --> 01:00:57,150 Ef á þessum tímapunkti í sögunni höfum við x, sem lítur svona út með einhverjum sorp gildi, 971 01:00:57,150 --> 01:01:04,120 þetta er nú Y með einhverju sorp gildi, nú í línu 3 sem ég hef úthlutað 4 bæti. 972 01:01:04,120 --> 01:01:06,950 Þessi mynd lítur í raun svona. 973 01:01:06,950 --> 01:01:12,010 Eða nánar tiltekið, ef þetta er handahófskennt tölu 123, þetta er það saga okkar nú lítur út. 974 01:01:12,010 --> 01:01:23,940 * X = 42 nú þýðir hvað? Það þýðir að fara á netfangið 123 og setja fjölda 42 þar. 975 01:01:23,940 --> 01:01:26,220 Ég þarf ekki að draga þessar línur vegna þess að við erum ekki að gera strengi. 976 01:01:26,220 --> 01:01:29,480 >> Ég ætti að hafa bara skrifað það svona, og bara fyrir sakir sýning er, 977 01:01:29,480 --> 01:01:33,240 42 sem int konar tekur upp mikið pláss, 4 bæti. 978 01:01:33,240 --> 01:01:35,960 Svo það er það sem gerðist þar, en það er vandamál nú. 979 01:01:35,960 --> 01:01:40,580 * Y = 13. Hvað er að fara að gerast hér? 980 01:01:40,580 --> 01:01:46,470 Vandamálið er * y í einfalda heimi þýðir bara fara á heimilisfang í y. 981 01:01:46,470 --> 01:01:48,590 Hvað er í y? Það er einhver sorp gildi. 982 01:01:48,590 --> 01:01:53,150 Svo skulum gera ráð fyrir að það sorp gildi er 5551212, eitthvað brjálaður eins og þessi. 983 01:01:53,150 --> 01:01:56,750 * Y þýðir að fara að takast 5551212. 984 01:01:56,750 --> 01:02:00,450 Það er eins hérna. Það er ekki til, til dæmis. 985 01:02:00,450 --> 01:02:05,310 Svo fær * y 13 þýðir að ég er að reyna að draga 13 hér. Það er ekki til. 986 01:02:05,310 --> 01:02:08,790 Ég hef farið yfir hluti á töfluna. Hvað fæ ég? 987 01:02:08,790 --> 01:02:14,930 Það dulinn skilaboð skiptingu kenna vegna þess að ég er að reyna að setja í minni 988 01:02:14,930 --> 01:02:19,470 gildi eins og 13 á stað sem er ekki til. 989 01:02:19,470 --> 01:02:23,900 The hvíla af the program might vinna í lagi, en allt fram að þeim tímapunkti að það gerir það ekki. 990 01:02:23,900 --> 01:02:25,350 Svo skulum reyna að segja þessa sögu. 991 01:02:25,350 --> 01:02:27,830 Við munum koma aftur til að þegar við höfum talað um álög. 992 01:02:27,830 --> 01:02:30,290 Förum aftur í þetta og gera með þetta heitir Binky, 993 01:02:30,290 --> 01:02:33,710 sem muna er Stanford prófessor sitja heima að spila með claymation, 994 01:02:33,710 --> 01:02:36,380 að segja söguna af nákvæmlega sama program. 995 01:02:36,380 --> 01:02:40,580 Það er bara um 3 mínútur að lengd. Hér höfum við Binky. 996 01:02:40,580 --> 01:02:45,030 [Karlkyns ræðumaður á Video] Hey Binky, vakna. Það er kominn tími fyrir gaman músina. 997 01:02:45,030 --> 01:02:50,080 [Binky] Hvað er það? Frekari upplýsingar um punkta? Ó, Goody! 998 01:02:50,080 --> 01:02:53,700 [Karlkyns ræðumaður] Jæja, til að byrja, held ég að við erum að fara að þurfa nokkra punkta. 999 01:02:53,700 --> 01:02:57,890 >> [Binky] lagi. Þessi kóði ráðstafar 2 ábendingum sem getur bent til heiltölur. 1000 01:02:57,890 --> 01:03:02,220 [Karlkyns ræðumaður] lagi. Jæja, ég á 2 ábendingum, en þeir virðast ekki vera að benda á neitt. 1001 01:03:02,220 --> 01:03:05,550 [Binky] Það er rétt. Upphaflega, ekki ábendingum benda ekki til neitt. 1002 01:03:05,550 --> 01:03:09,270 Það sem þeir benda á eru kallaðir pointees, og setja þá upp er sérstakt skref. 1003 01:03:09,270 --> 01:03:12,330 [Karlkyns ræðumaður] Ó, hægri, hægri. Ég vissi það. The pointees eru aðskilin. 1004 01:03:12,330 --> 01:03:15,630 Ger, hvernig úthluta þér pointee? 1005 01:03:15,630 --> 01:03:21,510 [Binky] lagi. Þessi kóði úthlutar nýja heiltölu pointee, og þessi hluti setur x til að benda á það. 1006 01:03:21,510 --> 01:03:23,500 [Karlkyns ræðumaður] Hey, sem lítur betur. 1007 01:03:23,500 --> 01:03:26,030 Svo gera það gera eitthvað. >> [Binky] lagi. 1008 01:03:26,030 --> 01:03:30,300 Ég ætla dereference músina X að geyma númer 42 í pointee hennar. 1009 01:03:30,300 --> 01:03:34,410 Fyrir þetta bragð ég þarf töfrasprota minn dereferencing. 1010 01:03:34,410 --> 01:03:38,610 [Karlkyns ræðumaður] galdur vendi þín dereferencing? Það er frábært. 1011 01:03:38,610 --> 01:03:44,230 [Binky] Þetta er það kóðinn lítur út. Ég ætla bara að setja upp númer og ... [Pabbi hljóð] 1012 01:03:44,230 --> 01:03:46,100 [Karlkyns ræðumaður] Hey útlit, þar sem hún fer. 1013 01:03:46,100 --> 01:03:50,990 Svo gera dereference á x þannig á örina til að fá aðgang pointee þess, 1014 01:03:50,990 --> 01:03:53,230 í þessu tilfelli til að geyma 42 þar. 1015 01:03:53,230 --> 01:03:57,630 Hey, reyna að nota það til að geyma númer 13 í gegnum hinn músina, y. 1016 01:03:57,630 --> 01:04:03,250 [Binky] lagi. Ég verð bara að fara yfir hér að y og fá númer 13 á fót 1017 01:04:03,250 --> 01:04:08,360 og þá taka vendi af dereferencing og bara ... [Buzzing hljóð] Vá! 1018 01:04:08,360 --> 01:04:10,980 [Karlkyns ræðumaður] Ó hey, það virkaði ekki. 1019 01:04:10,980 --> 01:04:14,870 >> Segja Binky, ég held ekki dereferencing Y er góð hugmynd 1020 01:04:14,870 --> 01:04:17,880 því að setja upp pointee er sérstakt skref 1021 01:04:17,880 --> 01:04:19,850 og ég held ekki að við gerðum alltaf það. 1022 01:04:19,850 --> 01:04:21,770 [Binky] Hmm, góður punktur. 1023 01:04:21,770 --> 01:04:26,640 [Karlkyns ræðumaður] Já. Við úthlutað músina y en við aldrei setja það að benda á pointee. 1024 01:04:26,640 --> 01:04:28,780 [Binky] Hmm, mjög athugull. 1025 01:04:28,780 --> 01:04:30,690 [Karlkyns ræðumaður] Hey, þú ert að leita vel þar Binky. 1026 01:04:30,690 --> 01:04:34,160 Getur þú festa hana þannig að y bendir á sama pointee sem x? >> [Binky] Jú. 1027 01:04:34,160 --> 01:04:37,100 Ég nota töfrasprota minn verkefni músina. 1028 01:04:37,100 --> 01:04:39,070 [Karlkyns ræðumaður] Er að fara til vera a vandamál eins og áður? 1029 01:04:39,070 --> 01:04:40,840 [Binky] Nei, þetta er ekki snerta pointees. 1030 01:04:40,840 --> 01:04:44,780 Það breytist bara einn músina til að benda á það sama og annað. [Pabbi hljóð] 1031 01:04:44,780 --> 01:04:48,570 [Karlkyns ræðumaður] Ó, ég sé. Nú y bendir á sama stað og x. 1032 01:04:48,570 --> 01:04:51,140 Svo bíða. Nú Y er fastur. Það hefur pointee. 1033 01:04:51,140 --> 01:04:54,520 Svo þú getur prófað vendi af dereferencing aftur að senda 13 yfir. 1034 01:04:54,520 --> 01:04:58,130 [Binky] Uh, allt í lagi. Hér fer. [Pabbi hljóð] 1035 01:04:58,130 --> 01:05:01,250 [Karlkyns ræðumaður] Hey, horfa á það. Nú dereferencing verk á y. 1036 01:05:01,250 --> 01:05:05,200 Og vegna þess að ábendingar eru að deila því einn pointee, bæði þeir sjá 13. 1037 01:05:05,200 --> 01:05:06,910 [Binky] Já, hlutdeild. Whatever. 1038 01:05:06,910 --> 01:05:08,880 >> Svo erum við að fara að skipta á stöðum núna? 1039 01:05:08,880 --> 01:05:11,420 [Karlkyns ræðumaður] Ó útlit, við erum út á tíma. >> [Binky] En - 1040 01:05:11,420 --> 01:05:13,880 [Karlkyns ræðumaður] Mundu bara 3 músina reglur. 1041 01:05:13,880 --> 01:05:18,630 Númer 1, þá er einfaldasta uppbygging er að þú ert með músina og bendir á að pointee. 1042 01:05:18,630 --> 01:05:23,120 En bendillinn og pointee eru aðskilin, og algeng villa er að setja upp músina 1043 01:05:23,120 --> 01:05:25,680 en að gleyma að gefa honum pointee. 1044 01:05:25,680 --> 01:05:29,580 Númer 2, bendill dereferencing byrjar á músina og fylgir ör sína yfir 1045 01:05:29,580 --> 01:05:31,060 til að fá aðgang pointee hennar. 1046 01:05:31,060 --> 01:05:34,340 Eins og við allur vita, þetta virkar aðeins ef það er pointee, 1047 01:05:34,340 --> 01:05:36,460 hvers konar fær aftur að ráða númer 1. 1048 01:05:36,460 --> 01:05:39,870 Númer 3, bendillinn framsal tekur einn músina og breytist það 1049 01:05:39,870 --> 01:05:42,390 að benda á sama pointee og annað músina. 1050 01:05:42,390 --> 01:05:45,890 Svo eftir að verkefni, sem 2 ábendingum mun benda til sömu pointee. 1051 01:05:45,890 --> 01:05:47,800 Stundum það er kallað hlutdeild. 1052 01:05:47,800 --> 01:05:50,910 >> Og þessi 'allur there er til það virkilega. Bless-bless núna. 1053 01:05:50,910 --> 01:05:55,840 Þetta er Binky. Þetta er CS50. Við munum sjá þig í næstu viku. [Lófaklapp] 1054 01:05:55,840 --> 01:05:59,000 >> [CS50.TV]