[Musiqi ifa] DAVID J. Malan: Yaxşı. [Gülüş] Geri xoş gəlmisiniz. Bu CS50 edir. Bu həftə beş sonu. Və indiyə qədər, biz olduqca çox var verilən qəbul olunub ki, siz var ki, bu compiler, cingilti mövcud Bu yolu ilə invoking edilmişdir digər alət ki, birtəhər olun çağırıb magically sizin mənbə kodu çevirir obyekt kodu da adet sıfır və olanları nəzərə ki, kompüter CPU, mərkəzi processing unit, həqiqətən anlayır. Ki, bir sıra var həyata Lakin bu çevrilir olan başlıq altında gedir giriş və çıxış arasında. Və mən ki, biz əti təklif etmək istərdim bir az daha açıqlamaq ki, həyata bu dörd addımı adlı bir şey var pre-emalı, bir şey gördük ki, tərtibi, adlı bir şey montaj adlanır və bir şey birləşdirən çağırıb. Belə ki, indiyə qədər bizim bəzi proqramları, biz kəskin daxildir etdi. Bu yaxınlarda bəzi kəskin yaşadım sabitləri üçün müəyyən edir. Belə çıxır o şeyi ki, hash simvolu və ya prefixed olunur funt-simvolu pre-prosessor var direktivləri. Yalnız bu söyləyən bir xülya yolu həqiqətən ki, bir kod line əvvəl başqa bir şey çevrilir kompüter hətta çevirmək üçün cəhd üçün adet sıfır və olanları nəzərə proqramı. Məsələn, kəskin standart daxildir I / O. H, olduqca çox yalnız getmək deməkdir qabaqda, faylları məzmunu qamarlamaq stdio.h və sağ orada yapışdırıb. Belə ki, heç bir adet sıfır və yenilərinin hələ o nöqtədə. Bu, həqiqətən yalnız bir əvəz var. Və sözdə zamanı həyata pre-emal mərhələ, zaman həqiqətən xüsusi cingilti çalıştırmak və ya Əksər hallarda olun. Belə ki, bütün bu baş edilmişdir İlk avtomatik beləliklə qədər. Sonra tərtib addım gəlir. Amma biz oversimplified olduğunuz tərtibi. Bir proqram tərtib həqiqətən deməkdir ki, C kimi bir şey almaq mənbə kodu biz, yazı olduğunuz bir şey toplaşmaq adlı etmək. Məclis dil aşağı səviyyədə dil ki, təşəkkürlə, biz olacaq qədər nəsib olmaq Bu dövr yazın. Lakin ən aşağı səviyyədə var sözün yazmağa başlayın Bu mənada əlavə və çıxmaq və çoxaltmaq və yük yaddaşından və saxlamaq yaddaş üçün çox əsas təlimat bir kompüter, başlıq altında, həqiqətən anlayır. Nəhayət, montaj dil edir biz də etdik ki, adet sıfır və olanları İndiyədək izah. Və həqiqətən Nəhayət, sözdə var faza birləşdirən hansı rəftar birləşdirən yalnız bir an görmək Sizin adet sıfır və adet sıfır ilə olanları və əvvəl olanları digər insanların Siz yaratmışdır. Beləliklə, bu super sadə proqram hesab edir. Bu həftə 1 idi. Bu, sadəcə, Dünya Salam, dedi: ekranda. Biz cingilti bu qaçdım. Yoxsa biz onun vasitəsilə olun qaçdı olan cingilti qaçdım. Və vaxt outputted yerləşir bir adet sıfır və olanları. Var həyata Lakin bu çevrilir Bir ara addım. Burada artıq getmək varsa - oops etmədi, hələ onu görmək istəyirəm. Mən avadanlığına buraya gedin və mən hello.c, burada açmaq Eyni proqramdır. Bəs mən terminal etmək gidiyorum burada pəncərə Mən gidiyorum edir , cingilti run daha çox Yap bütün dörd avtomatlaşdırır bizim üçün o addımlar. Və mən cingilti-S edəcəyəm və alıram daxil sonra hello.c və sonra. Mən bir yanıb-sönən tez almaq yenidən, bu yaxşıdır. İndi bir az böyük pəncərə, Mən burada gedit açmaq üçün gedirəm. Mən bir fayl açmaq üçün gidiyorum çıxır, hello.s bu adlanır ki, montaj dil ehtiva edir Mən əvvəllər edilir. Bu toplantının deyirlər nə dil, kifayət qədər aşağı səviyyədə talimatları ki, Intel CPU və ya hər hansı bu, daxili ki, deyil anlayır. Və mov hərəkət edir. zəng üçün , çox aşağı səviyyədə funksiyası zəng. alt çıxmaq üçün. Siz daxilində müəyyən bir CPU var zaman kompüter, nə edir haqqında fərqli, qarşı digər CPU'lar bazar, olan təlimat o anlayır və tez-tez necə ondan səmərəli bəzi icra edir necə sürətli edir həmin təlimatlar. İndi bu barədə daha ətraflı üçün, siz bilər kollec növbəti Fall CS61. Amma burada bir neçə, məsələn, var tanış ola bilər ki, tanımlayıcıları. hello.c proqramın adıdır. . Mətn - maraq çox orada deyil yalnız indi xatırlayıram, mətn harada seqment, Bazar ertəsi kimi, yaddaş Proqram həqiqətən qədər çatır. Belə ki, ən azı yayğın var orada tanış olmuşlar. Burada, əlbəttə, bir qeyd edir əsas funksiyası. Aşağı scrolling, bu şeylər baxın adlandırılan aparatlarının, çox kiçik chunks haqq CPU yaddaş daxilində. Və mən hətta aşağıya fırladın əgər daha, mən bir növ bax ASCII dolayısı ilə qeyd. Və həqiqətən ki, simli var hello, vergül, dünya. Belə ki, uzun hekayə qısa, bu olmuşdur avtomatik olaraq, sizin üçün baş başlıq altında bu dəfə bütün. Və nə baş edilmişdir həqiqətən dəfə siz cingilti run, və ya yolu ilə etdik , Ilk əldə etdiyiniz etmək kodunu, bu montaj dil deyilən. Sonra cingilti bu toplantının konvertasiya edilir aşağı adet sıfır və olanları dil. Və biz başlayan Slayd edir on Həftə 0 bizim müzakirə - ve sonra həftə 1. Və sonra nəhayət, o adet sıfır və yenilərinin ki, adet sıfır və olanları ilə birləşir həmin kitabxanalardan biz alaraq olduğunuz Standard I / O və ya kimi verilən String Kitabxana və ya hətta ki, CS50 kitabxana. Belə ki, daha bu şəkil çəkmək vizual, biz hello.c var. Və bu, əlbəttə, printf istifadə Salam dünya, demək fəaliyyət göstərir. Tərtibi addım onu ​​aşağı edir fayl biz yalnız, hətta hello.s gördüm adətən silindi ki, baxmayaraq ki, sizin üçün avtomatik olaraq. Amma bu toplantı kod orta addım. Və sonra biz toplaşmaq toplaşmaq zaman zaman dil, necə deyərlər, ki, o adet sıfır və olanları almaq. Beləliklə, biz bu gün səmərəli zoomed sonra nə verilən biz alaraq sonra, mənbə kodu gedir deməkdir kodu etiraz edir. Amma nəhayət, indi həmin şəkil - üzərində ilə itələmək edək sol tərəfdəki. Və Qeyd edək ki, top var Mən stdio.h bildirdi. Ki, daxil olduğunuz bir faylı demək olar ki, bütün-ci biz yazdıq proqramları. Və onun məzmunu faylı surəti yapışdırılır almaq, effektiv kodu üstün. Lakin bu ki, bir kompüter çıxır sistemi bir yerdə, ehtimalla bir var kimsə illərdə yazmışdır ki stdio.c fayl əvvəl ki, bütün həyata keçirir elan edilmişdir funksiyaları stdio.h edir. İndi əslində bu yəqin ki, deyil, və ya hətta sizin Mac və ya PC CS50 Aracı xam C koddur. Kimsə artıq tərtib daxil . O obyekt kodu üçün fayl və ya. A Paylaşılan bir kitabxana istinad olan fayl, ki, önceden götürmüş və oldu sizin üçün əvvəlcədən tərtib. Amma həqiqətən var Güman paralel olaraq bizim kompüter stdio.c haqqında cingilti ilə. Sizin kodu tərtib edib və toplandı. stdio.c 's kodu tərtib olunur yığılmış, bu son ki, burada, addım, biz birtəhər var link, belə danışmaq, sizin adet sıfır və yenilərinin birinə onun adet sıfır və olanları ilə nəticə etibarilə ki, sadə proqram Salam yalnız çağırıb. Belə ki, ki, sehrli bütün var İndiyədək baş vermişdir. Və bu davam edəcək prosesləri verilmiş, lakin həyata şirəli ətraflı çox var orada altında davam. Bu nə sizin Intel içərisində kompüter xüsusilə fərqli. Belə ki qeyd, siz istəyirəm əgər bu cümə nahar üçün bizə qoşulmaq getmək nə adi yer cs50.net/rsvp üçün, 1:15 PM bu cümə. İndi bir neçə elanlar. Beləliklə, biz yaxşı xəbər var. Və biz bəzi pis xəbər var. Burada yaxşı xəbər ilə başlayın. [Iniltili] Bütün hüquqlar. Bəli, belə ki, texniki bir bayram var o qədər bizdən hədiyyə deyil. Əlbəttə Ancaq daha sonra pis xəbər. [Iniltili] Mən çox vaxt sərf Bu animasiyalar haqqında. [Gülüş] Nəzərdən sessiyası olacaq Bu Bazar ertəsi gəlir. Bu 5:30 PM olacaq. Biz bütün bu detalları sizə xatırlatmaq olacaq kurs üzrə e-mail vasitəsilə gün yalnız bir neçə haqqinda. Bu film və mövcud ediləcək qısa müddət sonra. Edə bilməz, belə ki, əgər Bazar ertəsi gecə slot, narahat olmayın. Bölmələr bu gələn həftə də olacaq viktorina üçün baxış yönəldir. Sizin bölmə olan Monday, aktivdirsə həqiqətən universitet bayramı biz hələ bölməsində cavab verir. Siz sadəcə edə bilməz Bölmə siz davam olduğunuz üz ki, gözəl. Bir bazar və ya çərşənbə axşamı bölmə və ya iştirak Jason bölməsində ilə tune-in, olan mövcud online. Belə ki, bir pis xəbər daha. Belə ki, tədris görə, Gələn cümə mühazirə var. Amma yaxşı xəbər - Aydındır ki, mən bu barədə çox vaxt sərf etmişdir. [Gülüş] Biz cümə mühazirələr növbəti qeyri-edəcəyik. Belə ki, bizim üçün bir hədiyyə olacaq, belə ki, həqiqətən gözəl möhlət ola bilər Bu həftə və bu səbəbdən iki həftə arasında. Heç mühazirələr gələn həftə, yalnız kiçik bir Belə ki, Siz olmalıdır olan kiçik viktorina, getdikcə heyecan almaq. Belə ki, indi bizim diqqət çevirmək bildirin həqiqətən daha əyani bir şey və daha çox maraqlı və səhnəyə təyin etmək üçün üfüqdə olacaq nə üçün həftə yalnız bir neçə. Ilk viktorina sonra biz çevirmək lazımdır bizim problem dəstləri başqa diqqət domain xüsusi problem, ki, ümumiyyətlə Suclari və ya təhlükəsizlik. Bu məsələ ilə Əslində, ənənə set mənim üçün biri arasında gəzmək fellow ya CA'lar tədris bəzi fotoşəkillər alaraq kampus müəyyən edilə bilən lakin qeyri Aşkar insanlar, sonra yerləri, və ya şeyi, hər il elə təsadüfən silmək üçün idarə və ya digital media kart korlaya ki, kamera daxilində var. Amma heç bir böyük. Mən irəli getmək və plug bilər mənim kompüter edir. Mən, bu, bir məhkəmə image edə bilərsiniz ki, adet sıfır çıxarmaq, danışmaq və ki, yaddaş kartı olanlar off, olub onun bir SD kart və ya kompakt flash kart və ya Sizinlə tanış olduğunuzda nə. Və sonra, biz ki, əl bilər. Və beləcə digər arasında qabaqda meydan, Sizin üçün hər şeyi, yazmaq olacaq Bütün dəstə bərpa ki, C kodu Mənim üçün JPEGs və aşkar olacaq insanların, yerləri, və ya şeyi. Və biz də bu problemi, danışmaq lazımdır seçin və gün haqqında, gəlmək ümumiyyətlə qrafika. Biz, bir kurs onları istifadə etdiyiniz çıxmaq üçün. Verilən Amma cür qəbul etdik Bu yüksək səviyyəli anlayışlar var düzbucaqlı və oval edir. Amma başlıq altında piksel var. Və başlamaq üçün idi bu barədə düşünürük. Yoxsa p-set 4 düşünmək lazımdır üçün Sizin kərpic arasında fərq haqqında nə tez top arasında hərəkət edirik üçün ekran çıxmaq. Belə ki, bu anlayışı var ki, ekranda nöqtələr artıq oyun minir. İndi görürsünüz nə olsa da, nə bir kompüter ekran alın. Əgər yaxşı və ya izləyib varsa pis TV, bahis onlar olduqca çox var technophobes kimi tamaşaçılar müalicə kim həqiqətən çox kompüter haqqında bilirik. Və belə ki, polis üçün çox asandır demək əməliyyat, siz mənim üçün o qədər təmiz? Və ya sağ, artırmaq? Gücləndirilməsi ildə buzz söz kimi ən hər hansı bir cinayət bağlı şou. Bir çox almaq əgər reallığıdır bunu bir şübhəli bulanık şəkil pis bir şey, siz bilməzsiniz yalnız artırır. Siz sonsuz zoom edə bilməz. Siz kimsə nin glint görmək bilməz ki törətmiş göz baxmayaraq xüsusilə cinayət TV Bu yayılması. Və belə ki, motivasiya edək ki, Qarşıdan gələn problem bir fikir ilə müəyyən Bəzi göstərir ilə tanış ola bilər. [Video playback] -OK. İndi yaxşı bir görünüşünü almaq edək. It-tutun. Geri Run. Bir dəqiqə gözləyin. Doğru gedin. -Var. Ki Freeze. Ekran-Tam. -OK. Ki Freeze. Ya, ki edəcək up-bərkidin? Ki, oğlan üzrə-Vector arxa təkər ilə. Bu spot sağ burada-Zoom. -Ilə sağ avadanlıq, imaged genişləndirmiş və itilənmiş bilər. -Ne var? -Bu genişləndirilməsi proqramıdır. -Can hər hansı bir qədər ki, sil? -Bilmirəm. İT artırmaq edək. Bölmə A-6-gücləndirilməsi. -I ətraflı genişləndirilir və - -I artırmaq üçün kifayət qədər var edirəm. Mənim ekran üçün buraxın. Onun göz əks-gücləndirilməsi. Bu axır-Let video genişləndirilməsi. -Edgar, bu gücləndirə bilər? On-Bekle. -I've bu əks üzərində çalışır. -Kiminsə əks. -Reflection. Bir əks-var insanın üzü. -Bu əks. -Bir əks edir. Güzgü üzrə-zoom. -Siz bir əks bilərsiniz. -Bilərsinizmi buradan image artırmaq? -Can sağ burada onu artırmaq? -Can siz onu artırmaq? -Can siz onu artırmaq? -Can biz bu inkişaf? -Can siz onu artırmaq? Ikinci on-tutun, mən artırmaq lazımdır. Qapısını in-kiçildin. -X10. -Zoom. [Gülüş] Daxil Move Dayandırmaq, gözləyin. -Stop. It-durdur. Ətrafında 75 dərəcə-Qayıt şaquli edin. [Gülüş] Hissəsi ilə geri dayandırmaq və qapı haqqında yenidən. Bir resim Gücləndirici-Got ki, bitmap bilər? -Bəlkə biz Pradeep Sen istifadə edə bilərsiniz metodu Windows daxil görürük. -Bu proqram sənətinin dövlətdir. -Bu icon dəyər off edir. -Ilə sağ birləşməsi alqoritmləri. -O işıqlandırma alqoritmlər qəbul oldu növbəti səviyyəsi və mən onları istifadə edə bilərsiniz Bu fotoşəkil artırır. On-Lock və Z-axis genişləndirmək. -Gücləndirilməsi. -Gücləndirilməsi. -Gücləndirilməsi. -Freeze və genişlənəcəkdir. [END video playback] DAVID J. Malan: Belə ki, Problem Set 5 orada irəli yalan nə edir. Beləliklə, biz tezliklə daha yaxşı anlaşma əldə edəcəyik vaxt və niyə bilər və bu yolla təmin edə bilməz. Amma birincisi, bizim diqqət qayıtmağınıza imkan biz will bloklar bəzi ki, hekayə demək lazımdır. Beləliklə, biz bu şəkil çəkdi Xatırladaq Bazar ertəsi və bir az keçən həftə. Və bu şeyi layout təsvir kompüter yaddaşında zaman Bəzi proqram çalışan. Top texnologiya seqment, geri, istinad faktiki adet sıfır və olanları ki, proqram daxildir. Var ki, aşağıda, bir sıra başlatılmış və ya uninitialized data, hansı adətən və ya sabitləri kimi şeylər aiddir strings və ya ki, qlobal dəyişənlər əvvəlcədən elan edilmişdir. Orada yığın, amma biz edəcəyik geri bir az olduğu. Və sonra yığını var. Çox da tepsiler bir yığın kimi yaddaş olur yerləşir yeməkxana, bu laylı və zaman laylı bir proqram nə? Üçün yığını istifadə nədir? Bəli? Funksiyasının edin. Bir funksiyası zəng heç bir zaman, bu, onun yaddaş qəlpə verilən yerli dəyişənlər və ya onun parametrləri. Və pictorially, biz görürük ki, hər bir ilə zaman ardıcıl funksiyası adlanır zənglər B zənglər C zənglər D, onlar yığını üzərində laylı almaq. Və bu dilim hər ərzində yaddaş əhəmiyyətli bir unikal vüsət edir ki, funksiya üçün, bu, əlbəttə, siz tərəfdən istəyirsinizsə problemlidir bir funksiyası başqa bir parça istədiyiniz veri mutate və ya dəyişdirmək üçün. Belə ki, imkan bizim həll nə idi Bir yığın təmsil funksiyası daxili yaddaş dəyişdirmək üçün nizama salmaq başqa yığını çərçivəsində? Necə bir-birinə bu iki söhbət edirsiniz? Belə göstəricilərinə və ya URL yolu ilə, burada olan, yenə yalnız təsvir xüsusi xatirəsinə tərəfindən yol bite sayı, xüsusi dəyər bilər. Beləliklə də biz davam son dəfə xatırlayıram bir də hekayə və baxdı ədalətli arabası proqramı. Bu proqram bir neçə arabası deyil səbəbləri, lakin ən worrisome biridir nə yoxlamaq üçün uğursuz çünki? Bəli, bu girişinizi kontrol edə bilmir. Üzr istəyirik? 12 simvol daha çox edin. Belə çox şıq, memcopy zəng zaman, ki, adı təklif kimi, yalnız ikinci arqument dən nüsxədə yaddaş ilk mübahisəyə. Üçüncü dəlil, çox şıq edir Siz əmin olun yoxlanılır , bu halda, uzunluğu daha çox surəti bar, simvol sayı, hedef daxil olan bu array C. Amma problem olduğunu nə C özü kifayət qədər böyük olmadıqda ki, idarə etmək? Siz sayı surəti olacaq Sizə verilən olduğunuzu bayt. Amma əslində nə var sizin üçün yer çox bayt? Bəli, bu proqram çox ağılsızlıq yalnız kor-koranə bu nə almaq üçün gəlir verilmiş, hello backslash 0 edir simli qısa böyük əgər ki, beş chars kimi. Amma faktiki 12 simvol var və ya əgər 1200 simvol, biz sonuncu dəfə gördüm yalnız tamamilə olacaq ki, yaddaş üzerine ki, Sizə aid deyil. Və ən pis halda, siz yazmaq ki, əgər biz deyilir ki, orada qırmızı hissəsi ünvan qayıdıb - Bu yalnız burada kompüter avtomatik, sizin üçün, arxasında üz səhnələri, tucks 32-bit dəyəri lazımdır nə ünvan üçün xatırladır qayıtdığınız zaman foo, bu digər funksiyası, icra edilir. Bu növ çörək qırıntı var bu qayıdır. Siz potensial ki, üzerine edin siz pis adam istəyirsinizsə, ola bilər bilər potensial təhvil almaq Birinin kompüter. Və ən əlbəttə will əksər hallarda bu qəza. İndi bu problem yalnız mürəkkəbləşdirirdi Biz yaddaş haqqında danışmağa başladı kimi ümumiyyətlə idarə edilməsi. Və malloc, yaddaş ayrılması, bir biz ayrılması üçün istifadə edə bilərsiniz ki, funksiyası Biz əvvəlcədən bilmirəm zaman yaddaş bəzi lazımdır bilər. Belə ki, məsələn, mən geri əgər burada avadanlığına. Mən keçən dəfə hello2.c dən açmaq baxdı burada bu proqram, geri bu kimi bir az bir şey, yalnız üç xətləri - Adınızı, sonra simli adı, dövlət sol, getstring bərabərdir. Və sonra biz onu çap istifadəçi adı. Belə ki, bu super sadə proqram idi. Aydın, mənə davam bildirin və salam-2 edir. Mən dot çizgi salam-2 etmək gedirəm. Adınızı dövlət - David. Daxil edin. David Salam. OK iş görünür. Amma nə həqiqətən davam burada başlıq altında? Birinci edək bir qat geri soymaq. String biz var yalnız sinonimi deyil nə üçün həyata? Char ulduzu. Elə bir az daha gizli edək lakin daha çox texniki doğru ki, bu o deməkdir ki, bir char ulduz deyil, adı, bəli, bir dəyişir. Amma nə ad mağaza ünvanı bir az qəribə hiss edən bir char, Mən bir string geri alıram, çünki. Mən çox alıram chars bir char deyil. Amma əlbəttə, yalnız birinci növbədə yadda char ünvanı yerləşir Çünki niyə bütün simli var? Necə anlamaq edirsiniz olduğu sonu simli əvvəlində biləndir? Bu backslash sıfır. Belə ki, bu iki ip ucları ilə anlamaq əvvəlinə və sonuna qədər hər hansı bir string onlar etdiyiniz belə uzun kimi, düzgün null ilə formalaşır Terminator ki, backslash sıfır. Amma bu getstring çağırır. Və o getstring çıxır bütün bu vaxt cür olmuşdur bizim üçün aldadıcı. O, əmin olmaq, bu əmək bunu edilmişdir istifadəçi bir string almaq. Amma ki, yaddaş nerde gələn olunubmu? Burada şəkil geri və əgər yalnız bir olan müəyyən müraciət an əvvəl ki, yığını burada funksiyaları də'vət olunduqları zaman yaddaş, gedir ki, məntiq, siz getstring zəng zaman, və sonra yazın D-A-V-I-D, daxil olduğu D-A-V-I-D backslash sıfır əsaslanan, saxlanılan hekayə biz uzaq izah etdik? Bu olmaq görünür ki, yığını, sağ? Siz string almaq zəng zaman almaq yığını yaddaş az dilim. Belə ki, D-A-V-I-D səbəb dayanır backslash sıfır saxlanılır var yığını. Amma yekunları getstring, bir dəqiqə gözləyin ki, simli, necə deyərlər, o deməkdir ki, bu yemekhane dən tray var yığını off alınır. Və biz ki, tezliklə kimi son dəfə deyib funksiyası yekunları və sizi ki, yığını off tray, belə danışmaq, nə Siz qalıqları haqqında kəsb edə bilər yaddaş? I növ sual işarələri kimi redrew onlar səmərəli olmaq, çünki unknown dəyərlər. Bəzi Onlar yeniden istifadə oluna bilər Növbəti funksiyası adlanır. Başqa sözlə, biz nə varsa saxlanılması olunacaq - Mən tez şəkil çəkmək lazımdır burada yığını. Biz alt rəsm üçün nə varsa mənim yaddaş seqmentinin və biz demək lazımdır Bu yaddaş yerinə ki, əsas və bəlkə ARG c və işğal ARG v və proqramın başqa bir şey varsa, getstring adlanır zaman, ehtimalla getstring edir Burada yaddaş yığın. Və sonra D-A-V-I-D birtəhər Bu funksiya ildə başa çatır. Və mən oversimplify gedirəm. Ancaq nin boynuna qoy onun D-A-V-I-D ki, backslash sıfır. Belə ki, bu çox bytes istifadə olunur getstring üçün çərçivəsində. Amma tezliklə getstring yekunları kimi, biz Sonuncu dəfə bildirib ki, artıq bu yaddaş burada olur - woops - bütün səmərəli silinə olur. Və biz sual kimi indi bu hesab edə bilər işarələri bilən çünki hansı ki, yaddaş olmaq olacaq. Həqiqətən, mən çox tez-tez Zəng funksiyaları getstring başqa. Və Mən bəzi digər zəng kimi getstring çox funksiyası, bəlkə deyil Biz yalnız baxdı bu proqram lakin bir sıra digər, şübhəsiz ki, bir-birinə funksiyası verilir başa bilər yığını bu növbəti spot. Belə ki getstring mağazalar ola bilməz Yığını D-A-V-I-D edirəm, çünki dərhal çıxışı itirirlər. Amma biz onlar getstring bilirik nə yalnız qaytarır? Bu dönən deyil Mənə altı simvol. Bu, həqiqətən nə etdi qayıdır Biz keçən dəfə bağlamaq? Ilk ünvanı. Belə ki, birtəhər, siz getstring çağıranda bunun üçün yaddaş yığın bölüşdürülməsi var simli ki, istifadəçilər növü və o sonra qaytarılması ünvanı. Və bu zaman istədiyiniz çıxır Bu yaddaş ayrılması funksiyası yol və zəng edən şəxsə geri qaytarılması ki, funksiyası üçün ünvan yaddaş ki, yığın, siz tamamilə müəssisələrdə yığını qoymaq bilməz alt, çünki funksional yalnız var çox sizin ola gedir tez, belə ki, siz yəqin ki, təxmin edə bilərsiniz biz yəqin ki, onu silkələmək olacaq əvəzinə, sözdə yığın. Belə ki, yaddaş nin alt arasında layout və yaddaş nin üst layout seqmentləri bütün dəstə var. Bir yığın və sağ Yuxarıda yığın edir. Və yığın yalnız müxtəlif yığın edir funksiyaları üçün istifadə ki, yaddaş Onlar adlı etdiyiniz zaman. Bu zaman uzun müddətli yaddaş üçün istifadə bir funksiyası bəzi qamarlamaq istəyirəm yaddaş və ona asılı qalmaq edə üzərində nəzarət kaybetmeden. İndi bəlkə dərhal bilər bu olduğunu görmək mükəmməl dizayn lazım. Proqram yaddaş ayrılan kimi, yığını, və ya zəng kimi daha çox və daha çox funksiyaları və ya ayrılması kimi kimi off malloc ilə yığın yaddaş getstring bunu nə aydın qaçılmaz problem görünür? Sağ. Faktla kimi bu oxlar bir-birinə işarə edilir yaxşı ümidlər vermir. And olsun ki, biz bunu çox sürətlə avariya bilər yolları hər hansı bir sayı bir program. Əslində, mən var bilər edirəm Bu təsadüfən bir dəfə aparılır. Və ya, əgər bunu edək qəsdən indi. Mənə davam və tez super yazmaq edək bir proqram dontdothis.c çağırıb. Və indi burada getmək və edəcəyik kəskin stdio.h daxil yoxdur. Funksiyası foo edir bəyan edək heç bir dəlilləri olan etibarsız yaxşı kimi adlandırılmışdır. Və foo edəcəyimiz yeganə şey yəqin olmayan zəng foo, akıllıca fikir, ancaq belə ola bilər. KBB əsas edilsin. İndi əsas gedir yeganə etmək üçün həmçinin foo zəng edir. Və yalnız kicks, mən getmək gidiyorum irəlidə burada və Hello "printf demək foo. " OK. Mən hər hansı bir səhv etmədiyini Belə ki, Dontdothis dot çizgi olun. Və edək böyük bir pəncərə bunu - dot çizgi, dontdothis. Hadi. Oh Uh. Görünür, siz bunu edə bilərsiniz. Lanet olsun. OK. Gözləyin. Yanındayız. Biz mi - We Make ilə istifadə etməyib. [SIGHS] Bilirəm amma biz hesab yalnız silindi. Ah, evet. Lanet olsun. Bu Rob həll edir. Nə? Bu, çox sadə. Bəli, biz optimallaşdırılması söndürülmüşdü. OK, bye durmaq. İndi daha yaxşı hiss edirəm. OK. Bütün hüquqlar. Belə ki, bu derleyeceğiz edək - Siz dontdothis olun. Siz bu adını dəyişmək üçün ola bilər yalnız bir anda dothis.c. Orada biz gedin. Təşəkkür edirik. OK. Beləliklə, mən çap edilmişdir ki, bir şey yalnız həqiqətən prosesi aşağı yavaşlatan olan biz ki, nöqtəsinə çatmış olardı. OK. Phew! Beləliklə, nə həqiqətən gedir? Yalnız bir kənara kimi orada səbəbi edir giriş baxımından bir şey etdiyini və çıxış yavaş çalışır, çünki ilə simvol yazmaq lazımdır ekran Bu hərəkət etmək var. Belə ki, uzun sözün qısası, mən, həqiqətən idi belə səbirsiz oldu, biz var ki, habelə bu son nəticədə görüldü. Mən çap-up gezmeye var, indi ki, biz dərhal görürük. Belə ki, niyə belə olur. Bəli, əlbəttə ki, sadə izahat, ki, foo yəqin ki, olmamalıdır deyil özü zəng bilər. İndi ümumi şəkildə, bu recursion edir. Və biz bir neçə həftə fikir əvvəl recursive yaxşıdır. Recursion bu sehrli yolu müfəssəl super özünüzü ifadə. Və yalnız işləyir. Lakin bütün əsas xüsusiyyəti var danışdıq etdiyiniz recursive proqramları haqqında baxdı indiyə qədər, hansı onlar nə idi ki? Bəzi ağır kodlu olan bir baza halda, bəzi hallarda bildirib ki, hal aydın olan foo, zəng etməyin Burada iş deyil. Beləliklə, nə həqiqətən baş verir bu şəkil baxımından? Bəli, zaman əsas foo, o çağırır yaddaş bir dilim alır. Foo foo çağırır zaman, o olur yaddaş bir dilim. Foo foo çağırır, o, bir dilim alır. Bu dilim alır. Bu dilim alır. Foo qaytarılması heç vaxt, çünki. Biz o biri silinmə heç edirik yığını olan çərçivəsində. Belə ki, biz yığın vasitəsi ilə əsən deyilik KİM NƏ başqa bilir, qeyd etmək biz hüdudlarından overstepping edirik yaddaş seqmentinin sözdə. Seqmentasiya yalan getmək səhv. Belə ki, orada ki, həll aydın etmirəm. Lakin böyük dolayısı ki, bəli, edir tamamilə bir limit var o nə kimi, müəyyən deyil, hətta siz bir zəng edə bilərsiniz bir çox funksiyaları proqramı, neçə dəfə bir funksiyası özü zəng edə bilərsiniz. Biz recursion vəz etdilər Belə ki, hətta bu potensial sehrli şey kimi SİQMA üçün həftə öncə neçə funksiyası, və biz məlumat almaq strukturları və CS50, digər görürsünüz bunun üçün ərizə, bu deyil mütləq yaxşı şey. Funksiyanı özü çağırır, Çünki əgər bir baza var, hətta, özü çağırır halda, siz baza halda basmayın əgər 1000 zənglər və ya 10,000 zənglər üçün tərəfindən Siz oda tökülmək ola bilər ki, zaman Sizin qondarma yığını və hit haqqında yaddaş bəzi digər seqmentlər. Belə ki, çox dizayn ticarət-off deyil zəriflik arasında arasında Sizin xüsusi möhkəmliyini həyata keçirilməsi. Belə ki, bir İşin mənfi tərəfi odur var ya biz var nə başqa bir Gotcha İndiyədək bunu edilmişdir. Mən getstring adlı olduqda - mənə salam-2 geri gidelim. , Mən getstring zəng alıram Qeyd edək ki, bir ünvan dönür. Və biz bu gün iddia ünvanı yığın edir. İndi çap edirəm ki ünvanda string. Amma deyilən heç vaxt sonra getstring qarşı. Biz kimi bir funksiyası calll heç vaxt etdik burada əl geri ungetstring, yaddaş. Amma səmimi biz yəqin ki, olmalı idi. Çünki biz kompüter xahiş saxlamaq əgər kimi kimsə xatirəsinə tərəfindən yol getstring lakin, şübhəsiz ki, geri vermək heç çox yol borcludur biz yaddaş tökülmək vasitəsi problemləri. Və əslində, biz bu üçün baxa bilərsiniz onun istifadə yeni alət ilə problemlər yazın bir az sirli edir. Amma mənə irəli getmək və onu splash bildirin yalnız bir anda ekranda. Mən irəli getmək və Valgrind çalıştırmak üçün gidiyorum olan ilk komanda parametri ilə line arqument adı proqram salam-2. Və təəssüf ki, bu çıxış amansızlıqla edir heç bir yaxşı səbəbdən kompleksi. Yəni biz bütün mess görürük. David my name dövlətdir. Belə ki, proqramın həqiqətən çalışır. İndi biz bu çıxış almaq. Belə Valgrind oxşar gdb ruhuna edir. Bu se başına ayıklama deyil. Amma bu yaddaş checker var. Bu davam edəcək bir proqram proqramı və siz bir xahiş əgər demək yaddaş üçün kompüter və heç vaxt onu təhvil geri, bununla da var o deməkdir ki bir yaddaş sızıntısı. Və yaddaş sızması pis olmaq üçün edirlər. Və kompüter istifadəçiləri var Yəqin ki, bu bir olub, hiss Mac və ya PC. Əgər üçün kompüter istifadə və bir neçə ildə rebooted deyil isə gün, və ya sadəcə bir çox var çalışan proqramları və lənətləmək şey bir itiləyici dayana yavaşlatır, və ya ən azı Çünki, istifadə etmək super annoying var hər şey yalnız super yavaş var. İndi səbəbləri hər hansı bir sayı ola bilər. Bu sonsuz loop, bir səhv ola bilər kiminsə kodu və ya daha çox sadəcə, bu, daha çox istifadə etdiyiniz demək bilər Sizin çox yaddaş, və ya çalışır, kompüter həqiqətən var. Və bəlkə bir proqram bir səhv var yaddaş tələb saxlamaq. Il brauzerlər üçün bədnam idi Bu, daha çox yaddaş tələb lakin geri verilməsi heç vaxt. Şübhəsiz ki, yalnız məhdud varsa yaddaş miqdarı, xahiş bilməz üçün sonsuz bir çox dəfə yaddaş bəzi. Və belə ki, baxmayaraq ki, burada nə daha Valgrind çıxış edir nəzər üçün lazımsız kompleksi Birincisi, bu maraqlı hissəsidir. Heap - çıxış istifadə. Belə ki, burada nə qədər yaddaş idi müəssisələrdə yığın istifadə vaxt mənim proqram çıxıldı - bir blok yəqin altı bayt. Beləliklə, mən əlləri dalğa gidiyorum nə bir blokdur. Daha, yalnız bir yığın edir düşünün yığın texniki söz. Altı bayt ancaq - ki, altı bayt nə istifadə hələ də? Eynilə elə. D-A-V-I-D backslash sıfır beş məktub adı plus null terminator. Belə ki, bu proqram qeyd Valgrind ki, ilə, yəqin, altı bytes istədi getstring yolu, lakin heç vaxt geri verdi. Və əslində, bu, belə ola bilər mənim proqram üç deyil Aşkar əgər xətləri, lakin 300 xətləri var. Beləliklə, biz, həqiqətən, başqa komanda verə bilər line arqumentinə Valgrind üçün daha çox verbose edir. Bu xatırlamaq bir az annoying var. Amma əgər - nin görək. Keçirtmək - Bu sızıntı olub - hətta mən xatırlamıram bu tərəfdən off nə. - Sızıntısı kontrol tam bərabərdir. Yep, təşəkkür edirəm. - Sızıntısı kontrol tam bərabərdir. Daxil edin. Eyni proqram çalışır. Yenidən David yazın. İndi bir az daha ətraflı bax. Amma yığın xülasə aşağıda olan dörd eynidir - ah, Bu gözəl növüdür. İndi Valgrind həqiqətən axtarır Mənim kodu çətindir bir az. Və bu, yəqin ki, deyən oldu satır malloc - biz Uzaklaştırmak. Line - biz nə line görmürəm. Amma malloc ilk günahkar deyil. Malloc bir blog var. Bütün hüquqlar? OK, no. Sağ? Mən getstring çağırıb. getstring yəqin malloc çağırır. Yaxşı kodu line Şübhəlinin olması üçün günah Bu yaddaş ayrılan? Gəlin kim malloc yazdı güman uzun kifayət qədər ki, ətrafında olmuşdur onların günah. Belə ki, yəqin ki, mina var. cs50.c ildə getstring - bir var ki, kompüter haradasa Fayl - line 286 günahkar görünür. İndi cs50 olmuşdur Fərz edək ki, Bunu zaman layiqli məbləği ətrafında biz də məsum var. Və bu getstring yəqin deyil hata yalan deyil ki, salam-2.c line 18. Elə nəzər bildirin ki, xətt 18 oldu. Oh. Elə bu xətti mütləq deyil buggy, özlüyündə, lakin səbəbi ki, yaddaş sızıntısı arxasında. Belə ki, super sadəcə, nə daxilən ki, burada həlli ola bilərmi? Biz yaddaş üçün xahiş istəyirsinizsə, heç vaxt geri verilməsi, və bir görünür problem çünki vaxt mənim kompüter üzərində yaddaş tökülmək bilər, yavaş bilər aşağı, pis şeylər, yaxşı, baş verə bilər sadə intuitiv həlli var? Yalnız geri verir. Siz bunu necə yaddaşında pulsuz bilərəm? Yaxşı, təşəkkürlə bu, olduqca sadə yalnız pulsuz adını demək. Və biz əvvəl bu həyata heç etdik. Amma əhəmiyyətli hesab edə bilər malloc qarşı kimi pulsuz. pulsuz əks olunur yaddaş ayrılması. Belə ki, indi mənə bu derleyeceğiz bildirin. Salam-2 olun. Mənə daha run edək. salam-2 David. Belə ki, bu iş görünür tam eyni şəkildə. Amma Valgrind geri getmək və yenidən əgər mənim yeni ki, eyni komanda tərtib proqram yazaraq əvvəl mənim ad - gözəl. Heap xülasə - - çıxış istifadə sıfır blokları sıfır bayt. Bu super gözəl, bütün yığın blokları azad edilmişdir. No sızması mümkündür. Belə ki, Problem Set 4 ilə gələn lakin Problem Set 5 Suclari ilə və irəli, bu da olacaq Sizin düzgün tədbir siz asılı olmayaraq proqramı və ya yaddaş sızması yoxdur. Amma təşəkkürlə, siz səbəb ola bilər yalnız onlara daxilən, vasitəsilə kiçik proqramlar üçün asan, arguably edir lakin böyük proqramlar üçün daha, , Bu böyük proqramları, Valgrind siz müəyyən kömək edə bilər xüsusi problem. Amma başqa bir problem var ki, yarana bilər. , Bu, mənə burada bu faylı açmaq edək yenə bir qədər sadə misal. Lakin edək nə diqqət Bu proqram edir. Bu memory.c adlanır. Biz bu sonra bu gün yazmaq lazımdır Bu gün mənbə kodu zip. Və mən adlı bir funksiyası var ki, görürsünüz dəlilləri və heç bir edir ki, f heç bir şey qaytarır. Line 20, mən yəqin elan alıram bir int və bu x zəng etmək üçün göstərici. Mən təyin alıram qayıdacaqsınız malloc dəyəri. Və yalnız am neçə bayt, aydın olmaq Mən yəqin ki, malloc geri almaq bu vəziyyətdə? Yəqin ki, 40. Harada ki, əldə edə bilərəm? Yaxşı, bir int tez-tez Xatırladaq ki, əgər 4 bayt, ən azı bu deyil cihaz, dəfə 4 10 açıqcası 40. Belə malloc bir ünvan qayıdır bir yaddaş yığın və saxlanılması ki, X nəticədə müraciət edir. Belə ki, aydın olmaq nə sonra baş verir? Yaxşı, məni geri keçmək bildirin burada şəkil. Mənə yalnız mənim alt cəlb edək kompüter yaddaş, mənə davam imkan və bütün düzbucaqlı cəlb edən mənim RAM bütün təmsil edir. Biz demək lazımdır ki, yığını alt edir. Və mətn seqment var ki, uninitialized data. Amma yalnız mücərrəd o gidiyorum uzaq nöqtə, nöqtə nöqtə kimi başqa şeylər. Mən yalnız bu müraciət gidiyorum üst yığın kimi. Və sonra bu şəkil altında, Əsas təmsil etmək gedirəm bir dilim yaddaş vermək yığını haqqında. F, mən bunu bir dilim vermək gidiyorum yığını üzrə yaddaş. İndi, mən müraciət var daha mənbə kodu. Əsas üçün yerli dəyişənlərin hansılardır? Göründüyü kimi heç bir şey ki, dilim deyil səmərəli boş və ya hətta böyük Hesab edirəm ki, tərtib etdiyiniz kimi. Amma f, mən yerli dəyişən var olan x adlanır. Beləliklə, mən irəli getmək və f vermək gidiyorum bu x zəng yaddaş yığın. 10 dəfə 4 və indi malloc Ki, olduğu malloc 40, Belə ki, yaddaş gələn? Biz Şəkil çəkilən deyil etdik əvvəl bunu bəyənir. Ancaq nin səmərəli olduğunu güman edək belə bir, burada gələn iki, üç, dörd, beş. İndi bu 40 lazımdır. Belə ki, yalnız təklif nöqtə, nöqtə, nöqtə edəcəyik hətta daha çox yaddaş var ki yığın geri gəlir. İndi ünvan nədir? Gəlin bizim ixtiyari seçmək həmişə olduğu kimi müraciət - Yəqin ki, olacaq, hətta Ox123, tam fərqli bir şey olacaq. Bu ilk byte və ünvanı var Mən malloc xahiş edirəm yaddaş edir. Belə ki, qısa bir xətt 20, icra sözün nədir Burada x daxilində saxlanılır? Ox123. Ox123. Və öküz maraqsız edir. Bu yalnız burada deməkdir hexadecimal sayı. Amma nə əsas var mən mağaza var nə ki, X, yerli dəyişir. Amma onun veri növü, yenə bir int bir ünvan. Yaxşı, mən Ox123 saxlamaq üçün gedirəm. Ancaq yenə də, bir az da ki, əgər Mən fırladın əgər, lazımsız yerə mürəkkəbdir geri, bu üz abstrakt bilər olduqca əsaslı və yalnız deyirlər ki, x bir yaddaş ki, yığın üçün pointer. OK. İndi əl-sual aşağıdakı kimidir - line 21, çıxır, arabası deyil. Niyə? Üzr istəyirik? Bu yoxdur - bir daha ki. Bəli, bu pulsuz deyil. Belə ki, ikinci, lakin. Belə ki, digər lakin xüsusi biri var line 21. Eynilə elə. Kodu Bu sadə xətt yalnız bir Buffer Overflow, bufer dağıtmaq. Bufer yalnız yaddaş yığın deməkdir. Ancaq yaddaş ki, yığın ölçüsü edir 10, 10 integers, deməkdir, əgər biz ki, sintaktik şəkər istifadə edərək daxil indeksi array notation və meydanda Mötərizədə sizə imkanına malik x bracket 0 x bracket 1 x, bracket nöqtə, nöqtə, nöqtə. x bracket 9 ən böyük biridir. Mən x bracket 10 belə edərsə, Mən, həqiqətən, yaddaş gedirəm? Bəli, mən 10 int varsa - Gəlin əslində bütün çəkmək burada bu həyata. Belə ki, ilk beş idi. Burada digər beş ints var. Belə ki, x bracket 0 burada. x bracket 1 burada. x bracket 9 burada. x bracket 10 burada olan, mən izah edən edirəm deməkdir line 21, kompüter qoymaq üçün sayı, harada? Sayı 0 harada? Bəli, bu, bəli 0 var. Ancaq əslində onun 0 bir təsadüf növüdür. Bu sayı ola bilər 50, biz qayğı bütün. Amma biz x bracket onu qoymaq çalışdığınız Bu olan 10, sual işarəsi tərtib edilir yaxşı bir şey deyil. Bu proqram çox yaxşı bilər nəticəsində qəza. İndi davam və görək bu halda , həqiqətən, nə olur olunur. Yaddaş olun, çünki fayl memory.c adlanır. Gəlin irəli getmək və çalıştırmak proqram yaddaş. Beləliklə, biz xoşbəxt var, əslində, bu, görünür. Biz uğurlu var. Lakin indi Valgrind əgər nin görək. İlk baxışdan, mənim proqram bilər mükəmməl doğru görünür. Lakin ilə Valgrind mənə run edək - Sızıntısı kontrol yaddaş tam bərabərdir. Və indi bu çalıştırdığınızda - maraqlı. Yanlış da ölçüsü 4 yazmaq memory.c xətti 21. Memory.c xətti 21 biri? Oh, maraqlı. Lakin gözləyin. Size 4, istinad ki, nə? Mən yalnız bir, yazdın lakin bu ölçüsü 4 var. Nə 4? Bu bir int, çünki bu yenə dörd bytes edir. Belə Valgrind bir səhv aşkar ki, Mənim kodu nəzər salan etmədi. Və bəlkə sizin TF ki, və ya deyil. Amma əmin aşkar ki Valgrind nə biz hətta orada bir səhv etdik biz uğurlu var və baxmayaraq kompüter qərar, eh, mən qəza fikrində deyiləm bir byte, bir toxunub yalnız çünki Siz ki yaddaş int yetmeyecek əslində öz. Yaxşı, burada arabası başqa budur. Ünvan - Bu crazy axtarır ünvanı hexadecimal edir. Yalnız haradasa yığın-yığın deməkdir ki, Ölçüsü 40 blokunun sonra sıfır bayt yerləşir. Məni bura Uzaklaştırmak və görək, əgər Bu bir az daha faydalıdır. Maraqlı. 40 bayt mütləq itirilmiş 1 zərər rekord 1. Yenə də, daha çox sözləri burada faydalıdır. Lakin, qeyd xətləri əsasında burada yəqin ki, diqqət etməlidir mənim digər səhv diqqət? Memory.c xətti 20 bənzəyir. Biz line 20 geri əgər, ki, bu siz əvvəllər müəyyən bir. Və bu buggy lazım deyil. Amma biz bu təsiri bərpa etdik. Belə ki, necə mən ən azı düzəltmək yoxdur bu səhvlər biri? Mən line 21 sonra nə ola bilər? Mən, x pulsuz edə bilər yaddaş geri vermək. Və mən bu səhv necə düzeltirim? Mən mütləq getməlidir heç bir uzaq 0'dan. Mənə cəhd və bu yenidən run edək. Bağışlayın, mütləq getmək heç bir uzaq 9 artıqdır. Yaddaş olun. Valgrind mənə təkrar edək böyük pəncərə. İndi baxın. Gözəl. Bütün yığın blokları azad edilmişdir. No sızması mümkündür. Və burada yuxarıda qeyd var Yanlış hüququ bir daha. Yalnız görməmiş almaq və alaq etmək görmək başqa bir nümayişə kimi nəzərdə getmək deyil - Mən bir an əvvəl xoşbəxt almaq idi. Və bu 0 olması bəlkə lazımsız yanlış. 50, bir qədər ixtiyari nə edək sayı, yaddaş dot çizgi yaddaş etmək - hələ uğurlu olsun. Heç şaqqıltılı oldu. Mən, həqiqətən, bir şey edə Güman ağılsız, mən 100 edin. , Mənə yaddaş yeniden yapmak edək dot çizgi yaddaş - daha şanslı var. Necə 1000 haqqında? kənarda ints, təxminən, harada olmalıdır? Yaddaş olun - Lanet olsun. [Gülüş] OK. Nin artıq ətrafında mess edək. Yaddaş təkrar. Orada biz gedin. Bütün hüquqlar. Belə ki, yəqin siz index 100,000 ints Siz olmalı yerləşir kənarda yaddaş, pis şeylər baş verir. Belə ki, bu açıq-aydın deyil ağır, sürətli qaydası. Mən mühakimə istifadə cür idi və səhv orada almaq üçün. Amma bu, çünki, uzun hekayə qısa kompüter yaddaş da bölünür bu şeylər daxil seqmentləri çağırıb. Və bəzən, kompüter həqiqətən bir az daha çox yaddaş verdi Sizin üçün xahiş edir. Amma səmərəliliyi üçün, bu yalnız daha asan var daha çox yaddaş almaq, yalnız sizə xəbər Siz onu bir hissəsini əldə edirik ki,. Və bəzən uğurlu almaq, Buna görə də, siz toxunmaq edə bilər yaddaş sizə aid deyil. Siz heç bir təminat yoxdur ki, nə dəyər siz orada qalacaq qoymaq çünki kompüter hələ də deyil düşünür sizin, amma mütləq davam deyil olan yaddaş bir seqment hit kompüter və bir səhv kimi vadar burada bu. Bütün hüquqlar. Sonra heç bir sual yaddaş haqqında? Bütün hüquqlar. At, sonra isə burada bir nəzər salaq biz alaraq olduğunuz bir şey çox bir müddət verilən, hansı cs50.h. adlanan bu faylı var Bu bir fayl. Bu yalnız bütün dəstə var top up şərh. Və bu halda baxdı ola bilər Siz cihaz ətrafında dürtülmək. Lakin bu ki, bütün vaxt, zaman çıxır biz kimi string istifadə üçün istifadə edərkən sinonimi, biz elan vasitələri ki, sinonimi bu idi növü müəyyən etmək üçün typedef söz. Və biz mahiyyətcə deyərək edirik etmək char ulduz üçün sinonimi Dize. Bu vasitə olan yığını olaraq bilinən bu təlim alüminium disklər yaradıldı simli. İndi burada yalnız bir prototip var getchar üçün. Biz əvvəl Göründüyü bilər, lakin var həqiqətən nə yoxdur. getchar , dəlilləri yox alır char qaytarır. getdouble, dəlilləri yox edir ikiqat qaytarır. getfloat dəlillər yoxdur, qaytarır edir bir float və s. getint burada edir. getlonglong burada edir. Və getstring burada edir. Və bu. Bu bənövşəyi xətt başqa preprocessor edir səbəbiylə direktiv onun başında hashtag. Bütün hüquqlar. Belə ki, indi mənə cs50.c. daxil bildirin Və biz bu barədə çox uzun danışmaq olmaz. Amma nə bir fikir vermək üçün bütün bu davam vaxt mənə gidelim - Gəlin getchar yoxdur. Belə ki, getchar əsasən şərh edir. Lakin bu kimi görünür. Belə ki, bu faktiki funksiyası biz olduğunuzu getchar verilən alaraq mövcuddur. Və biz bu bir istifadə yoxdur, baxmayaraq ki, tez-tez, əgər heç, ən azı ki, nisbətən sadə. Belə ki, bir alaraq dəyər burada göz atınız. Belə getchar, sonsuz loop var qəsdən belə yəqin. O çağırıb - və bu cür kodu gözəl təkrar özümüzü yazdı. Bu getstring çağırır. Nə Çünki bir char almaq deməkdir? Bəli, siz də almaq üçün cəhd edə bilərsiniz bütün istifadəçi mətn xətti sonra yalnız bir nəzər bu simvol. Line 60, burada bir az var bir ağlı başında olma çek bit. Getstring null döndü, əgər nin davam edək. Bir şey yanlış getdi. İndi bu qədər zəhlətökən, lakin yəqin ki, C. char max adi təmsil yalnız nə onun adı əsasında? Bu daimi var. Bu da sayısal değer kimi sizinlə təmsil edə bilər char böyük yəqin ki sayı olan bir bite, Ən böyük sayı olan 255, , səkkiz bit təmsil sıfırdan başlayaraq. Beləliklə, mən zaman, bu funksiya, bu istifadə etdik yalnız, çünki bu kodu yazı bir şey getchar yanlış gedir amma əgər həyatında onun məqsədi bir qayıtmaq üçün char, siz elə etmək lazımdır ki, istifadəçi üçün siqnal bir şey yanlış getdi. Biz null geri bilməz. Bu null bir göstərici olduğunu çıxır. Və yenə getchar var bir char qayıtmaq üçün. Belə ki, Konvensiyanın bir şey gedir əgər yanlış, siz proqramçı, və ya ki, Bu halda, mənə kitabxana ilə, mən idi ədalətli, əgər özbaşına qərar bir şey yanlış gedir, mən gedirəm həqiqətən olan nömrə 255, qayıtmaq biz Yuzerin tipi bilməz deməkdir tərəfindən təmsil karakter biz idi, çünki sayı 255 onu oğurlamaq bir qondarma sentinel dəyər kimi bir problem təmsil edir. İndi çıxır ki karakter 255 siz yazın şey deyil klaviatura, belə ki, heç bir böyük deyil. Istifadəçi hiss etmir Mən bu xarakter oğurlanmış etdik. Amma heç bir üzrə man pages görmək əgər bir kompüter sistemi bəzi arayış deyir ki, daim bu kimi bütün caps səhv daimi qüdrətinin hallarda qaytarılır etdi bütün bir insan var il əvvəl özbaşına qərar qəbul edilib Bu xüsusi dəyər və geri bu halda daimi zəng bir şey yanlış gedir. İndi sehrli burada aşağı olur. Birincisi, mən line 67 elan alıram iki simvol, C1 və C2. Və sonra line 68, həqiqətən var xatırladan ki, bir kod line bizim dostumuz printf verilmiş ki, quotes yüzdə Cs yoxdur. Amma burada neler bilərsiniz. sscanf string Scan vasitələri - biçimlendirilmiş scan deməkdir simli, bundan dolayı sscanf. Bu nə deməkdir? Bu simli sscanf keçir deməkdir. Və line nə edir daxil olan istifadəçi Siz format string kimi sscanf keçir nə scanf deyir ki, bu Siz istifadəçi kimi daxil tipli etmişdir ümid Daha sonra keçə-iki ünvanları Bu halda yaddaş chunks, Mən iki placeholders var. Beləliklə, mən bu ünvanı vermək gidiyorum C1 və C2 ünvanı. Və bir funksiyası vermək Xatırladaq ki Bəzi dəyişən ünvanı, var olan ima? Funksiyası nəticəsində nə edə bilər bu bir ünvan verilməsi dəyişən kimi fərqli dəyişən özü? Bu, doğru dəyişə bilərsiniz? Əgər kimsə bir fiziki xəritəsi olsaydı ünvanı, orada getmək və edə bilərsiniz onlar həmin ünvanda istədiyiniz hər hansı. Burada eyni fikri. Biz sscanf, iki ünvanına keçərlərsə hətta yaddaş chunks, bu kiçik yaddaş, C1 və C2 az chunks, lakin biz onların ünvanı demək sscanf dəyişə bilərsiniz. Həyatda sscanf məqsədi Beləliklə, biz oxumaq adam səhifə oxumaq üçün nə istifadəçi tipli, olan istifadəçi üçün ümid Bir xarakter ildə yazılmış və bəlkə başqa xarakter və hər hansı istifadəçi tipli, ilk karakter gedir burada, ikinci xarakter burada gedir. İndi bir kənara kimi, bu, siz ki, yalnız sənədlərin bu bilirik Mən orada boş qoymaq ki, yalnız mən qayğı yoxdur o deməkdir ki, əgər istifadəçi Space bar bir neçə edib o bir dəfə alır əvvəl xarakter, mən ignore gidiyorum hər hansı bir ağ sahəsi. Ki, Mən bilirəm sənədlərin. Ikinci% c var ki ağ boşluq sonra əslində qəsdən. Mən aşkar etmək istəyirsinizsə istifadəçi qədər berbat və ya əməkdaşlıq etməyib. Mən istifadəçi yalnız yazdığınız ümid edirem bir xarakteri, ona görə də mən ümid edirəm ki, sscanf yalnız qayıtmaq üçün gedir dəyəri 1 Mən oxumaq, yenə, çünki sənədlərin, sscanf məqsədi ilə həyat sayına qayıtmaq üçün dolu ki dəyişənlər istifadəçi girişi ilə. Mən iki dəyişənlərin keçdi ünvanları, C1 və C2. Hesab edirəm ki, baxmayaraq ki, ümid edirem yalnız bir onları həlak olur, çünki əgər sscanf yekunları 2, güman var məntiqi ima? Istifadəçi yalnız mənə bir vermədi xarakter kimi mən ona və ya onun. Onlar yəqin ki, at tipli ən azı iki simvol. Mən əvəzinə ikinci yox idi əgər % C, mən yalnız bir olan Açığını daha asan olacaq yanaşma, mən ilk baxışdan hesab edirəm ki, siz qəbul etmək fikrində deyilik istifadəçi sizə daha çox verilməsi edilibsə həqiqətən istəyirdim daha daxil etmə. Belə ki, bu gizli forması səhv yoxlanılması. Amma burada nə görürsünüz. Mən istifadəçi mənə bir verdi əminəm ki, xarakteri, mən bunu, xətti azad getstring qarşı, hansı öz növbəsində Mən geri sonra malloc istifadə edir və C1, mən ümid etdiyini karakter istifadəçi təmin və yalnız təmin. Belə ki, tez yalnız glimpsed, lakin getchar haqqında hər hansı bir sualınız? Biz digər bəzi qayıda bilərsiniz. Yaxşı, mənə davam və bunu edək - yalnız həvəsləndirmək, indi güman bizim bir həftə plus vaxt müzakirə, bu structs.h adlı bir fayl. Və yenə bu yalnız bir dad edir qarşıda yalan ki, bir şey. Amma bildiriş bir çox Bu şərh edir. Mənə vurğulamaq imkan yalnız İndi maraqlı hissəsidir. typedef - həmin söz daha var. typedef biz string bəyan istifadə xüsusi bir veri növü kimi. Siz yeni yaratmaq üçün typedef istifadə edə bilərsiniz zaman mövcud olmayan məlumat növləri C icad edilmişdir. Məsələn, int C. char ilə gəlir C. ikiqat C. ilə gəlir ilə gəlir Lakin bir şagirdin heç bir anlayışı yoxdur. Və hələ bu olduqca faydalı olardı saxlayan bir proqram yazmaq edə dəyişən bir tələbə ID sayı, onların adı və onların evi. Başqa sözlə, üç ədəd məlumatların bir int və istəyirəm simli və digər simli. Typedef ilə, nə olduqca güclü bu və söz sturct haqqında strukturu, siz 2013-ci ildə proqramçı, həqiqətən, sizin öz müəyyən edə bilərsiniz il mövcud deyil ki, məlumat növləri əvvəl ancaq ki, məqsədləri uyğun. Və belə ki, burada 19 vasitəsilə xətləri 13- biz kimi yeni bir veri növü elan edirik bir int, lakin bu tələbə çağırır. Və daxilində bu dəyişən gedir bir int, simli, - üç şey ola və simli. Beləliklə, siz həqiqətən nə hesab edə bilər Bu baxmayaraq, burada baş bir Bu gün üçün bir sadələşdirilməsi bit, Bir tələbə mahiyyətcə gedir bu kimi baxmaq. Onun bir yığın olacaq şəxsiyyət ilə yaddaş, adı sahəsində bir ev sahə. Və biz bu chunks istifadə edə bilərsiniz yaddaş və onlara daxil aşağıdakı. Mən struct0.c daxil varsa, burada bir nisbətən uzun, lakin sonra kodu modeli ki, Bu yeni oyun istifadə edir. Belə ki, ilk, mənə diqqəti cəlb edək top qədər maraqlı hissələri. Sharp tələbələr 3 müəyyən bəyan bir daimi adlı tələbə və verir yalnız özbaşına sayı 3 mən istifadə üç tələbələr var indi bu proqramı. Burada əsas gəlir. Və bildiriş, necə elan yoxdur tələbələrin bir sıra? Yaxşı, mən yalnız eyni sintaksis istifadə edin. Sözü tələbə aydın yeni. Amma tələbə, sinif, bracket tələbələr. Belə ki, təəssüf ki, çox var Burada şərtlər təkrar istifadəsi. Bu yalnız bir rəqəmdir. Beləliklə, bu üç deyən kimi. Sinif I istədiyiniz nə dəyişən zəng etmək üçün. Hesab edirəm ki, tələbələr zəng edə bilər. Ancaq sinif, bu bir sinif deyil obyekt yönümlü Java cür yol. Bu, sadəcə tələbə sinfi var. Və hər bir element data type ki, sıra tələbəsidir. Beləliklə, bu bir az fərqlidir və bir şey söyləyərək bu kimi, bu, yalnız var - Mən üç tələbələr vermək deyən alıram və array sinif çağırırıq. Bütün hüquqlar. İndi burada dörd loop var. Bu oğlan tanış - təkrarlamaq up on sıfırdan üç. Və burada sintaksis yeni parça var. Proqram, mənə təklif olacaq Bu tələbə vermək insan, Bir int olan ID. Burada siz hansı sintaksis var da ID sahəsində bir şey saxlamaq yeri sinif bracket I. Belə ki, Bu sintaksis yeni deyil. Bu, yalnız mənə səkkizinci vermək deməkdir sinif tələbəsi. Amma bu simvolu yeni. İndiyədək biz dot istifadə edə bilməz etdik Bu kimi ən azı ildə kodu. Bu o deməkdir kimi tanınan struct getmək Bir tələbə və orada bir şey qoymaq. Eynilə, bu sonrakı xətti, 31, getmək irəli və qoymaq nə istifadəçi Burada adı və nə onlar üçün nə ev, eyni şey, davam və . evinə qoydu. Beləliklə, bu proqram nə nəticədə nə? Siz bir az iltifat bilərsiniz. Mənə davam və structs 0 edirik edək dot çizgi struct 0 tələbə ID 1, David Mather, tələbə ID 2 deyirlər. Rob Kirkland, tələbə ID 3. Lauren Leverit - və bu proqram nə yalnız, ki, yalnız tamamilə əsassız edir Mən bu məlumat ilə bir şey etmək istədim Mən necə bizə öyrətdiklərindən sonra indi structs istifadə, yalnız olmuşdur Bu əlavə loop. Mən tələbə serialın üzərində təkrarlamaq. Mən, bəlkə də indi tanış dost, istifadə simli, stircomp müqayisə çek 8 tələbə ev Mather bərabər? Və əgər, yalnız bir şey çap özbaşına istəyirəm, bəli, edir. Ancaq yenə də, yalnız mənə imkanlar verilməsi və istifadə və yeniden Bu yeni dot notation Yeniden. Belə ki, kim haqlı, qayğıları? Bir tələbə proqramı ilə gəlir qədər özbaşına, lakin o çıxır biz faydalı şeyi edə bilər ki, Bu, misal üçün aşağıdakı. Bu daha mürəkkəbdir struct edir C. Bu, bir çox və ya daha çox sahələrdə var qədər cryptically adına. Amma heç bir qrafik eşitdim əgər bitmap adlı fayl formatı, BMP, bu çıxır ki, bitmap fayl biçimi olduqca çox ki, bu kimi görünür. Bu axmaq az smiley face var. Bu Mən zoomed etdik ki, kiçik bir şəkil var olduqca böyük mən hər görmək olar ki, fərdi nöqtələr və ya piksel. Biz təmsil edə bilər həyata İndi çevrilir sayı 0, demək, qara nöqtə. Sayı 1 və ağ nöqtə. Belə ki, başqa sözlə, əgər siz bir çəkmək Smiley face və bir resim saxlamaq kompüter, o adet sıfır saxlamaq və kifayətdir bu kimi baxmaq ki, olanlar, harada, yenə olanları ağ və adet sıfır qara. Birlikdə, siz səmərəli varsa olanları və rəqəmlərdə sıfırların gird bir, bir var piksel grid və siz lay əgər onları, bir cute var az smiley face. İndi bitmap fayl biçimi, BMP edir səmərəli ki, başlıq altında, lakin daha çox piksel sot ilə ki, siz həqiqətən rəng təmsil edə bilər. Amma daha təcrübəli zaman BMP və JPEG və GIF kimi fayl formatları olan siz, həmin tanış ola bilər disk faylları adətən yalnız adet sıfır və piksel üçün olanlar var, lakin onlar həmçinin bəzi metadata var - həqiqətən deyil o mənada ki, meta data ancaq onu əldə etmək faydalıdır. Belə ki, burada bu sahələr eyham edilir və biz P-set daha ətraflı görəcəksiniz 5 ki, adet sıfır və olanları əvvəl bir şəkil piksel təmsil metadata bir dəstə kimi var Bu şəkil ölçüsü və image eni. Və mən bəzi off Yolma alıram qeyd burada özbaşına şeylər - eni və hündürlüyü. Bit sayı və bəzi başqa şeylər. Belə ki, bir fayl bəzi metadata var. Amma faylları qoydu necə anlaşılması ilə Bu şəkildə, həqiqətən bilərsiniz sonra images manipulyasiya, şəkillər bərpa disk, şəkillər boyutlandır. Amma mütləq bilməz onlara artırır. Mən bir fotoşəkil lazımdır. Mən sizə görən, burada RJ geri döndü çox bir müddət əvvəl ekranda. Burada Əsas açmaq varsa, bu nə Yakınlaştırmak üçün cəhd olur və RJ artırır. O, həqiqətən hər hansı bir daha əldə deyil. İndi Keynote bir blurring növü az, yalnız üzərində Gloss RJ xüsusilə almaq deyil ki, fakt Daxil zoom, inkişaf etmiş Və bu yolu əgər, meydanlarda görmək? Bəli, siz mütləq bilərsiniz proyektor üzrə meydanlarda. Bu, inkişaf zaman almaq budur. Amma anlayışı necə RJ ya Smiley face həyata keçirilir bizə imkan verəcək həqiqətən manipulates kodu yazmaq Bu şeylər. Və Mən, mən bu qeyd-də başa istədiyiniz fikir Bir 55 saniyə, var artırmaq Mən deyil, yanlış deyirəm, cəsarət. [Video playback] O, yalançı. Nə haqqında, mən bilmirəm. -Yaxşı biz nə bilirik? -Yəni 9:15 Ray Santoya da ATM idi. -Belə ki, sual budur o 9:16-da məşğul olub? Atəş doqquz millimetr bir şey. Bəlkə o snayper gördüm. -Və ya onunla çalışır. -Dur. Bir geri. -Nə görürsünüz? , Tam ekran onun üz-gətirin. -Onun camlar. -Bir əks edir. -Bu Neuvitas beysbol komanda var. Onların logo var. Və o var kim söhbət oldu ki, jaket qalıcı. [END video playback] DAVID J. Malan: Bu, Problem Set 5 ola bilər. Biz gələn həftə görəcəksiniz. MALE spikeri növbəti CS50 edir. [Crickets cik-cik] [Musiqi ifa]