[MUSIC PLAYING] [Video playback] O, yalançı. Nə -Haqqında? Mən bilmirəm. Biz nə bilirik -Yaxşı? 9:15, Ray yəni Santoya ATM idi. -Bəli. Belə ki, sual, nə O 9:16 at edirdi? Bir şey 9 millimetr çəkilişləri. Bəlkə o snayper gördüm. -Və Onunla iş idi. Gözləyin. Geri bir gedin. -Nə Görürsünüz? Tam ekran qədər onun üz gətirin. -Onun Eynək. Bir əks -Var var. -Bu Nuevitas beysbol komanda var. Bu onların logo var. -Və O söhbət Kim ki, jaket qalıcı oldu. [END playback] DAVID Malan: Bütün hüququ. Bu CS50 və bu bir az daha bir [Işitilemez] olan sen problemi ilə dabbling dörd seçin. Bu gün biz bir az daha baxmaq başlamaq dərin göstəricilərinə adlı bu şeylər, Bu baxmayaraq ki, olduqca gizli mövzu, bu olacaq çıxır ki, vasitə olmaq olan biz tikinti və montaj başlaya bilərsiniz daha çox inkişaf etmiş proqramları. Amma biz son çərşənbə günü bunu ilk bir claymation yolu ilə. Belə ki, bu, geri edir Binky və biz ondan istifadə bir proqram nəzər ki, həqiqətən bir şey maraqlı etmədi, ancaq bir neçə problemlər aşkar etdi. Belə ki, niyə biz gəzmək deyil, bu gün başlayacaq tez bu addımlar bir neçə ilə, insan şərtlərinə daxil çəkmək üçün cəhd edin dəqiq nə burada olacaq və niyə bu pis, sonra hərəkət və həqiqətən bir şey bina başlamaq bu texnika ilə? Belə ki, bu ilk idi Bu proqram iki xətləri və layman nin baxımından, nə Bu iki xətləri edirsən? Əsaslı rahat kimsə nə ekranda elan edir ilə? Bunu bu iki xətləri hansılardır? Bu, bütün deyil ki, həftə bir müxtəlif, lakin bəzi yeni xüsusi simvolu var. Evet? Back var. Auditoriya: göstəricilərinə elan? DAVID Malan: daha demək? Auditoriya: göstəricilərinə elan? DAVID Malan: elan göstəricilərinə və nin bir az daha saflaşdırmaq edək. Auditoriya: [işitilemez] Ünvan x və sonra y. DAVID Malan: Və sonra müraciət. Belə ki, xüsusi biz işle biz iki dəyişənlərin elan edilir. Bu dəyişənlər, baxmayaraq ki, gedir növü int ulduz olmaq üçün daha çox xüsusi deməkdir Onlar saxlamaq üçün gedir bir int ünvanı, müvafiq olaraq, x və y. İndi hər hansı bir dəyərlər var? Bu bir faktiki ünvanlar var vaxt bu nöqtədə iki dəyişənlərin? Yox. Bu, sadəcə zibil dəyərlər belə deyirlər. Siz, həqiqətən, bir təyin deyilsə RAM idi nə dəyişən, əvvəllər adet sıfır ilə doldurmaq niyyətindədir və olanları bu dəyişənlərin də. Amma biz hələ bilmirəm nə onlar və ki niyə Binky üçün əsas olacaq Keçən həftə başını itirdi. Belə ki, bu claymation idi bu təcəssüm qovuşdurmağımız yalnız iki dəyişənlər var gildən kiçik dairəvi ədəd, ki dəyişənlərin saxlamaq, lakin bilər bükülü oxlar gəlir, onlar həqiqətən işarə deyilik yerdə özlüyündə tanınır. Beləliklə, biz bu xətti idi və bu yaddaş üçün idi yeni ötən həftə malloc yalnız bir xülya yoldur ayrılması, əməliyyat sistemi deyirəm, Linux və ya Mac OS və ya Windows, hey, Mənə bir yaddaş verir, və siz bütün demək əməliyyat sistemi yaddaş üçün xahiş zaman nə. Nə qayğı niyyətində deyil Siz bunu olacaq lakin əməliyyat demək lazımdır nə malloc yolu ilə sistemi. Evet? Auditoriya: nə qədər? DAVID Malan: nə qədər? Nə qədər bayt, və, belə ki, bu, yenə, bir göstərdi Məsələn, yalnız deyib Mənə bir int ölçüsü verir. Bir int İndi, ölçüsü dörd bytes və ya 32 bit edir. Belə ki, bu yalnız bir yoludur deyərək, hey, əməliyyat sistemi, Mənə yaddaş dörd bayt vermək Mən sərəncamında istifadə edə bilərsiniz ki, və xüsusi nə hörmətlə malloc qaytarılması Dörd bayt ki yığın üçün necə? Auditoriya: Ünvan? DAVID Malan: ünvan. Dörd bayt ki, yığın ünvanı. Məhz. Və belə ki, nəticədə saxlanılır nə var Biz, həqiqətən, yoxdur, niyə x və ki qayğı nə ki sayı Bu OX1 ya OX2 olsun ünvan, var və ya bəzi sirli hexadecimal ünvanı. Biz yalnız pictorially qayğı ki, dəyişən x indi ki, yaddaş ki, yığın işarə. Belə ki, arrow bir göstərici təmsil, və ya daha dəqiq desək, bir yaddaş ünvanı. Ancaq yenə də, biz adətən qayğı yoxdur o faktiki URL nə. İndi bu xətt deyir nə layman nin baxımından? Star x 42 nöqtəli vergül olur. Bu nə deməkdir? Siz getmək istəyirsən? Boyun danışıq yoxdur. Auditoriya: x ünvanı 42 edir. DAVID Malan: x ünvanı 42 edir. Olduqca deyil. Belə ki, yaxın deyil, kifayət qədər var, çünki bu x prefixing ulduz. Beləliklə, biz bir az çimdik lazımdır. Evet? Auditoriya: dəyər ki, pointer x 42 işarə edir. DAVID Malan: OK. pointer x ki, dəyəri 42, deyək üçün edilir işarə edərək, və ya, ulduz başqa bir yol qoymaq x nə ünvana getmək deyir Bu 1 Oxford olsun, x deyil Küçə və ya 33 Oxford Street və ya OX1 ya OX33, nə , rəqəmli ünvan olduğunu star x x dereferencing edir. Belə ki, ünvana getmək və sonra sayı 42 qoymaq. Belə ki, ola ki, bir olduğunu söyləyən ekvivalent yol. Belə ki, bütün gözəl və sonra biz şəkil təmsil edəcək biz aşağıdakı kimi əlavə etdik harada Dörd ki, yığın 42 , sağ tərəfində bayt lakin hər şeyi əyri getdi bu xətt idi və Binky baş atdı Bu nöqtədə off, pis şeylər zaman baş çünki Siz zibil dəyərlər dereference etibarsız dereference Siz və ya göstəricilərinə və mən etibarsız demək Çünki bu nöqtədə hekayə, y daxilində nədir? Based y dəyəri nədir Son bir neçə addımlar? Evet? Bu nədir? Auditoriya: bir ünvan. DAVID Malan: bir ünvan. Bu ünvan olmalıdır lakin mən bunu başlatılmış var? Belə ki, hələ yoxdur. Belə ki, orada olmaq üçün nə məlumdur? Bu, sadəcə bəzi zibil dəyəri var. Bu sıfırdan hər hansı bir PO ola bilər 2 milyard siz RAM iki gigs varsa, və ya sıfır 4 milyard Siz var əgər RAM dörd gigabayt var. Bu, bəzi zibil dəyəri var lakin problem əməliyyat sistemi ki, Bu sizə verdiyi əgər yaddaş ki, yığın xüsusi Siz getmək çalışdığınız ki, ümumiyyətlə nə səbəb olacaq bir seqmentasiya günah kimi gördüm. Belə ki, əslində, siz hər hansı olan ofis saat problemləri mübarizə və ya problemləri ki, daha çox ümumiyyətlə anlamaq üçün çalışırıq ilə bir seqmentasiya günah, ki, ümumiyyətlə deməkdir Siz bir seqment toxunan edirik Siz olmamalıdır yaddaş. Siz yaddaş toxunan edirik ki, əməliyyat sistemi deyil bu olsun, siz toxunmaq icazə Sizin array çox gedərək və ya olub, indi başlayır Siz toxunan edirik, çünki bu yalnız bir zibil dəyəri yaddaş. Belə ki, burada star x bunu undefined davranış sort. Siz bahis çünki heç vaxt , proqram yalnız qəza olacaq ki, deyərək edirik, çünki, bu ünvana getmək və siz heç bir fikrim burada var ki, ünvan əslində. Belə ki, əməliyyat sistemi çox güman ki, proqram qəza gedir nəticəsində həqiqətən kimi deyil nə Binky orada oldu. Belə ki, son nəticədə, Binky sabit Bu bu problem. Proqram özü flawed edilib. Amma sort irəliləmək əgər əvəzinə bu xətt icra, y yalnız x bərabərdir deməkdir nə Ünvan x, həmçinin y qoyun. Və belə pictorially, biz iki oxları ilə bu təmsil x və y işarə olan eyni yerə. Belə ki, semantically, x bərabərdir y o, həm də, çünki Eyni saxlanılması ünvan, bundan dolayı, 42 işarə və indi, zaman ulduz demək y, y ünvana getmək Bu maraqlı yan təsiri var. Belə ki, y ünvanı x Ünvan eyni şey. Belə ki, əgər ünvana getmək demək və y 13 dəyər dəyişdirmək, olan başqa təsir edir? X, point D, belə ki, danışmaq ki, eləcə də təsir edilməlidir. Həqiqətən, necə Nick bu şəkil çəkdi claymation məhz idi. Biz göstərici edin baxmayaraq y, biz eyni yerdə sona çatdı və biz çap olsaydı X və ya Y-nin pointee həyata, sonra biz 13 dəyəri görmək olardı. İndi pointee olmaq demək video ilə uyğundur. Programmers üçün mənim bilik, əslində heç söz pointee demək, guşəli edir ki, , lakin ardıcıllıq üçün video ilə həyata idi ki, bütün var ki, vəziyyət idi. Claymation Belə ki, hər hansı bir sualınız və ya göstəricilərinə və ya malloc yalnız hələ? Yox? Oldu. Belə ki, daha olmadan ado, Bir nəzər salaq Bu, həqiqətən, var harada bir müddət istifadə edilmişdir. Beləliklə, biz bu CS50 kitabxana etdik ki, bu funksiyaları bütün var. Biz GetInt GetString bir çox istifadə etdik yəqin ki, əvvəllər GetLongLong Mənim pset bir və ya belə, lakin həqiqətən nə davam edir? Yaxşı, tez nəzər salaq bir proqramda başlıq altında ki, biz sizə CS50 veririk ruhlandırır kitabxana, və həqiqətən keçən həftə etibarilə, biz bu qəbuluna başlamışdır təlim təkərlər off. Belə ki, bu, indi çeşidlənir bir postmortem nə var davam CS50 kitabxana daxili, biz indi hərəkət başlayacaq olsa da Ondan ən çox proqramları üçün. Belə ki, bu 0 scanf adlanan bir proqramdır. Bu super qısa. Bu, sadəcə bu xətləri var, lakin bir funksiyası adlanır scanf təqdim biz, həqiqətən, görmək olacaq ki, CS50 kitabxana daxilində bir an, bir az fərqli formada olsa. Line 16 Belə ki, bu proqram bir dəyişən x elan edir. Belə ki, mənə bir int üçün dörd bayt verir. Bu istifadəçi izah edilmişdir sayı edin, və sonra Bu maraqlı xətt ki, həqiqətən keçən həftə birlikdə əlaqələri və bu. Scanf, və sonra bir edir bildiriş format string, yalnız printf kimi, % I bir int deməkdir və sonra bir edir bir az görünür ikinci arqument funky. Bu işareti x, və geri, biz yalnız bu dəfə ötən həftə gördüm. Işareti x nəyi təmsil edir? Işareti C nə edir? Evet? Auditoriya: ünvanı. DAVID Malan: ünvanı. Belə ki, əks edir star operator, star operator deyir halbuki, getmək Bu ünvan, işareti operator anlamaq deyir Bu dəyişən ünvan, və bu, çünki əsas həyat scanf məqsədi istifadəçi scan edir klaviatura giriş, nə asılı olaraq o növləri və sonra istifadəçi daxil oxumaq bir dəyişən, lakin biz Son iki həftə gördüm ki, svop funksiyası ki, biz həyata keçirilməsi üçün çaba cəhd yalnız qırıldı. Svop funksiyası ilə Xatırladaq ki, biz yalnız ints kimi A və B elan əgər, biz uğurla dəyişdirmək idi svop daxilində iki dəyişənlərin yalnız süd və OJ ilə kimi, lakin svop, geri qısa müddətdə hörmətlə nəticə nə oldu x və y, orijinal dəyərlər? Heç bir şey. Bəli. Heç bir şey, çünki o vaxt baş svopları, yalnız yerli nüsxə dəyişdirmək bütün demək olan bu dəfə, zaman biz dəlilləri keçir funksiyaları, biz istəyirik yalnız həmin dəlilləri nüsxə keçən. Siz ilə edə bilərsiniz Siz onlarla istədiyiniz nə olursa olsun, lakin onlar heç bir olacaq ilkin dəyərlərini təsir. Belə ki, bu, əgər problemlidir scanf kimi bir funksiyası var istəyirəm həyat, onun məqsədi scan edir klaviatura istifadəçi giriş və sonra, belə ki, blanklara doldurmaq danışmaq, ki, x kimi bir dəyişən vermək dəyəri, mən əgər çünki yalnız scanf x keçmək, son məntiqi hesab əgər həftə, scanf istəsə nə edə bilər x surəti ilə, lakin bilmədi veririk halda daimi x dəyişə , belə danışmaq, bir xəzinə xəritəsi scanf x spot qeyd harada vasitəsi biz ki, x ünvanı keçmək scanf var və həqiqətən dəyişiklik getmək bilər x dəyəri. Və, həqiqətən, bütün Bu proqram ki, Mən mənbə scanf 0, əgər 5m directory, scanf 0 etmək, dot scanf doğramaq sayı 50, xahiş edirik, 50 üçün təşəkkür edirik. Belə ki, bütün maraqlı deyil lakin həqiqətən nə baş tezliklə mən zəng kimi ki, burada x dəyəri scanf daimi dəyişib olunur. İndi bu gözəl görünür və yaxşı, və əslində, onu Biz, həqiqətən, ehtiyac yoxdur kimi görünür Bütün artıq at CS50 kitabxana. Məsələn, run edək Burada bu bir daha. Mənə bir ikinci üçün yenidən edək. Nin bir sıra cəhd edək edin və əvəzinə əvvəl 50 deyərək, Yalnız heç bir deyək. OK, bir az qəribə deyil. OLDU. Burada yalnız bir cəfəngiyatdır. Belə ki, görünmür səhv vəziyyətlərdə idarə. Beləliklə, biz start minimal lazımdır bəzi səhv yoxlanılması əlavə istifadəçi var ki, əmin etmək 50 kimi faktiki sayı tipli, yəqin yazaraq sözləri çünki problemli kimi aşkar deyil, lakin yəqin ki, olmalıdır. Indi ki, bu versiyası baxaq mənim cəhd GetString reimplement. Scanf bütün bu varsa funksionallığı inşa niyə biz bu ilə dabbling edilmişdir GetString kimi təlim təkərlər? Yaxşı, burada bəlkə mənim öz GetString sadə versiyası vasitəsi bir həftə əvvəl, dedim ola bilər, Mənə bir string vermək və bufer zəng. Bu gün mən yalnız başlamaq üçün gedirəm , char ulduz, geri söyləyərək yalnız sinonimi var. Bu scarier görünür, ancaq bu eyni şey. Belə ki, mənə dəyişən adlı bufer vermək ki, bir simli saxlamaq olacaq, istifadəçi simli edin deyə və sonra, əvvəl kimi, Bu dərs borc edək scanf % S bu dəfə və sonra bufer keçir. İndi tez ağlı başında olma çek. Niyə demirəm işareti bu dəfə bufer? Əvvəlki misal nəticə çıxarmaq. Auditoriya: Char ulduz bir göstəricisidir. DAVID Malan: Məhz, bu dəfə char, çünki star, artıq bir göstərici, bir ünvanı orada olan ulduz müəyyən. Və scanf ünvan gözləyirsə, yalnız bufer keçmək kifayətdir. Mən işareti bufer demək ehtiyac yoxdur. Maraqlı, siz ola bilər bu kimi bir şey. Bu, müxtəlif məna olardı. Bu göstərici verəcək əslində bir göstərici üçün C, ancaq etibarlı şey İndi sadə saxlamaq imkan və ardıcıl hekayə saxlamaq. Mən yalnız keçmək gedirəm bufer ki, doğru deyil. problem olsa bu. Mənə davam və bu run edək onu tərtib sonra proqramı. Scanf 1 olun. Lanet olsun, bu, mənim compiler nin Mənim səhv tutmaq. Mənə bir ikinci verin. Cingilti. Nin scanf-1.c deyirlər. OLDU. Biz orada getmək. Mənim buna ehtiyacım var. CS50 ID müxtəlif var konfiqurasiya parametrləri ki, özünüz qarşı qoruyur. Mən həmin aradan lazım özünüz bu dəfə cingilti çalışır. Belə ki, simli edin. Mən irəli getmək və yazın gedirəm mənim sevimli salam dünyada. Null, OK. Mən tipli nə deyil. Belə ki, göstəricisi var bir şey yanlış olan. Mənə davam və yazın imkan bir həqiqətən uzun simli. Null üçün təşəkkür edirik və mən bilmirəm əgər mən onu qəza etmək gedirəm. Bir az surəti cəhd edək yapışdırıb və bu kömək oldu. Məhz bu bir çox yapışdırıb. Bu, mütləq bir böyükdür adi daha string. Yalnız həqiqətən yazmaq edək. Yox. Lənət olsun. Command tapılmadı. Belə ki, olmayan var. Mən yapışdırılır ki, var bəzi pis simvol, lakin bu çıxır işləmək niyyətində deyil. , Çünki bu bir daha cəhd edək biz, həqiqətən, qəza əgər daha çox əyləncə var. Bu yazın edək və indi, mən həqiqətən uzun simli surəti gedir və indi əgər görək biz bu şey qəza bilər. Mən boşluq çıxarılmışdır və bildiriş yeni xətləri və semicolons bütün funky simvol. Daxil edin. İndi şəbəkə yalnız yavaş olan oldu. Mən aydın çox uzun Command-V aşağı keçirilib. Lənət olsun! Command tapılmadı. OLDU. Yaxşı, nöqtə yenə aşağıdakı. Belə ki, həqiqətən gedir nə Bu bəyannamə ilə line 16 char ulduz bufer? Belə ki, əldə nə am Mən bir pointer elan zaman? Alıram bütün dörd byte dəyəri bufer adlanır, lakin onun daxilində nə var Hal-hazırda? Bu, sadəcə bəzi zibil dəyəri var. Hər hansı bir zamanda, çünki bir dəyişən elan C, yalnız bəzi zibil dəyəri var, və biz başlanğıc edirik Bu reallıq üzərində səfər. İndi scanf demək zaman, bu ünvana getmək və nə istifadəçi növləri qoydu. Istifadəçi növləri əgər salam dünya, yaxşı, mən harada qoymaq bilərəm? Buffer bir zibil dəyəri. Belə ki, ox kimi növ var ki, harada bilir işarə edir. Bəlkə işarə burada mənim yaddaş. Və belə zaman istifadəçi salam dünyada növləri, Proqram çalışır string salam dünya backslash 0 yaddaş ki, yığın. Lakin yüksək ehtimalı ilə, lakin aydın deyil 100% ehtimalı, Kompüter sonra qəza gedir proqramı bu deyil, çünki yaddaş I toxunmaq icazə verilməlidir. Belə ki, qısa, bu proqram məhz səbəbdən qüsurlu. Mən əsaslı nə deyiləm? Hansı addımları Mən yalnız kimi, çıxarılmışdır var biz Binky nin ilk nümunəsi ilə çıxarılmışdır? Evet? Auditoriya: Yaddaş ayrılması? DAVID Malan: Yaddaş ayrılması. Mən, həqiqətən, ayrılan deyil ki, simli üçün hər hansı bir yaddaş. Beləliklə, biz yolları bir neçə bu düzeltebilirsiniz. Bir, biz sadə saxlamaq bilər və əslində, indi istəyirik bir blurring görmək üçün başlamaq niyyətindədir nə arasında xətləri bir sıra, bir string nə, nə var char ulduz chars nə bir sıra edir edir. Burada ikinci bir misal var strings və bildiriş cəlb bütün Mən line etdik 16 əvəzinə söyləyərək edir ki, bufer bir char olacaq star, yaddaş yığın bir göstərici, Mən çox fəal vermək gedirəm 16 simvol üçün özümü bir bufer, və əslində, tanış değilseniz müddətli Buffering ilə, yəqin ki, video dünyanın, bir video buffering, buffering olduğu, buffering. Yaxşı, əlaqəsi burada nə var? YouTube Yaxşı, Inside və video oyunçuların daxili ümumiyyətlə bir sıra edir 16-dən çox böyükdür. Bu ölçüsü bir bir sıra ola bilər MB, bəlkə 10 megabayt, ki, array daxil brauzerinizin yoxdur , bayt bütün dəstə download megabayt bütün dəstə video, və video player, YouTube və ya kim var, başlayır ki array bayt oxu, və hər zaman görmək söz buffering, buffering, oyunçu var deməkdir ki, serialın sonunda kazanılmış. şəbəkə deyil ki, belə yavaş daha bayt ilə array artırıldığı və siz bit bitti istifadəçi keçirmək üçün. Belə ki, bufer bir apt müddətli ki, burada yalnız bir sıra, yaddaş yığın var. Və bu düzeltmek edəcək bu çıxır, çünki serialların müalicə edə bilər ki, sanki hətta bufer baxmayaraq, ünvanları yalnız bir simvolu, bir var edir simvol ardıcıllıqla, bufer, mənim üçün faydalıdır, proqramçı, Əgər ətrafında onun adı keçə bilər Bu sanki bir pointer, kimi olsa bir yığın ünvanı idi 16 chars üçün yaddaş. Ki, belə ki, mən keçə bilər tam scanf söz və indi, mən bu proqram etmək, scanf 2 etmək, dot çizgi scanf 2, və yazın salam dünya, Ki, sýrada daxil edin Hmm, nə oldu? String edin. Mən yanlış nə idi? Salam dünya, bufer. Salam Dünya. Ah, mən bunu nə bilirik. OLDU. Belə ki, bu qədər oxu ilk kosmik qədər. Belə ki, yalnız bir an fırıldaqçı imkan və Mən yalnız bir şey yazın istədiyini deyirlər həqiqətən uzun bu uzun cümlə kimi ki, bir, iki, üç, dörd, beş, altı, yeddi, səkkiz, doqquz, 10, 11, 12, 13, 14, 15, 16. OLDU. Bu, həqiqətən uzun cümlə. Belə ki, bu cümlə artıq 16 simvol və mən daxil edin hit zaman nə baş verəcək? Yaxşı, bu halda hekayə, mən elan etdi bufer həqiqətən bir sıra olan getmək üçün 16 chars hazır. Belə bir, iki, üç, dörd, beş, altı, yeddi, səkkiz, doqquz, 10, 11, 12, 13, 14, 15, 16. Belə ki, 16 simvol və indi mən Bu uzun kimi bir şey oxumaq cümlə, nə etmək olacaq Mən bu oxumaq gedirəm ki, uzun S-E-N-T-E-N-C-E, cümlə. Belə ki, bu qəsdən deyil pis bir şey ki, mən kənarda yazılı saxlamaq Mənim serialın sərhədləri, Mənim bufer hüdudlarından kənarda. Mən xoşbəxt və proqram ala bilər qayğı çalışan saxlamaq və deyil, lakin ümumiyyətlə, bu danışan Həqiqətən mənim proqram qəza edəcək, və bir səhv mənim Mən addım an kod hüdudlarından kənarda ki, serialın, çünki bu əgər bilmirəm mütləq qəza gedir və ya yalnız şanslı almaq üçün gedirəm əgər. Belə ki, bu problemlidir, çünki Bu halda, bu iş görünür etmir və hətta baxmayaraq ki, burada taleyi aldatmaq imkan IDE bir qədər dözmək görünür of-- Biz orada getmək. Nəhayət. Mən bu edə bilərsiniz yalnız bir deyiləm. Mən yalnız əyləncə yazaraq bir çox idi həqiqətən uzun faktiki söz həyata əlbəttə ötüb ki, 16 bytes, çünki Bu crazy uzun multi-line tipli söz, sonra nə görürsünüz. proqram çap cəhd və sonra bir seqmentasiya günah var və seqmentləşdirmə çatışmazlıqlar zaman bu kimi bir şey olur və əməliyyat sistemi deyir heç bir ki, yaddaş toxuna bilməz. Biz öldürmək olacaq cəmi proqramı. Belə ki, bu problemli görünür. Mən proqram vasitəsi təkmilləşdirilmiş etdik ən azı, bəzi yaddaş lakin bu məhdudlaşdırmaq görünür əldə funksiyası GetString bəzi məhdud uzunluğu 16 strings. Artıq dəstək istəyirsinizsə Belə ki, 16 simvol cümlələr, Sən nə edirsən? Yaxşı, siz artıra bilər 32 bu bufer ölçüsü və ya bu cür qısa görünür. Niyə biz yalnız yoxdur 1000 lakin geri itələmək. Daxilən cavab nədir yalnız edərək bu problemi aradan qaldırılması 1000 chars kimi, böyük mənim bufer? Bu şəkildə GetString həyata keçirməklə. Burada yaxşı və ya pis? Evet? Auditoriya: siz bir çox məcburidir varsa yer və siz onu istifadə etməyin, sonra siz ki, yer təkrar bölüşdürə bilməz. DAVID Malan: Absolutely. Siz deyil insofar kimi bu israfçı var həqiqətən o bayt 900 lazımdır və hələ üçün xahiş edirik Hər halda cəmi 1000, Siz yalnız daha çox yaddaş istehlak edirik sizə lazım çox istifadəçi kompüter, və bütün bir sonra Əgər siz artıq karşılaştıysanız həyat sizə etdiyiniz zaman ki, proqramları çox çalışan və onlar yaddaş çox qədər yemək edirik Bu, həqiqətən, performans təsir edə bilər və istifadəçi təcrübəsi kompüter. Belə ki, belə bir tənbəl həll, əmin üçün, və əksinə, Bu yalnız israfçı var, nə problem hələ mən bufer etmək olsa da, qalır 1000? Evet? Auditoriya: simli uzunluğu 1,001 edir. DAVID Malan: Məhz. Sizin string uzunluğu 1,001 varsa, Siz eyni problem var, və dəlil ilə, mən yalnız o 2000 etmək ancaq bilmirəm bu olmalıdır necə böyük inkişaf, və hələ, mən proqram tərtib etmək lazımdır insanlar istifadə imkan əvvəl və download Bu. Belə ki, bu tam növüdür stuff CS50 kitabxana çalışır ki, ilə bizə kömək və biz yalnız nəzər lazımdır üçün əsas həyata bəzi Burada, lakin bu CS50 dot C. Bu CS50 IDE olmuşdur ki, fayl Siz istifadə etdiyiniz bütün bu həftə. Bu pre-tərtib və siz var avtomatik olaraq istifadə edilmişdir olan təbiət cingilti ilə L CS50 bayrağı dash, amma bütün vasitəsilə aşağı diyirləyin əgər bu funksiyaları, burada GetString var, və yalnız bir vermək nə dadı olur nin bir sürətli nəzər salaq nisbi mürəkkəbliyi. Bu super uzun funksiyası, lakin biz olmadı bütün ağır düşünmək lazımdır necə strings alınması haqqında getmək üçün. Belə ki, burada mənim bufer və mən var yəqin null onu başlamaq. Bu, əlbəttə, char ulduz kimi eyni şey, amma qərar CS50 kitabxana həyata biz olacaq əgər ki, tamamilə dinamik Mən necə böyük əvvəlcədən bilmirəm string users almaq istəyirəm edir. Belə ki, başlamaq üçün gedirəm yalnız bir boş simli ilə və mən daha çox yaratmaq üçün gedirəm Yaddaş Mən istifadəçi simli uyğun lazımdır Mən yoxsa kifayət qədər, mən xahiş gidiyorum daha çox yaddaş üçün əməliyyat sistemi. Mən onların simli hərəkət gedirəm yaddaş böyük bir yığın daxil və mən azad və ya azad gedirəm yaddaş kifayət qədər böyük bir yığın və biz yalnız olacaq iteratively bunu. Belə ki, bir Söyle, Burada yalnız bir dəyişən var olan I takip gedirəm Mənim bufer tutumu. Neçə bytes uyğun? Burada dəyişən n ilə var Mən saxlamaq üçün gedirəm olan həqiqətən neçə bayt track istifadəçi çap və ya ki, bufer. Siz əvvəl bu görmədim varsa, siz daxil edə bilərsiniz ki, bir int kimi bir dəyişən , adı təklif kimi olan, imzasız edir deməkdir qeyri-mənfi, və niyə Mən heç ifadə narahat istəyirəm bir int yalnız bir int deyil ki, lakin bir imzasız int var? Bu qeyri-mənfi int var. [Işitilemez] nə deməkdir? Auditoriya: Bu məbləğ izah edir yaddaş [Işitilemez] ola bilər. DAVID Malan: Bəli. Mən imzasız demək Belə ki, bu əslində əlavə yaddaş bir az verilməsi əgər və silly cür görünür, lakin , əlavə yaddaş bir az var bir çox kimi iki dəfə var deməkdir Siz təmsil edə bilər dəyərləri, bir 0 və ya 1 ola bilər, çünki. Belə ki, ismarıcları, bir int təxminən ola bilər mənfi 2 milyard bütün yolu müsbət 2 milyard qədər. Bu böyük silsilələri, lakin hələ də cür israfçı var Yalnız qayğı əgər ölçüləri olan yalnız daxilən mənfi olmayan olmalıdır və ya müsbət və ya 0, yaxşı, sonra, niyə 2 milyard israf edilir mənfi nömrələri üçün mümkün dəyərlər heç vaxt onlara istifadə etmək olacaq əgər? Belə bilərsiniz imzasız, indi mənim int deyərək 4 milyard 0 arasında təxminən olun. Belə ki, burada səbəblərdən yalnız bir int C var biz yalnız indi daxil deyil Bu əvəzinə int nə üçün bir char, lakin burada neler mahiyyət Siz və bəzi məsələn, istifadə edilə bilər, hətta pset dörd fgetc funksiyası və ya sonra, biz bunu görəcəyik yenidən problem beş, müəyyən fgetc çünki adı kimi gözəl növ, sort arcanely təklif bu bir funksiyası var ki, Bir xarakter alır və belə nə əsaslı müxtəlif biz GetString işle haqqında biz istifadə etdiyiniz deyil eyni şəkildə scanf. Biz yalnız addım-addım boyunca sürünən olunur nə üzərində istifadəçi tipli, biz həmişə bir ayıra bilər, çünki char, və biz həmişə təhlükəsiz edə bilərsiniz bir-bir char baxmaq və sehrli burada baş başlayır. Mən aşağı diyirləyin gedirəm Bu funksiya orta yalnız qısa bu funksiyanı təqdim etmək. Çox var kimi malloc funksiyası var bir realloc funksiyası olduğu realloc Siz yaddaş yığın təkrar bölüşdürə imkan verir və bu böyük və ya kiçik etmək. Belə ki, uzun hekayə qısa və Bu gün əlimdə bir dalğa, nə GetString bilir edir ki, sort var edir bir magically artan və ya istifadəçi kimi bufer azalan onun simli növləri. Belə ki, əgər istifadəçi bir qısa string, bu kodu yalnız kifayət qədər vəsait ayırıb yaddaş simli uyğun. Istifadəçi yazaraq saxlayır Mən bir daha və yenidən kimi və yenidən, yaxşı, əgər bufer nin ilkin bu böyük və proqram həyata keçirir bir dəqiqə gözləyin, mən kosmik həyata deyiləm, Bu ikiqat olacaq bufer ölçüsü və sonra bufer ölçüsü ikiqat və misli yoxdur indeksi, Biz burada baxmaq əgər, bu bu ağıllı bir-liner. Bu sintaksis görmüşəm bilər əvvəl, ancaq ulduz bərabərdir demək əgər, Bu eyni şey kimi gücü dəfə 2 söyləyərək. Belə ki, yalnız misli saxlayır bufer tutumu və sonra realloc izah vermək özü ki, daha çox yaddaş. İndi kimi bir kənara var Burada digər funksiyaları Biz hər hansı bir detal baxmaq deyil ki, GetInt göstərmək üçün başqa, biz GetInt GetString istifadə edin. Biz bu deyil ki, yoxlamaq null, olan, geri, xüsusi dəyər ki, bir şey yanlış getdi deməkdir. Biz yaddaş bitti. Better ki yoxlayın. Və biz bir sentinel dəyər qayıtmaq. Amma kimi şərh təxirə lazımdır niyə sonra biz scanf bu əmisi oğlu istifadə sscanf adlanır və bu çıxır ki sscanf, və ya simli scanf, Siz line nəzər imkan verir ki, istifadəçi tipli və imkan edib mahiyyətcə təhlil və mən nə Burada bunu mən sscanf deyirəm ki, istifadəçi var nə təhlil Yığdığınız və əmin% i etmək, Orada bir tam və biz deyil də var dəqiq niyə bu gün daxil Özetle bir% burada c, lakin imkan verir istifadəçi tipli əgər bizə aşkar etmək üçün sıra sonra saxta bir şey. Belə ki, səbəb ki, GetInt və GetString yeniden, yeniden sizə, yeniden çünki bütün edir biz yazdıq ki indeksi, bu cür istifadəçi girişinə axtarır əmin edilməsi tamamilə rəqəmli var və ya faktiki üzən var point dəyəri və ya kimi, nə dəyərindən asılı olaraq istifadə etdiyiniz fəaliyyət göstərir. Whew. OLDU. Ki, bir qurtum idi lakin baxımından burada ki, biz idi səbəbi bu təlim təkərlər haqqında Çünki ən aşağı səviyyədədir yalnız çox şey var ki, istədik ki, yanlış getmək bilər preemptively idarə etmək əlbəttə o şeyi sinif erkən həftə, lakin indi pset dörd və pset beş ilə kənarda ona daha çox olduğunu görəcəksiniz Siz həm də daha çox qadir olduğunuz problemləri bu cür həll Özünüz. GetString ya GetInt hər hansı suallar? Evet? Auditoriya: Niyə iki dəfə olardı bufer tutumu deyil, yalnız artan çox Bu dəqiq məbləği? DAVID Malan: Yaxşı sualdır. Niyə biz gücü iki dəfə olardı Bufer fərqli olaraq yalnız artan bəzi sabit dəyər? Bu dizayn qərar idi. Biz yalnız çalışır, çünki ki, qərar vaxt müdrik bahalı az xahiş olmaq əməliyyat sistemi yaddaş üçün, biz etmədik minərkən başa istəyirəm böyük strings üçün bir vəziyyət biz xahiş edilmişdir ki, Təkrar OS və yenidən və yenidən Yaddaş üçün sürətli ardıcıllıqla. Belə ki, biz yalnız bir qədər qərar özbaşına lakin biz əsaslı ümid, ki, siz edək nə irəlidə özümüz almaq üçün cəhd və yalnız ki, bunu iki dəfə saxlamaq biz dəfə məbləği azaltmaq biz malloc zəng etmək və ya realloc, lakin ümumi qərar bilmədən olmaması zəng Nə istifadəçilər yazın edə bilərsiniz. Hər iki yolları əsaslı ola bilər. Arguably yaxşı. Belə ki, bir neçə nəzər salaq Yaddaş digər yan təsirləri, yanlış getmək bilər şeylər və alətləri bilərsiniz səhvlər bu cür tutmaq üçün istifadə edin. Bu baxmayaraq, siz bütün çıxır check50, siz kimi çox bildirmədi arabası yazılı edilmişdir Həftə bəri indeksi, hətta bütün check50 testlər əgər keçdi və hətta sizin və TF ki, super əminik nəzərdə tutulan kimi code işləyir. Sizin kodu arabası olmuşdur və ya Siz ki, bütün flawed, CS50 kitabxana istifadə, yaddaş sızan edilmişdir. Siz əməliyyat sistemi xahiş etdik proqramların ən xatirə Siz yazdıq, lakin siz var həqiqətən geri heç vaxt. Siz GetString adlı etdik və GetInt və GetFloat, lakin GetString ilə, siz var unGetString və ya ver adlı heç vaxt String Back ya kimi, lakin biz gördük GetString yaddaş ayrılması ki, malloc yolu və ya bu yalnız funksiyası realloc, ruhunda çox oxşar, və hələ biz oldum üçün əməliyyat sistemi xahiş yaddaşı və yaddaş təkrar lakin onu geri verilməsi heç vaxt. İndi kənara kimi, bu çıxır ki, bir proqram yaddaş bütün fit zaman avtomatik azad olunur. Belə ki, böyük bir şey olmuşdur deyil. Bu qırmaq niyyətində deyil IDE və ya yavaş şeyi aşağı, lakin zaman proqramları yoxdur ümumiyyətlə yaddaş sızma və onlar uzun müddət çalışan edirik. Əgər axmaq az gördüm varsa Mac OS və ya hourglass çimərlik top Windows bu cür olduğu aşağı yavaşlatan və ya düşüncə və ya düşüncə və ya yalnız həqiqətən başlayır bir tarama üçün yavaş, bu, çox bəlkə ola bilər yaddaş sızması nəticəsində baş. yazdı proqramçılar istifadə etdiyiniz proqram yaddaş üçün əməliyyat sistemi xahiş bir neçə dəqiqə, hər saat. Amma yayınlıyorsanız Bu belə software, Sizin kompüter minimuma sonunda saat və ya gün, Daha çox və daha çox üçün xahiş edilə bilər yaddaş və əslində heç istifadə və sizin code ola bilər, və ya proqramları, yaddaş sızması ola bilər və yaddaş sızma başlamaq əgər, digər proqramları üçün daha az yaddaş var, və təsiri edir hər şeyi aşağı yavaş. İndi, bu günə qədər biri ilə ən dəhşətli proqramları Siz imkanlar var CS50 run insofar onun çıxış daha çox ezoterik kimi cingilti və ya nin və ya komanda hər hansı biz əvvəl etdik line proqramları lakin təşəkkürlə, onun çıxışı əlaqədar bəzi super faydalı məsləhətləri ki, faydalı bilərsiniz pset dörd olacaq və ya əlbəttə beş pset. Belə Valgrind bir vasitədir ki, baxmaq üçün istifadə edilə bilər proqram yaddaş sızıntıları üçün. Bu çalıştırmak üçün nisbətən sadə. Siz hətta valgrind və sonra run bir az verbose baxmayaraq, dash dash qaçağı tam bərabərdir, və sonra dot doğramaq və proqram adı. Belə ki, valgrind sonra proqramı davam edəcək və proqram çox sonunda fit əvvəl çalışan və , başqa bir tez verir Bu təhlil etmək olacaq sizin Bu proqram çalışan edilmişdir isə və siz sızma idi demək daha yaxşı hələ hər hansı bir yaddaş və, Siz yaddaş toxunmaq ki, Sizə aid deyil? O hər şeyi tutmaq bilməz, lakin bu ən şey tutmaq olduqca yaxşı. Belə ki, burada mənim olan run bir misal var Bu proqram, run Valgrind olan, adlı proqramı üzrə yaddaş və mən gedirəm xətləri qeyd etmək nəticədə bizim üçün maraq. Belə ki, daha çox distractions var Mən slayd silindi etdik ki. Amma yalnız nə bu görək Proqram izah etməyə qadirdir. Bu, bizə hər şeyi izah qadir ölçüsü 4 etibarsız yazmaq kimi. Başqa sözlə, siz yaddaş toxunmaq, əgər, Yaddaş xüsusi 4 bayt Siz var ki, valgrind sizə deyə bilərəm ki. Ölçüsü 4 Yanlış yazmaq. Siz dörd bayt toxunub Siz var ki,. Harada siz bunu etdiniz? Bu gözəllik deyil. Yaddaş dot c line 21 harada var qıfıllar və faydalıdır edirdi. Çox gdb kimi, bu kömək edə bilər faktiki səhv qeyd. İndi, bu bir az daha var verbose, confusing əgər. 1 blok 40 bayt mütləq loss rekord 1 1 itirdi. Bunun mənası nədir? Bəli, bu yalnız sizin üçün xahiş deməkdir 40 bytes və onu geri verdi, heç vaxt. Siz malloc adlı ya adlı GetString və əməliyyat sistemi 40 bytes, ancaq heç vaxt verdi azad və ya yaddaş azad, və ədalətli olmaq, biz heç etdik Siz necə yaddaş geri vermək. Super var çıxır sadə funksiyası pulsuz çağırıb. Bir dəlil, şey edir Siz pulsuz və ya geri vermək istəyirəm lakin 40 bayt, yəqin, Bu proqram xəttində itirmişdir Yaddaş 20 c nöqtə. Belə ki, bu proqram görək. Bu super yararsız var. Bu, yalnız nümayiş etdirir bu səhv. Belə ki, bir nəzər salaq. Burada əsas və əsas, bildiriş, zənglər edir bir funksiyası f və sonra yekunları çağırıb. Belə ki, bütün maraqlı deyil. F nə edir? Mən bir prototip ilə narahat etmədi edək. Mən kodu saxlamaq istəyirdi mümkün qədər minimal. Belə ki, əsas yuxarıda f qoymaq və ki, əlbəttə, gözəl bu kimi qısa proqramları üçün. Belə ki, f şey qayıtmaq və etmir Biz bir şey almaq, lakin bunu etmir. Bu çox kimi bəyan edir Binky məsələn, ki, x adlı göstərici olacaq bir int ünvanı saxlamaq üçün. Belə ki, sol tərəfi var. İngilis, nə bunu sağ tərəfində? Hər kəs? Bu, bizim üçün nə edir? Evet? Auditoriya: [işitilemez] dəfə bir int ölçüsü olan 10 dəfə ki, [işitilemez] DAVID Malan: Yaxşı və mənə yekunlaşdırmaq bildirin. Belə ki, 10 integers üçün kifayət qədər yer ayırmaq və ya 10, bir int ölçüsü, nə 4 dörd bayt, belə ki, 10 dəfə var 40, mən etdik ki sağ tərəfində belə Qeyd mənə 40 bayt verir və ilk byte ünvan saxlamaq x daxil. İndi nəhayət, burada harada Bu proqram arabası, nə var line 21 ilə yanlış məntiq əsasında? Nə line 21 ilə yanlış var? Evet? Auditoriya: Siz edə bilərsiniz [Işitilemez] x daxil index. DAVID Malan: Bəli. Mən belə x daxil index olmamalıdır. Belə syntactically, ki, OK. Nə gözəl sizin kimi çox deyil bir sıra adını müalicə edə bilər sanki eyni, bir göstərici var bu sanki bir göstərici müalicə edə bilər bir sıra və mən syntactically bilər x bracket bir şey demək, x bracket i, lakin 10 problemlidir. Niyə? Auditoriya: daxili deyil, çünki. DAVID Malan: Bu deyil yaddaş ki, yığın daxilində. Böyük dəyəri Mən lazım deyil o kvadrat mötərizədə qoyulması? 9 9, 0. Sıfır indeksləşdirilməsi Çünki. Belə ki, 9 vasitəsilə 0 gözəl olardı. Bracket 10 yaxşı deyil və lakin, hər dəfə olsa geri Mən CS50 IDE etmək üçün cəhd görünür saxta dəyərlər yazaraq crash, Bu həmişə əməkdaşlıq etmir və həqiqətən, tez-tez uğurlu olsun yalnız çünki əməliyyat sistemi deyil qeyd ki, heç belə yüngül yaddaş bəzi yığın keçmək, Əgər texniki daxilində qaldı, çünki Sizin segment, lakin daha çox ki, əməliyyat sistemləri sinif, bu kimi bir şey çox asanlıqla undetected getmək bilər. Proqram heç qəza olacaq ardıcıl amma bəlkə dəfə biraz. Və belə ki, Valgrind edək Bu və burada biz overwhelmed almaq lazımdır an çıxdı. Belə ki, yaddaş valgrind sızıntısı çek etmək tam dot çizgi yaddaş bərabərdir. Mən söz verirəm niyə və burada Bu əzmək olar. Burada valgrind, burada nə var nə var proqramçı, bir neçə il ago- yaxşı bir fikir olardı qərar kimi çıxış baxmaq üçün. Belə ki, bu mənada edək. Sol tərəfdən belə ki, bütün yol heç bir yaxşı səbəbdən yan proqram prosesi ID edir biz yalnız, benzersiz bir tanıdan run Proqram üçün biz yalnız qaçdı. Biz ki, silindi slide, lakin Burada bəzi faydalı məlumatlar var. Çox üst diyirləyin edək. Biz başladı burada. Belə ki, bütün çox çıxış deyil. Burada yalnış yazmaq deyil xətti 21 ölçülü 4. Yaxşı, line 21 nə idi? Line 21 dəqiq idi Bu və bu mənada edir Mən validly da deyiləm ki, Mən deyiləm, çünki 4 bayt yazılı Bu tam qoymaq üçün çalışırıq, ki, bir şey ola bilər yalnız olmaq olur sıfır, amma çalışıram bir yerdə qoymaq üçün ki, mənə aid deyil. Bir Bundan əlavə, aşağı burada, 40 bytes blokları mütləq rekord 1 itir. Mən malloc zəng zaman, çünki burada, mən, həqiqətən, yaddaş azad, heç vaxt. Belə ki, necə biz bu düzeltmek bilər? Mənə davam edək və bir az daha təhlükəsiz olmaq və orada 9 və burada pulsuz x mənə bildirin. Bu gün yeni funksiyası var. İndi yaddaş dot çizgi etmək təkrar varsa, , yenidən bu valgrind run edək Mənim pəncərə maksimize və Enter düyməsini basın. İndi, bu yaxşıdır. Onlar yaxşı xəbər basdırmaq Bu çıxış bütün. Bütün yığın blokları pulsuz idi. Biz nə yığın geri gəlmək lazımdır , lakin heç bir sızması mümkündür. Belə ki, bu yalnız bir deyil Sizin alət dəsti üçün alət olan siz başlaya bilərsiniz İndi kimi səhv tapmaq. Amma görək nə daha zalım burada edə bilərsiniz. Indi keçid edək həqiqətən bir problem həll. Bir kənara kimi, bu azad edəcək qarışıqlıq və ya gərginlik az, bu artıq gülməli deyil. Bəli. Bu olduqca yaxşı. Göstəricilərinə Çünki ünvanları və ünvanları Konvensiya ilə ümumiyyətlə hexadecimal ilə yazılı. Ha, ha, indi gülməli deyil. Afərin, belə ki, indi edək həqiqətən bir problem həll edir. Bu super olmuşdur super indiyə qədər aşağı səviyyədə, və biz, həqiqətən faydalı edə bilərsiniz bu aşağı səviyyədə detalları ilə hər şeyi. Beləliklə, biz bir neçə həftə təqdim əvvəl bir sıra anlayışı. Bir sıra gözəl idi, çünki bu, bizim kodu təmizləmək çətindir Biz yazmaq istəyirdi, çünki Çox tələbələri ilə proqram və ya bir neçə adları və ev və yurdda və kollec və ki, bütün, biz hər şeyi daha çox saxlamaq bilər temiz bir sıra daxilində. Amma bir İşin mənfi tərəfi odur təklif bir sıra indiyə qədər. Siz özünüz əziyyət etdik, hətta bir proqramda, yalnız qeyri-iradi, pis bir şey nə bir sıra haqqında, bəlkə? Mən bəzi murmurs eşitmək. Auditoriya: Bu çətindir ölçüsünü dəyişdirmək üçün. DAVID Malan: Bu çətindir ölçüsünü dəyişdirmək üçün. Siz ölçüsü dəyişə bilməz bir sıra, əslində, özlüyündə C. Başqa bir sıra ayıra bilər, köhnə bir şeyi hərəkət İndi yeni və daxil bəzi əlavə yer var, ancaq bir kimi deyil Java və ya Python kimi dil və ya digər hər hansı bir sayı ilə dillərində bəzi tanış ola bilər harada şeyi əlavə edə bilərsiniz bir sıra sonuna reklam nauseam. Siz bir sıra zaman onun ölçüsü ölçüsü 6, və ideya kimi əvvəllər qədər müəyyən bir ölçüsü bir bufer olan, Siz qapısı həyata tahmin var nə ölçüsü siz olmaq istəyirsiniz? Siz çox böyük tahmin varsa, Siz yer israf edirik. Çox kiçik tahmin varsa, siz ən azı, ki, məlumat saxlamaq olmaz daha çox iş olmadan. Göstəricilərinə Belə ki, bu gün, thanks, biz birlikdə öz xüsusi stitching başlamaq data strukturları, və Əslində burada bir şey deyil ki, bir az daha görünür ilk baxışdan sirli, lakin bu, biz bir bağlı zəng edəcəyik nə siyahısı, və ümumiləşdirir onun adı cür Bu. Bu nömrələri siyahısı, və ya Bu halda, nömrələri siyahısı, lakin bir şey siyahısı ola bilər, lakin bilər Bu, birlikdə oxlar yolu ilə bağlı oldu və yalnız bir tahmin almaq nə texnika ilə biz mümkün olacaq birlikdə stitch, sort bir mövzu ilə popcorn kimi, burada siyahıları düzbucaqlı bağlıdır? Onun nömrələri? Əsas dil xüsusiyyət nədir? Auditoriya: A pointer. DAVID Malan: A pointer. Belə ki, bu oxlar hər burada təmsil bir pointer və ya yalnız bir ünvanı. Belə ki, başqa sözlə, mən istəyirəm nömrələrin siyahısı saxlamaq üçün, Mən istəyirəm, mən yalnız onu saxlamaq bilməz inkişaf və shrink imkanı bir sıra mənim data strukturu. Mən bir az lazımdır daha sophistication, lakin bu fark şəkil cür təklif Siz yalnız kiçik mövzuları var, əgər ki, birlikdə hər şey birləşdirən, yəqin ki, yer etmək çətin deyil o düzbucaqlı arasında iki və ya bu qovşaqlarının iki biz başlamaq lazımdır yeni node qoymaq, onlara zəng, və sonra bəzi yeni mövzu ilə, yalnız üç qovşaqlarının xəndək, Birincisi, son bir, bir Yalnız orta daxil ki. Həqiqətən bir bağlı siyahı, bir sıra fərqli olaraq, dinamik. Bu inkişaf edə bilər və ola bilər shrink və siz deyil bilmək və ya əvvəlcədən necə qayğı var qədər data siz saxlanılması olacaq, lakin biz bir az olmalıdır çıxır Bu həyata necə haqqında ehtiyatlı. Belə ki, ilk biz həyata necə hesab edək bu kiçik düzbucaqlı biridir. Bu int həyata keçirilməsi üçün asandır. Siz yalnız sonra int n və demək Bir int 4 bayt almaq, amma bir int almaq necə, n zəng və sonra bir pointer, növbəti zəng edək. Biz bu zəng edə bilər Şeyi bir şey istəyirik amma xüsusi data strukturu lazımdır. Evet? Auditoriya: Ampersand [işitilemez]. DAVID Malan: Belə ki, işareti biz istifadə edəcək potensial bir node ünvanını almaq. Amma biz başqa lazımdır C xüsusiyyət üçün Mənə yaratmaq imkanı verir Bu xüsusi düzbucaqlı, bu xüsusi dəyişən siz yaddaş, olacaq. Auditoriya: A struct. DAVID Malan: A struct. Keçən həftə geri, biz təqdim struct, bu nisbətən sadə söz ki, bizə bu kimi şeylər etmək imkanı verir. C məlumatları ilə gəlmədi strukturu tələbə çağırıb. Bu int və float və char və ilə gəlir Belə, lakin tələbə ilə gəlmək deyil, lakin biz bir tələbə data növü yarada, Bu sintaksis ilə bir tələbə strukturu, burada. Və təkrar bu görəcəksiniz. Belə ki, narahat etmir açar sözlər ezberlemeye, lakin vacibdir söz deyil dedik ki, yalnız fakt struct sonra biz bu tələbə adlanır və daxili tələbə adı və bir ev idi bir yurt və ya kimi və ya. Və indi, bu gün, bu təklif edək. Mən bir neçə söz əlavə, amma istəyirsinizsə sonra ki, bu düzbucaqlı həyata keçirilməsi üçün bir int və bir də var pointer, siz, mən nə deyiləm bilirik node adlı struct bəyan olacaq. Mən demək gedir, onun daxilində də deyiləm bir node, bu düzbucaqlı, bir int var ki, və biz zəng edəcəyik n və Bu növbəti göstərici var. Bu, bir az verbose deyil lakin bu barədə düşünüyorsanız, şəkil idi oxlar bir an əvvəl nə data növü var? Harada o oxlar hər işarə edir məlumat strukturu hansı növ üçün necə? Bu, sadəcə se başına bir int işarə deyil. Bu işarə bütün düzbucaqlı şey ki, düzbucaqlı şey, bir node adlanır bildirib. Və belə ki, biz cür var recursively bu cür müəyyən bir node ki, biz deyəcəklər n adlı int ehtiva edir və bir pointer növbəti adlanır data strukturu növü ki, pointer xal yəqin deyil struct node olacaq. Belə ki, bu annoyingly verbose deyil və yalnız xırdaçı olmaq səbəbi biz bilməz yalnız bu demək olan səmimi , daha çox oxunaqlı görünür geri oxumaq C ki, çünki hər şeyi alt üst, sağ. Biz nöqtəli vergül almaq qədər bu deyil söz node həqiqətən mövcud olduğunu. Biz bu cür etmək istəyirsinizsə Belə ki, məlumatların daxilində cyclical arayış strukturu, biz bunu, harada biz, üst struct node demək olan Bizə bu izah uzun yol verir odur ki, biz struct node demək, sonra daxili, və sonra son line biz demək, bütün sağ, C, yolu ilə, yalnız bu bütün lənətləmək zəng şey node və dayandırmaq cəmi söz struct istifadə edərək. Belə ki, bu yalnız sort bir sintaktik deyil nəticədə bizə yaratmaq imkan verir oyun məhz bu kimi görünür ki, bir şey. Biz indi güman əgər biz belə C bu şey həyata, necə həqiqətən biz nə bu traversing başlamaq? Bəli, əslində, biz nə üçün bütün sağ və yalnız sol olan təkrarlamaq növ qovşaqlarının daxil və ya qovşaqlarının silmək və ya biz istədiyiniz yerdə şey üçün axtarış, lakin bunu,-nin irəli getmək və edək hər şeyi bir az daha real Çünki indiyə qədər super aşağı səviyyəli olmuşdur. Hər kəs sanki birinci olmaq istəyirsiniz? OLDU. Qədər gəlib. Sənin adın nədir? DAVID: David. DAVID Malan: David. Görüşmək Nice. Məndə həmçinin. Oldu. Və biz bir sıra 9 lazımdır. Kimi yaxşı deyil ilk olaraq, bəlkə də. OK, sayı 9. A sayı 17, xahiş edirik. Mənə bir az uzaq geri gedək. Number 22, xahiş edirik, və necə uzaq geri haqqında Mən heç bir əlləri görə bilərsiniz bütün işıq və ya heç bir. Biri orada könüllü olunur. Siz gəlmək istəyirsiniz? Sizin qolun zorla qədər davam edir. 17 OK. 22. 26 aşağı gəlir. Hər kəsdən istəyirsiniz forcefully-- qədər Hadi. Faktiki könüllü. Belə ki, çox tez, əgər Sizlərin təşkil edə bilər özünüzü yalnız kimi ekranda qovşaqlarının. Təşəkkür edirəm. Və 26 olacaq. Bütün hüquqlar və sürətli tətbiqi. Beləliklə, mən David Ben və siz də var? DAVID: David. DAVID Malan: Və siz? JAKE: Jake. SUE: Sue. ALEX: Alex. RAPHAEL: Raphael. TAYLOR: Taylor. DAVID Malan: Taylor. Əla. Belə ki, bu, bizim könüllü bu gün və irəli getmək və yol bir az keçmək və yalnız irəli getmək və saxlamaq Siz və ya Sizin kimi nömrələri keçirilməsi ilk əlaməti və sol tərəfdən istifadə edərək, irəli getmək və yalnız həyata bu oxlar, yalnız Sol tərəfdən sözün ki, Siz qeyd etməlidir nə işarə və özünüzü ki, bir otaq vermək biz əyani həqiqətən, sizin silah edə bilərsiniz işarə, və yalnız qeyd edə bilərsiniz sort yerə yaxşıdır. Belə ki, burada biz bir bağlı siyahı var iki, üç, dörd, beş qovşaqlarının ilkin və biz bu xüsusi var fark var başında pointer əsas biz takip lazımdır, çünki bütün uzunluğu siyahısı birtəhər. Onlar tərk edirik, baxmayaraq ki bu uşaqlar, sağ, geri yaddaş geri, onlar həqiqətən hər yerdə ola bilər kompüter yaddaşında. Belə ki, bu uşaqlar ola bilər səhnədə yerdə dayanan və ki, uzun onlar kimi, gözəl həqiqətən bir-birinə işarə edərək, lakin şeyi saxlamaq üçün təmiz və sadə alacağıq yalnız onlara çəkmək kimi soldan sağa Bu, lakin kütləvi boşluqlar ola bilər bu qovşaqlarının arasında. İndi Mən, həqiqətən, bəzi əlavə etmək istəyirsinizsə, yeni dəyər, nin irəli getmək və bunu bildirin. Biz indi imkanı başqa bir node seçin. 55 mallocing ilə başlamaq edək deyirlər. Kimsə malloc olan ağla istəyirsiniz? OK, qədər gəlib. Sənin adın nədir? RAINBOW: Rainbow. DAVID Malan: Rainbow? Oldu. Malloc Rainbow. Qədər gəlib. Belə ki, indi biz özümüz xahiş var algorithmically biz 55 qoya bilər harada. Belə ki, hamımızın bilməsi, Aydındır ki, burada o, yəqin ki, biz çalışdığınız əgər məxsusdur Bu sıralanır saxlamaq və uşaqlar bir almaq bilər geri addım belə ki, biz off düşmək deyil mərhələ, böyük olardı. Belə ki, həqiqətən, Rainbow, Mənimlə burada başlamaq, çünki biz indi bilərsiniz kompüter yalnız bir zaman bir dəyişən görürük. Bu ilk node əgər belə. O, bir node deyil edək o, yalnız bir göstərici var o cəlb niyə və ki bir göstərici yalnız ölçüsü deyil, o tam düzbucaqlı biridir. Belə ki, biz hər yoxlamaq olacaq iteration 9 55 az? Yox. 17 55 az? Yox. 22-dən az? 26-dən az? 34-dən az? Və indi, açıq-aydın Rainbow sonunda məxsusdur. Belə aydın ola bilər, və nə üçün adı, Taylor idi? TAYLOR: Taylor. DAVID MALAN: Taylor nin arasında So sol və burada Rainbow əlləri, Onların əl nə qeyd etmək lazımdır Bu siyahıda 55 əlavə etmək sifariş? Biz nə etmək lazımdır? Evet? Auditoriya: Taylor əli sol qeyd etmək lazımdır. DAVID Malan: Məhz. Belə ki, bir node daxil siyahısı sonunda olduqca sadə, çünki Taylor yalnız yerə yerinə, qeyd etmək var və ya biz, null zəng edəcəyik null olmaması sort bir göstərici və ya xüsusi sıfır pointer, sen Sizin sol ilə qeyd etmək gedir əl Rainbow və sonra Rainbow, harada sol olmalıdır əl yəqin ki, qeyd? Down. Əlini sort əgər yaxşı deyil burada və ya sort hər hansı bir off işarə edən yol. Bu hesab olunacaq zibil dəyəri, lakin o, işarə, əgər bəzi məlum dəyəri alacağıq sıfır və ya null zəng, OK bu bir müddət var, çünki və biz siyahısı indi tam bilirik. Belə ki, nə başqa var nisbətən sadə halda? Biz 5 malloc bilər? Qədər gəlib. Sənin adın nədir? TIFFANY: Tiffany. DAVID MALAN: Mən təəssüf edirəm? TIFFANY: Tiffany. DAVID Malan: Tiffany. Oldu. Tiffany malloced edilmişdir dəyəri 5. Qədər gəlib. Bu, çox nisbətən asandır, lakin Indi əməliyyatları üçün nəzərdən keçirək. Bu olduqca asan idi sonunda Taylor ilə. Number 5, əlbəttə az 9 daşıyır və biz, biz Tiffany var, David var və adı nə idi? JAKE: Jake. DAVID Malan: Jake. Tiffany, Jake, və David. Kimin əli ilk satıcı tərəfindən aydınlıq olmalıdır? Siz burada nə etmək istəyirsiniz? Bir neçə mümkün yolları var, lakin bir və ya daha yanlış yolları da var. Auditoriya: leftmost ilə başlayın. DAVID Malan: leftmost ilə başlayın. Kim sonra burada leftmost var? Auditoriya: First. DAVID Malan: OK. Belə ki, ilk ilə başlamaq və siz harada nə Davudun əlləri olmaq yeniləmək istəyirsiniz? Auditoriya: 5 doğru. DAVID Malan: OK. Beş Belə ki, David, point və ya Tiffany burada və indi? Auditoriya: Tiffany 9 bal? DAVID Malan: Perfect, Binky nin istisna olmaqla baş yalnız cür, sağ düşdü? Ilə yanlış nə, çünki sanki bu şəkil? Auditoriya: Heç bir şey işarə edir. DAVID Malan: Heç bir şey deyil indi Jake işarə. Biz sözün 9 yetim etdik 17, və biz sözün var bu yaddaş bütün sızan ötəri ilk Davudun əli yenilənməsi, ki düzgün kimi insofar gözəl İndi Tiffany da işarə edərək, lakin heç bir olsaydı Jake qeyd etmək uzaqgörənliyi, sonra biz itirdik ki, siyahıda bütövlükdə. Belə ki, əvvəlki halına qaytar edək. Belə ki, yaxşı bir şey idi üzərində səfər lakin indi düzəltmək edək. Biz ilk əvəzinə etməliyəm? Evet? Auditoriya: Tiffany 9 qeyd etməlidir? DAVID MALAN: I bilməz Sizə yaxın almaq. 9 Kim qeyd etməlidir? Auditoriya: Tiffany. DAVID Malan: Bütün hüququ. Belə ki, Tiffany 9 ilk point olmalıdır. Belə ki, Tiffany almaq lazımdır eyni dəyəri Davuda olan görünür bir an lazımsız, lakin ikinci, çünki indi gözəl var addım, biz Davudun əli təkmilləşdirə bilər Tiffany, sonra əgər qeyd etmək biz yalnız növ təmiz şeyi qədər Bu bahar kimi növ sanki, İndi ki, düzgün durub var. Belə ki, əla. Belə ki, indi biz demək olar ki, orada edirik. Nin bir final daxil edək dəyəri 20 kimi dəyər. Biz bir final könüllü malloc bilər? Qədər gəlib. Belə ki, bu bir az daha çətin. Lakin, həqiqətən, kodu, biz istəyirik yazılı, şifahi də olsa, Yalnız bir dəstə olan kimi İndi şərait, sağ əgər? Biz vəziyyəti idi bu məxsusdur əgər yoxlanılması Sonda, bəlkə əvvəlində. Biz loop bir növ lazımdır ortada spot tapmaq. Belə ki, adı nə ilə nə edək? ERIC: Eric. DAVID Malan: Eric? Eric. Görüşmək Nice. Belə ki, biz 20 var. Beş Az? Yox. Doqquz az? Yox. 17-dən az? Yox. OLDU. O, burada məxsusdur və Sizin adları yenə var? SUE: Sue. DAVID Malan: Sue. ALEX: Alex. DAVID Malan: Sue, Alex, və? ERIC: Eric. DAVID Malan: Eric. Kimin əlləri ilk yenilənir almaq lazımdır? Auditoriya: Eric. OLDU. Belə ki, Eric nin olduğu qeyd etməlidir? 22. Yaxşı. İndi nə gələn var? Sue sonra Eric qeyd edə bilərsiniz və indi, əgər uşaqlar yalnız gözəl bir otaq etmək vizual, indi biz durub etdik. Belə ki, indi bir sual nəzərdən keçirək lakin Bizim könüllü üçün çox təşəkkür edirəm. Çox yaxşı. İstəsəniz, bu davam edə bilərsiniz. Və biz bir sevimli ayrılıq hədiyyə əgər var Siz hər bir stress topu almaq istəyirəm. Mənə yalnız bu aşağı süzmək. Belə ki, bu paket nədir? Bu gözəl görünür biz indi həddə bir alternativ təqdim belə məhdudlaşmır array bəzi sabit ölçüsü bir sıra. Onlar dinamik inkişaf edə bilər. Amma biz kimi çox həftə gördüm Keçmişdə biz pulsuz üçün bir şey almaq heç vaxt kimi, şübhəsiz ki, burada ticarət-off var. Bir bağlı bir ayaq ilə belə siyahısı, bu dinamizm var? Bu qabiliyyəti, səmimi inkişaf və biz sil edə bilərdi lazım və shrink bilər. Biz nə qiymət ödəyir? Twice ilk növbədə çox yer kimi. Siz şəkil baxsaq, artıq Mən integers bir siyahısını saxlanılması. Mən bir siyahısını saxlanılması alıram integers plus göstəricilər. Beləliklə, mən kosmik məbləği iki dəfə alıram. İndi bəlkə ki, belə deyil böyük 4 bayt, 8 bayt, lakin əlbəttə əlavə edə böyük data dəstləri üçün. Başqa İşin mənfi tərəfi odur nədir? Evet? Auditoriya: Biz var onlara bir-bir axır. DAVID Malan: Bəli. Biz onlara bir-bir axır var. Siz bu super imtina nə bilirik kvadrat bracket rahat xüsusiyyət notation, daha düzgün təsadüfi giriş kimi tanınan, biz yalnız jump edə bilərsiniz fərdi element lakin indi mən hələ də olsa burada könüllüləri, Mən tapmaq istəyirdi 22 nömrəli, yalnız bilməz bracket bir şey bir şey jump. Mən çox siyahı üzərində baxmaq xətti bizim axtarış nümunələri kimi, sayı 22 tapmaq üçün. Beləliklə, biz bir qiymət ödənilir görünür. Amma biz yenə bilərsiniz digər məsələləri həll etsin. Əslində, mənə təqdim edək visuals bir neçə. Aşağı olduğunuz Belə ki Mather Dining Hall yaxınlarda, ki, xatırlamaq lazımdır onların oxşar qablar destesi, biz bu borc Sinif əvvəl Annenberg. Belə ki, qablar, bu yığını, baxmayaraq ki, nümayəndəsi əslində Kompüter elm data strukturu. Bir data strukturu var kompüter bir yığın kimi tanınan olan çox gözəl məhz bu vizual özü verir. Bu qablar hər bir deyil, əgər belə tray lakin bir sıra kimi və mən istəyirdim nömrələrini saxlamaq üçün, mən burada bir aşağı qoymaq bilər, və mən burada bir yazmaq bilər və nömrələr yığma davam bir-birinə, və nə üst Bu barədə potensial faydalı nə dolayısı var ki Bu data strukturu? Mən çıxarmaq bilər ki sayı ilk ən rahat? orada ən son bir put. Belə ki, bu biz zəng nə edir informatika bir LIFO data strukturu. , Ilk keçən. Biz uzun niyə əvvəl görürsünüz ki, indi faydalı, lakin ola bilər yalnız mülkiyyət hesab edir. Sizcə əgər bu cür axmaq var yemekhane bunu necə haqqında. Hər dəfə onlar təmiz qablar və üst tam olanları qoymaq, Daha əvvəl təmiz ola bilər lakin nəticədə çox çirkli və tozlu çox alt tray əgər heç həqiqətən ki altına almaq yığını, çünki yalnız yeni qoyaraq saxlamaq və üst təmiz olanları. eyni şey baş verə bilər bir supermarket çox. Bir ekran işi varsa süd və hər zaman CVS və ya daha çox süd alır kim, Yalnız süd itələmək Əgər siz artıq geri və Siz ön qədər yeni qoymaq bəzi olduqca pis olacaq məlumat strukturu sonunda süd, Bu altındakı həmişə çünki ya equivalently Bu arxa həmişə var. Amma düşünmək üçün başqa yol var məlumat və məsələn, bu qədər astarlı. Əgər insanlardan biri edirsinizsə edən bəyənir Apple mağaza kənarda sıralamaq zaman yeni bir məhsul gəlir həyata, siz yəqin edirik bir yığın data istifadə strukturu çünki hər kəs kim uzaqlaşdırmağa olardı up astarlı bəzi yeni oyuncaq almaq. Əksinə, siz yəqin ki, istifadə etdiyiniz məlumat strukturu hansı sisteminin və ya hansı real dünyada? Ümid edirəm ki, bir xətt var, və ya daha çox düzgün və ya daha çox British kimi, bir sıra. Və bir sıra da çıxır kompüter data strukturu, lakin bir sıra çox var müxtəlif mülkiyyət. Bu LIFO deyil. , Ilk keçən. Üzdən iraq. Əvəzinə FIFO var. Ilk out, da. Və yaxşı bir şey deyil ədalət naminə əlbəttə zaman astarlı edirik səhər qədər super erkən. Siz ilk orada almaq ilk yaxşı almaq istəyirəm. Və bu məlumatların bütün strukturları, sıralarında və baca və başqaları dəstələri, siz çıxır bu kimi bir sıra hesab edə bilər. Bu bəlkə, bir sıra edir sabit ölçüsü 4, lakin had biz yalnız qalamaq bilər cür gözəl qablar demək olar ki, sonsuz hündür biz əgər ki, bir çox qablar və ya nömrələri var. Belə ki, bəlkə istəyirik Burada bağlı siyahı istifadə, lakin ticarət-off olacaq potensial daha çox yaddaş lazımdır ki, bir az daha çox vaxt tələb edir, lakin biz yığını hündürlüyü məhdudlaşdırmaq deyil, çox Mather ekran halda kimi yığını ölçüsünü məhdudlaşdıra bilər, və belə ki, bu dizayn qərarları və ya var nəticədə bizə mövcud variantları. Bu məlumatları So strukturları, biz açılmış etdik potensial yeni yuxarı həddi görən nə əvvəllər super sürətli oldu və biz tərk lazımdır off bu gün və harada biz almaq üçün ümid lazımdır Çərşənbə günü, biz lazımdır Bir məlumatlara baxmaq başlamaq Bizə axtarış imkan verir strukturu log son vaxt data yenidən. Və biz həftə sıfır, geri, gördüm ki, ikili axtarış və ya bölmək və bir və fəth. Bu, hələ geri və daha yaxşı gəlir Bu çərşənbə müqəddəs grail ilə gəlmək olacaq həqiqətən çalışır data structure və ya nəzəri-da daimi vaxt, vasitəsi Bu neçə etməz milyonlarla və ya şeyi milyardlarla biz data strukturunda var, o, Bizə daimi vaxt, bəlkə bir addım və ya iki addımlar və ya 10 addımlar, lakin addımlar daimi nömrələri ki, data strukturu vasitəsilə axtarış. Həqiqətən müqəddəs grail olacaq lakin çərşənbə günü ki, daha çox. Sonra ya baxın. [MUSIC PLAYING]