[Musiqi ifa] DAVID J. Malan: All right bu CS50 edir bu həftə beş başlayın. Bu gün, sizin oturacaq yastıqları altında, bir şey tapa bilməz. Lakin yuxarıda, bir, bu tapmaq lazımdır üçün qiymətləndirmə kiçik mö'cüzə sizi ki, bütün işləri beş oyun. Sadəcə üzərinə kiçik dairə aradan qaldırılması üçün oynayan başlamaq üçün alt sinif qalan. Belə ki Xatırladaq, və ya müəyyən problem bilirik bu həftə sonu çıxdı dörd, başqa bir oyun yazılı daxildir. Lakin bu əhatə bu dəfə istifadə faktiki qrafik istifadəçi interfeysi, bir kimi mətn interface On beş oyun idi. Və irəlidə sizin yalan ki, oyun, Əgər siz hələ bu növbəti görmürsənmi olduğunuz halda, bu kimi bir az bir şey görünür. Mən terminal getmək gidiyorum burada gdb ildə pəncərə. Və mən irəli getmək və çalıştırmak üçün gidiyorum Siz əldə edə bilərsiniz olan heyət həlli adi kimi yeniləmə 50 çalışan sonra. Amma bir az daxil etmək gidiyorum gizli rejimi, bir az Pasxa yumurta, tərəfindən, Allah rejimi deyilən argv1 Allah qoymuşdur. Mən öz talimatları var öz onu çalışan problem kataloq seçin. Belə ki, indi siz tam versiyasını görmek Breakout oyun. Əslində, bu, heç əlləri növüdür. Belə ki, həqiqətən var - baxmayaraq wowed ola bilər - Allah rejimində həyata keçirilməsi üçün olduqca cüzi Breakout, on beş Oyunu fərqli olaraq, siz bəzi ele ola bilər hacker nəşr. Breakout bu Allah kifayətdir rejimi sadəcə, nə daxilən avar ilə? Yalnız nə üçün bərabər etmək üfüqi vəziyyətdə topu edir. Və belə uzun siz lockstep bu kimi bu oyun hərəkət top edəcək , heç, heç top miss heç vaxt və hər zaman qazanmaq lazımdır. Amma bu həftə hacker redaksiyada yalnız Allah rejimi daha çox var. Digər xüsusiyyətləri bir sıra var. Onların arasında, lazer. Belə ki, siz həqiqətən hövsələsiz almaq əgər kərpic güllələmə başlaya bilərsiniz və bir neçə başqaları. Və istədiyiniz kim sizin üçün standart qarşı hacker kalibrini nəşr, mən görürük ki, bu həftə hacker nəşr qəsdən bir Allah daha deyirəm, bir az daha doable rejimi beş Game idi. Bir uzanır axtarır və etdiyiniz Belə ki, əgər Siz bəzi əlavə əyləncə üçün arıyorsanız xüsusiyyətləri maraq əgər dive edin. İndi daha demək olar ki, mənim qeyd edək bir şey eləcə. Əgər bəzi hələ bilər gdb, gözəl olan, şəxsən toxundu. Amma indi həqiqətən istifadə almaq üçün vaxt Bu vasitə ilə bu və rahat etmək sizin həyatını çünki daha asan, həqiqətən. Gdb bir neçə Rob mühazirəsi Per həftə əvvəl geri ki, gdb bir ayıklama edir. Bu run imkan verir ki, bir alət var, sizin proqram ancaq bu addım, line-addım run xətti ilə, belə ki, siz ətrafında soxmaq bilər Əgər şeylər olur görmək ki, belə Siz çap edə bilərsiniz ki, dəyişənlərin dəyərləri. Bir sözlə, bu, çox daha çox verir printDef çox güc yoxdur. İndi admittedly, interfeys olduqca gizli deyil. Qara və ağ mətn interface çox hissəsi üçün. Əmrləri qədər sərt ilk xatırlamaq. Ancaq yarım bilər, baxmayaraq ki, bir saat, bir saat ki, upfront qoymaq onu vaxt investisiya, mənə etibar. Əlbəttə ki, dövr sonuna onu xilas edəcək daha bal gücündə bir sifariş ki, çox vaxt. Da həftə dive belə erkən Və Breakout baxımından, bilirik ki, Siz kimi uzun edə bilərsiniz bölüşdürülməsi kodu və ya öz kodu Sizin Pst4 kataloq davam edir. Siz gdb çalıştırabilirsiniz ki, bilirik. / Breakout. Bu açmaq niyyətindədir bu kimi bir pəncərə. Mənə özümü daha verim terminal pəncərə. Və sonra nə irəli getmək gidiyorum və bunu, yalnız çalıştırın deyil. Mən ilk fasilə nöqtəsini qurmaq üçün gidiyorum Əgər fasilə imkan verir geri, xüsusi yerdə icrası. Sadəcə gedirəm şeyə sadə saxlamaq üçün yazaraq yalnız line birində qırmaq bir nömrəli. Mənə həqiqətən bu pəncərə yenidən açmaq edək bir əldə çünki orada az kiçik. Belə ki, nə mən indi burada gidiyorum edir Mən terminal pəncərə açmaq əgər. Orada getmək, Hadi. Mən Dropbox Pst4 geri Belə ki, indi əgər və gdb axır. / breakout daxil edin, qeyd Mən bir qurmaq üçün qırmaq gidiyorum line birində fasilə point. İndi mən getmək gidiyorum irəli və növü axır. Və mən nə zaman, heç bir şey qeyd baş görünür. Heç bir pop up var. Heç bir qrafik var hələ istifadəçi interfeysi. Ben çünki Amma ki, başa düşülən deyil sanki mənim proqram line biridir. Və mən sürətli müvəffəq etdik ki, görürsünüz xüsusilə indi 62, bütün çünki bu faylı üst stuff deyil Şərh və sabitləri kimi şeylər və İndi stuff maraqsız. Belə ki, indi mən, əsas daxilində deyiləm bu xətt 62-da, görünür. Və bu yalnız paylanması kodu, geri. Mən, eyni, gedərək bu qədər açsam mənim açılan qutusu directory Pst4 daxil daxil, breakout.c daxil. Və mən aşağı və aşağı aşağıya fırladın və əgər, və mənə davam və yandırmaq imkan mənim xətt nömrələri. Mən aşağıya fırladın görürəm biləcəkləriniz, əgər line 62, tam line ki, biz durdurduk. Bu xətt burada, 62, edir biz olmaq olduğunuz yerləşir. Belə ki, indi gdb, mən irəli getmək və əgər yazın İndi növbəti, bu olacaq daxil edin ki, xətt icra. Və voiture, biz var g pəncərə deyilən. Nə GWindow ilə tanımadığı Əgər narahat etmək deyil, deyil. Spec kimi, bu ilə tanış edəcək yaxşı gözden geçirmek video sayı spec ilə əlaqədar. Amma indi bu edək az daha maraqlı. Mənə bu pəncərə üzərində hərəkət edək yan bir az. Mənə pəncərə bir az edək böyük mən daha çox görə bilərsiniz. Və indi mənə irəli gedək və yenidən növbəti yoxdur. Və kərpic var. Mən növbəti yenidən yazın edin İndi top oldu. Və mən növbəti yenidən yazın əgər indi mən avar oldu. Və xoşbəxtlikdən bu gedit deyil həqiqətən mənə göstərməklə əməkdaşlıq Mən istəyirəm hər şey. Amma indi növbəti yenidən əgər, Növbəti yenə, mən yalnız deyiləm bəzi dəyişənlərin elan. Və mən hər hansı bir çap edə bilərsiniz Bunlardan uşaqlar. Print kərpic, izləri yaşayır. İndi bunu davam edərsə Növbəti, mən olacaq ki, qeyd ki, loop daxilində. Amma kodu yerinə gedir Mən gözləyirik tam olaraq. Beləliklə, mən bu funksiya hit zaman, gözləyin klik üçün, bunu olacaq Bu sözün edir. Beləliklə, mən nəzarət itirmiş görünürdü proqram artıq. Gdb mənə bir tez verilməsi deyil. Amma narahat deyil. Mənim oyun get haradasa basın. Və voiture, indi line 86 gəlir. Belə ki, yenə də, bu, nəticə etibarilə, əvəzolunmaz var ayıklama problemləri. Sözün gezinmek bilər kodunuzu həyata və çox çap əşyalar, çox, daha çox. Tək indi üçün, bu alətlər olduqca qədər siz almaq lazımdır. Beləliklə, biz bir nəzər alaraq, əlbəttə ki, istəyirik indi Graphics, qəflətən. İndi bizim dünya bir az olur daha maraqlı. Və bəzi, bəlkə də, bilirik Biz bu var ki, online video siz müşahidə olduğunuzu şort problem dəstləri hissəsi kimi. Onlar qəsdən çəkilmiş olduğunuz ağ fonunda. Onların bəziləri tədris var Olan bəzi mətn rəsm Fellows örtdü ki, ekran onların tərəfində. Amma əlbəttə, bu, bütün deyildir real dünyada maraqlı. Bu yalnız bir mühazirə zalı edir böyük ağ ekran və fonunda. Və bizim gözəl istehsal komanda sort hər şey gözəl baxmaq verir həyata əkin tərəfindən fakt sonra və ya bir şey overlaying biz və ya istəmirik. İndi yalnız bu həftə həvəsləndirmək və həqiqətən, siz nəticədə getmək bilərsiniz kompüter elm. Yalnız problem sonra dörd seçin. Amma başqa cür və ya bütün sonra Kurikulum gözəl bu nə edə bilərsiniz baxımından bu gün nə xüsusilə qrafika. Əgər bəziləri bu görmüşəm bilər online ətrafında axan. Amma, mən sizə göstərmək istədiyiniz fikir yalnız bir dəqiqə neçə, nə bir fikir kompüter və nə CGI, kompüter qrafikası bu gün edə bilər bir tanış mahnı ilə və bəlkə də film. [MUSIC - Lana DEL ray, "Gənc və gözəl] HOPARLÖR 1: Bu, sadəcə bir az var gözəl, bəlkə də, necə hər yerdə - [Alqış] HOPARLÖR 1: mən yalnız endirildi. Amma bu, mən hesab edirəm ki, həqiqətən gözəl yalnız hər yerdə proqram və şifri və necə bu kimi alətlər həqiqətən. Belə ki istiqamətində bir dad var hansı bilərsiniz. Oh, çox Appliance gün. Yaxşı ki, həqiqətən faciəli vaxtı var Mən yalnız etməyə çalışmışıq nöqtəsinə verilir. Bütün sağ, elə başlamaq bildirin Fusion yenidən. Sonra mənə xatırladır. Bütün hüquqlar və bir əldə olmalıdır bir almaq əgər bir tərəfə e-poçt kimi görürsünüz. Bütün sağ, belə ki, ötən həftə geri biz geri soymaq bu başladı sonra simli kimi tanınır. simli olan bir veri növü xatırladır ki, CS50 kitabxana elan edib. Və bu təlim təkərlər hissəsi ki, indi çıxarmağa başlayacaq. Bu erkən bir faydalı konsepsiyası idi. Amma indi daha çox almaq olacaq maraqlı və daha güclü həqiqətən, başlıq altında görürəm ki, bir simli yalnız nə dedik idi? Bəli, belə bir qondarma char * var. Və orada * var ki işarə ünvanı, bir növ cəlb. Və belə ki, char * deyəndə yalnız demək kimin data type bir dəyişən bir İndi göstərici. Orada ulduz var ki yalnız bir elan o deməkdir ki, pointer deyilən. Və göstərici yəqin gedir ki, yerləşdiyi ünvan saxlamaq Əlbəttə, bir karakter. İndi niyə bu mənada edir? Bəli, bir simli nə başlıq altında? Yaxşı, bir müddət deyirdik olduğunuz başlıq altında bir simli ki, yalnız h-e-l-l-o, məsələn. Amma biz bu barədə söhbət etdik , mahiyyətcə, bir sıra edir. Və bir sıra sonra bir az görünür Bu hər biri ilə, bu kimi daha çox bir bite alaraq. Və sonra biz orada bildirib ki, sonra Geri burada xüsusi bir şey, backslash 0, ya null terminator. Bütün bu vaxt Belə ki, burada bir simli olmuşdur. Lakin, həqiqətən, simli deyil həqiqətən ünvanı. Biz görəcəksiniz kimi ünvanlarını, tez-tez Konvensiya ilə 0x ilə prefixed. 0x nə işarə edir? Hər kəs bilir? Belə ki, yalnız hexadecimal deməkdir. Beləliklə, siz PST olan, faktiki olaraq, geri bilər 1, hesab edirəm ki, isti-up biri suallar həqiqətən barədə soruşdular əlavə hexadecimal notation ikili və Ondalık. Və burada motivasiya ki, hexadecimal ilə 16 var sizin ixtiyarınızdadır rəqəm. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, sonra tərəfindən, b, c, d, e, f. Və bütün bu qədər saymaq olarsa, Siz 16 ümumi almaq. Belə ki, bu fərqli deyil 10 olduğu decimal, rəqəm, doqquz vasitəsilə 0. Bu ikili fərqli var biz yalnız 0 və 1 var. Amma yalnız bilərsiniz günün sonunda Eyni nömrələri təmsil, lakin qədər fərqli. Və hexadecimal ümumi çünki O çıxır - və biz bu görürsünüz sonra zamanı - hətta biz əldə kontekstində web proqramlaşdırma HTML və rəng kodları, hexadecimal gözəldir. Hər rəqəmli Çünki, çıxır mükəmməl dörd bit təmsil edir. Gözəl xətləri Belə ki, yalnız cür biz nəhayət görəcəksiniz kimi. Belə ki, bu ola bilər Ox123 və ya bir şey kimi, belirten ünvan 123 haradasa daxilində mənim kompüter yaddaş. Amma əlbəttə, bəzi problemlər yaranır çünki bu əsas və həyata keçirilməsi. Və mən bir zərbə etdi ki, xatırlayıram bu kimi bir funksiyanın icrası - Keçən həftə dash 0 dot c müqayisə ki, idi kimi baxdı, hətta sağ, sadəcə müqayisə etməyib iki strings düzgün. I üz əsas atılan etdik və mən atılan etdik üz şərh yalnız üzrə diqqət Burada maraq olan kodu. Bu buggy var, çünki qırmızı var. Nə səbəbdən? Yaxşı, üst orada mən elan zaman simli, nə həqiqətən davam başlıq altında? Yaxşı, mənə üzərində gidelim burada ekran və cəlb edir. Beləliklə, mən, yenə elan string s GetString. Belə ki, indi davam gedən və alıram həqiqətən nə üçün s cəlb edir. Burada kvadrat olacaq. Və mən iddia gidiyorum 32 bit var. Ən azı adətən, ən azı CS50 haqqında kompüter bir çox cihaz. Mən bunu s zəng etmək üçün gedirəm. Amma indi xatırlayıram ki, GetString çağırıb. Belə ki GetString yekunları Əlbəttə, simli. H-e-l-l-o istifadəçi növləri daxil edin simli salam geri olur. Və simli, biz yalnız dediyi kimi, bitir up yerdə kompüter yaddaşında sonunda bir backslash 0. Mən array kimi bu çəkmək lazımdır - və ya simvol bitişik blok - bu, həqiqətən edir. İndi nə GetString olunur həqiqətən qaytarılması? Nə qaytarılması edilmişdir GetString edib Bu zaman bütün? Yaxşı, biz əvvəlki həftə, demək, bir string qaytarır. Amma daha çox texniki, nə Yəqin qaytarılması GetString? Auditoriya: bir ünvan. HOPARLÖR 1: An ünvanı. Xüsusilə onun ünvanı qaytarır bu nə ilk bite. Mən yalnız bir, iki, üç istifadə saxlamaq onu rahat çünki. Bu ilk ünvanı qaytarır simli xarakterli. Və biz ötən həftə bildirib ki, ki, kifayət edər. Biz həmişə anlamaq bilər, çünki burada simli sonunda sadəcə bir müddət ilə, bəlkə artıq iterating loop və ya kimi bir müddət loop və ya bir şey ki, yalnız "backslash 0" axtarır xüsusi Sentinel xarakter. Və sonra bilirik ki string uzunluğu olmaq olur - Bu halda - beş. Belə ki, texniki GetString nə bu halda Ox123 qaytarır edir. Və texniki sonra nə olur ki, s daxilində, Ox123 saxlamayın. Günün sonunda hətta bu olsa yeni konsepsiya, göstəricilər, onlar etdiyiniz olunur yalnız dəyişənlər. Amma onlar bit saxlamaq üçün baş verən kollektiv bir ünvan təmsil edir. Belə ki, texniki cəhətdən bütün bunlar olur s saxlanılır Ox123 edir. Insanlar kimi deyil, biz - Bu gün irəli daxil olmaqla - həqiqətən, adətən, qayğı niyyətində deyil faktiki ünvan nə yaddaş bəzi yığın edir. Bu, sadəcə ətraflı aşağı səviyyədə var intellektual maraqlı ola bilər. Mən bu geri gedirəm. Və əvəzinə, daha yüksək səviyyəsi, yalnız demək ki göstəricilərinə bəhs etdiyiniz zaman Mən yalnız daha çox cəlb etmək gidiyorum də köçürür ki, istifadəçi dostu arrow Eyni fikir və uzaq özet ki, faktiki nə özəllikləri əsas ünvanı. Biz kodu geri İndi, əgər nə biz string t varsa, keçən həftə baş vermiş GetString bərabərdir? Salam yaxşı, mən əgər növü Mən almaq üçün gidiyorum bu dəfə yaddaş bir yığın. h-e-l-l-o backslash 0. Amma GetString adlı çünki ikinci dəfə - və mən baxaraq bu bilirik GetString üçün mənbə kodu - hətta bu salam idi ki, təsadüfi baxmayaraq iki dəfə çap, GetString deyil optimize üçün cəhd etmək niyyətindədir və ağıllı ola bilər. Bu yalnız bir yığın almaq olacaq olan kompüter, gələn yaddaş başqa ünvanda olacaq. Özbaşına yalnız 456 Deyək. Və sonra nə qayıtmaq üçün gedir? Bu 456 qaytarmaq olacaq t bu saxlamayın. Bəs həqiqətən də, davam edir sol tərəfində mən bir yığın var yaddaş, 32 bit adətən. Və orada Ox456 getmək gedir. Ancaq yenə də, mən bu maraqlı deyiləm artıq xüsusi nömrələri. Mən yalnız abstractly gidiyorum ox kimi cəlb edir. Beləliklə, bu artıq yeni bir izahı yoxdur. Lakin bu ki, eyni dəqiq fikir Bütün bu zaman baş vermişdir. Və bu səbəbdən, sonra bu ilk müqayisə versiyası arabası idi Keçən həftə niyə? S-dək təşkil bərabər, əgər nə zaman Əgər həqiqətən nə t başlıq müqayisə altında? Siz ünvanları müqayisə edirik. Və yalnız daxilən, aydın, Ox123 bərabər Ox456 etmək niyyətində deyil. Bu ədəd, həmin bit yalnız fərqlidir. Və beləcə ardıcıl, keçən həftə bildirib siz fərqli şeylər yazın, hətta sözləri kelimesi kelimesine eyni idi. Beləliklə, biz bu düzeltmek. Layman nin baxımından, düzeltme nə idi? Auditoriya: bir funksiyası istifadə edin. HOPARLÖR 1: funksiyası istifadə edin. Və ya ulduz mütləq cəlb olunur, lakin nə bir funksiyası istifadə? Auditoriya: strings müqayisə etmək üçün. HOPARLÖR: 1 strings müqayisə etmək üçün. Belə ki, burada əsas problem idi Mən yalnız nəzərdən ki, müəyyən etmək üçün strings keyfiyyət ünvanlarını müqayisəsi. Və açıq-aydın ki, indi bir dəfə yalnız lal var siz neler anlamaq başlıq altında. Həqiqətən görmək üçün strings müqayisə əgər onlar ki, bir insan yol bərabər istəyirik iki strings bərabər hesab olardı biz onları xarakteri ilə müqayisə etmək lazımdır xarakter üçün xarakter. İndi həyata bilər var Bu çox maraqsız. Amma familiarly, biz istəyirik loop üçün istifadə edir. Və yalnız s bracket et t bracket i qarşı i. t bracket qarşı bracket i müsbət 1 i plus 1, s, daxili loop bir növ. Və hesab edirəm ki, hər iki simvol spot əgər fərqlənir, və ya ooh ki, həyata əgər, s t çox t daha qısa və ya daha uzun Mən dərhal, yalan deyə bilərəm onlar eyni deyilik. Amma s t vasitəsilə almaq və deyirlər ki, əgər eyni, eyni, eyni, eyni, eyni, son həm strings, deyə bilərəm Doğrudur, onlar bərabərdir. Yaxşı, təşəkkürlə, il əvvəl kimsə bizim üçün kodu yazıb. Və onlar StrComp çağırıb Simli müqayisə üçün. Və bu bir az counter var olsa belə, o halda intuitiv, StrComp 0 qaytarır iki strings, S və T eynidir. Lakin bu mənfi dəyər qaytarır əgər s və ya t əlifba əvvəl gəlmək lazımdır o gəlsə müsbət dəyər t əlifba sırası sonra. Siz heç bir şey düzmək istəyirəm əgər, bu StrComp faydalı olduğunu çıxır. Yalnız demək deyil, çünki heç bir və ya bəli, bərabər və ya deyil. Bu sifariş hissi verir Bir lüğət qüdrət kimi. StrComp Belə ki, s vergül t bərabərdir 0 vasitələri bərabərdir ki, strings həqiqətən bərabərdir. Kim bu funksiya yazdı Çünki il əvvəl ehtimalla loop üçün istifadə kimi və ya bir müddət loop və ya bir şey yenə simvol üzərində inteqrasiya və təkrar. Ancaq problem iki burada yaranmışdır. Bu copy0.c idi. Və qırmızı iki bu flawed, çünki. Və biz burada nə idi? Bəli, ilk növbədə GetString çağırıb. Və mən s qaytarılması dəyər saxlanılır. Belə ki, olduqca çox eyni var şəkil bu üst hissəsi. Bəs bundan sonra gəlir? Yaxşı, mənə davam və xilas edək Bu bütün dəstə edir. Biz biz yalnız vaxt geri olacaq İndi uyğun olan s var, xətti var biri. I yoxlayın. S-dək təşkil edin 0 bərabərdir. İndi tez tərəfdən qeyd zaman GetString 0 qayıtmaq bilər? Kifayət qədər yaddaş var deyil. Sağ? Ki, bu baş verəcək ki, nadir əlbəttə ki, bir kompüter haqqında və ya Megs yüzlərlə var RAM hətta gigs. Amma bu, nəzəri, qayıtmaq bilər 0, xüsusilə, əgər istifadəçi əməkdaşlıq etmir. Siz var kimi iddia yolları var inputted bir şey və oyun Qaytarılması daxil GetString Səmərəli 0. Belə ki kontrol olacaq. Əgər hər hansı başlamışdır Çünki əgər , artıq bölümleme çatışmazlıqlar almaq - olan yəqin ki, bir mənbə olmuşdur Bəzi məyusluq - o demək olar ki, həmişə nəticəsi yaddaş bağlı səhv. Elə bir ilə bağlı messed siz dərk etməyib hətta əgər göstərici bir göstərici var idi. Belə ki, seqmentasiya induksiya bilər istifadə edərək həftədə bir hələ çatışmazlıqlar loop və ya bir müddət kimi bir şey çox uzaq gedərək loop və bir sıra bəzi serialın sərhədləri keçmiş ki, Siz həftə iki elan xüsusi. Siz hətta problemi bunu bilərdi Breakout dörd seçin. Yəqin görməmişik baxmayaraq üçün paylama kodu hər hansı bir ulduz Breakout, bu çıxır ki, həmin GRect və GOval və digər bu kimi əşyalar, o faktiki göstəricilər var başlıq altında. Bizim kimi Ancaq Stanford, gizlədir növ ki, ətraflı ən azı kitabxanalar üçün məqsədləri, çox biz kimi string və char * üçün. Lakin GRect və GOval və bu bütün Siz uşaqlar və ya şeyi istifadə ediləcək Bu həftə nəticədə var yaddaş ünvanları. Siz yalnız bilmirəm. Belə ki, bəlkə, sonra təəccüblü deyil bəzi üzərində səyahət edə bilər ki, seqmentasiya çatışmazlıqlar. Amma indi burada maraqlı nə var biz 0 kontrol sonra əgər string t s olur. Yaxşı, mənə t bəyan edək. Mən bir kvadrat kimi cəlb etmək gidiyorum 32 bit, bu t deyirik. Və sonra mən gedirəm s olur. Yaxşı ki, nə deməkdir? Bəli, bu düşünmək üçün bir az çətindir haqqında müdrik şəkil. Lakin edək haqqında düşünmək x daxilində nə var? Bu dəyişən daxilində sözün nədir? Dəyəri Ox123. Yalnız Beləliklə, mən deyəndə string T S olur ki, sanki sayı, deməkdir s, bu Ox123 və bu Ox123 qoydu. Və ya pictorially, əgər mən cür abstrakt üz ki, ətraflı onu o sanki bunu təsiri Bu həmçinin. Belə ki, indi, keçən həftə geri hesab zaman biz kapitalist T. I davam T bracket 0 etdi. Bəli, bu bir T bracket 0, belə olsa pointer, onu sanki müalicə edə bilərsiniz bir kvadrat ilə bir sıra var bracket notation. Beləliklə, harada T bracket 0 nədir? Bəli, bu h var. Və biz kodu ki, xətt istifadə edərkən, C type.h olan iki yuxarı, header file ki, nerde bəyan edir. Bu H. hərflə Amma edirik Əlbəttə ki, ki, eyni dəqiq h var s daxilində, belə danışmaq. Və indi siz və ya dəyişib kapitallaşdırılır orijinal və həm də surəti deyilən. Siz bir surəti etmədiyini Çünki bir insan onu istəyirəm ki, yol. Belə ki, burada düzeltme, nə idi copy1.c keçən həftə? Funksiyaları, belə ki, biz, həqiqətən ola bilər simli surəti. Və əsaslı, biz nə lazımdır simli surəti üçün nə? Yaxşı, burada bu yaşıl versiya Ben kifayət qədər aşağı səviyyədə edəcəksən. Funksiyaları həqiqətən var onlar bu kömək edə bilər. Lakin ən əsas biri və ən tanış bir, ən azı, tezliklə olacaq bizə tanış, aşağıdakı deyil - Belə ki, ilk line bir yaşıl kodu indi. Mən yalnız char * s rewrote. Heç bir funksional var var fərq. Mən yalnız CS50 kitabxana üz atdı və Mən bunu bir char * edir nə zəng alıram. İndi nöqtə, nöqtə, nöqtə, var idi, çünki deyil ki, bəzi səhv yoxlanılması yenə haqqında danışmaq maraqlı. Belə ki, indi t elan edilir. Bu da bir char * edir. Belə ki, mən bir az kvadrat çəkdi əvvəl kimi ekran. Amma sağ tərəfində, malloc, biz yaddaş ayrılması olduğunu söylədi. Belə ki, yaddaş bir yığın ayırırlar. Və biz, həqiqətən, neçə bayt etmək ayırmaq istəyirəm, görünür edir? Yaxşı, s simli uzunluğu. Bu salam ki var Belə ki, əgər beş olacaq. Biz h-e-l-l-o demək lazımdır. Beş bayt belə. Amma sonra 1 plus, niyə 1? Bu 0 xarakter. Biz bu adam üçün otağı tərk etməyin, biz təsadüfən bir vəziyyət yarada bilər simli olduğu h-e-l-L-o. Və sonra növbəti dəfə GetString edir adlı və mən məsələn, yazın David, D-a-v-i d, kompüter gedir s əslində düşünmək h-e-l-l-o-d-a-v-i d var, çünki Bu sözlər arasında fasilə yoxdur. Belə ki, fasilə lazımdır. Beləliklə, biz beş istəmirik. Biz altı bayt istəyirik. Və bytes deyirəm. Amma bu char həqiqətən vaxt ölçüsü var. Texniki char demək olar ki, həmişə bir byte. Amma yalnız bizim kodu portativ etmək, belə ki, üzərində işləyir, belə ki, danışmaq müxtəlif kompüter hətta bilər, əgər altındakı qədər fərqli ola başlıq, mən ümumi olaraq gidiyorum char demək ölçüsü ki, Mənim kodu həmişə çalışır. Və mən yalnız derleyeceğiz yoxdur Mən kompüter yükseltmek və ya istifadə çünki bir sıra müxtəlif platforma. Belə ki, I 6 dəfə ölçüsü var 1 olmaq olur bir char. Belə ki vasitələri malloc bilər Mənə altı bayt verir. Həqiqətən etdiyini nədir? Yaxşı, mənə burada vaxt geri roll imkan biz hekayə olduğu üçün. Burada geri Belə ki, mən bəyan etdik t adlı char *. İndi altı bytes üçün malloc çağırıb etdik. İndi isə o altı cəlb etmək gidiyorum yalnız serialın əvvəlki kimi bayt. Amma həqiqətən nə bilmirəm Bu serialın içərisində. Siz yaddaş ayrılması, əgər çıxır ki, bəzi var ki, etibar edə bilməz orada məlumdur dəyəri. Bu şey tərəfindən istifadə edilmiş ola bilər başqa, bəzi digər funksiyası, bəzi digər Əgər wrote kodu xətti. Beləliklə, biz ümumiyyətlə bu zibil arayacaðým dəyərlər və, bəlkə də, onlara heç-heçə sual işarələri, yalnız ifadə edən biz orada həqiqətən nə bilmirəm. Və belə uzun biz heç bir böyük var o üzerine kifayət qədər ağıllı zibil nömrələr dəyərlər və ya Biz qayğı ki chars. Belə ki, bu halda nə mən nə edəcəyəm? Yaxşı, mənim line kodu Növbəti, mən dörd var. i 0 almaq int, n alır s simli uzunluğu. Loop üçün belə bir tanış. Mən daha az və ya n bərabərdir olan adətən üstündür. Ancaq bu dəfə qəsdən var. I + +, və sonra mən sadəcə bunu t bracket i s olur. Mənim şəkil bu kimi görünür, çünki t saxlanılır bu an deyil yaddaş ki, təsadüfi yığın ünvanı kimin dəyərlər məlum deyil. Amma tezliklə t bracket kimi Burada məni qoyur 0. Və orada nə tərtib əldə bitir? Biz h qoyulması olacaq. Ki, s bracket 0 budur çünki. Və sonra eyni şey e və l, l, o. n, niyə vasitəsilə getmək idi n bərabər? Da 0 xarakterli idi. Belə ki, yalnız sonra, aydın olmaq, əgər mən həqiqətən üçün silmək nə bu zibil dəyərlərdir və sonra həqiqətən cəlb Mən gözləmək nə, bu s bracket 1, 2, edir 3, 4, üstəgəl ki, arxada oldu yeni xarakter. Və indi biz dot keçmiş davam edərsə, Bu doğru versiyası nöqtə, nöqtə və kapitallaşdırılmış t bracket 0 edirəm ki, Əlbəttə, böyük hərflə etmək yalnız bu Burada oğlan, hansı konseptual, nəticədə qolu oldu. Belə ki, bütün göstəricisidir. Və həftə üçün onlara istifadə etdik İndi strings kontekstində. Amma başlıq altında onlar istəyirik bir az daha kompleks. Amma bu onlar haqqında düşünsəniz bədii forma onlar istəyirik ki, təklif Onlar yəqin ki, bütün qorxudan deyil İlk baxışdan görünə bilər, xüsusilə də yeni sintaksis ilə. Göstəricilərinə hər hansı bir sual, strings və ya chars? Bəli? Auditoriya: geri getmək edə bilər Bu [işitilemez] üçün? HOPARLÖR 1: Sure. Auditoriya: Sizin son gəlmək Belə ki, necə line, bir * t xətti yoxdur və * s xəttində? Siz istinad yoxdur - HOPARLÖR 1: Ah, həqiqətən yaxşı sual. Neden * t və * s yoxdur? Çünki bizim kimi qısa, keçdiyimiz həftə funksiyası dəyişdirmək, mən ki, demək idi siz bir göstərici vasitəsi var Biz kimi orada getmək olan fiziki səhnədə, həqiqətən oldu ulduz operator istifadə edin. O çıxır ki, bu kvadrat mötərizə notation biz sintaktik arayacaðým nə yalnız bir sexy yolu olan şəkər, üçün, bu stenoqrafiya notation deyərək siz təsvir etdiyiniz dəqiq nə. Amma bir az daha asan var. Və edilməsi riski daha çox görünür bu olmalıdır çox mürəkkəb nə həqiqətən burada davam aşağıdakı kimidir - Mən deməkdir * t ki, əgər getmək ünvanı t saxlanılır. Belə ki, sanki saxlanılması t əgər ki, h ünvanı ilkin * t vasitələri burada gedin. İndi, t bracket 0 nə deməkdir? Eyni dəqiq şey. Bu, sadəcə bir az daha çox istifadəçi var yazmaq üçün dost. Amma mən hələ həyata deyiləm. Mən yalnız * t * s olur deyə bilmərəm. Çünki sonra nə olacaq? Mən h, h, h, f, h qoyulması olarıq bütün şey verir. Sağ? * T Çünki t ünvana gedin. Amma biz bir loop daxilində istəyirik. Və nə dəyər mən incrementing am Əlbəttə, hər bir iteration haqqında? i. Amma imkan var burada, sağ? Bu əldə kimi bu hiss olsa bir az daha mürəkkəb kvadrat-bracket notation çox Biz bir neçə dəfə istifadə etdiyiniz - Mənə orada mənim h dəyişiklik geri edək - indi bir az əldə olunur, baxmayaraq ki, meraklısı, əsas fikir, əgər * t burada deməkdir və * t yalnız t ünvana gedin. Amma t ünvan nə idi? Biz istifadə saxlamaq sayı? Ox456 kimi, ki, geri gətirsin yalnız müzakirə naminə. Yaxşı, mən də e almaq istəyirsinizsə, t simli, mən yalnız getmək istəyirəm mahiyyətcə, 456. Daha doğrusu, 457. Mən yalnız bir əlavə etmək lazımdır. Amma doğru, bunu edə bilər? T, mən rəsm saxlamaq, hətta Çünki İndi bir arrow kimi, o, yalnız bir var sayı, Ox456. Və mən bir əlavə və ya daha çox ümumiyyətlə, mən ki, mən əlavə əgər Mən istəyirəm tam olaraq əslində almaq. Beləliklə, mən həqiqətən bu əgər - və bu indi deyirlər nə pointer hesab - Mən bu xətt edə bilərsiniz. Səmimi, olan, mən aydın və hesab edirəm ki, oxumaq üçün bir az daha çox istifadəçi dostu. Amma bu heç də az düzgün deyil. Kodu Bu xətt artıq istifadə edir göstərici hesab. Bu getmək deyən oldu aşağıdakı ünvanı - t başlanğıc nə olursa olsun, hansı olan ilkin t plus i ki, böyük olan, 0 edir. Ki, t əvvəlində deməkdir, çünki plus 1, plus 2, üstəgəl 3 və s. S, eyni iş. Bu belə sintaktik şəkər. Amma anlaşma nə həqiqətən davam başlıq altında, mən iddia edirəm özü və əslində faydalıdır. Orada deyil indi deməkdir, çünki daha sehrli davam başlıq altında. Çox daha çox var niyyətində deyil sizin üçün qabığı geri edə bilər ki, qat-qat. Bu c edir. Bu proqramlaşdırma edir. Sual Həqiqətən yaxşı. Bütün sağ, belə ki, bu uşaq arabası idi Mən əvvəllər istinad proqramı. mübadilə flawed idi. Iş görünür Əgər. Yalnız süd ilə kimi və Xatırladaq ki, ki, portağal şirəsi - I başlayan bu günki nümayişin içməli. Belə ki, yalnız portağal şirəsi ilə kimi süd, biz istifadə etmək var idi müvəqqəti dəyişən tmp, bir keçirəcək müvəqqəti olaraq belə ki, sonra ola bilər b yeniləmə sonra öz dəyərini dəyişdirmək və. Amma bu funksiyanı dedik, və ya bu bu funksiya olan proqram yazılı səhv və flawed idi, niyə? Bəli? Auditoriya: [işitilemez]. HOPARLÖR 1: Məhz, zaman Siz svop zəng - və ya daha çox, ümumiyyətlə, zaman ən hər hansı bir funksiya zəng - ki, funksiyası dəlilləri əgər ibtidai, belə danışmaq, ints və chars və çiftler və üzüb gedirdi, hər şeyi olmadan ulduz, siz surəti keçir mübahisə. X 1 idi və y 2 Belə ki, əgər gedir 1 olmaq və b 2 olacaq. Lakin onlar müxtəlif chunks olmaq olacaq bit, müxtəlif chunks ilə saxlanılması üçün baş yaddaş eyni dəyərlər. Bu Məcəllənin mükəmməl super A və B dəyişdirmə edir. Bu dəyişdirmə heç yaxşı - - Ötən həftə nümunə x və y. Yenidən, onlar istəyirik, çünki səhv daxilində. İndi biz bu təyinat haqqında necə getmək idi? Biz funksiyası etmək idi bir az uglier baxmaq. Ancaq yenə də, hesab edir Bu yalnız deməkdir. Və həqiqətən, ardıcıllıq üçün, mənə bildirin bu eyni belə bir şey dəyişmək biz yalnız nə. Mən keçən həftə qeyd edildiyi kimi, deyil o gedir olsun. Əslində, adətən siz qoymaq olardı dəyişən adının yanında ulduzu. Amma bir az daha asan olacağını düşünürəm ki, yanındakı * hesab bu məna kimi data type bir göstərici var Bu halda bir int etmək. Mən burada nə edirəm? Mənə bir int vermir deyən alıram başqa int sonra, onlara və b çağırır. Mənə bir int ünvanı verin. Mənə bir int ünvanı verin. O və b müraciət edin. Və sonra * notation aşağı istifadə edərək, Aşağıdakı göstərilən ünvanlardan hər getmək kimi ya almaq üçün lazım və ya onun dəyərini müəyyən edir. Lakin burada bir istisna var. Niyə tmp yanında * yoxdur? Niyə, məsələn, bunu yoxdur? Mən bütün getmək lazımdır kimi hiss həyata və bütün şey düzəldirik. Bəli? Auditoriya: [işitilemez]. HOPARLÖR 1: Mən elan yoxdur bir simli kimi tmp. Beləliklə, bu, bu halda, elan edirik bir tmp bir int ünvanı olmalıdır. Amma ki, mən istəyirəm çox nə deyil səbəblərdən bir neçə. Auditoriya: Siz onları dəyişdirmək istəmirəm. HOPARLÖR 1: Məhz, mən dəyişdirmək istəmirəm tmp bir şey. tmp yalnız həftə bir stuff. Mən istəyirəm Bütün dəyişən deyil Bəzi sayı saxlamaq üçün. Mən hətta ünvanları haqqında qayğı yoxdur bu anda. Mən yalnız 32 bit ehtiyac və ya belə bir int saxlamaq üçün. Və mən bu 32 bit qoymaq istəyirəm nə, necə deyərlər, bir deyil, yalnız daha dəqiq desək, bir də budur. Bir ünvan olduqda, * Bir deməkdir, çünki orada getmək və dəyəri 1 almaq. Misal üçün, ötən həftə nümunə və ya b işində, 2 dəyəri almaq. Beləliklə, nə həqiqətən olub? Mənə olacaq ki, burada bir şəkil çəkmək edək yalnız bu gün bir hissəsi ayrı tease. Lakin bu görünür davam edəcək çox bir müddət. Bu, mən iddia, nə kompüter edir yaddaş bir çalıştırdığınızda kimi görünür proqram, hər hansı bir proqram. Siz çox üst bir proqram çalıştırdığınızda bilgisayarınızın RAM - belə hesab Sizin bu düzbucaqlı, həqiqətən, kompüter RAM və ya yaddaş, bütün 101 bu milyard bayt, bütün iki milyard bayt, onun bütün iki gigabayt, Siz miqdarı nə olursa olsun, nin bir düzbucaqlı kimi cəlb edək. Bir proqram çalıştırdığınızda və mən iddia edir ki, Microsoft Word və ya Chrome kimi bu kimi və ya bir şey ki, bit Microsoft və ya Google yazdı - həmin proqramların hallarda - kompüter yaddaş instantly daha icra edə bilərsiniz tez və fed CPU daxil olan kompüter beyin deyil. Və TAM onlar çox da depolanmaktadır Proqram üst, belə danışmaq. Yəni, bu bir yığın deyil yaddaş, siz ikiqat tıkladığınızda Microsoft Word, bit gəlib sabit off. Onlar RAM instantly almaq. Və biz çox üst onları itələmək lazımdır konseptual bu düzbucaqlı. Bəli, yaddaş istirahət müxtəlif şeylər üçün istifadə olunur. Çox üst siz başlamaq bax məlumatlar uninitialize. Bu, çox hissəsi üçün, nə var sabitləri və ya qlobal dəyişənlər ki, dəyərləri var. O başqa vaxt, lakin daha çox. Sonra olan yığın var biz qayıda bilərsiniz. Amma alt olan hissəsi xüsusilə indi ilgili. Bu sözdə yığını var. Belə ki, yalnız burada ən hər hansı D zalında istəyirəm kampus, bu qablar var ki, yalnız olan bir-birinə üst yığın Siz ərzaq və etajer qoya bilər. Bir kompüter sistemi olan yığını çox oxşardır. Biz istifadə kimi, tray isə başqa yemək zalı, əlbəttə, nəzərdə tutulur şeyi qablar keçirmək və ya çərçivəsində - biz onlara zəng edəcəyik kimi - bir kompüter ilə yaddaş saxlamaq üçün istifadə olunur dəyişənlərin və dəyərlər. Beləliklə, nə həqiqətən davam edir başlıq altında? Bəli, mənə artıq çevirmek imkan burada ekran. Və gələk yalnız diqqət bir an üçün aşağı hissəsində. Bu mənim alt hissəsi deyil kompüter yaddaş çıxır mən funksiyası əsas zəng - ki, səmimi, baş avtomatik mənim üçün - Mən də yaddaş yığın almaq mənim RAM alt belə danışmaq. Əsas olduğu və bu yerli dəyişənlər gedin. Ü argc və argv bəlkə bu getmək və hər hansı bir dəyişənlər I əsas daxilində bəyan edir. Onlar altındakı son mənim kompüter RAM. İndi əsas zənglər funksiyası Güman svop kimi, bu kimi keçən həftə idi? Yaxşı, biz əhəmiyyətli bir yeni bir tray qoymaq yaddaş mənim yığın üzərində yeni çərçivə. Və bu kimi təsvir etmək gidiyorum svop funksiyası aid. İndi svop daxilində nə var? Yaxşı, keçən həftəki proqramı əsasında və Biz yalnız bir alıntı gördüm bir, svop-nin çərçivə daxilində və ya svop üzrə tray, nə dəyişənlər var? Bəli, bir və b. O, onun yerli dəlilləri idi üstəgəl üçüncü, tmp. Belə ki, həqiqətən, bu heç-heçə edə bilər bir az daha temiz. Mənə davam və etiket əvvəlki halına qaytar edək. Və nə ki, mənə iddia edək? bir yəqin ki, burada son gedir. B bura qədər gedir. Və tmp burada bitirmək üçün gedir. İndi sifariş bilər bir az fərqli ola bilər. Amma konseptual bu fikirdir. Və yalnız kollektiv, bu nə biz mübadilə nin çərçivəsində zəng və ya olacaq yeməkxana tray. Əsas və eyni məşğul olur. Amma yenidən deyil. Amma ki, olduğu argc və argv və hər hansı bir x və y kimi onun yerli dəyişənlərin eləcə də ola bilər. Belə ki, indi həqiqətən neler hesab Əgər mübadilə zəng zaman. Kimi svop zəng zaman, icra kodu Bu, siz də, keçən edirik buggy versiyası və b kimi x və y surətləri. Mən indi bu çəkmək yoxdur Belə ki, əgər ekranda - bu daha yaxşı almaq var - Mən özümü söyləyirdim hekayə belə bu buggy versiyası olarkən biz sanki və b keçən mübadilə zəng integers kimi, nə həqiqətən baş verir? Yaxşı, nə həqiqətən baş bu. Mənə davam və yalnız əvvəlki halına qaytar edək burada yer təmizləmək üçün. Belə ki, bu, mənim kompüter yaddaş. Mən əgər, misal üçün - həqiqətən edək ki, bu yolla nə - Mən bu saxlanılması, x olduğunu iddia əgər Elə ötən həftə kimi dəyəri 1. Bu dəyəri saxlanılması, y 2 yalnız ötən həftə istəyirəm. Və bu, mən svop zəng zaman əsas deyil bununla və özümü çıxış verilməsi b və tmp, mən iddia etmək gidiyorum Bu və bu 1-dir. Bu b edir. Bu 2-dir. Bu tmp adlanır. Və ilkin, bəzi zibil dəyəri Mən, həqiqətən, bu, bir mağaza qədər olan 1-dir. Sonra davam və dəyişdirmək ne olacaq? B dəyəri. Və indi mən burada iki. Və sonra biz b tmp alır bildirib. Yenə ağlı başında olma kontrol kimi, üçüncü burada kodu xətt sadəcə bu bir, b tmp olur. Və beləcə nəhayət, mən nə etməliyəm? Mən irəli getmək və b olmaq dəyişmək nə tmp dəyəri 1 olan edir. Mən yenə tmp toxunmayın. Amma indi problem tezliklə svop kimi yekunları, bu verilməsi deyil, çünki bəzi dəyəri geri geri dönüş yoxdur, var bəyanatda bu, açıq-aydın. Həqiqətən nə olub? Bəli, mahiyyətcə bütün bu yaddaş - OK, yəqin pozan bəyənir bir zamanda yalnız bir barmaq - yalnız yox. İndi əslində bu deyil yerdə gedir. Amma o hesab edə bilər İndi sual işarələri kimi. Artıq, çünki həqiqətən istifadə. Və heç bir şey o dəyərləri ilə aparılır. Belə ki, və yaşıl versiyası halda Bu kodu, əvəzinə nə olunur svop keçdi? Belə ki, müraciət edir. Belə ki, x ünvanı və y ünvanı. Biz elə bu hekayə son bir yenidən demək vaxtı və mən, həqiqətən, yenidən swap çəkmək lakin göstəricilər ilə bu, bir olan b olan və bu olan tmp, nə əslində bu yaşıl bir saxlanılır Mən keçən alıram mənim kodu versiyası ünvanlar? Bu x bir göstərici olacaq. Beləliklə, mən bir arrow cəlb edə bilər. Ancaq nin eyni özbaşına istifadə edək əvvəlki kimi nümunəsidir. Gəlin bu ki, Ox123 kimi bir şey. Bu Ox127 olacaq, çünki bu, çünki dörd bayt üz var bir int, belə Ox127. Və yenə, mən bir azadlıqlarının alaraq alıram nömrələri ilə. Onlar ki, çox kiçik istəyirik həqiqətən fərqli qaydada və. Amma bu necə şəkil indi fərqlidir. Amma bu yaşıl kodu istifadə edərkən və mən int tmp * almaq yoxdur. , Aşağıdakı nə etmək * vasitələri bir var ki, müraciət və ona getmək olan 1-dir. Və mən tmp qoymaq budur. Bu vaxt, kod növbəti xətti burada * a b olur ki, nə deməkdir? Yaxşı, * a, belə ki, burada getmək olur * b, orada getmək deməkdir. Və oraya dəyəri qoymaq deməkdir. Nəhayət, kod son xətt sadəcə * b tmp alır bildirib. Belə ki, b deyir getmək və onu yazmaq Bu halda, davam edən tmp yenə, 1 olmalıdır. Və bu niyə yaşıl versiyası Kod işləri, qırmızı isə versiyası etmədi. Necə aşağı ki, bütün yalnız boils yaddaş idarə və harada edir həqiqətən, sizin yerləşdirilib kompüter RAM. Və indi üçün, ki, hər biri yığını üçün istifadə olunur ki,. Susmaya haqqında suallar? Göstəricilərinə haqqında? Və ya svop haqqında? Bütün sağ, belə malloc, geri, bu kimi bir şey idi. Bu super sadə nümunəsi idi. Və bu biri olduğunu Binky çox olsa, bizə təqdim tez sinif sonunda. Dammit, orada biz yenə getmək. Beləliklə, bu nümunə olurdu ki, Binky olsa bizə təqdim qədər tez sinif sonunda. Və burada biz həqiqətən malloc istifadə ikinci dəfə. İlk dəfə Çünki biz üçün istifadə kifayət qədər RAM yaratmaq, kifayət qədər RAM ayrılması bir simli saxlamaq üçün. Bu dəfə Binky sadə saxlanılır. Belə ki, yalnız saxlamaq üçün var bir int, yəqin. Və tamamilə gözəl deyil. Bu, səmimi, bir az qəribə bir int ayrılması malloc istifadə edin. Amma Nick claymation nöqtəsində idi həqiqətən yalnız nə hekayəsini izah olur və ya baş vermir siz yaddaş pis davranmak. Belə ki, bu halda, bu proqram bir neçə şey idi. Burada Birinci halda, o, bəyan bir göstərici bir int x çağırıb. Daha sonra bir göstərici elan bir int Y çağırıb. O, x nə mağazalarında? Indi başqası. Görə x saxlanılır olur nə Bu proqramın üçüncü xətt? Auditoriya: [işitilemez]. HOPARLÖR 1: Bəli, tamamilə bytes, hər deyirlər. İndi daha dəqiq olun. X nə geliyor? Bir ünvan, mən bunu eşidəndə düşünürəm. Belə malloc nə qayıtmaq edir? malloc behaviorally ayırır yaddaş yığın. Amma necə ki, siz onu erişim verir? Bu nə qaytarır? Ilk byte yerləşdiyi ünvan yaddaş yığın edir. İndi bu super sadədir. Bu, sadəcə bir byte var, hansı deməkdir biz geri əldə etdiyiniz müraciət edir bütün şey ünvan. Beləliklə x saxlanılır ki, ünvanı yaddaş ki, yığın edir. Bu vaxt, sonra nə olacaq? Yəni əslində, bu davam imkan və bunu real sürətli cəlb edir. Burada ekran üzərində getmək və əgər biz bu həyata oynamaq int * x və int * y mənim üçün nə edəcək? Mən yalnız nə olacaq ki, iddia bu kimi bir şey və bu x zəng və Bu və bu y çağırırıq. Bu vaxt, kod üçüncü xətt bir int ölçüsü ayırmağa gedir, ola olur - dedim üzr əgər - Mən bir int nəzərdə bir əvvəl Tipik bir kompüter dörd bayt. Ki, CS50 cihaz ən azı. Beləliklə, bu ayrılması gedir ki, kim bilir? Somewhere buradan. Və bu, bəzi saxlanılır ünvan öküz, kim bilir? Amma nə geri almaq olacaq ki ünvan. Amma biz pictorially bu çəkmək lazımdır ki kimi yalnız bir arrow. İndi növbəti line * x 42 olur. * X layman nin baxımından nə deməkdir? Sadəcə getmək. Ki, ünvana gedin. Və ya başqa sözlə, aşağıda arrow və orada 42 qoydu. Ancaq daha sonra pis bir şey baş Binky üçün, sağ? Ki, xətt, burada beş Xatırladaq * y olur 13, həqiqətən bir şanssız sayı, bizim üçün nə etdi? Yaxşı, * y vasitələri var gedin. Bəli, bu verilməyib , dəyəri hələ, sağ? Kod y olan yoxdur şey başlatılmış. Biz x başlatılmış olunur ki, bir ünvanı. Lakin y top elan edilib. Lakin sonra vergül, heç bir dəyər həqiqətən qoyulub. Belə ki, bu zəng etmək üçün ədalətli nin bir zibil dəyər. Kim nə bilir? Bu istifadə olunmuşdur ki, bit qalıqları var kod bəzi əvvəlki xətti ilə mənim proqramı. Mən getmək demək əgər, bu kimi Mən bu arrow olduğu heç bir fikrim yoxdur sonuna qədər gedir. Zaman adətən ki, var bir seqmentasiya günah almaq. Yanlışlıkla dereference varsa, üçün danışmaq, və ya deyil ki, bir ünvana getmək əslində bir qanuni ünvanı, pis şeylər baş verir. Və nə oldu dəqiq Binky düşünürük. Belə ki, Xatırladaq ki, Nick idi ki, hekayə burada izah eyni ideyası idi nə kimi Mən illüziya ilə tərtib etdik orada şurası təbaşir. X və Y elan olunur. Sonra həcmi ayrılan bir int və x onu saxlanılır. Sonra Biz növbəti line * x. Bu Nick sehrli çubuq olmuşdur dereferencing edir. Bu yaddaş 42 qoymaq x ilə işarə etdi. Amma bu olduğu şeylər horribly yanlış getdi. Sağ? Biz dereference y çalışdı. Lakin y sağ, bəzi saxta dəyər idi? Alt sol ki, arrow künc deyil həqiqətən bir şey işarə. Bu nə mən bunu növü var şurası burada idi. Belə ki, pis şeylər baş verir, seqmentasiya Bu halda günah, və ya Binky günah. Amma biz sonra x etməklə düzeltmek əgər y alır necə hekayə dəyişiklik edir? Yaxşı, mən x əgər ki, y, olur deyən kimi səmərəli eyni Bu nə olursa olsun, öküz-bir şey , burada eyni olacaq Öküz-bir şey. Və ya pictorially biz arrow çəkmək lazımdır. Belə ki, burada Binky ilə board üzrə nin növbəti xətti ilə kodu, * y getmək deməkdir. Var haradadır? Burada artıq deməkdir. Və biz 13 olması yeniləmə zaman yalnız gedir və əhatə indi burada 13 yazı. Belə ki, bəlkə tamamilə İlk baxışdan sadə. Amma Recap və eyni jargon istifadə ki Binky belə ki, burada istifadə edirdi İlk iki, göstəricilərinə ayrılması x və y deyil, pointees. Və pointees bir deyil ümumiyyətlə təbiri istifadə. Amma göstərici tamamilə. Amma bu, qeyd edib ki, nə var Binky nin nomenklaturasında edir. Əlbəttə bu növbəti xətti, bir int pointee ayırır. Belə ki, yaddaş yığın - I üzərində çəkdi sağ orada yan - və dəsti x bərabər onu qeyd etmək. Bu dereferences x 42 saxlamaq üçün ona işarə olan yaddaş. Və bu, əlbəttə ki, pis bir şey idi. Y işarə deyil, çünki hələ bir şey. Bu giderir. Belə ki, bu hələ arabası proqramdır. Biz vasitəsilə əsən edirik Məhz xətti və deyərək code line, yaxşı oh, orada qəza bildirin. Bu pis bir şey var. Oran proqram yalnız olacaq var ki, xətti cəmi Abort. Siz aradan qaldırılması üçün, əgər Amma qəzaya uğrayıb son iki ilə girdi və əvəz siz təyin orada xətləri - pointer təyin istifadə - y nöqtəsi t kimi x qeyd etmək. Və sonra dereference çox etibarlı bir şəkildə y. Belə ki, bu bizi tərk edir? Yaxşı, başlıq altında çıxır ki, ki, CS50 kitabxana, göstəricilər var ərzində istifadə olunur. Və biz həqiqətən soymaq başlarsınız uzun əvvəl geri ki, qatı. Lakin bu, çox olduğunu ifadə edən çevrilir Əgər bəziləri ilə tanış ola bilər xüsusilə daha rahat bir çox məşhur ki, əslində veb və ya yığını daşqın, bu gün. Lakin bu həqiqətən çox var texniki mənası. Biz indi bir yığın olduğunu bilirik. Bu qablar bir yığın kimi yemekhane daxilində. Və ya daxili kompüter və yaddaş o çərçivəsində öz funksiyaları istifadə edir. Bəli, bu çıxır ki, çünki çox sadə həyata keçirilməsi yaddaş və qondarma çərçivəsində yığın, həqiqətən, nəzarət edə bilər olduqca asan bir kompüter sistemi. Siz sistemə hack edə bilər, əgər insanlar bizim kodu yazılı deyil kimi xüsusilə yaxşı. Bizim kimi insanlar chunks istifadə edin yaddaşında və ya istifadə serialları - daha çox - amma bəzən kontrol unutmayın bizim serialın sərhədləri siz güc kimi özünüzü bəzən var və iterated çox uzaq sonunda bir sıra keçmiş yol. Ən yaxşı halda, sizin proqram yalnız qəza bilər. Seqmentasiya günah, mehriban utanc verici idi. Böyük, lakin mütləq deyil bir natarazcasına pis bir şey. Lakin proqram real üzrə faktiki əgər istifadəçilərin kompüter, o çalışan əgər bir web ki, faktiki təsadüfi insanlar internet bildirerek, vuruş olunur insanların kodunu pis şeylər vadar edir Çünki ümumiyyətlə yaxşı bir şey etmək üçün imkanı deməkdir kompüter nəzarət. Bu baxmaq gedir sirli bir az. Amma mən sizinlə qorxutmaq istədiyiniz fikir burada bu son nümunəsidir. Burada kodu nümunə var. Və yaxşı Wikipedia var dolaşır ki, məqalə daha ətraflı. Mən aşağı çağırış üzrə əsas var 1 argv keçən foo. Və yalnız belə siz var proqram run və keçmək bir ixtiyari girdi. Və sonra foo top elan bir simli qəbul və ya daha çox kimi dəqiq bir char *. O chars bir sıra bəyan edir. Bir bufer, ümumiyyətlə, Zəng ölçüsü 12. Belə ki, 12 chars içərisində yararlı ola bilər c adlı serialın. Və o, bu yeni funksiya istifadə yeni, lakin çətin deyil , yaddaş surəti başa düşürük. Bu idi, bar yaddaş nüsxə dəyişən keçmiş n, nə istifadəçi c daxil argv 1 yazdığınız. Neçə bayt? Bar simli uzunluğu. Belə ki, başqa sözlə, istifadəçi növ əgər h-e-l-l-o daxil simli uzunluğu salam beş edir. Belə ki, həmin bayt beş almaq üçün gedir c adlı dizi, kopyalanacak olan size 12 edir. Çox uzun Amma nə istifadəçi 13 simvol və ya 14 ki, söz simvol və ya 100 simvol və ya daha çox? Onlar harada getmək gedir? Yaxşı ki, çərçivə ki, tray yemək zalı yığını, orada getmək olacaq. Və yalnız yadda başlamaq olacaq artıq ki, digər məhsulları ki yığını haqqında, coşğun yığını, belə danışmaq. Belə pictorially ki, bu cür düşünürəm. Bu yalnız bir rəngli versiyası şəkil biz rəsm etdik. Altında, əsas deyil, deyək. Və üst, indi nə gördükdə çərçivəsində rəng üçün indi kodlanır foo adlı fəaliyyət göstərir. Amma burada maraqlı nə var foo burada onun çərçivəsində olmasıdır. Belə ki, yalnız mən kimi tərtib edir lakin mavi etdi. Və indi bu olduğu c bracket 0 gedir. Bu c bracket burada 11 qədər gedir. Başqa sözlə, bu, olur bir kvadrat kimi təmsil ediləcək. Amma yalnız bytes plopping saxlamaq əgər aşağı - və ya chars - onlar son olacaq up yerdə 0 bütün yol 11 Çünki dizine 0 oldu. Lakin 13-cü karakter burada sonuna qədər gedir? 14-cü harada? 50 xarakter harada sonuna qədər gedir? Bu aşağı davam edəcək. Biz tərtib etdik, hətta Çünki yığını ilə şəkil qədər artan ünvanları, o çıxır, getmək kiçik ünvanlarını, kiçik böyük URL göstəricilərinə. Belə ki, yalnız qədər davam və saxlayır. Belə ki, əgər istifadəçi növləri salam ki, böyük deyil. No bug problem yoxdur, hər kəsin təhlükəsiz. Amma biz biləcəkləriniz istifadəçi növ əgər çəkişmə kodu zəng, təmsil ümumi olaraq bir hücum, hücum, hücum, hücum, nə ola bilər? Yaxşı, əgər girdi bütün istifadəçi Yığdığınız yalnız bir dost deyil simvol və ya təhqiredici simli. Bu, həqiqətən, simvol bir ardıcıllıqla var ki, siz onu tərtib varsa, faktiki kodudur. Bəlkə kodu ki siler bütün sabit sürücü faylları və ya spam göndərir kimi və ya bir şey. Əsas burada nə var Qeyd edək ki, ki, pis adam üçün kifayət qədər uğurlu var əgər yaddaş qırmızı yığın üzerine - Mən yalnız mənim şəkil cəlb etməyən burada Wikipedia şəkil var - onun qondarma qaytarılması ünvanı. Zaman ərzaq yekunları, svop qayıtdıqda necə kompüter getmək bilmir up burada aşağı? Və ya yuxarıda tech seqmentində, necə bu mübadilə getmək bilmir kodu - 0 və 1-in ki, svop bəstələmək - geri əsas üçün? Bir qondarma return address var Eyni yığını çərçivəsində saxlanılır Eyni yemekhane tray. Pis adam üçün kifayət qədər ağıllı deyil Belə ki, əgər hücum kodu qoymaq hücum kodu hücum kodunu, və kifayət qədər uğurlu almaq - üçün - tez-tez yanılma yolu ilə ki, qırmızı return address yazmaq ünvan və bildiriş çox üst. 0835C080 bilərsiniz. Bu, geri qədər üst yazılı səbəbləri bəlkə yenidən olacaq. Bu sayı dir. Pis adam kifayət qədər uğurlu, yaxud olur Belə ki, əgər qırmızı üzerine kifayət qədər ağıllı deyil və ünvanı yaddaş soyunmaq o elə-belə ki, kodu Sizin kompüter enjekte olan tahmin kod geri olacaq kimi tezliklə foo kimi icra edilir? Pis oğlan kodu. Bu hücumu kodu Belə ki, AAA, yenə güc spam göndərmək, bütün faylları silmək bilər sabit. Amma bu nə həqiqətən bir yığın daşqın edir və ya tampon dağıtmaq və ya daşqın hücum bufer. Və o inanılmaz, inanılmaz yaygın yazılı proqramları ilə bu gün C, C + +, və hətta bəzi digər dillərdə. Ki, scary qeyd On, biz edəcəyik bir lətifə ilə başa. [Gülüş] Çərşənbə günü görürsünüz. Növbəti CS50 hazırda - Beləliklə, mən bu gün disk əleyhinə işıqlar bütün Ben, lakin Gözləyin, yağ-pulsuz süd, yarım telefon kitab, portağal şirəsi Mən bu gün içdi ki,. USB kabel, bir açarı. [Musiqi ifa]