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