DAVID Malan: Bütün sağ, geri salamlayıram. Bu CS50 edir. Bu həftə yeddi başlayın. Belə ki, bir müddət olub, mən, biz istədiyiniz fikir oldu Biz bir qasırğa tur off tərk harada və biz artıq olacaq. Bu şey burada ola bilər Belə ki, İlk bəzi angst səbəb oldu. Amma inşallah, siz başlıyoruz burada işarə nə acclimate - olan göstərici təmsil ulduz daha layman nin baxımından yalnız nə? Belə ki, bir ünvan var. Belə ki, onun ünvanı var yaddaşında bir şey. Və biz geri soymaq qat başladı bir neçə həftə əvvəl, hər şeyi istəyirəm GetString və digər bu kimi funksiyaları bütün bu vaxt qaytarılması edilmişdir kimi yaddaş şeyi ünvanlarını, ilk xarakter ünvanı bəzi ardıcıllığı. Beləliklə, biz də, valgrind təqdim edən Bu problem üçün istifadə başlarsınız xüsusilə növbəti üçün müəyyən problem həmçinin müəyyən edilmişdir. Və valgrind bizim üçün nə edir? Bu yaddaş sızıntıları üçün yoxlayır və bu, həmçinin yaddaş sui-istifadə üçün yoxlayır. Ki, bəzi ehtimalı ilə aşkar edə bilər, əgər kodunuzu yaddaş toxunmaq gedir ki, sadəcə deyil. Belə ki, baş mütləq, ancaq əgər bəzi hüdudlarından kənarda getmək dizi, və həqiqətən valgrind çalıştırmak və davranış vadar edərkən valgrind sizin proqram çalışan onun daxilində çalışan, siz almaq lazımdır bu kimi mesajlar - "etibarsız sayılması yazmaq , bir neçə geri olan ölçüsü 4 " həftə bundan əvvəl mən təsadüfən idi ki, nəzərdə çox uzaq bir int olduğu kimi bir sıra hüdudlarından kənarda. Və belə ölçüsü 4 burada ölçüsü deməkdir xüsusi int. Belə ki, əslində əmin edir ki, valgrind çıxış, onun formatında, yalnız dəhşətli deyil. Bu mess vasitəsilə görmək həqiqətən çətindir maraqlı məlumat üçün. Bəs biz burada etdik yalnız pasaj edir ətraflı neçə bəzi maraqlı satır. Amma dərk edirik ki valgrind-nin 80% çıxışı bir az olacaq yayındırma. Məhz bu kimi nümunələri axtarmaq - sağ etibarsız etibarsız, 40 bayt oxumaq və blokları bəzi nömrəsi mütləq kimi açar sözlər, itirdi. Və nə ümid görürsünüz bəzi funksiyası nə iz növü səhv daxil əslində Bu halda, hansı xətti Mənim kodu yəqin səhv idi? Olan memory.c adlı bir fayl, 26 biz oynayan nümunə vaxt. Belə ki, malloc yəqin deyil. Bu əvəzinə mənim kodu yəqin idi. Beləliklə, biz daha bu görürsünüz və yenə uzun əvvəl. Scanf Belə ki, bu bir qədər gəldi İndiyədək formalarının neçə. Biz qısa sscanf gördüm. Bu bir şey sayı Əgər sizin daxil dived Viktorina hazırlıq. Və scanf əslində nə CS50 kitabxana altındakı istifadə edilmişdir üçün çox bir müddət başlıq istifadəçi daxil almaq üçün. Məsələn, mən CS50 üzərində hərəkət əgər cihaz burada, bir məni açmaq bildirin scanf-0.c deyirlər ki, məsələn, bu gün Və super sadədir. Bu, sadəcə kodu bir neçə xətləri var. Amma bu nümayiş etdirir həqiqətən necə getInt Bu zaman bütün çalışır. Line 16 burada bu proqram olaraq, , Mən int bəyan edir ki, bildiriş. Belə ki, heç bir göstəricilərinə, sehirli heç bir şey var, yalnız bir int. Sonra line 17, mən təklif bir neçə istifadəçi, xahiş edirik. Sonra gec 18, mən burada scanf istifadə edin. Və mən müəyyən növ kimi printf ki, Mən quote gözləyirik alıram ki, i dırnağı bağlamaq. I Belə ki, əlbəttə, bir int bildirir. Amma hiss nə, ikinci scanf üçün dəlildir. Necə ikinci təsvir edərdiniz ki, vergüldən sonra mübahisə? Ki, nədir? Bu x ünvanı var. Beləliklə, bu, çünki təmin faydalıdır x ünvanı ilə scanf, nə Bunu ki, funksiyası həvalə? Yalnız getmək, həm də nə? Bu bir dəyişiklik olun. Siz orada getmək bilər, çünki, bu cür var yaddaş bir yer üçün bir harita kimi. Və belə uzun siz təmin scanf, və ya belə bir xəritə ki, hər hansı bir funksiyası funksiyası getmək olar yalnız dəyəri baxmaq, lakin o, həmçinin əgər faydalı olan dəyəri dəyişmək scanf həyatında məqsədi üçün xüsusilə, istifadəçi daxil scan klaviatura edir. Və f kimi, biçimlendirilmiş işarə printf, f biçimlendirilmiş işarə Siz çap etmək istəyirəm ki, simli. Belə ki, qısa, bu xətt 18 sadəcə deyir ki, istifadəçi bir int oxumaq üçün cəhd edin klaviatura və, x daxilində saxlaya x-da yaşamaq olur nə ünvanı. Və sonra nəhayət, line 19 yalnız deyir ki, Bu halda int üçün təşəkkür edirik. Mənə davam və bu imkan. Belə ki, scanf 0 olun. Mənə davam və daxil zoom edək Mən getmək və bu çalıştırmak bilərsiniz nöqtələr scanf 0 doğramaq. Sayı, xahiş edirik? 50. 50 üçün təşəkkür edirik. Belə ki, kifayət qədər sadədir. İndi nə deyil? Bu bütün dəstə bunu deyil səhv yoxlanılması. Məsələn, mən əməkdaşlıq yoxsa, və mən bir sıra yazın deyil, Bunun əvəzində mən "Salam" kimi bir şey yazmaq ki, qəribə yalnız növü var. Olan şeylər CS50 və belə bir kitabxana bəzi bizim üçün aparır vaxt reprompting edir və reprompting. Bu sınamaq söz geri, cs50.c idi və bu getInt səbəbi var ki, CS50 kitabxana əslində bir bütündür uzun xətləri dəstə, biz istəyirik, çünki bu kimi axmaq heyəti üçün yoxlanılması. Istifadəçi vermədi bizim, əslində, bir int? O bizə bir şey verdin bir əlifba məktub kimi? Əgər belədirsə, biz aşkar etmək istəyirik və onlara fəğan. Lakin işlər daha maraqlı almaq Bu növbəti nümunə. Mən scanf-1.c getmək Əgər, nə biridir əsaslı dəyişib şey Bu növbəti misal? Mən, əlbəttə, char * kullanıyorum əvəzinə int. Çünki char * Beləliklə, bu, maraqlı geri, yalnız həqiqətən string kimi eyni şey. Belə ki, bəlkə kimi bu super hiss GetString sadə tətbiqi. Amma qat geri soyulmuş sonra ki, CS50 kitabxana, mən deyiləm İndi bu char * çağırır. Elə görək yerləşir, hər hansı halda, biz yanlış getmək. Line 17 - Mən yenə mənə bir şey verin, demək bu halda, simli. Və sonra növbəti olaraq, I, scanf zəng yenidən, bir format kodu verilməsi, Ancaq bu dəfə yüzdə s. Və bu zaman, Ben bu bufer verilməsi. İndi istifadə deyiləm, qeyd ki, işareti. Amma niyə burada yəqin ki, OK? Artıq bufer nə çünki? Artıq bir göstərici var. Artıq bir ünvan var. Və qoy bu sözü mənə bildirin "çaşdırmaq" var yalnız, məsələn, bu s zəng sadəlik. Amma bu bufer adlı etdik, çünki ümumi, proqramlaşdırma, siz var əgər yaddaş yığın, bir string həqiqətən yalnız, siz onu bir tampon zəng bilər olunur. Bu məlumat saxlamaq üçün bir yer var. Zaman YouTube, kimi şeylər oxşar Onlar, necə deyərlər, buffering edirik ki, yalnız bu bit yükləməzdən vasitələri internet və onların saxlanılması yerli dizi, belə yaddaş yerli yığın sənsiz sonra seyr edə bilərsiniz ki, bu atlama və ya asma geri oynarken. Belə bir problem olsa da burada var Mən scanf deyirəm, çünki gözləmək istifadəçi string. Burada ünvanı var yaddaş yığın. Var ki, simli qoyun. Niyə bound vermək deyil baxmayaraq, bizə problem? Nə olub? Mən daxil olmaq üçün icazə Am yaddaş hissəsidir? Bilirsiniz, mən bilmirəm. Bufer başlatılmış çünki bir şey üçün? Deyil, həqiqətən. Və belə ki, biz zəng olduğunuz var bir zibil dəyəri, hansı rəsmi bir söz deyil. Bu yalnız biz nə bit heç bir fikrim yoxdur deməkdir ki, dörd bayt daxilində var Mən bufer kimi ayrılmışdır. Mən malloc adlı yoxdur. Mən mütləq GetString axtarmadı etdik. Belə ki, kim həqiqətən nə bilir bufer daxilində? Və hələ scanf izah edən kor-koranə, orada getmək və istifadəçi yazdığınız nə qoydu. Belə ki, səbəb nə bizim kodu biz bunu əgər? Yəqin ki, bir segfault. Bəlkə, lakin yəqin ki, bir segfault. Və demək bəlkə deyil, çünki bəzən Siz bəzən, nə bir segfault deyil. Bazen yalnız şanslı almaq, ancaq o yenə olacaq proqram bir səhv. Mənə davam və bu tərtib edək. Hesab edirəm ki, köhnə məktəb yolu nə gedirəm. Belə ki, cingilti Daş 0, scanf-1, scanf-1.c daxil edin. Bağışlayın, çox köhnə məktəb. In nəzər salaq. Mən hara getdi? Oh, char * bufer. Oh, sizə təşəkkür edirəm - OK, Saxla - çox köhnə məktəb. Bütün sağ, bir müddət oldu. Beləliklə, mən yalnız fayl sonra xilas etdik müvəqqəti edilməsi bir an əvvəl dəyişdirin. İndi mən onu tərtib əl cingilti ilə. İndi isə irəli getmək gidiyorum və daxil edin, scanf-1 axır. String edin. Mən yazın lazımdır "salam". Və indi burada printf, səmimi, nerde bir az annoying bilər. Bu, faktiki olaraq gedən deyil Bu halda segfault. Printf bir az xüsusi çünki bu ümumi istifadə belə super ki, mahiyyətcə printf edir bizə lütf və həyata keçirilməsi, ki, cari bir göstərici deyil. Özümü yalnız çap etməyə mənə edək parantez null həyata, hətta mütləq deyil, baxmayaraq nə biz özümüz gözlənilir. Beləliklə, biz, həqiqətən, asanlıqla vadar edə bilməz Bu aydın bu segfault, lakin Mən istəyirdim davranış deyil. Belə ki, sadə həlli var? Yaxşı, scanf-2, mənə təklif edək ki, əvəzinə faktiki olaraq yalnız bir bölüşdürülməsi char *, mənə bir az asan haqqında olsun Bu, məni bufer ayrılması bildirin 16 chars bir ardıcıllıqla kimi. Beləliklə, mən yolları bir neçə bu edə bilərsiniz. Mən tamamilə malloc istifadə edə bilər. Amma həftə iki geri getmək zaman Mən bütün dəstə lazım simvol. Bu yalnız bir sıra var. Mənə əvəzinə bufer yenidən bildirin 16 simvol bir sıra olacaq. Və indi, zaman mən bufer verilib - və bu olmadı bir şey həftə iki danışmaq - Lakin bir sıra kimi müalicə edə bilərsiniz bu bir ünvan baxmayaraq. Biz gördük kimi texniki, onlar etdiyiniz bir az fərqli. Siz onu keçmək Lakin scanf ağla deyil bir serialın adı, çünki nə Bizim mahiyyətcə üçün cingilti edəcəyik kimi ki, serialın adı müalicə 16 bayt yığın ünvanı. Belə ki, bu yaxşıdır. Bu indi ümid edə bilər o deməkdir ki, aşağıdakıları edin. Mənə bir an Uzaklaştırmak edək və OK tərtib scanf-2, sarf edirik. İndi məni çizgi scanf-2 əldə edək. String edin. "Hello". Və Bu iş görünürdü. Lakin kimsə bir ssenari təklif edə bilər olan hələ iş ola bilər? Bəli? 16 artıq bir şey. Və faktiki olaraq, biz ola bilər bir az daha dəqiq. Daha sonra 15 simvol bir şey, həqiqətən unutmayın lazımdır, çünki ki, backslash sıfır lazımdır ki, dönmədən simli sonunda, bir kənara scanf adətən olacaq bizim üçün qayğı. Belə ki, mənim kimi bir şey edək - bəzən biz yalnız bilərsiniz belə onu tərk. OK, belə ki, biz indi induksiya etdik bizim seqmentasiya günah. Niyə? Mən çox 15 tipli Çünki simvol, və biz, həqiqətən, var toxunub yaddaş ki, mən, həqiqətən, olmamalıdır. Belə ki, nə həqiqətən burada həlli var? Yaxşı, biz uzun simli nə lazımdır, əgər? Yaxşı, biz bəlkə 32 bayt edir. Yaxşı, nə kifayət qədər uzun deyil, əgər? Haqqında 64 bayt? Nə kifayət qədər uzun deyil, əgər? Necə 128 və ya 200 bayt? Nə həqiqətən burada həll edir ümumi halda, biz bilmirsinizsə istifadəçi yazın neler inkişaf? Bu ass böyük bir ağrı yalnız növü var vicdanlı olmaq, bu niyə CS50 kitabxana bir neçə onlarla xətləri var kollektiv həyata kodu Biz olmayan bir şəkildə string GetString əvvəlcədən bilmək üçün nə Yuzerin tipi gedir. Xüsusilə, əgər geri baxmaq cs50.c iki həftə əvvəl, görəcəksiniz ki, GetString həqiqətən edir bu şəkildə scanf istifadə etməyin. Əksinə, bir xarakter oxuyur bir anda. Çünki haqqında bir gözəl şey bir xarakter oxuma biz bilər həmişə özümüzü təmin ən azı bir char var. Mən almaq sonra char bəyan bilər yalnız bu həqiqətən körpə addımlar a bir xarakter oxumaq klaviatura zaman. Və sonra, sizə nə GetString görürsünüz edir, bunun həyata çalışır hər dəfə , yaddaş 16 bayt demək, istifadə malloc və ya cousin onun üçün köhnə çıxarmaq, daha çox yaddaş ayrılması sonra yeni və sürünərək daxil yaddaş yanaşı, bir-bir xarakter əldə və o həyata çalışır zaman yaddaş yığın, Polip üz salır yaddaş böyük bir yığın, köhnə nüsxə yeni və təkrar daxil. Və bu həqiqətən həqiqətən bir ağrı var kimi sadə bir şey həyata bir istifadəçi daxil əldə. Beləliklə, siz scanf istifadə edə bilərsiniz. Siz digər oxşar funksiyaları istifadə edə bilərsiniz. Və dərsliklərin çox və online nümunələri, lakin onlar bütün istəyirik Bu kimi problemləri həssas. Və nəticədə, bir segfault əldə cür annoying edir. Bu istifadəçi üçün yaxşı deyil. Amma ən pis halda, nə bu əsaslı sizin qoymaq riski kodu? Hücum bir növ, potensial. Biz belə bir hücum haqqında danışdı - yığını coşğun. Amma, ümumiyyətlə, sizə icazə olduğunuz halda daşqın bufer kimi biz etdik yalnız yazı ilə həftə öncə neçə, daha yığını haqqında "salam" dən, siz həqiqətən, potensial, üzərinə götürə bilər kompüter, və ya ən azı məlumatları almaq Sizə aid deyil. Biz niyə belə qısa, bu bu təlim təkərlər. Amma indi biz onları çıxarmaq başlayır proqramlar artıq ehtiyac kimi, istifadəçi mütləq girdi. Ancaq problem halda, altı müəyyən sizin giriş böyük gələcək 150 lüğət fayl bəzi tək min söz. Beləliklə, siz narahat yoxdur istifadəçi ixtiyari girdi. Biz bəzi fərziyyələr verəcək fayl haqqında. Göstəricilərinə və ya scanf haqqında hər hansı bir sual və ya ümumi istifadəçi girişi? Bütün sağ, belə bir, daha sonra bir göz atınız iki həftə əvvəl mövzu arxada. Və bir struct bu anlayış idi. Deyil - bir bu anlayışı nə olan struct? Struct bizim üçün nə idi? Define - Üzr istəyirik? Dəyişən növü tanımlayın. Belə növ. Biz, həqiqətən, iki mövzu birləşən edirik. Typedef ilə Belə ki, biz geri bir kimi, öz növü elan char * üçün string kimi sinonimi. Lakin typedef və struct istifadə edərək, biz həqiqətən öz data strukturları yaratmaq. Məsələn, mən geri əgər gedit daxil burada yalnız bir an, mən davam və bir şey kimi etmək, məni xilas edək bu, structs.c, deyək müvəqqəti olaraq, mən yalnız gedirəm davam və daxil standardio.h, int əsas edilsin. Və sonra burada, mən istəyirəm ki, güman saxlayan bir proqram yazmaq üçün çox birdən çox tələbələr evləri, məsələn. Belə ki, registrarial kimi bir növ məlumat bazası. Mən adı bir tələbə lazımdır, mən , char * adı kimi bir şey ola bilər və mən kimi bir şey olacaq - həqiqətən, ən CS50 kitabxana istifadə edək Yalnız bir an üçün bu etmək az sadə, biz borc ala kodu xətləri o deməkdir. Və edək yalnız sadə saxlamaq oldu. Biz bunu simli davam edəcəyik və indi GetString. Mən adını saxlanılır etdik ki, indi iddia bəzi tələbə və ev sadəcə dəyişənlər istifadə edərək bəzi tələbəsı, Biz və həftə bir. kimi Amma indi dəstək istəyirəm Güman çox tələbələr. Bütün sağ, elə mənim instinktlərdən etmək üçün string name2, GetString, simli olur house2 GetString olur. Və sonra üçüncü tələbəsı, name3 GetString nə edək. Bütün sağ, bu inşallah parlaq edir axmaq növü kimi, Bu proses həqiqətən, heç vaxt, çünki son gedir və yalnız olacaq Mənim kodu pis baxmaq və pis və pis. Amma biz həftə iki də bu həll. Bizim nisbətən təmiz həll nə idi biz çox dəyişənlər var idi eyni verileri bütün bağlı bu cür, lakin Biz bu dəhşətli mess istəmədi eyni adlı dəyişənlərin? Yerine nə idi? Beləliklə, mən bir neçə yerdə eşitdim edirəm. Biz bir sıra var idi. Siz çox hallarda istəyirsinizsə bir şey, nə üçün biz bütün bu təmiz yoxdur və yalnız mənə vermək, demək array adları adlanır? Və indi üçün, sabit kodu 3 bildirin. Və sonra mənə bir sıra vermək evləri adlanan və mənə bildirin indi ağır kodu 3. Və mən kütləvi qədər təmizlənmiş sonra Mən yalnız yaratdığı ortalıq. İndi mən hələ də ağır 3 kodlu, lakin sonra da 3 dinamik gəlir bilər istifadəçi və ya argv, və ya kimi. Yəni bu onsuz da təmiz. Bəs bu barədə annoying ki, deyil indi olsa da adı elə deyil əsaslı bağlıdır bir tələbə evi - ki, Mən, həqiqətən, bir şagirdin təmsil etmək istəyirəm - İndi paralel iki seriallarda var onlar olduğunuzu mənada eyni ölçüdə və adları bracket 0 ev bracket 0 ehtimalla xəritələr, və adları bracket 1 xəritələr ev bracket 1. Başqa sözlə, həmin tələbə yaşayır ki, ev və digər tələbə digər ev yaşayır. Ancaq şübhəsiz ki, bu ola bilər daha temiz edilir. Bəli, ola bilər, əslində. Və mənə davam və açıq bildirin structs.h up, və will Bu fikir görürük. Kimi, mən typedef istifadə etdiyiniz Qeyd edək ki, əvvəl elan etmək bir an alluded bizim öz veri növü. Amma mən də bu başqa söz kullanıyorum struct adlanan mənə yeni bir verir data structure. Və mən iddia Bu data strukturu gedir daxilində iki şeyi var it - adını bir simli və ev adlı simli. Və gedirəm adını vermək Bu data strukturu gedir tələbə çağırılacaq. Mən bunu istəyirəm bir şey zəng edə bilər lakin bu semantically etmək fikrimi mənə mənada. Belə ki, indi, mən daha yaxşı versiyasını açmaq əgər Proqramın I yazmağa başladı var, mənə üst diyirləyin bildirin. Və kodu bir neçə xətləri var Burada, lakin mənə diqqət edək bir an. Mən daimi adlandırılan tələbələri elan etdik və ağır indi 3 kodlu. Amma indi hiss necə təmiz mənim kodunu başlayır. Line 22, mən bəyan tələbə array. Və tələbə yəqin fark İndi bir veri növü. Bu faylı üst Qeyd Çünki Hesab edirəm ki, header file daxil etdik Mən yalnız bir an əvvəl qədər çəkdi. Və header file sadəcə idi bir tələbənin bu anlayış. Belə ki, indi, mən öz xüsusi data yaratdığınız növü C il müəllifləri əvvəl əvvəlcədən hesab etməyib. Amma heç bir problem. Mən bunu özüm edə bilərsiniz. Beləliklə, bu, tələbələr adlı bir sıra edir üzvləri hər bir şagird strukturu. Və mən o üç istəyirəm serialın edir. İndi, qalan nə Bu proqram nə? Mən bir az ixtiyari bir şey lazım idi. Belə ki, online 24 itibaren, I 0 3 təkrarlamaq. Mən sonra üçün istifadəçi xahiş şagirdin adı. Və sonra əvvəlki kimi GetString istifadə edin. Sonra, tələbə evi üçün xahiş və mən əvvəlki kimi GetString istifadə edin. Lakin xəbərdarlıq - az yeni syntax parçası - Mən i-ci tələbə hələ index bilərsiniz amma konkret məlumatlara necə əldə edirsiniz ki, struct sahəsində daxili? Yaxşı, yəqin nə var yeni sintaksis parçası? Bu, yalnız dot operator var. Biz, həqiqətən, əvvəl görməmişik etdik. Əgər varsa, Siz pset beş onu gördüm bitmap faylları ilə artıq dived. Amma dot yalnız bu daxilində deməkdir struct və ya bir çox sahələrdə, nöqtə vermək adı, ya mənə dot ev verir. Ki, struct daxilində getmək deməkdir ki, və xüsusən sahələri almaq. Bu proqramın qalan nə? Bundan sexy deyil. Mən yenə 0 3 təkrarlamaq Qeyd edək ki, və mən sadəcə İngilis dili yaratmaq Bunu kimi söz belə edir dən dot adı keçən belə bir evi, I-ci tələbə və onların evi kimi də. Və sonra nəhayət, indi almaq başlarsınız biz istəyirik indi bu barədə anal, nə malloc və tanış digər funksiyaları olmuşdur bütün bu vaxt edir. Niyə iki ad azad var və ev olsa mən malloc zəng etmədi? GetString etdi. Və ki, çirkli az gizli bir neçə həftə, lakin GetString var bütün üzərində yaddaş sızması edilmişdir İndiyədək bütün semestr yer. Və valgrand nəhayət olacaq bizə bu göstərir. Mən bilirəm, çünki Lakin bu, böyük deyil Mən sadəcə adını azad edə bilər ki, və ev, baxmayaraq texniki üçün super, super təhlükəsiz ola, mən olmalıdır bəzi səhv bunu burada yoxlanılması. Sizin instinktlərdən Nə izah? Mən nə yoxlanılması lazım Mən nə azad əvvəl simli, aka olan char *? Mən, həqiqətən, yoxlanılması lazım tələbələri əgər bracket i dot adı deyil bərabər null. Sonra irəli və pulsuz getmək OK olacaq ki, göstərici və eyni və ya digər biri kimi də. Tələbələr bracket i dot ev deyilsə null bərabər, indi qoruyacaq küncündə halda qarşı olan GetString null bir şey qaytarır. Və biz printf olacaq, bir an əvvəl gördüm yalnız söyləyərək burada bizi qorumaq null ki, bu qəribə baxmaq üçün gedir. Lakin ən azı, segfault deyil gördüyümüz kimi. Yaxşı, mənə burada başqa bir şey edək. structs-0 axmaq proqram növü Mən bütün bu məlumatları daxil, çünki proqram başa bir dəfə məğlub oldu. Amma mənə davam və bunu bildirin. Mənə terminal edək bir az daha böyük pəncərə. , Mənə structs-1 edək ki, Bu yeni versiyası. Mən bir az böyütmək lazımdır. Və indi mənə dot run edək structs-1 doğramaq. Tələbə adı - David Mather, Rob Kirkland nə edək Lauren Leverett nə edək. Nə maraqlı indi xəbərdarlıq edir - və mən yalnız bu çünki bilirik Mən proqram yazıb - bir fayl Mənim cari artıq var kataloq students.csv çağırıb. Əgər bəziləri görmüşəm bilər real dünyada bu. Bir CSV faylı nedir? Dəyərlər: virgülle ayrılmış. Bu yoxsul insan kimi növ var Excel fayl versiyası. Bu satır ve sütun bir masa var siz, Excel kimi bir proqram aça bilər bir Mac və ya Nömrələr. Və mən gedit burada bu faylı açmaq əgər, bildiriş - və nömrələr yoxdur. Yalnız danışanlardan gedit oldu Mənə xətt nömrələri. Bu ilk on line Xəbər fayl Davud və Mather edir. Növbəti line Rob vergül Kirkland edir. Və üçüncü xətt Lauren edir vergül Leverett. Belə ki, nə yaradıb? İndi bir C proqram yazdıq ki, səmərəli tablolar yaratmaq bir açıla Excel kimi proqram. Bütün ki, çekici məlumat dəsti, lakin Siz daha böyük chunks varsa həqiqətən istəyirəm ki, məlumat manipulyasiya və qrafik və etmək kimi, bu bəlkə biridir ki, məlumat yaratmaq üçün bir yoldur. Bundan başqa, CSVs ümumi həqiqətən super var yalnız sadə data saxlanılması üçün - Yahoo Maliyyə Məsələn, siz almaq əgər onların qondarma vasitəsilə stock quotes API, siz imkan verir ki, pulsuz xidmət cari up-to-the-tarixi fond almaq şirkətlər üçün quotes, onlar geri verileri vermək super sadə CSV format. Beləliklə, biz necə etdiniz? Bəli, bu proqramın ən qeyd demək olar ki, eyni. Lakin burada qeyd deyil, Çap line 35 tələbələri out, irəli, mən qənaət alıram iddia edir ki, disk tələbələr, belə bir fayl qənaət. Mən bir file * elan alıram hiss - İndi bu C. bir anomaliya növü Hər hansı səbəbdən, fayl, bütün caps edir ən çox digər məlumatlar növləri kimi deyil C. Lakin bu, daxili veri növü, fayl *. Və mən, bir fayl bir göstərici elan alıram ki, hesab edə bilər necə. fopen açıq fayl deməkdir. Nə faylı açmaq istəyirsiniz? Mən bir faylı açmaq istəyirəm edəcək ki, özbaşına students.csv çağırırıq. Mən istəyirəm ki, hər şey zəng edə bilər. Və sonra bir tahmin edir. İkinci arqument nə fopen yəqin ki, demək? Sağ, yazmaq üçün w, ola bilər ətraflı r ola bilər. Əgər əlavə etmək üçün var, sizə satır və əlavə etmək istədiyiniz bütün şey üzerine. Amma yalnız bu faylı yaratmaq istəyirik bir dəfə, mən quote dırnağı bağlamaq w istifadə edəcəyik. Və mən oxumaq edərək ki, yalnız bilirik sənədlərin və ya insan page. Fayl null deyilsə - başqa sözlə, heç bir şey yoxdur yanlış gedib əgər - mənə üzərində təkrarlamaq bildirin 0 3 tələbələr. İndi bir şey var hiss heç belə az fərqli Burada line 41. Bu printf deyil. Bu printf fayl fprintf var. Belə ki, fayl yazmaq olacaq. Hansı fayl? Olan göstərici belirttiğiniz bir ilk arqument kimi. Sonra format string daxil. Sonra biz istəyirik nə string müəyyən ilk faiz s üçün plug, və sonra başqa dəyişkən və ya İkinci faiz s. Sonra fclose ilə fayl bağlayın. Mən də, əvvəlki kimi, yaddaş azad daha Mən geri və əlavə etməlidir null üçün bəzi yoxlayır. Və bu. fopen, fprintf, fclose mənə verir mətn faylları yaratmaq bacarığı. İndi, problem set beş görürsünüz images əhatə edən, istifadə olacaq ikili faylları əvəzinə. Lakin əsaslı fikir, eyni , hətta will funksiyaları bir az fərqli oldu. Qasırğa tur Belə ki, ancaq siz əldə edəcək fayl ilə bütün çox tanış I/O-- giriş və çıxış - pset beş ilə. Və haqqında suallarınız Burada ilkin əsasları? Bəli? Nə bir null dəyər pulsuz üçün cəhd edin? Pulsuz kazanılmış halda mən hesab edirəm ki az daha çox istifadəçi dostu, siz potensial segfault. Mən nə çünki null keçən pis pulsuz iman, siz yoxlamaq üçün narahat O potensial tullantıların olardı, çünki bunun üçün özü nə üçün vaxt dünyada hər kəs. Yaxşı sual olsa. Bütün sağ, bu cür olur belə bizə bir maraqlı mövzu. Problem set mövzusu beş Suclari edir. Ən azı bir hissəsi var problem dəsti. Suclari ümumilikdə aiddir ki, bilər və ya məlumat bərpa silinmiş ola bilər qəsdən. Və mən sizə tez vermək istədiyiniz düşündüm nə dadı, həqiqətən, bütün gedir altındakı bu dəfə kompüter başlıq. Məsələn, daxili varsa sizin laptop və ya masa üstü kompüter sabit, ya mexaniki var həqiqətən spins ki, cihaz - platters adlı dairəvi şeylər var olduqca ki, kimi baxmaq nə yalnız baxmayaraq, burada ekranda idi bunu getdikcə köhnə məktəb var. Bu üç və yarım-düymlük edir sabit. Və üç yarım düym aiddir siz onu yüklediğinizde şey ilə bir kompüter. İndi noutbuk sizə çox uşaqlar , bərk-dövlət sürücüler, və ya SSDs var olan hissələri hərəkət yoxdur. Onlar RAM kimi daha çox və daha az gibisin Bu mexaniki cihazlar. Amma ideyaları, hələ də eyni əlbəttə onlar aid problem beş qurmaq üçün. Və bir sabit disk İndi hesab bir dairə olan təmsil Mən burada bu kimi çəkmək lazımdır. Siz bilgisayarınızda bir fayl yaratmaq zaman bu bir SSD, və ya olub Bu halda, bir yaşlı məktəb sabit disk, fayl birdən çox bit ibarətdir. Nin bu 0 və 1 ki, deyək, 0s və 1s bütün dəstə. Belə ki, bu mənim bütün sabit deyil. Bu yəqin olduqca böyük fayl. Və o da 0s və 1s up istifadə edir fiziki nömrəli hissəsi. Yaxşı ki, fiziki hissəsi nədir? Bəli, bu, bir sabit çıxır ki, bu tipli ən azı var bu kiçik kiçik maqnit hissəcikləri. Onlar mahiyyətcə şimal və onlara cənub dirəkləri, belə ki, əgər o maqnit hissəciklərinin biri çevirmək Bu yolla, siz ki, demək olar ki, 1 etdirir. Və altüst cənub əgər şimal, siz ki, demək olar ki, A 0 təmsil. Belə ki, real fiziki dünyada var Siz bir şey təmsil edə bilər necə ikili 0 dövlət və 1. Belə ki, bütün bir fayl edir. Maqnit bütün dəstə var onların bu və ya bu şəkildə olan hissəciklər Bu şəkildə yaradılması nümunələri və 0s və 1s. Lakin bu, bir dosyayı zaman çıxır bəzi məlumatlar ayrıca qeyd olunur. Beləliklə, bu, bir az masa bir kataloq, belə danışmaq. Və mən bu sütun adını zəng və edəcəyik Mən bu sütun yeri zəng edəcəyik. Və mən güman, demək gidiyorum bu mənim CV edir. Mənim resume.doc saxlanılır yer, 123 deyək. Mən həmişə ki sayı üçün gedin. Lakin istəyirəm ki, demək kifayətdir RAM, bir sabit disk edə bilərsiniz bir gigabyte və ya 200 Gb var və ya terabayt, və siz sayı bayt bütün. Siz 8 bit bütün chunks sayı. Beləliklə, biz bu deyəcəyəm yeri 123. Belə ki, mənim əməliyyat bu kataloq daxilində Sistem xatırlayır ki, CV yeri 123 edir. Lakin bu zaman maraqlı olur Bir faylı silmək. Məsələn belə - və təşəkkürlə, dünyanın ən çox Bu üzərində tutuldu - nə olur Siz Mac OS Zibil qutusuna bir fayl sürükleyin və ya Windows Recycle Bin? Bunun məqsədi nədir? Bu fayl qurtarmaq üçün açıq-aydın var lakin nə sürükleyerek akt yoxdur və Sizin Çöp və ya daxil düşmə üçün Recycle Bin bir kompüter haqqında nə? Həqiqətən tamamilə heç bir şey. Bu, sadəcə bir qovluq kimi. O, əmin olmaq üçün xüsusi qovluq var. Amma bu, həqiqətən faylı silmək edir? Xeyr, Bəli, çünki yəqin ki, bəzi kimi olmuşam, lənətləmək oh, siz yox idi Bunu etmək deməkdir. Beləliklə, siz ikiqat basın Çöp və ya Recycle Bin. Siz ətrafında dürtülmək etdik və bərpa etdik yalnız sürükleyerek fayl orada həyata. Belə aydın, bu, mütləq deyil bu təmizlənməsi. OK, siz asan daha istəyirik. Bilirsiniz ki, yalnız daxil sürükleyerek Çöp və ya Recycle Bin demək deyil Siz zibil boşaltma edirik. Belə ki, siz menyu gedin və demək Boş Çöp və ya Boş Recycle Bin. Sonra nə olar? Bəli, belə ki, daha belə silinir. Ancaq olur ki, bütün bu. Kompüter yerləşir unudur resume.doc idi. Amma nə yəqin dəyişməyib şəkil? Bit, mən iddia edir ki, 0s və 1s var bəzi fiziki aspekt saytda hardware. Onlar hələ də istəyirik. Bu, yalnız kompüter var var unudulmuş nə onlar. Belə ki, mahiyyətcə azad oldu fayl onlar yenidən istifadə edilə bilər bit ki. Lakin, daha çox fayl yaratmaq deyil qədər və daha çox faylları, və daha çox fayl olacaq probabilistically, bu 0s və 1s, bu maqnetik hissəciklər, təkrar almaq, üçün ayaq və ya sağ up, digər faylları 0s və 1s. Belə ki, vaxt bu pəncərə var. Və gözlənilən deyil ki, uzunluğu, həqiqətən. Bu çətin ölçüsündən asılıdır sürücü və neçə faylları və necə tez yeni olun. Lakin zaman bu pəncərəsində var fayl mükəmməl hələ olan bərpa. Əgər McAfee kimi proqramları istifadə əgər və ya Norton bərpa etməyə cəhd data, onlar yapýyorsun bütün çalışır bu dırnaqarası kataloq bərpa fayl olduğu anlamaq. Və bəzən Norton və deyəcəklər fayl 93% bərpa. Yaxşı ki, nə deməkdir? Yalnız o deməkdir ki, ki, digər fayl təsadüfən, demək, istifadə sona çatdı orijinal fayl həyata o bit. Yəni əslində nə cəlb edir data bərpa? Bəli, sizin kimi bir şey yoxdur, əgər Norton, kompüter əvvəlcədən quraşdırılmış Siz bəzən edə bilərsiniz yaxşı baxmaq edir bütün sabit axtarır at bit nümunələri. Və problem dəsti mövzulardan biri Beş axtarış edəcək ki, bir sabit disk bərabər, məhkəmə a kompakt flash kart image ki, 0s üçün axtarış digital kamera, yüksək ilə adətən və 1s, ehtimal, təmsil JPEG image başlayın. Və uşaqlar həmin images bərpa edə bilərsiniz Mən bu model görürsünüzsə, hərfinin məhkəmə image bit ilə qeyd edir ki, yüksək ehtimalı, JPEG başlanğıc. Və mən yenə eyni model görürsünüzsə, ki, yəqin ki başlaması qeyd başqa JPEG, və başqa JPEG, və digər JPEG. Bu adətən necə məlumat bərpa işləyəcək. Nə JPEGs haqqında gözəl belə olsa fayl format özü qədər deyil hər bir belə kompleksi, əvvəlinə fayl həqiqətən kifayət qədər identifikasiya edir , gördüyünüz kimi, və sadə Henüz varsa. Elə altından daha yaxından edək oldu tam olaraq nə kimi başlıq gedir və bu 0s və 1s nə bir bir az daha vermək var bu problem kontekstində. [Video playback] PC ən saklar-Haradan daimi məlumatlar. Bunu etmək üçün, veri RAM-dan səfər demək ki, proqram siqnalları ilə birlikdə necə veri sabit. Sabit sxemlərin tərcümə gərginlikli həmin siqnalları dəyişməsi. Bu, öz növbəsində, sabit nəzarəti hərəkət edən hissələri, bir neçə bəzi də sol hərəkət edən hissələri müasir kompüter. Siqnalların bəzi motor nəzarət olan metal örtüklü platters spins. Sizin data faktiki saxlanılır Bu platters haqqında. Digər siqnalları oxumaq / yazmaq hərəkət oxumaq və ya rəhbərləri ki, platters haqqında məlumat yazın. Bu maşın belə dəqiq bir insan ki, saç hətta arasında keçə bilmədi rəhbərləri və iplik platters. Lakin, bütün dəhşətli sürətlə işləyir. [END video playback] DAVID Malan: bir az Zoom dərin indi nə həqiqətən o platters haqqında. [Video playback] Görünüşünü-Gəlin biz yalnız at yavaş hərəkət gördüm. Elektrik qısa nəbzini olduqda flips varsa, yazmaq / oxumaq baş göndərilib üçün kiçik elektromaqnit haqqında ikinci bir qismini. Magnet bir sahə yaradır dəyişikliklər kiçik, kiçik və polarite metal hissəciklərin hissəsi olan coat hər nömrəli səth. Bu kiçik bir model seriyası, disk təhsil-up sahələri bir az təmsil ikili sayı data kompüter istifadə sistemi. İndi, cari göndərilir əgər bir yol Salt vasitəsilə / ərazidə baş yazmaq bir istiqamətdə polarized edir. Cari göndərilən Əgər əks istiqaməti, qütbləşmə bərpa edilir. Əgər sabit disk off məlumat almaq necə? Yalnız proses tərsinə. Belə ki, disk haqqında hissəciklər var ki, cari almaq baş hərəkət yazmaq / oxumaq. Bu milyonlarla birlikdə qoyun magnetized seqmentləri və bir fayl var. İndi bir fayl parçaları bilər bütün sürücü nin səpələnmiş edilir mess kimi növ platters, sizin masası üzərində bülletenlərinin. Belə ki, xüsusi bir əlavə fayl tutar hər şey burada. Əgər olsaydı etməyin belə bir şey? [END video playback] DAVID Malan: OK, yəqin ki, deyil. Belə ki, necə bir çox uşaqlar Bu ilə böyüyüb? OK, belə ki, daha az və daha az var əlləri hər il. Amma ən azı tanış olduğunuzda sevindim onlara, bu, çünki öz kitab demo, Təəssüf ki, bir çox ölür tanışlıq burada ölüm yavaş. Amma bu ən azı, geri, nə mən yüksək məktəb, yedeklemeler üçün istifadə istifadə. Və gözəl idi, çünki üzrə 1.4 megabayt saxlaya bilər Bu xüsusi disk. Bu, yüksək sıxlığı versiyası idi kimi olan HD, göstərilən GÜNÜN HD video əvvəl deməkdir. Standard sıxlığı 800 kilobayt idi. Və bundan əvvəl var idi 400 kilobayt disklər. Və bundan əvvəl, 5 və 1/4 var idi həqiqətən floppy olan inch disklər, və bir az daha geniş və taller burada bu şeyi daha. Amma əslində sözdə bilərsiniz Bu disklər disket aspekt. Və funksional, onlar həqiqətən istəyirik at sabit diskler olduqca oxşar az bu növü. Yeni kompüter Yenə SSDs fərqli bir az işləyir. Amma siz ki, az metal nişanı hərəkət əgər, həqiqətən, bir az cookie bilərsiniz və ya val. Bu kimi metal deyil. Bu, həqiqətən, bəzi ucuzdur material plastik. Və rahat durmamak bu cür bilər. Və trully yalnız bir off məhv etdik bit və ya maqnit hissəciklərinin sayı Bu disk. Belə ki, təşəkkürlə, bu barədə heç bir şey yoxdur. O şey yolunda varsa - və əhatə Gözlerinde və qonşu o - yalnız cür bu pull bilərsiniz kimi bütün örtük off. Amma bir az yaz var, belə göz ilə fərqindəyik. Belə ki, indi siz həqiqətən bir disket var. Və nə bu barədə əlamətdar var bu kimi daha çox olduğu bir daha böyük kiçik miqyaslı nümayəndəliyi sabit, bu şeylər, super var super sadə. İndi, bu alt çimdik ki, əgər ki, metal şey off, və təmizləmək onları açmaq, orada bütün iki ədəd hiss və sözdə disket daxili metal bir parça ilə. Və yarım orada gedir mənim disk məzmunu. Onların başqa bir yarısı var gedir. Amma bu daxili iplik ki, bütün var yesteryear sizin kompüter. Və yenə, perspektiv bu qoymaq necə böyük sizin ən çətin bu gün sürücüler? 500 Gb, bir terabayt, bəlkə ildə bir masa üstü kompüter, 2 terabayt, 3 terabayt, 4 terabayt, sağ? Bu megabyte deyil, vermək və ya almaq hətta tipik MP3 uyğun olmayan artıq bu gün və ya bəzi oxşar musiqi faylı. Belə ki, bir az sizin üçün xatirə bu gün və da nə contextualize kömək biz verilən alaraq olacaq İndi problem beş seçin. Belə ki, o saxlamaq üçün sizin edir. Belə ki, olacaq mənə keçid bildirin növbəti pset sərf həmçinin. Beləliklə, biz indi bu səhifə üçün müəyyən sonra - oh, tez elanlar bir neçə. Bu cümə, siz istəyirsinizsə CS50 qoşulmaq nahar üçün, adi yerə getmək cs50.net/rsvp. Və yekun layihə - belə proqramları başına, biz olunub etdiyiniz artıq yekun layihə dəqiqləşdirilməsi. Demək deyil ki, həyata xüsusilə tezliklə görə var. Bu, sadəcə almaq üçün, həqiqətən, olunub oldu Uşaqlar bu barədə düşünürük. And olsun ki, bir super əhəmiyyətli Siz faiz həlli olacaq material yekun layihələr biz hətta sinif kazanılmış deyil, lakin gələn həftə olacaq. Azadlıqlar olsa da, spec çağırır ki, ki, bir neçə müxtəlif komponentləri son layihəsi. Ilk bir neçə həftə, bir pre-təklifi üçün olduqca təsadüfi e-poçt Sizin onu demək TF ya nə istəyirik ilə, sizin layihə üçün düşünür heç bir öhdəlik. Təklif xüsusi olacaq öhdəlik deyərək, burada, bu nədir Mən layihə üçün nə etmək istərdim. Siz nə düşünürsünüz? Çox böyük? Çox kiçik? Bu idarə mi? Və daha çox ətraflı məlumat üçün spec baxın. Həftə neçə bundan sonra vəziyyəti eyni olan hesabat, necə demək üçün TF üçün təsadüfi e-poçt Siz son var çox gerisində təqib layihəsinin həyata keçirilməsi, ki, CS50 Hackathon olan hər kəs dəvət edir, bir hadisə olacaq 7:00 qədər bir axşam 8:00 PM Növbəti səhər AM. Mən həftədə qeyd etdiyim bilər Pizza, sıfır, WIL, 9:00 PM xidmət 1:00-da Çin ərzaq AM. Və 5:00 hələ oyaq istəyirsinizsə AM, biz səhər yeməyi üçün IHOP aparacağıq. Belə ki, Hackathon daha biri sinif yaddaqalan təcrübə. Sonra həyata keçirilməsi və sonra iqlim CS50 yarmarkası. Bütün bunlar haqqında daha ətraflı məlumat həftələrdə gəlib. Amma bir şey geri gidelim köhnə məktəb - yenə bir sıra. O həll edir, çünki belə bir sıra gözəl idi biz kimi problemlərin yalnız gördüm tələbə strukturları ilə əvvəl an nəzarət bir az həyata əldə əgər biz tələbə bir, tələbə iki olsun tələbə üç tələbə nöqtə nöqtə nöqtə, tələbə bəzi əsassız sayı. Diziler Belə ki, bir neçə həftə əvvəl də swooped və həll problemlərin deyil, bütün əvvəlcədən bilmədən necə bir çox şeyi bir növü biz istəyirik bilər. Və biz structs bizə kömək edə bilər ki, gördüm daha code təşkil saxlamaq bir kimi konseptual oxşar Dəyişənlər, ad və ev birlikdə ki, biz daxilində bir şəxs kimi müalicə edə bilərsiniz olan kiçik parçalara var. Amma seriallarda bəzi mənfi cəhətləri var. Mənfi cəhətləri bir hansılardır biz Karşılaştığınız Diziler ilə bu günə qədər? Nə olub? Sabit ölçüsü - belə siz bilər baxmayaraq bir yaddaş ayrılması edə array, bir dəfə necə çox şagird siz neçə işarə var istifadəçi, bir dəfə ayrılan sonra serialın, ne cür boyalı etdik küncə özünüzü. Siz yeni elementlər daxil edə bilməz, çünki bir sıra orta çevrildi. Daha çox elementlər daxil edə bilməz bir sıra sonunda. Həqiqətən, bir yaratmaq üçün müraciət var biz müzakirə etdik kimi bütün yeni dizi, yeni daxil köhnə çıxarmaq. Və yenə ki, baş ağrısı olduğunu Sizin üçün ilə məşğul GetString. Ancaq yenə də, hətta ekleyemezsiniz serialın ortasına bir şey dərəcəsi tamamilə dolu deyil. Məsələn, bu array əgər burada ölçüsü altı yalnız bu beş şeyi var yaxşı, yalnız tack bilər sonunda üzərinə bir şey. Amma bir şey əlavə etmək üçün nə istəyiriksə ortasında daxil dizi, bu ola bilər, baxmayaraq ki, bu altı şeyi beş həyata? Yaxşı, biz bütün zaman nə idi insan könüllü səhnədə ilə həftə keçmiş? Biz burada kimsə qoymaq istəyirdi, ya Bu hərəkət nə bu insanlar yol və ya bu hərəkət necə bu insanlar yolu, və bahalı oldu. Bu bir daxilində insanların dəyişir array qədər əlavə və qiymətqoyma qədər başa bizə vaxt bu səbəbdən bizim üçün çox sevindirici n kvadrat və üçün, durub sort kimi dəfə çalışan Məsələn, ən pis halda. Belə ki, seriallarda böyük, ancaq var istədiyiniz necə böyük əvvəlcədən bilirik. Belə ki, OK, burada bir çözüm var. Mən əvvəlcədən bilmirsinizsə neçə tələbələr Mən ola bilər, və mən bir dəfə bilirəm Mən qərar olsa da, mən ki, ilə vurulmuş alıram , niyə yalnız həmişə çox şagird yoxdur iki dəfə çox yer ayırmağa Mən hesab edə bilər kimi mən lazımdır? Ki, bir ağlabatan həll deyilmi? Real, biz istəyirik ki düşünmürəm 50-dən çox yuva tələb edir orta ölçülü sinfi üçün bir sıra, elə yalnız dəyirmi bildirin. Mən yalnız mənim array 100 slots etmək lazımdır belə ki, biz mütləq əldə edə bilərsiniz Mən gözləyirik tələbələrin sayı Bəzi orta sinif ola bilər. Belə ki, niyə yalnız dəyirmi və ayırmadığı bir sıra üçün daha çox yaddaş, adətən, siz hətta lazım bilər edirəm çox? Bu sadə pushback nədir ki, ideya? Siz yalnız yaddaş israf edirik. Əgər yazmaq sözün hər proqramı bəlkə iki dəfə çox yaddaş istifadə edir həqiqətən lazımdır. Və yalnız bir kimi hiss etmir xüsusilə zərif həll. Bundan əlavə, yalnız azalır bir problem ehtimalı. Bir məşhur kurs üçün nə varsa bir dövr və 101 var tələbələr, proqram hələ də əsaslı eyni məsələ qarşı-qarşıya. Belə ki, təşəkkürlə, bir həll var şəklində bu reklamdan bütün problemlərimizi ki, data strukturlarının olanları daha mürəkkəb Biz indiyə qədər gördük. Bu, mən iddia, bir bağlı siyahısı. Bu nömrələrin siyahısı - 9, 17, 22, 26, və 34 - yolu ilə birlikdə bağlı ki, nə mən oxlar kimi tərtib etdik. Başqa sözlə, əgər mən təmsil etmək istədi bir sıra, mən nə edə bilər bu kimi bir şey. Mən hava bu qoymaq lazımdır yalnız bir anda. Mən bilər - hello, bütün doğru. Yanındayız. Burada yeni kompüter, aydın - Bütün hüquqlar. Beləliklə, mən sıra bu rəqəmlər varsa - 9, 17, 22, 26, 24 - tərəziyə lazım deyil. Bütün sağ, belə ki, burada mənim array edir - Pərvərdigara. Bütün sağ, belə ki, burada mənim array edir. Pərvərdigara. [Gülüş] DAVID Malan: Pretend. Geri getmək üçün çox çox səy var və s var ki, Fix - 26. Beləliklə, biz bu array var 9, 17, 22, 26, və 34. Sizin bax bilər utandırıcı səhv Mən yalnız edib, orada deyil. Mən bu olduğunu iddia bir çox səmərəli həlli. Mən çox ints ayrılan etdik Mən lazımdır - bir, iki, üç, dörd, beş və ya altı - və mən sonra nömrələri saxlanılır etdik Bu serialın içərisində. Amma güman, sonra mən əlavə etmək istəyirəm sayı 8 kimi bir dəyər? Yaxşı, burada getmək edir? Mən əlavə etmək istəyirəm Güman 20 kimi bir sıra. Yaxşı, burada getmək edir? Somewhere orada ortasında, və ya sayı 35 getmək üçün var haradasa sonunda. Amma alan bütün edirəm. Və bu fundamental problem deyil həll edir ki, serialları. Mən GetString bir an əvvəl iddia bu problemi həll edir. Bir altıncı rəqəm daxil etmək istəyirsinizsə Bu massivinə, ən azı bir nə həll siz əmin üçün geri düşə bilər yalnız biz GetString nə kimi? Nə olub? Bəli, bu böyük olun asan həyata daha bildirib. Biz mütləq serialın edə bilməz böyük, lakin biz nə edə bilər? Ölçüsü böyükdür ki, yeni array etmək 6, və ya bəlkə ölçüsü 10, biz istəyiriksə irəli şeyi almaq, sonra surəti köhnə yeni daxil dizi, və sonra köhnə array Pulsuz. Amma çalışan zaman var indi bu prosesin? Bu, n böyük Ey çünki surətini Siz bəzi kontur başa gedir biz var zaman, o qədər ideal halda gedir yeni dizi, ayrılması iki dəfə çox istehlak etmək müvəqqəti yaddaş. Yeni daxil köhnə surəti - Mən demək, yalnız bir baş ağrısı, hansı yenə niyə biz yazmışdır Sizin üçün GetString. Yerine Belə ki, nə ola bilər? Yaxşı, nə əgər data structure həqiqətən boşluqlar var? Mən olan mənim qol istirahət Güman yaddaş bitişik chunks, harada 9 olan 17, sağ yanında doğru 22 yanındakı və s. Və 9 Burada artıq ola bilər ki, güman RAM, 17, RAM burada artıq ola bilər və 22 RAM burada artıq ola bilər. Başqa sözlə, mən onlara lazım deyil hətta artıq geri geri. Mən elə bir iynə mövzu var Bu rəqəmlərin hər biri və ya hər vasitəsilə Bu qovşaqlarının kimi biz zəng edəcəyik Mən onları tərtib etdiyiniz kimi düzbucaqlı üçün son almaq üçün necə yadda İlk belə node. Belə ki, proqramlaşdırma tikintisi nə biz kifayət qədər yaxınlarda gördüm ki, mən ki, mövzu həyata, və ya , burada tərtib Mən olan bu oxlar həyata? Belə göstəricilər, sağ? Mən yalnız ayrılması edin int, lakin bir node - və node, yalnız konteyner nəzərdə tuturam. Və görmə, bir düzbucaqlı demək. Bir node yəqin lazımdır Belə ki, iki dəyərlər ehtiva - ki, int özü, sonra kimi nəzərdə tutulan olan düzbucaqlı alt yarısı, bir int üçün kifayət qədər yer. Belə ki, yalnız, burada irəli düşünür Bu node bu, necə böyük sual konteyner? Ki, int nə qədər bayt? Ehtimal 4, bu halda həmişə olduğu kimi eyni. Və sonra neçə bayt göstərici üçün? 4. Beləliklə, bu konteyner və ya bu node edir 8-byte quruluşu olacaq. Oh, və bir xoşbəxt təsadüf ki, biz yalnız bu anlayışı daxil bir struct və ya C quruluşu. Beləliklə, mən bir addım etmək istəyirəm ki, iddia Bu daha mürəkkəb doğru nömrələrin siyahısı, bir həyata keçirilməsi nömrələrin bağlı siyahı, mən nə etmək lazımdır az daha ön qədər düşüncə və yalnız bir int, lakin struct elan Mən zəng lazımdır ki, şərti burada node. Biz bunu istəyirik bir şey zəng, lakin bilər node bir çox tematik olacaq şeyi indi baxaraq başlamaq. Ki, node daxilində int n. Və sonra bu sintaksis, bir az ilk baxışda qəribə - struct node * gələcək. Yaxşı pictorially ki, nədir? Bu alt yarısı gördük ki düzbucaqlı yalnız bir an əvvəl. Amma niyə I * struct node deyirəm kimi node * qarşı? Ki, göstərici işarə edir, çünki başqa node da, yalnız var bir node ünvanı. Biz var nə ilə uyğun ki, İndiyədək göstəricilərinə müzakirə. Mən iddia Lakin niyə bu strukturu node adlı, mən struct demək var Burada daxili node? Eynilə elə. Bu C. bir axmaq reallıq sort var Bu typedef, belə danışmaq deyil, var hələ oldu. C hərfi super. Bu kodu top oxuyur alt, sağ qalmadı. Qədər bu ki, nöqtəli vergül edib Alt xətt deyil, nə tahmin bir veri növü kimi var? Node, teklif dırnağı bağlamaq node. Lakin daha ayrıntılı və bəyannamə Mən ilk xəttində idi - typedef struct node - ki, əvvəl, gəldi, çünki buruq aşırma kimi növ var ki, pre-maarifləndirilməsi cingilti ki, nə mənə struct vermək struct node çağırıb. Açığı, mən zəng şeyi sevmirəm struct node, struct node bütün Mənim kodu boyunca. Amma yalnız, yalnız içəridə bir dəfə istifadə edəcəyik belə ki, səmərəli ola bilər , dairəvi istinad bir növ deyil yaratmaq bir se başına özümə pointer, lakin başqa to pointer eyni növü. Belə çıxır ki, bir veri strukturu barədə bu kimi bir neçə var ola bilər ki, əməliyyatlar bizə maraq. Biz daxil edə bilərsiniz bu kimi bir siyahısına daxil. Biz silmək istəyirəm bilər bu kimi bir siyahıdan. Biz üçün siyahı axtarmaq isteyebilirsiniz dəyərdə və ya ümumiyyətlə, axır. Və traverse yalnız bir xülya yoludur sol start dedi və bütün hərəkət sağ üçün yol. Və hətta bu qədər çox xəbər təcrübəli data structure, qoy mənə biz bəzi borc bilər ki, təklif Bu son iki həftə ideya və adlı bir funksiyası həyata Bu kimi axtarış. Bu və ya doğru geri olacaq , yalan ifadə Bəli və ya Xeyr, n sırasındadır. Onun ikinci arqument bir göstəricisidir siyahısını özü üçün belə bir bir node göstərici. Mən bunu gidiyorum Bütün bəyan edir müvəqqəti dəyişən. Biz konvensiya ilə Ptr arayacaðým pointer üçün. Mən onu bərabər təyin siyahı əvvəli. İndi isə loop bilərsiniz. Belə ki, uzun göstərici bərabər deyil kimi null, mən yoxlamaq üçün gedirəm. Mi göstərici arrow n bərabər qəbul ki, n? Yeni - Və bir dəqiqə gözləyin syntax parçası. Arrow qəflətən nədir? Bəli? Eynilə elə. Belə isə bir neçə dəqiqə əvvəl, biz istifadə bir şey daxil olmaq üçün dot notation bir struct daxilində, dəyişən əgər Siz struct deyil ki, özü, lakin struct bir göstərici, təşəkkürlə, sintaksis bir parça ki, nəhayət intuitiv hissi verir. Ok, göstərici riayət etmək deməkdir bizim oxlar adətən demək kimi pictorially, və getmək data sahəsində Inside. Belə ki, arrow nöqtə kimi eyni şey, ancaq bir göstərici var zaman istifadə edin. Belə ki, yalnız, sonra Recap əgər n sahəsində ki, struct daxilində pointer çağırıb bərabər n bərabər, doğru qayıdırlar. Əks halda, burada bu xətti - pointer Növbəti göstərici bərabərdir. Beləliklə, bu nə bildiriş, əgər mən Hal-hazırda struct da işarə edirəm 9 və 9 olan rəqəm deyil Mən arıyorum - Mən arıyorum Güman N 50 bərabərdir - Mən müvəqqəti göstərici yeniləmək üçün gidiyorum Bu node da qeyd etmək artıq, lakin pointer arrow növbəti, hansı burada mənə qoymaq niyyətindədir. İndi bir qasırğa edir həyata tətbiqi. Çərşənbə günü, biz, həqiqətən bunu edəcəyik Bəzi insanlar və bəzi daha çox yavaş bir sürətlə kodu. Amma həyata, indi bizim data edirik strukturları daha mürəkkəb, belə ki, bizim alqoritmlər, daha səmərəli əldə edə bilərsiniz ki, üçün zəruri olacaq pset altı, biz yenə də yük, o 150,000 sözlər, lakin bunu etmək lazımdır səmərəli və ideal bir yaratmaq bizim istifadəçilər üçün çalışır proqram xətti deyil, kvadrat n, lakin ideal daimi vaxt. Biz Çərşənbə günü görəcəksiniz. Məruzəçi: Növbəti CS50, David hazırda onun baza halda unudur. DAVID Malan: Və göndərmək necə ilə mətn mesajları C. nə - [AYRI Mətn mesajı BİLDİRİŞ SOUNDS]