[MUSIC ifa] DAVID J. MALAN: Bütün hüququ. Bu CS50 və bu Həftə dörd sonu. Və mövzulardan biri bu gün digital Suclari ki, məlumat bərpa sənəti. Və həqiqətən, baxmayaraq Siz ortasında istəyirik İndi Sülh Üç da və Breakout, gələn həftə, diqqət olacaq məhz bu domain. Keyfiyyətli iş belə bir mən heç idi, geri məktəbin məzunu idi Mən yerli iş zaman Middlesex County District Attorney Agentliyi ofis, bunu Suclari iş. Belə ki, mahiyyətcə, Massachusetts Dövlət Polis, münasibətilə, hallarda işləyən zaman ki sabit diskler kimi şeylər gətirmək və disketleri və yaddaş kartları və s. Və onlar əl atsınlar mənim və mentoru, və bizim məqsədimiz dəlil tapmaq idi, Bu media hər hansı bir var idi, əgər. İndi, siz gördük bilər qoyarkən Suclari bu dünya media, televiziya və film. Amma iş mən və daresay ki, dünya, Siz onu görmək olardı kimi çox deyil. Nin bir nəzər salaq nə Siz yəqin ki, gördüm. [Video playback] -Ok. İndi sizə yaxşı bir nəzər almaq edək. [MUSIC ifa] Onu tutun. Geri Run. Bir dəqiqə gözləyin. Doğru getmək. -Var. Ki dondurmaq. Tam ekran. -Ok. Ki dondurmaq. Siz ki, up -Tighten? Ki, da -Vector geri təkər ilə oğlan. Burada bu yerində -Zoom. Doğru avadanlıq ile, image genişləndirilmiş və itilənmiş bilər. Ki, hansı var? -Bu Bir genişləndirilməsi proqramı var. Ki, hər hansı aydın bilərsinizmi? Mən bilmirəm. Onu artırmaq edək. Gücləndirilməsi Bölmə A6. Mən ətraflı etmiş, and-- Mən artırmaq üçün kifayət qədər var edirəm. Mənim ekran üçün buraxın. Mən onun gözü əks etmiş. Let bu çalıştırmak video genişləndirilməsi. -Edgar, Bu gücləndirə bilər? On Hang. Bu əks üzərində işləyir -I've. -Var Kiminsə əks. -Reflection. Insanın üzünü əks -Var var. The əks! Əks -Var var. Güzgü üzrə Zoom. Siz əksini görürük. Burada image artırmaq olarmı? Siz artırmaq olarmı? Siz artırmaq olarmı? Biz bu artırmaq olarmı? Siz artırmaq olarmı? Bir ikinci tutun. Mən artırmaq lazımdır. Qapı üzrə Zoom. 10 Times. Zoom. Da Move. Daha çox. Gözləyin dayandırmaq. Stop. Onu -Pause. Bizə 75 dərəcə qayıt şaquli ətrafında edin. Stop. Hissəsi geri dön qapı yenidən. Bitmap bilər ki, bir image Gücləndirici Got? Biz Pradeep Singh istifadə edə bilərsiniz -Bəlkə üsul Windows daxil görmək üçün. Bu proqram sənətinin dövlətdir. The eigenvalue off edir. Sağ -Ilə alqoritmlərin birləşməsi O götürülmüş işıqlandırma Növbəti səviyyəsi alqoritmlər, və mən onları istifadə edə bilərsiniz Bu fotoşəkil artırmaq. On Lock və z-ox genişləndirmək. Gücləndirilməsi. Gücləndirilməsi. Gücləndirilməsi. -Freeze Və artırmaq. [END Video playback] DAVID J. MALAN: Yəni həmin bütün sözlər, lakin onlar deyil düzgün cümlələr istifadə. Və həqiqətən gələcəkdə, istənilən vaxt, , kimsə söz demək eşitmək edin, Yalnız bir az kıkırdama "artırmaq". Siz artırmaq üçün cəhd zaman, Məsələn, bu nə edir. Belə ki, burada bir parlaq şəkil var. Bu CS50 öz Daven edir. Və biz etmək istəyirdi ki, güman onun göz parıldamaq üzrə diqqət, və ya əks aydın idi ki, pis oğlan təhlükəsizlik kamera tərəfindən əsir. Bu zaman nə olar Bir image zoom yalnız məhdud sayda var Bugün bit. Yəni siz almaq nə edir. Və həqiqətən, Daven göz , bəlkə altı piksel lakin dörd ki, məhz nə bəstələmək orada glimmering edilib. Belə ki, Problem Set dörd nəticədə olacaq xüsusilə, bu dünya araşdırmaq bir şey təbiəti biz fayl i / o, harada zəng i / o yalnız bir xülya yoludur giriş və çıxış etdi. Belə ki, indiyədək, qarşılıqlı bütün Biz bir kompüter yaşadığınız ilə əsasən olmuşdur sizin klaviatura və ekran, lakin sabit disk ilə qədər deyil, və ya olanları kənarda faylları qənaət özünüz yazın. Proqramları bu günə qədər deyil, yaradılması və qənaət edilmişdir və öz faylları yenilənməsi. Yaxşı, bir fayl var? Yaxşı, bir JPEG kimi bir şey. Bu güc bir resim deyil və ya Facebook yüklemek, və ya hər hansı web baxın. Həqiqətən, şəkil biz yalnız Daven və mişar bir JPEG idi. Və nə maraqlı JPEGs kimi faylları haqqında Onlar müəyyən edilə bilər ki, adətən, bit müəyyən nümunələri ilə. Başqa sözlə, bu nə bir GIF JPEG fərqləndirir Word bir PING'i olan bir Excel fayl sənəd? Bəli, yalnız müxtəlif var bit nümunələri. Və bu müxtəlif nümunələri adətən bu faylların əvvəlində. Sizin kompüter Word açır zaman, belə ki, doc, və ya kompüter JPEG açılır zaman, Bu adətən görünür fayl ilk bir neçə bit. Və bir model tanısa, Bu oh, bu, bir şəkil, deyir. Mənə keçirmək edək bir qrafik kimi istifadəçi. Və ya, oh, bu Word doc kimi görünür. Mənə bir esse kimi istifadəçi onu göstərmək bildirin. Belə ki, məsələn, JPEGs, Bu, çıxır kifayət qədər mürəkkəb başlıq altında. Amma ən hər ilk üç bytes JPEG bu üç ədəd ilə başlayın. Belə ki, byte sıfır, bir, iki, var ən hər JPEG, 255, sonra sayı 216, sonra sayı 255. Və siz edə bilərsiniz nə gələn həftə bunu başlamaq üçün həqiqətən altında poking olunur JPEGs kimi faylları başlıq və bitmap faylları kimi, və görən həmişə kimi uzun olub Bir kompüter istifadə etdiyiniz kimi. Amma adətən var deyil nə oxşar decimal nömrələri kimi yazılmışdır. Kompüter elm deyil ondalık danışmaq edirlər. Onlar, həqiqətən, ikili danışmaq deyil. Adətən, biz istəyirik nömrələri ifadə etmək, Biz, həqiqətən, hexadecimal istifadə, siz geri bilər Problem Set, demək ki, Etiraz edən biri, Siz müxtəlif sistem haqqında düşünmək. Biz, əlbəttə, tanış doqquz vasitəsilə decimal sıfır ilə. Biz ikili danışdıq. Və biz, həqiqətən, yoxdur çox burada istifadə etmək out, kompüter istifadə edəcək. Amma proqramçılar çox olacaq tez-tez, lakin həmişə, yalnız deməkdir, hexadecimal istifadə Sizin əlifbası 16 məktublar kimi iki və ya 10 fərqli. Belə ki, necə yüksək saymaq yoxdur hexadecimal doqquz daha çox? Siz getmək 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, yalnız konvensiya c, d, e, f, b. Amma nə əsas var ki, hər nə bu bir rəmzidir. Heç 10 var. Hər çünki, heç bir 11, başına se var Sizin rəqəm yalnız ondalık kimi yalnız ikili kimi, yalnız olmalıdır Konvensiya ilə bir xarakter olması. Sonra biz əlifbası Belə ki, Hexadecimal üçün bizim sərəncamında. Belə ki, bir JPEG, əgər kimi görünür o ilk üç yazmaq idi , ondalık kimi bayt lakin Məsələn, hexadecimal kimi? Və nə hex ki, faydalı hətta bütün var? Yaxşı, Məsələn bir göz atınız. Mən bit yazmaq əgər Belə ki, bu kəsir numbers-- etdirir bu bir az paslı ola bilər İndi bir neçə həftə, sol bir və ancaq sağ olduqca asandır. 255 ən böyük sayı biz idi səkkiz bit ilə təmsil edə bilər. Bu, bütün olanlar oldu. Belə ki, yumşaq var ki, yalnız bir maraqlı orta biridir. Və cür həyata əgər riyaziyyat, siz, həqiqətən, anlamak edəcək bir o model və adet sıfır 216 təmsil edir. Belə ki, yalnız müəyyən edək İndi bu doğru olduğunu. Amma niyə bu maraqlıdır? Yaxşı, bir byte, əlbəttə, səkkiz bit edir. Və hesab edirəm ki, əgər çıxır ki, dörd bit iki chunks olaraq bir byte, bu kimi. Mənə yalnız bir yer əlavə edək. Belə ki, əvvəl, sonra. Mən yalnız bəzi ağ kosmik əlavə etdik Burada vizual xatirinə. Biz necə təmsil edə bilər, demək, hexadecimal bit hər dörd, dörd bit hər set? Məsələn, sol belə indi biz ikili 1111 var. Ondalık ki sayı nədir, Siz riyaziyyat həyata əgər? Siz isə yer var, ikilər yer, dörd ayaq yer, və səkkizinci yer. Auditoriya: 15. DAVID J. MALAN: Bu 15 var. Belə ki, biz səkkiz plus dörd əgər üstəgəl iki plus bir, biz 15 almaq. Mən aşağıda 15 yazmaq 1111, lakin burada bütün point hexadecimal decimal deyil. Belə ki, əvəzinə aşağı yazılı 15, 1-5, Mən hex ki, yazmaq üçün gedirəm Siz əgər, geri hesab əgər f vasitəsilə sıfır, nə 15 olacaq? Auditoriya: f. DAVID J. MALAN: Belə ki, onun f çıxır. Və söyləyərək işləyə bilər, 10 Əgər yaxşı, sonra OK, f 15. Belə ki, həqiqətən, biz yenidən yazmaq bilər f f kimi nömrələri bu eyni. Və sonra biz riyaziyyat bir az əgər, biz d ki, anlamak lazımdır. Səkkiz olduqca asandır, çünki biz səkkizinci yerdə bir var. Və sonra, biz f f-nin bir neçə daha çox var. Belə ki, nə insanlar Konvensiya ilə nə edirlər Onlar istifadə edərkən hexadecimal onlar yalnız daha müfəssəl şəkildə bu bir az yazmaq, ağ kosmik ən qurtarmaq. Və yalnız super aydın olmalıdır Bu hexadecimal ki, oxucu, arasında sadə konqres insanlar sıfır yazmaq başqa bir mənası olan x, vizual identifikatoru çox, Burada hex sayı gəlir. Və sonra, siz f iki rəqəm qoymaq bu halda f, sonra d a, sonra f f. Belə ki, uzun hekayə qısa, hexadecimal yalnız çalışır faydalı ola hər çünki onun rəqəm, f vasitəsilə sıfır, mükəmməl xətləri dörd bit model ilə. Iki hexadecimal rəqəm var Belə ki, sıfır təkrar F vasitəsilə, ki, mükəmməl verir səkkiz bit və ya bir byte. Bu çalışır nə ki, var şərti faydalı ola bilər. Heç bir intellektual var həqiqətən kənarda content, onun faktiki kommunal başqa. İndi JPEGs yalnız deyil qrafik üçün format fayl. Siz var ki, xatırlayıram bilər Dünyada bu kimi faylları, ən azı bir neçə il. Belə ki, bu həqiqətən Windows XP yüklü Dünyada kompüter milyonlarla. Və bu bitmap fayl, BMP idi. Və bitmap fayl kimi növbəti görəcəksiniz həftə, yalnız nöqtələr bir model deməkdir, onlar deyilir kimi piksel, həqiqətən, bit xəritəsi. Belə ki, nə olsa da, maraqlı, bu fayl formatı, BMP haqqında deyil, ki, başlıq altında, onu Yalnız üç bayt daha var ki, onun mövzu bəstələmək , ilk bir neçə sokması danışmaq. Bu, həqiqətən bir az görünür ilk baxışda çətin. Və siz P set bu görəcəksiniz. Və bir şey əldə Bu xüsusilə indi yalnız fakt kimi, belə ki, vacib deyil hər bitmap başında fayl, bir qrafik format, ədəd bütöv bir dəstə var. İndi Microsoft, bu formatda müəllifi, o zəng etmək üçün çalışır şeyi ints və chars və üzüb gedirdi amma söz və d söz və longs və bytes. Belə ki, onlar yalnız müxtəlif data növləri istəyirik. Onlar müxtəlif adlar edirik eyni şey. Amma P Set Dördlü ki, görürsünüz. Amma bu demək deyil ki, bir insan əgər bəzi BMP faylı cüt klik onun və ya onun sabit, və bir pəncərə açılır ona ki, image göstərən up, ki, əməliyyat, çünki baş Sistem ehtimalla yalnız fərq Bu BMP fayl uzantısı fayl adı, həm də fakt var ki, bəzi bit model konvensiya çox başında ki, bitmap fayl. Amma indi diqqət edək Belə bir mürəkkəb fayl, lakin əvəzinə bu kimi bir şey. Mən gedit burada düşünək yalnız əvvəlinə var olduqca sadə bir proqram. Mən bəzi üst daxildir var. İndi mən var #include "structs.h", lakin Mən bir anda geri gəlmək lazımdır. Amma indi bu faydalıdır. Belə ki, bu proqram ki, həyata olacaq , qeydiyyatçının bazası kimi. Belə ki, tələbə bir verilənlər bazası, və dünyanın hər tələbə yəqin ki, bir ad və bir ev var və digər məhsulları, lakin biz sadə saxlamaq lazımdır. Hər tələbə bir ad və bir ev var. Mən yazmaq istəyirdi əgər Belə ki, kimin məqsədi həyat proqramı yalnız təkrarlamaq oldu üç qədər sıfır, üç tələbə əgər Harvard Universiteti. Mən yalnız GetString istifadə edərək, almaq istəyirəm, hər bir tələbə adı və ev, və sonra yalnız çap. Bu sort həftəsi kimi One, həftə iki stuff indi, Mən yalnız bir istədiyiniz loop və ya kimi bir şey. Mən GetString bir neçə zəng etmək istəyirəm dəfə, və sonra bir neçə dəfə f çap. Mən baxmayaraq ki, bunu necə, bir adı və bir ev həm Hər bir tələbə üçün cəlb olunur? Belə ki, mənim ilk instinkt bilər bu kimi bir şey ola bilər. Mən ilk də mənə ver, demək olar ki, , adları strings bir sıra deyirlər. Mən bir Hardcode üç burada istəmirəm. Mən orada qoymaq istəyirsiniz? Yalnız çünki, STUDENTS belə üst elan daimi, Mən hardcode yoxdur, yalnız belə çox yerlərdə üç. Bu yolla, I, bir yerini dəyişə bilərsiniz və hər yerdə bir dəyişiklik təsir göstərir. Və sonra, mən nə edə bilər string TƏLƏBƏLƏRİ yerləşir. Və indi mən kimi bir şey ola bilər i ŞAGİRDLƏRİNƏ <; (i = 0 int i ++. Mən sürətli yazaraq alıram, lakin bu İndi yəqin ki, tanış syntax. Və indi, bu daha son idi. Mən i-ci qoymaq istəyirsinizsə tələbə adı, mən bunu edirəm. Və sonra, adları amma evlər i bracket. Mən bu GetString və imkan məni geri getmək və bu xətti düzeltmek. Razıyam? Razı deyiləm? Bu, çox istifadəçi dostu deyil. Mən nə istifadəçi söylədi. Amma indi, mən əgər də sonra, edək istədi demək, bu şeyi çap yazaraq belə TODO sonra. Mən daha gedirəm müzakirəsiz bu Hələ doğru bir tətbiq adları və ev, üç almaq bir istifadəçi hər onların ümumi. Amma bu çox yaxşı dizayn doğru deyil? Nə tələbə yalnız bir adı var əgər və ev, həm də şəxsiyyət nömrəsi, və bir telefon nömrəsi, və bir e-poçt ünvanı, və bəlkə bir ev səhifə və bəlkə bir Twitter sapı, və digər məlumat hər hansı bir sayı Bir tələbə və ya bir şəxs ilə bağlı, ümumiyyətlə. Biz əlavə başlamaq olardı necə Bu proqram funksionallığı? Bəli, mən bilər sadə yolu kimi hiss , kimi bir şey demək imkan ola, kimlikleri TƏLƏBƏLƏRİ int. Mən orada bütün kimlikleri bilər. Və sonra, bir şey üçün telefon nömrələri kimi, Mən necə əmin deyiləm yalnız hələ ki, təmsil edir. Belə nin irəli və yalnız zəng gidelim Bu ŞAGİRDLƏRİNƏ, Twitters olan bir az qəribə, ancaq edir və sahələri bir dəstə daha çox. Mən səmərəli başlamışdır etdik surəti və burada yapışdırıb. Və bu olduqca artmaqda davam edir olduqca tez yöndəmsiz, sağ? Var idi, əgər gözəl olmazdı dünyada data strukturu məlum bir int və ya bir string, lakin bir şey kimi yüksək səviyyəli abstraksiya, belə ki, Bir tələbə kimi tanınan, danışmaq? C inşa ilə gəlmədi tələbələr üçün funksionallığı, amma bu cür vermək istəyirdi nə? Bəli, mən gedirəm çıxır , structs.h burada adlı bir fayl açmaq və məhz bunu edə bilərsiniz. Və biz indi bunu başlamaq üçün olacaq. Və P Set üç başlıq altında, Əgər siz artıq indi bunu etdik. Bir g rect kimi bir şey yoxdur və ya proqramlaşdırma dili C. bir g oval Stanford Folks o həyata Burada bu yanaşma istifadə edərək, data növləri, öz yeni məlumatlar elan yeni bir söz istifadə edərək növləri adlı struct və digər bir adlı typedef. Və həqiqətən, baxmayaraq syntax məhsulları bir az fərqli görünür biz əvvəl gördüm prinsipi, bu super sadə. Bu yalnız "bir növü müəyyən" deməkdir. Ki, bir olacaq strukturu və quruluşu yalnız bir konteyner kimi Çox şeylər üçün. Və strukturu gedir adını bir simli var, və simli ev çağırıb. Və yalnız rahatlığı üçün, zəng edək, Bütün bu data structure tələbə. Belə ki, an almaq nöqtəli vergül, indi var Öz yaradılan məlumatlar adlanır tələbə ki, indi, int yanaşı durur və float və char, və simli, və g rect və g oval, və hər hansı bir sayı digər şeylər insanlar icad. Belə ki, bu barədə faydalı nə indi geri getmək əgər ki, 0 struct və bu başa Mən yazdığı həyata keçirilməsi, Burada əvvəlcədən, bütün fark qaçınılmaz messiness ki Mən əlavə kimi baş başlamaq haqqında idi telefon nömrələri və Twitters və bütün bu başqa şeylər Bir şagirdin müəyyən, indi müfəssəl şəkildə bükülmüş tələbə yalnız bir sıra kimi. Və bu tələbələrin hər indi Bunun içərisində çox şeylər var. Belə ki, yalnız bir sual yaradır. Necə adı almaq, və ev və ID, və başqa hər hansı tələbə içəridə? Super sadə, həmçinin. Yeni sintaksis, lakin sadə fikir. Bu array daxil Sadece index, Keçən həftə bu kimi. Və nə aydın deyil sintaksis yeni bir parça? Just., Deməkdir "daxili getmək strukturu və sahəsində çağırdı adı, ev adlı sahəsində almaq tələbə adlı sahəsində almaq. " Belə ki, P Set Üç, siz əgər hələ ki, iş, hələ ən insanlar , sizin kimi ki, həyata olunur kimi şeylər istifadə edərək başlamaq g rects və g ovals və başqa şeylər üçün görünmüyor ki, Həftə Zero, One, və ya iki gələn, ki, Stanford, çünki ki, həyata bəzi yeni məlumat növləri elan etdi. And olsun ki, məhz nə biz will P Set dörd, eləcə də, nə zaman biz hər şeyi ilə məşğul başlamaq şəkillər, bitmaps, və daha çox kimi. Belə ki, yalnız bir iltifat və var gəlmək nə üçün əqli model. İndi mən procrastinated bir az bu səhər. Mən nə görmək cür maraqlı idi Microsoft divar kağızı həqiqətən gün kimi görünür. Və 2006-cı ildə kimsə çıxır həqiqətən demək olar ki, dəqiq getdi eyni spot əslində fotoşəkil nə bu gün kimi görünür. Bu sahədə indi bir az basmaq deyil. Belə ki, images indi danışan, Burada Daven geri gətirmək imkan ekran və Nicholas, və yalnız sizə xatırlatmaq ki, nahar üçün bizə qoşulmaq istəyirsinizsə adi URL bu cümə, baş burada. Beləliklə, biz bazar ertəsi off tərk etdiniz? Biz, bu problemin təqdim? Bu zahirən doğru idi svop həyata keçirilməsi, vasitəsi, iki ints alaraq bir, b adlı bir, deyilən Laura burada etdiyiniz kimi, onları dəyişdirmək süd və su ilə səhnədə, müvəqqəti istifadə edərək dəyişən və ya boş fincan, bir və in-ci ildə b qoymaq bilər ki, hər şeyi bir mess etmədən b. Biz dəyişən istifadə. Bu temp deyirlər. Amma fundamental nə idi bazar ertəsi günü bu kodu ilə problem? Burada problem nə idi? Bəli. Auditoriya: Bu daha çox yer tutur. DAVID J. MALAN: daha Takes space, mən bir dəyişən kullanıyorum çünki, ki, OK. Ki, doğrudur, lakin mən deyiləm ki, OK demək olacaq. Bu möhtəşəm yalnız 32 bit şeyi sxemi, belə bir böyük. Digər fikir? Auditoriya: Bu, yalnız svopları yerli dəyişənlər. DAVID J. MALAN: Exactly. Bu, yalnız yerli dəyişənlərin svopları. Heç bir zaman bir funksiyası zəng Çünki Mən Annenberg olan qablar idi son dəfə, siz altındakı əsas var. Kimi tezliklə adlı bir funksiyası zəng kimi svop, svop x və y almaq deyil, orijinal dəyərlər. Biz nə iddia etdi, swap almaq edir? Auditoriya: Nüsxələr. DAVID J. MALAN: onların surətlərini Belə. Belə ki, əgər, bir və iki olur son dəfə nümunə geri, lakin bir və iki surəti uğurla dəyişdirildikdə. Amma təəssüf ki, sonunda, həmin dəyərləri hələ də eynidir. Beləliklə, biz bu edə bilərsiniz bizim yeni dost, inşallah gdb, Siz və ya TFS və Ca nin var aşağıdakı kimi doğru rəhbər edilmişdir. Belə ki, heç swap geri edək qədərdir görünür oxşar Hələ görünür açmaq. Biz iki, bir y x başlatılmış. Çap f-nin bir dəstə idi. Amma sonra, əsas zəng edin burada dəyişdirmək üçün olan tam code biz yalnız bir an əvvəl gördüm. Hansı ilk doğru nəzər, lakin funksional, Bu proqram, çünki iş deyil daimi x və y dəyişdirmək deyil. Belə ki, tez isti bu görək Burada gdb, bir ./noswap ilə. Böyük informasiya bir dəstə ki, Mən indi Control L qurtarmaq lazımdır. Və indi mən gedirəm irəli getmək və bu run. Və təəssüf ki, ki, faydalı deyil. Bu daxili proqram qaçdı proqram, gdb, ayıklama adlı lakin mənə ətrafında soxmaq imkan vermədi. Mən, həqiqətən, fasilə bilər necə Bu proqram daxilində icra? Belə ki, qırmaq. Mən hər hansı qıra bilər line sayı bir, 10, 15. Amma mən də simvolik qıra bilər break əsl deyərək. Ki, bir fasilə müəyyən olacaq point, yəqin əsas xətt 16. Və line 16? Nin kodu gedək və noswap qədər getmək. Və həqiqətən, line 16 edir çox ilk proqram. Belə ki, indi, Mən irəli getmək və növü bu dəfə run daxil edin, bu durduruldu. Belə ki, ətrafında soxmaq edək. Niyə x sıfır x-- çap? Və dollar işarəsi ignore. Ki meraklısı üçün yalnız var Proqramın istifadə. Niyə bu anda x sıfır? Bəli. Auditoriya: Bu əvvəl sağ durdurulmuş line 16, həqiqətən line 16. DAVID J. MALAN: Exactly. Gdb, ismarıcları, durdurulmuş etmişdir yalnız line 16 əvvəl icra. Belə ki, icra edən Bəzi unknown dəyər x deməkdir. Və biz bu uğurlu var sıfır kimi təmiz bir şey. Belə ki, indi mən növbəti yazın əgər, indi 16 icra. Mənə 17 icra etmək üçün gözləyir. Mənə davam və çap x gedək. Bu biri. Mənə davam və çap y gedək. İndi mən nə görürsünüz? Auditoriya: [işitilemez] DAVID J. MALAN: Bir az louder. Auditoriya: [işitilemez] DAVID J. MALAN: Not olduqca konsensus. Belə ki, bəli, biz bəzi zibil dəyər bax. İndi y yoxdur 134514064 edir. Bəli, yalnız bəzi zibil dəyəri. Mənim proqram RAM istifadə edir müxtəlif məqsədlər üçün. Digər funksiyaları var. Digər insanlar mənim kompüter daxilində yazdı. Belə ki, həmin bit üçün istifadə edilmişdir digər dəyərləri, və mən nə görüyorum bəzi qalıqları edir ki, yaddaş əvvəl istifadə. Belə ki, heç bir böyük, çünki tezliklə Mən növbəti yazın və sonra y çap kimi, Bu başlatılmış Mən istəyirəm ki, dəyəri. Belə ki, indi bir az daha sürətli davam edək. Növbəti N. Yenə bunu edək. Yenə bunu edək. Amma hit istəmirəm burada, çünki mən əgər daxili neler görmək istəyirəm svop, komanda nə var? Auditoriya: addımlar. DAVID J. MALAN: addımlar. Belə ki, bu məni addımlar deyil, artıq çox funksiyası. İndi, bir az sirli vicdanla, lakin bu yalnız Mən indi line 33 oldum mənə. Və yenə bunu bildirin. Print temp. Zibil dəyəri, mənfi bu dəfə, lakin yalnız hələ bir zibil dəyəri. Belə ki, növbəti, çap temp edək. Bu, 1 başlatılmış olan bir aka x dəyəri idi. İndi bizim bir və gələn x? Yaxşı, biz əsas bildiriş bu dəyərlər x və y çağırıb. Biz aşağıdakı kimi onlara dəyişdirmək keçdi. X vergül y, ilk gəldi. Və sonra, svop onlara x və y zəng edə bilər. Lakin aydınlıq üçün, bu bir və b onlara zəng. Amma və b indi olacaq müvafiq olaraq x və y, surəti. Mən temp geri gdb getmək əgər Belə ki, indi bir və indi biridir. Mən indi növbəti nə və əgər çap etmək a, bir artıq köçürülüb. Süd keçmiş tökülür edilmişdir portağal şirəsi şüşə, və ya əksinə. Və mən indi daha sonrakı, və əgər Mən bir ağlı başında olma çek kimi çap əgər, hələ iki, lakin b indi biridir. Açığı, hələ var. Mən nə temp qayğı yoxdur. Amma tezliklə mən indi yazın kimi, deyək indi sonunda edirəm, geri getmək davam proqram. Və təəssüf ki, x hələ bir və y hələ iki. Belə ki, orada gdb kommunal nə idi? Bu, mənim düzeltmek kömək etmədi Bu problem özlüyündə, lakin o, ümid mənə kömək həyata tərəfindən başa ki, bəli, mənim məntiq doğru, lakin Mənim kodu nəticədə olan deyil daimi təsir. Belə ki, biz istəyirik problem var İndi bu gün həll etmək niyyətindədir. Amma bu yolu ilə almaq imkan verir. String yalandır. Bu, çox deyil, bir veri növü ki, Bu C. var bəzi sinonimi olmuşdur başqa bir şey üçün vaxt, və biz aşağıdakı aşkar edə bilərsiniz. Mənə irəli getmək və açmaq edək bir proqram müqayisə 0 çağırıb. Və bu bir növü deyil, biz kod vasitəsilə gəzmək başlamaq lazımdır Mən artıq yazmışdır, lakin Bu yalnız bir neçə xətləri var. Belə ki, bu müqayisə 0 olunur. Və ilk şey edirəm mətn xətti olur. Amma mən nə görürsünüz ilk dəfə edirik. Nə aydın line 21 haqqında müxtəlif nədir? Əslində, bir dəqiqə gözləyin. Bu surəti iki. Hətta doğru proqram deyil. Bütün sağ, spoyler alert. Bütün hüquqlar, belə ki, ağla heç. Ki, gələcək suala cavab var. Burada-0 müqayisə, və mən olunur mətn xətti almaq üçün. Proqram çox sadə. Belə ki, bu sadə deyil. Bu həftə biri həftə iki məhsulları kimi hazırda. string s = GetString. İndi mən aşağı burada yenə deyirəm. string t = GetString. Bu, sonra, son şey proqram, onun adı təklif kimi, Mən onları müqayisə etmək üçün cəhd gedirəm olunur. Belə ki, s varsa, ilk simli, = t, onda mən bərabərdir Siz eyni şey yazın deməyəcək. Başqa, mən demək gedirəm müxtəlif şeylər yazın. Belə ki, bu proqramı tərtib və run bildirin. Belə ki, sıfır müqayisə edə. Yaxşı görünür. No tərtib səhvlər. Mənə indi davam edək və ./compare-0 yazın. Mənə irəli getmək və bir şey demək qoy : Daven bir şey: Rob. Mən fərqli şeylər yazın. İndiyə qədər belə yaxşı. Proqram düzgün görünür. Amma yenidən run bildirin. Bir şey demək: Gabe. Bir şey demək: Gabe. Bütün hüquqlar. Bəlkə space bar hit və ya funky bir şey. Yenə bunu edək. Zamyla belə. Zamyla. Fərqli şeylər. Belə ki, nə gedir? Beləliklə, biz bu iki xətləri var kodu, GetString iki dəfə çağırılan. Və sonra, mən sadəcə deyiləm s və t müqayisə üçün çalışırıq. Lakin gedir sonra, həqiqətən, nə? Yaxşı, mənim yazı barədə qədər bu nümunə qəssab. Və həqiqətən atmaq imkan Bu qədər burada, həmçinin. Beləliklə, biz bir xətt kimi var string s = GetString. Belə ki, sadəcə ilk var proqram maraqlı line. Lakin bütün bu zaman olmuşdur nə başlıq altında gedir? Yaxşı, sol tərəfdən yan simli, olan dəyişən bir növü, və s deyirlər. Mən bu yaddaş istifadə bilirik ki, və ya RAM, elə mənim kompüter. Mən mücərrəd gedirəm bir kvadrat kimi çəkmək. 32 bit, bu çıxır, lakin gələcəkdə daha çox. Və sonra, nə burada olub? Bəli, açıq-aydın GetString istifadəçi bir string alır. Və GetString var Zamyla ya Gabe və ya Daven. Belə ki, ilk seçin bildirin o, Daven idi. Belə ki, səmərəli, nə GetString var Mənə birinci halda D-a-v-e-n idi. Və sonra, başqa nə etdi mənə gizli verir? Auditoriya: [işitilemez] DAVID J. MALAN: Bəli, Bu / 0 və ya null xarakter. Belə ki, səmərəli Mənə bir string verdi. Amma biz artıq əvvəlki bilirik bir string yalnız bir sıra olduğunu görünür simvol, və onu ləğv edir Bu xüsusi sentinel xarakter / 0. Amma bu doğru əgər bu bir kvadrat, Bu aydın daha böyük düzbucaqlı edir. Və həqiqətən, bu, Mən yalnız 32 bit təsdiq. Və bu aydın daha 32 bit, bu yəqin ki, çünki səkkiz plus səkkiz plus səkkiz plus səkkiz plus səkkiz, yalnız ASCII bayt çünki. Necə heck biz uyğun gedir Burada bu kiçik qutusuna Daven? Yaxşı, nə həqiqətən GetString edir? Bəli, bu grid burada təmsil mənim kompüter yaddaş və ya RAM. Belə ki, özbaşına ki, əgər deyək Bu hər bir byte təmsil sonra biz hər hesab edə bilər byte bir ünvan olan kimi, 33 Oxford Street, və ya 34 kimi Oxford Street, və ya 35 Oxford Street. Belə ki, evləri ünvanları kimi və binalar ünvanları var, belə fərdi bayt edə yaddaş ünvanları və ya nömrələri var ki, benzersiz onlara müəyyən. İndi, bu əsassız deyil. Amma mən gedirəm, sadə saxlamaq üçün yalnız konvensiya hexadecimal istifadə, lakin 0x başqa bir şey deməkdir daha "Bu hexadecimal edir." və mən iddia gedirəm "D" yaddaş Byte One qədər çatır. Mən heç bir şey başqa gedən var yaddaş, belə Daven ilk spot var Byte One at. Bu, sonra, 0x2 olacaq. Bu 0x3 gedir. Bu 0x4 olacaq. Bu 0x5 gedir. Bu 0x6 olacaq. Amma bir dəfə düşünür başlamaq nə kompüter etdiklərini haqqında başlıq altında, Siz çıxarmaq üçün başlaya bilərsiniz necə, bir neçə il əvvəl, ki özü C həyata keçirdik. Yəqin ki, GetString nədir returning-- çünki deyil kimi hiss qaytarılması Daven, özlüyündə, o, şübhəsiz niyyətində deyil, çünki Bu kiçik box-- uyğun belə ki, nə GetString yəqin qaytarılması? Auditoriya: [işitilemez] DAVID J. MALAN: Daven yeri. Və bunu edilmişdir Heç Həftə One ildən. Nə GetString həqiqətən qaytarılması simli başına se deyil. Ki, az ağ yalan biri. Bu ünvanı qaytarılması yaddaş string, unikal ünvanı. Daven 33 Oxford küçəsində yaşayır. Amma daha müfəssəl, Gavin yaşayır 0x1 da, Number One Ünvan. Belə ki, nə bu qoymaq olur az box sonra, aydın olmaq ki, simli yalnız ünvanı. Belə ki, bütün bu vaxt, bu var davam. Amma bu göstərişlər nə İndi bütün əgər var ki Bunun içərisində bir sıra kim edir siz dayandırmaq üçün, proqramçı, hər hansı bir sayı qoyaraq hər hansı bir dəyişən və yalnız jumping yaddaş ki, yığın? Və həqiqətən, biz görəcəksiniz ki, bir təhlükə növbəti dəfə var. Amma indi, bu, kifayət hiss edir. Mən demək, mənə almaq string, siz məni Daven verir. Amma həqiqətən mənə Daven vermir. Mənə verə Bütün Daven ünvan. Mən sonra əmin bilirik harada Daven başlayır və ends-- Bu hekayə to əldə Daven başlayır və bitir olduğu, və, növbəti sonra yaddaş string başlayır? Yaxşı, siz təhvil edirsinizsə Mənə Daven başlanğıcı, mahiyyətcə, necə Mən bilmirəm onun adı sonu harada? Xüsusi null xarakteri, hansı bütün daha əhəmiyyətli indi The altında strings əgər başlıq sadəcə müəyyən edilir benzersiz xatirəsinə öz yeri. Belə ki, bütün bu dəfə ki nə gedir. Beləliklə, biz indi baxdığımız zaman Burada code izah Siz line 26 səhv ki, əgər. Niyə Zamyla və Zamyla fərqlidir? Niyə Gabe və Gabe fərqlidir? Bəli, geri. Auditoriya: Onlar müxtəlif ünvanları var. DAVID J. MALAN: Sadəcə onlar müxtəlif ünvanları var. Siz GetString zəng Çünki yenə mən tez edəcəyik ki, Bu ikinci xətt string əgər t, mən proqram kimi, GetString başqa bir zəng bərabərdir. Mən zəng növbəti dəfə GetString, gedirəm yaddaş müxtəlif yığın almaq üçün. GetString icazə Bu əməliyyat xahiş daha yaddaş sistemi. Bu eyni təkrar etmək niyyətində deyil altı bytes hər bir zaman. Bu yeni olacaq yaddaş yığın, olan t almaq üçün gedir deməkdir burada bəzi digər dəyər. Mən bunu belə s = bərabərdir t, siz müqayisə deyilik Bu və A qarşı qarşı D bu və bu qarşı V. Bu müqayisə edirik , bu qarşı səmimi olduqca useful-- useless-- edir olduqca əhəmiyyətsizdir həqiqətən kim çünki strings yaddaşında olduğu umurunda? Biz, həqiqətən, yoxdur. Və biz fikrində deyilik xüsusilə qayğıkeş başlayın. Yalnız bugs yarana bilər dərəcədə və təhlükəsizlik iradəsini yarana bilər biz, həqiqətən, bu barədə qayğı başlayın. Belə ki, bu problemi həll edək. Siz super sadəcə bunu düzeltmek çıxır. Və I əvvəl, əslində edək daha aşkar, nə edəcəklərini bir CS50 sinif əgər, bunu və həyata idi iki strings qarşı müqayisə. Siz aydın yalnız s = t bərabərdir istifadə edə bilməz. Amma yalnız məntiqi necə Bu simli müqayisə edərdiniz C kodu istifadə edərək, bu simli qarşı? Bəli. Auditoriya: Just nə loop üçün [Işitilemez] DAVID J. MALAN: Perfect. Auditoriya: [işitilemez] DAVID J. MALAN: Bəli. Just loop və ya a üçün istifadə loop və ya hər hansı isə. Ancaq əsas fikir müraciət ki, əgər Bu yaddaş və ya bir sıra yığın və bu, üzərində təkrarlamaq eyni zamanda. Və yalnız məktubları müqayisə. Və siz bir olmaq var az ehtiyatlı, çünki Bir barmaq istəmirəm Digər keçmiş getmək üçün bir string çünki digər artıq. Belə ki, check istədiyiniz olacaq sonunda bu xüsusi dəyəri, null. Amma həqiqətən də, edir end ki, kimi sadə. Və səmimi, biz lazım deyil ki, tam yenidən kəşf. Burada Version iki edir. Və nə mən burada demək gedirəm ki, əvəzinə s müqayisə = t bərabərdir String əgər mən əvəzinə, demək gedirəm s vergül t müqayisə = 0 bərabərdir. İndi string nə müqayisə olunur? Bu bir funksiyası var, çıxır ki, kimin məqsədi həyat C ilə gəlir iki strings müqayisə edir. Biz oxumaq və müqayisə bulamaq onun man səhifə və ya sənədlər və ya CS50 arayış, o, sadəcə ki, həyəcan demək mənfi və ya qaytarır müqayisə sayı və ya müsbət sayı və ya sıfır, sıfır deməkdir onlar bərabər istəyirik. Belə ki, yalnız zənnə qapılırlar. Nə əgər demək bilər müqayisə yekunları tərpənmək mənfi dəyər və ya müsbət dəyər? Auditoriya: Böyükdür və ya daha az. DAVID J. MALAN: Bəli, və ya daha çox azdır. Belə ki, bir bütün düzmək üçün istəyirdi bir dictionary-- strings dəstə biz nəhayət road-- aşağı olacaq kimi mükəmməl funksiyası potensial istifadə etmək, bunu olacaq, çünki sizin üçün strings müqayisə, və demək Bir b əvvəl gəlir yoxdur, ya yoxdur b a əlifba sırası əvvəl gəlib. Biz məhz bunu edə bilərsiniz. Mən digər biri idi xəbər Bu misalda şey. Nə ali dəyişib Bu əsas funksiyası qədər? Char *. Və bu ki, digər ağ yalandır. Bütün bu vaxt, zaman var simli yazılı edilmişdir, biz gizli yeniden edilmişdir char kimi string * belə ki, həqiqətən cingilti başa düşür. Başqa sözlə, cs50.h və biz nəhayət görəcəksiniz kimi, biz bir sinonimi adlı simli ki, char * kimi eyni şey. Və indi üçün, yalnız bilmək * Bu çərçivədə, ən azı, ünvanı deməkdir. Nə ünvanı? Yaxşı, bu fakt dedim ki, char * və * int və ya * sal char * o deməkdir ki, bir char ünvanı. Belə ki, burada bu kiçik box, aka string həqiqətən növü char * edir, olan deyərək sadəcə bir xülya yoludur, Bu qutusuna ünvan gedəcək. Və nə bir ünvan aid deyil? Görünür, bir char. Amma biz tamamilə ola bilər int * və başqa şeylər var. Amma indi, char * həqiqətən ən çox sadə və faiz biridir. Belə ki, bu problem davam edir yenə də yüksələcək. Bu proqram açmaq düşünək. Indi biz proqnozlaşdırmaq bilərsiniz əgər in görək nə bu kodu ilə yanlış. Bu proqram belə, surəti-0, mən irəli getmək və daha zəng gedir GetString və s dəyərini saxlamaq. Və sonra, niyə, bunu edirəm yalnız həftə son bir öyüd-nəsihət kimi? Biz GetString demək idi bəzən null qaytarır. Nə əgər deməkdir GetString null qaytarır? Bir şey yanlış getdi. Bu yəqin ki, simli çox deməkdir böyük, yaddaş kompüter həyata. Bu super, super, super olur nadir hallarda, lakin ola bilər. Biz onu yoxlamaq istəyirsinizsə, və biz bunu edirik bütün var. Əgər deyilsə, biz indi görmək lazımdır, çünki şeylər üçün adətən yoxlanılması başlamaq null kimi, güc həqiqətən getmək başlamaq yaddaş ünvanları etibarsız ki. Və fahişəliyə cəlb edilməsi maddələri başlamaq olacaq daha seqmentasiya çatışmazlıqlar. Və ya Mac və ya PC, yalnız kompüter səbəb asmaq üçün və ya proqram potensial dondurmaq. Belə ki, indi mən, surəti-0.c iddia I ki, şəkildə bu strings surəti gedirəm 28 girdi. Və sonra, mən gedirəm altındakı təsdiq etmək burada mən gedirəm ki, onlardan biri dəyişdirmək üçün. Belə ki, bu bildiriş. Mən bizim köhnə dost strlen zəng edirəm. Və yalnız İngilis izah Bu xətt 34 nə edir? Nə t bracket 0 yoxdur sol əks etdirir. Bəli. Auditoriya: t birinci xarakter? DAVID J. MALAN: t birinci xarakter. Vəssalam. T ilk xarakteri, Mən istəyirəm Bu böyük versiyası təyin etmək t ilk xarakteri. Belə ki, bu hərflə ilk məktubu. Və sonra, son şey yoxdur Bu proqram mən burada təsdiq orijinal, var, və burada surəti, t var. Amma hekayə əsasında biz yalnız , strings həqiqətən nə barədə həqiqətən line 28 nə bunu, və nə gedən nəticəsində səhv ekranda olacaq? Belə ki, ilk, ilk sual, 28. String t = həqiqətən nə edir? Biz sol tərəfdən varsa burada yan string t = s; ki, mənə bir qutu verir burada və bir qutu burada. Və bu ünvanı 0x güman Gəlin özbaşına, bu dəfə demək 50 bildirin. Nə string t = s yoxdur başlıq altında nə? Auditoriya: [işitilemez] DAVID J. MALAN: Bu yaddaş saklar orada həll, belə ki, 0x50 orada gedir. İndi əgər, mən ilk getmək t xarakteri və onu böyük, Mən səmərəli s nə edirəm? Mən, həqiqətən, doğru, eyni şeyi edirəm? Çünki əgər Ünvan 0x50-- və yalnız mən Burada board çox otaq yoxdur, lakin, burada aşağı 0x50 güman mənim kompüter yaddaş haradasa. Mən, məsələn, Gabe var bu kimi, burada kiçik edir. Mən demişəm t bracket 0 kapitallaşdırılır olur. Yaxşı, t bracket 0 t ilk məktubu. Belə ki, az g gedir olmaq böyük G. Lakin problem , nə də işarə edir edir? Auditoriya: eyni. DAVID J. MALAN: The eyni dəqiq şey. Belə ki, bəlkə bir sadə izahı, sintaksis bir az qəribə olsa da. Belə ki, bunu edək. ./copy-0 onda surəti-0 olun. Bir şey demək: Gabe. Və təəssüf ki, həm Onlara artıq kapitallaşdırılmış edilmişdir, amma ki, əsas biz sadəcə istəyirik ki, səbəb İndi ünvanları ilə məşğul. Belə ki, necə biz başlamaq yoxdur address-- heç bir cinas intended-- biz həll etmək üçün başlamaq necə bu problem? Yaxşı, copy1.c, hər şeyi gedir bir az daha mürəkkəb almaq üçün. Amma bir iddia konseptual sadə həll. Ilk baxışda almaq üçün belə çətindir. Ilk asan olacaq deyil vaxt, bəlkə də, onu yazın lakin problem ki, əgər sadəcə t = s yalnız bunu nüsxə ünvanı, nə, yenə sizə seçə bilərsiniz, əgər, həll olacaq həqiqətən bir string çıxarmaq üçün? Auditoriya: Biz yəqin ki, lazımdır yenə bir loop istifadə edin. DAVID J. MALAN: Bəli. Yəni biz yenidən bir loop ehtiyac olacaq. Və biz surəti istəyirsinizsə, çünki başqa simli bir string s, biz yəqin ki, bunu istəyirəm xarakteri ilə xarakter. Amma problem halda, Bu, ilk s indi biz aydın şəkildə başlamaq lazımdır t üçün yaddaş ayrılması. Başqa sözlə, edək Bu son bir dəfə yenidən. Bu string s = GetString edir. Və həmçinin, burada bu qədər qoymaq bildirin. Bu GetString edir. Bir şey və sonra şəkil kimi əvvəlki kimi olacaq, g-a-b-e- / 0. Ki, bu kimi bir az bir şey görünür. Və s buna görə də, biz bu 0x50 zəng və 51, 52 olacaq. Belə ki, bu 0x50 edir. Və sonra, mən string t yoxdur. Yaddaş, yalnız olacaq Bu kimi bir kiçik kvadrat verir. Belə ki, əsas addım indi nə var? Mən t daxil s kopyalamak etmək istəyirsinizsə, nə boş biz burada doldurmaq lazımdır? Yoxsa biz üçün nə lazımdır yüksək səviyyədə edirsiniz? Bəli? Biri? Bəli. Auditoriya: Biz [Işitilemez] lazımdır. DAVID J. MALAN: Bəli, biz bu boş doldurmaq lazımdır. Mən sonra surəti bilməz Gabe adı kapitallaşdırmaq Mən əməliyyat sistemi xahiş qədər yaddaş bir yığın ki, orijinal kimi ən azı böyük deyil. Belə ki, bir məsələ ilə bizə yaradır. Mən əməliyyat sistemi xahiş nə yalnız bir sadə az pointer üçün bu adlanır kimi, ünvanı, bir pointer deyil sadə bir az qutusu bu kimi bir string adlanır? Necə əməliyyat istəmirəm yaddaş böyük bir yığın sistemi? Bu günə qədər, Mən yalnız geri kazanılmış dolayı GetString zəng. Belə ki, necə GetString edir onun yaddaş əldə hətta? Bəli, bu var çıxır ki, Burada bu digər funksiyası ki, biz indi istifadə etmək başlamaq lazımdır. İndi, bu yol daha sirli than-- görünür və mən it-- bilərsiniz olan yalnız bir am Bu xətt yol daha sirli görünür o, ilk baxışdan olmalıdır. Amma onu ayrı tease bildirin. Sol tərəfdə, mən char * t var. İngilis Belə ki, formalaşdırmaq başlamaq edək texniki jargon müvafiq cümlələr. Belə ki, bu ayrılması bir tipli char dəyişən t adlı *. İndi həqiqətən nə deməkdir? Yaxşı, o deməkdir ki, mən nə gedirəm t adlanan bu dəyişən qoymaq? Bir char bir ünvan. Belə ki, yalnız sadə var daha ağlabatan şəkildə sol əl üzünü izah. Belə ki, burada yalnız bu box yaradır. Belə ki, sağ tərəfində, ehtimalla gedir ki, daha böyük ayrılması yaddaş necə yığın? Belə ki, bu ayrı tease bildirin. Bu, ilk baxışda böyük oldu lakin daxili burada nə olub? Birincisi, malloc var olan yeni dost, yəqin "Yaddaş ayrılması." Belə ki, bu qəbul olunan dəlil onu, belə ki, olduqca böyük dəlil var. Belə ki, bu ayrı tease bildirin. s strlen, əlbəttə, təmsil the-- Auditoriya: simvolların sayı. DAVID J. MALAN: Yalnız s simvol sayı. Belə ki, s uzunluğu, orijinal string. Belə ki, G-a-b-e. Belə ki, yəqin ki, bu dörd halda var. Niyə sonra +1 edirəm s strlen zəng? Auditoriya: [işitilemez] DAVID J. MALAN: Bunun üçün xüsusi null xarakteri. Mənə qalsa uzunluğu nə Gabe adı, mən dörd demək gedirəm. Başlıq altında, baxmayaraq ki, mən lazım null xarakteri üçün beşinci byte. Mən +1 edirəm nə ki, var. İndi yalnız halda bu çalışan başqa bir kompüter proqramı, demək CS50 cihaz, bir char həcmi müxtəlif ola bilər öz kompüter üçün olan Mən bu zəng edə bilərsiniz çıxır ki, operator sizeof, yalnız kompüter xahiş bir ölçüsü nədir bu kompüterdə char? Və bu beş çarparaq bir char ölçüsü ilə nümunə ən kompüter olacaq yalnız bir, malloc ola Mənə bu böyük vəsait ayırmaq niyyətindədir Burada sağ üzərində yaddaş yığın. Və dönmək olacaq Bu, belə ki, bir funksiyası edir nə mənə qayıtmaq üçün gedir? Auditoriya: The ünvanı? DAVID J. MALAN: nə ünvanı? Auditoriya: xatirəsinə Of ayrılan? DAVID J. MALAN: ən yaddaş ayırıb. Mən səmimi, heç bir fikrim yoxdur bu başa gedir. Mən təklif etmək niyyətində deyiləm Bu 0x88 sonuna qədər olacaq. Tamamilə əsassız, lakin 0x50 başqa yerdə, əməliyyat sistemi, çünki nə Windows və Mac OS mənim üçün nə edir verilməsi ki, əmin olun Mənə RAM müxtəlif chunks. Belə ki, bu dəyəri bu deyil yaddaş yığın up son bilər. Belə ki, bu 0x88, burada bitir edir. Belə ki, indi aydın, başa düşmək olar bu kimi eyni deyil ki, onlar işarə edirik, çünki yaddaş müxtəlif chunks. Mən indi həqiqətən, bu surəti istəyirsinizsə Belə ki, da, sizin təklif həll edək. , Yalnız getmək loop üçün yaratmaq imkan və t bracket i s bracket i alır. Indi istifadə edə bilərsiniz, çünki Bu array kimi notation, çünki baxmayaraq malloc çox generically mənə yaddaş ayırır, yaddaş bitişik bayt edir. Byte, byte, byte, geri geri geri. Mən bir proqramçı kimi, şübhəsiz ki, edə bilərsiniz bir sıra kimi müalicə edən Mən bu nəhayət tanış istifadə edə bilərsiniz deməkdir yalnız bir kvadrat mötərizə notation. Belə ki, mənə, çünki orada fasilə imkan Bu hətta bütün bir dəfə çox əsas ideyası recap olsa simli edir, bütün bu vaxt, yeni data type özlüyündə deyil. Bu, sadəcə bir sözdə göstərici var bir xarakter ünvanı, yalnız deməkdir bir sıra ki insan konvensiyası ilə biz 0x bir şey kimi yazmaq meyli. Amma bu, yalnız bir sıra 33 Oxford Street kimi, olan olur CS binanın ünvanı. Bu məlumat hər hansı suallar? Bəli? Auditoriya: Niyə biz yoxlamaq yoxdur bərabər t null? DAVID J. MALAN: Niyə biz bunu null bərabər t yoxlamaq? Biz documentation-- oxumaq əgər malloc üçün böyük question--, Bu, gözəl çap demək olacaq bəzən malloc, null qayıtmaq bilər yalnız GetString kimi. Və həqiqətən, GetString null qaytarır Öz növbəsində, malloc null qaytarır əgər, GetString malloc istifadə edir, çünki. OS əgər ki, baş verə bilər Mac OS, Windows, nə olursa olsun, sadəcə sizin üçün yaddaş. Belə ki, orada nə var. Və mənə başqa bir şey aşkar imkan yalnız fikrinizi əsəcək bilər və ya tamamilə çox xətti üzərində olacaq. Amma mənə qoparmaq imkan çıxarmaq üçün loop üçün eyni, bir an əvvəl geri idi bu. t bracket i s bracket i alır. Nice və istifadəçi dostu. Daha Həftə İki kimi hiss edir. Amma bu versiyası həqiqətən ola bilər sirli görünür bu kimi yenidən. Bu texnika adlı göstərici var hesab, ünvanı hesab. Amma niyə bu iş? İndi annoyingly, bu C müəllifləri istifadə etmək qərarına müxtəlif məqsədlər üçün * rəmzidir. Biz artıq bir dəfə istifadə gördüm deməkdir char *, "Mənə dəyişən verir ki, ehtiva olacaq bir char ünvanı. " Bu kontekstdə belə char * "Mənə dəyişən verir" deməkdir. Təəssüf ki, siz * olmadan istifadə əgər qarşısında bir söz, char kimi, indi deyirlər dereference operator. Və biz uzun əvvəl bu daha görəcəksiniz. Amma bu, yalnız "getmək" deməkdir. Kimsə mənə təhvil əgər, deyən kimi kağız bir parça "33 Oxford Street," I "* 33 Oxford Street," əgər o deməkdir ki, "CS binanın yol aşağı getmək." Belə * orada əgər getmək deməkdir Bunun qarşısında heç bir söz var. Belə ki, aydın olmaq, t nədir? t yığın ünvanı Mənə geri verildi ki, yaddaş. s, aydın olmaq nə, bu ünvanı Məsələn, biz müzakirə etdik, kiçik Gabe və? nin ünvanı kontormerinin Təfərrüatlar Auditoriya: The string. DAVID J. MALAN: Gabe orijinal adı Of. Belə ki, ünvan var yaddaş bu yığın. Mən demək əgər t + i i, bildiriş, yalnız bizim köhnə dostumuzdur. Bu, sadəcə bir index dəyişən ki, qədər sıfır olan iterating simli s uzunluğu. Belə ki, sonra sıfır, bir olacaq sonra iki, sonra üç, sonra dörd. Belə ki, bu yeni toplaşmaq bildirin Scratch kimi puzzle ədəd, Siz, baxmayaraq, yenə syntax Not çox daha gizli deyil. Belə ki, t ünvanı + edir i mənə vermək gedir bir sıra, bu, çünki bütün biz hex kimi rəsm etdik ki, nömrələri. Lakin onlar yalnız ədəd istəyirik. T ünvanı dedik əgər Belə ki, idi 0x88, 0x88 plus sıfır budur. Siz rahat deyilik, hətta hələ hex, bir tahmin edir. Auditoriya: Bu orijinal. DAVID J. MALAN: 0x88 Still. Belə * nə deməkdir 0x88 edir? Bu deməkdir "getmək" deməkdir səmərəli, "Burada sizin barmaq qoymaq." İndi sağ tərəfdən Bu ifadə, * və sonra parens, s i olan s deməkdir + Burada kiçik g qədər müraciət. s + 0, əlbəttə, nə s, s. Belə ki, indi it * s, var olan yalnız * 33 kimi Oxford Street ünvan getmək deməkdir s. Belə ki, burada bu barmaq, sağ var. Belə ki, nə nə kopyalayın üçün gedirəm? Olan sağ şey, gabe, burada, burada kiçik g. Ki, və belə təsiri loop ilk iteration, Siz görünür baxmayaraq, təklif bir şey daha crazy daha mürəkkəb biz əvvəl gördüm sadəcə deyib burada getmək və burada xarakter surəti. Bu, həm də yerlərdə bir xəritə verilməsi oldu. Və biz bu günə qədər daha çox lazımdır. Amma indi üçün, ümid yalnız edir bu əsas fikir bəzi təqdim edir. Və həqiqətən, baxaq burada bir final proqramı və sonra vəd claymation, olan hər şey doğru olacaq. Bütün hüquqlar. Mənə orada getmək gündəmə açmaq bildirin. Biz geri gəlmək lazımdır me-- belə edək uzun əvvəl bu şəkil. Burada bu final misal açmaq edək. Belə ki, burada super, super həyata proqramı aşağıdakı ki, həyatda heç bir şey. Bu ilk iki dəyişənlərin, x bəyan və bu zaman ədəd deyil ki, y, özlüyündə. Onlar özlüyündə, integers deyilik. Onlar * yəqin var int. Belə ki, yalnız hər kəs, bu nə deməkdir Sizin data növü, sizin dəyişən, növü int * ulduz var? Ki, bir int ünvanı var. Mən hələ burada heç bir fikrim var. Bu yalnız ", nəhayət qoymaq deməkdir burada int ünvanı. " Bu yerdə 0x50, 0x88, yaddaş, bir ünvan olduğunu gedir. Və y nə var həmçinin, olacaq. Mən indi demək əgər x = malloc (sizeof (int)), Bu deyərək bir xülya yoludur, hey əməliyyat sistemi, malloc vasitəsilə, ölçüsü üçün mənə kifayət qədər yaddaş vermək yəqin ki, bir int və 32 bit və ya dörd bayt olacaq. Belə ki, malloc nə qayıtmaq edir? Malloc bir ünvan qaytarır. Belə ki, nə x saxlanılır almaq olacaq? Yığın ünvanı yaddaş, dörd bytes ki, malloc yalnız xahiş mənim üçün aşkar əməliyyat sistemi. İndi isə, line Burada dörd, bu * x = 42. Sadəcə, aydın olmaq orada nə olacaq? Sol tərəfində, * x. ki, * 33 Oxford Street kimi. Belə ki, * x nə deməkdir? Auditoriya: gedin. DAVID J. MALAN: ünvan gedin. Harada ki, yığın yaddaş ona getmək edir. Və təbii ki, nə var qoymaq? Auditoriya: 42. DAVID J. MALAN: 42. Bütün sağ, * y, eyni fikir. Y ünvan gedin. Orada sayı 13 qoyun, lakin hazırda y nədir? Auditoriya: yaddaş y yoxdur. DAVID J. MALAN: var y üçün yaddaş. Belə ki, nə yəqin y yoxdur Deyirdik olduğunuz kimi, ola? Auditoriya: Garbage. DAVID J. MALAN: Bəzi zibil dəyəri. İndi, zibil dəyəri hələ bir sayı. Bu hələ bir ünvan səhv ola bilər. Bu kimsə sanki var , bir şey yazı və mən mənası kimi təhrif küçə aşağı bir ev. Və yalnız getmək üçün cəhd edin öz olmayan bir bina, və ya yaddaş bir yığın siz yoxdur verilmiş olub, pis şeylər baş verə bilər. Kompüter bəzi digər qəza, və ya ola bilər təyin davranış baş verə bilər. Belə ki, o, Binky bu intro edir. Mən hələ 20, xatırlayıram bəzi qəribə il sonra, Mən mən nəhayət olduğu göstəricilərinə aydın. Əgər, demək olan üç dəqiqə buradan ayrılmaq və mən nə edirəm göstəricilərinə anlamaq, dərk Mən 20 yad ediblər Bəzi crazy səbəbdən il zaman və nə nəhayət batmış mənim tədris oturan fellow, Nishat Mehta ildə Eliot iaşə xidmətləri Hall geri. İndi mən yad etdik bu idi, çünki mövzular Mən də bir xüsusi ilə mübarizə etdi. Və sonra, nəhayət tıklayan, kimi mən bir çox mövzu demək cəsarət nəhayət olacaq. İndi ki, bütün hiss etmək xoşbəxt və bütün daha inandırıcı, nin final nəzər imkan bizim Burada Binky son üç dəqiqə, bizim dostumuz, Nick gələn Stanford Parlante. [Video playback] -Hey, Binky. Uyan! Bu göstərici əyləncə üçün vaxt var. Ki, hansı var? Göstəricilər haqqında məlumat əldə edin? Oh, goody! Bəli, başlamaq üçün, biz edirik danışarlar bir neçə göstəricilərinə lazımdır gedir. -Ok. Bu kodu, iki göstəricilərinə ayırır olan integers qeyd edə bilərsiniz. -Ok. Yaxşı, mən iki göstəricilərinə görmək, lakin onlar bir işarə ola görünmür. Yəni doğru. Əvvəlcə göstəricilərinə bir şey qeyd etmir. Onlar deyilir qeyd şeyləri pointees və onları yaradılması bir ayrı addım. Sağ, -Oh. Mən ki, bilirdi. The pointees ayrıdır. Er, belə ki, necə bir pointee ayrılması edirsiniz? -Ok. Bəli, bu kodu ayırıb yeni tam pointee, və bu hissəsi x onu qeyd etmək. -Hey, Daha yaxşı görünür. Belə ki, bir şey etmək. -Ok. Mən dereference göstəricisidir x lazımdır onun pointee daxil sayı 42-saxlamaq. Bu oyun üçün, lazımdır mənim Dereferencing Magic Wand. Dereferencing -Sizin Magic Wand? That-- ki, böyük. -Bu Kodu kimi görünür. Mən yalnız sayı, və [POP] qurmaq lazımdır -Hey Baxmaq. Orada gedir. X aşağıdakı bir dereference edir -Yaxşı arrow onun pointee daxil olmaq üçün. Bu halda, mağaza 42. Hey sayı saxlamaq üçün istifadə edin Digər göstərici 13, y. -Ok. Mən yalnız y burada artıq getmək lazımdır, və sayı 13 set up almaq. Və sonra, bu Çubuq almaq Dereferencing və yalnız [BUZZ] Olduqca! Hey, -Oh! Ki, işləmədi. Binky, mən dereferencing düşünmürəm, demək Bilirsiniz, çünki y, yaxşı bir fikirdir pointee yaradılması ayrı bir addımdır. Və biz heç bunu düşünmürəm. Yaxşı point. Bəli. Biz göstərici y ayrılan, lakin biz heç bir pointee qeyd etmək seçin. -Çox Müşahidəçi. -Hey, Orada Binky yaxşı axtarır edirik. Siz ki, bunu düzeltmek y xal x eyni pointee? -Əlbəttə. Mən Magic Çubuq istifadə edəcəyik Pointer Tapşırığın. Olacaq ki, iş aparılırmı əvvəl kimi bir problem? No. Bu pointees toxunmaq deyil. Bu, sadəcə bir göstərici dəyişikliklər başqa eyni şey qeyd. Olduqca görürəm. X eyni yerə İndi y xal. Beləliklə, gözləyin. İndi, y müəyyən edilir. Bu pointee var. Belə ki, siz Çubuq cəhd edə bilərsiniz 13 üzərində göndərmək üçün yenidən dereferencing. OK, -Uh. Burada gedir. [POP] -Hey Ki, baxmaq. İndi y işləri dereferencing. Və göstəricilərinə mübadiləsi, çünki bir pointee ki, onlar həm 13 görürük. Bəli. Paylaşma, nə. Beləliklə, biz indi yerlərdə keçid gedir? Oh, baxmaq. Biz vaxt həyata edirik. -But-- Üç göstərici qaydaları xatırlamaq -Sadəcə. Number One, əsas struktur bir göstərici var ki, və bu pointee üzərində göstərir. Lakin göstərici və pointee, ayrı və ümumi səhv bir pointer qurmaq üçün, lakin pointee vermək unutmaq. Sayı iki, pointer dereferencing göstərici başlayır və üzərində arrow aşağıdakı onun pointee daxil olmaq üçün. Biz bütün Bildiyiniz kimi, bu olarsa yalnız çalışır bir pointee, hansı cür Number One Qaydasının geri alır. Sayı üç, pointer tapşırıq bir pointer edir və qeyd etmək dəyişir başqa göstərici eyni pointee. Tapşırığın sonra belə, iki göstəricilərinə eyni pointee qeyd edəcək. Bəzən paylaşım deyirlər. Və həqiqətən, orada bütün var. Bye-bye indi. [END Video playback] DAVID J. MALAN: Bu CS50 üçün var. Gələn həftə görəcəksiniz.