1 00:00:00,000 --> 00:00:03,381 >> [MÜZİK OYUN] 2 00:00:03,381 --> 00:00:10,626 3 00:00:10,626 --> 00:00:11,610 >> [VİDEO OYNATMA] 4 00:00:11,610 --> 00:00:13,640 >> -Yalan söylüyor. 5 00:00:13,640 --> 00:00:14,380 >> -Ne hakkında? 6 00:00:14,380 --> 00:00:17,182 >> -Bilmiyorum. 7 00:00:17,182 --> 00:00:19,990 >> Biz ne biliyoruz peki? 8 00:00:19,990 --> 00:00:23,145 >> 9:15, Ray -yani Santoya ATM oldu. 9 00:00:23,145 --> 00:00:23,644 -Evet. 10 00:00:23,644 --> 00:00:27,030 Yani soru, ne O 9:16 de yapıyordu? 11 00:00:27,030 --> 00:00:29,720 >> Bir şey de 9 milimetre -Shooting. 12 00:00:29,720 --> 00:00:31,540 Belki nişancıyı gördü. 13 00:00:31,540 --> 00:00:33,412 >> -Yoksa Onunla çalışıyordu. 14 00:00:33,412 --> 00:00:34,340 >> Bekle. 15 00:00:34,340 --> 00:00:36,200 Geri bir gidin. 16 00:00:36,200 --> 00:00:36,975 >> -Ne görüyorsun? 17 00:00:36,975 --> 00:00:44,400 18 00:00:44,400 --> 00:00:47,805 >> Tam ekran yukarı yüzünü getir. 19 00:00:47,805 --> 00:00:48,680 >> -His Gözlük. 20 00:00:48,680 --> 00:00:50,060 >> Bir yansıması -İşte bu. 21 00:00:50,060 --> 00:01:00,455 22 00:01:00,455 --> 00:01:02,280 >> -Bu Nuevitas beyzbol takımı. 23 00:01:02,280 --> 00:01:03,110 Bu onların logosu. 24 00:01:03,110 --> 00:01:05,820 >> -Ve Konuştuğu kim o ceketi giyiyor. 25 00:01:05,820 --> 00:01:06,670 >> [SON OYNATMA] 26 00:01:06,670 --> 00:01:07,628 >> DAVID MALAN: Pekala. 27 00:01:07,628 --> 00:01:11,210 Bu CS50 ve bu biraz daha ve [duyulamaz] hangi sen 28 00:01:11,210 --> 00:01:12,890 sorunu ile dabbling dört set. 29 00:01:12,890 --> 00:01:16,606 Bugün biraz daha bakmaya başlar derinden işaretçileri adı verilen bu şeylere, 30 00:01:16,606 --> 00:01:18,480 o olsa bile hangi Oldukça gizemli bir konu, 31 00:01:18,480 --> 00:01:20,813 o gidiyor çıkıyor aracı olarak hangi biz 32 00:01:20,813 --> 00:01:24,320 bina ve montaj başlayabilirsiniz daha karmaşık programlar. 33 00:01:24,320 --> 00:01:28,150 Ama biz geçen Çarşamba günü yaptım Önce bazı claymation yoluyla. 34 00:01:28,150 --> 00:01:30,190 Yani bu, hatırlama olduğunu Binky ve onu kullanılmış 35 00:01:30,190 --> 00:01:33,148 Bir program bakmak için o gerçekten bir şey ilginç yapmadım, 36 00:01:33,148 --> 00:01:34,950 ama birkaç problem ortaya yaptı. 37 00:01:34,950 --> 00:01:38,570 Peki neden değil yürümek, bugün başlayacak hızlı bir şekilde bu adımların bir kaç aracılığıyla, 38 00:01:38,570 --> 00:01:41,920 İnsanın açısından içine damıtmak deneyin tam olarak ne burada oluyor 39 00:01:41,920 --> 00:01:45,410 ve neden bu kötü, ve sonra hareket ve aslında bir şey oluşturmaya başlayabilirsiniz 40 00:01:45,410 --> 00:01:46,309 Bu teknikle? 41 00:01:46,309 --> 00:01:48,350 Peki bu ilk olduğunu Bu programda iki satır 42 00:01:48,350 --> 00:01:51,340 ve meslekten olmayan şartlarını, ne Bu iki satır yapıyorsun? 43 00:01:51,340 --> 00:01:55,600 Oldukça rahat biri Ne ekranda ilan ediyor ile? 44 00:01:55,600 --> 00:01:58,340 45 00:01:58,340 --> 00:02:00,120 Yapıyor bu iki satır nelerdir? 46 00:02:00,120 --> 00:02:02,070 Her olmadığını Haftanın tek farklı, 47 00:02:02,070 --> 00:02:03,611 ancak bazı yeni özel sembol var. 48 00:02:03,611 --> 00:02:04,152 Evet? 49 00:02:04,152 --> 00:02:05,628 Geri orada. 50 00:02:05,628 --> 00:02:07,092 >> HEDEF KİTLE: işaretçiler bildirmek? 51 00:02:07,092 --> 00:02:08,050 DAVID MALAN: Tekrar söyle? 52 00:02:08,050 --> 00:02:08,860 HEDEF KİTLE: işaretçiler bildirmek? 53 00:02:08,860 --> 00:02:11,776 DAVID MALAN: bildirmek işaretçileri ve en biraz daha rafine edelim. 54 00:02:11,776 --> 00:02:14,050 HEDEF KİTLE: [duyulamaz] adres, x ve y sonra. 55 00:02:14,050 --> 00:02:15,300 DAVID MALAN: Ve sonra adres. 56 00:02:15,300 --> 00:02:18,550 Yani özellikle biz ne yapıyoruz Biz iki değişken bildirmek edilir. 57 00:02:18,550 --> 00:02:21,252 Bu değişkenler, olsa da, gidiyoruz türü int yıldızın, olmak için hangi 58 00:02:21,252 --> 00:02:23,210 daha spesifik olarak ifade Onlar saklamak için gidiyoruz 59 00:02:23,210 --> 00:02:26,450 bir int adresi, sırasıyla x ve y. 60 00:02:26,450 --> 00:02:27,660 Şu anda herhangi bir değerler vardır? 61 00:02:27,660 --> 00:02:32,621 Bu herhangi bir fiili adresleri var mı zaman içinde bu noktada iki değişken? 62 00:02:32,621 --> 00:02:33,120 Hayır. 63 00:02:33,120 --> 00:02:35,030 Bu sadece çöp değerleri sözde var. 64 00:02:35,030 --> 00:02:38,120 Aslında bir atamazsanız RAM oldu ne olursa olsun, değişken, 65 00:02:38,120 --> 00:02:42,224 Daha önce sıfırlarla doldurmak için gidiyor ve olanlar bu değişkenlerin her ikisi de. 66 00:02:42,224 --> 00:02:44,140 Ama biz henüz bilmiyoruz ne olduklarını ve işte 67 00:02:44,140 --> 00:02:47,060 Neden Binky anahtarı olacak Geçen hafta başını kaybetti. 68 00:02:47,060 --> 00:02:49,980 >> Yani bu claymation oldu Bu enkarnasyonunun 69 00:02:49,980 --> 00:02:53,580 bu sayede sadece iki değişken vardır, kil küçük dairesel parçalar, 70 00:02:53,580 --> 00:02:57,330 Bu değişkenler depolamak, ama olabilir sarılmış oklar önermek 71 00:02:57,330 --> 00:03:00,640 aslında işaret değil herhangi bir yerde bilinen. 72 00:03:00,640 --> 00:03:03,670 Öyleyse biz bu çizgi vardı ve bu bellek oldu yeni geçen hafta, malloc 73 00:03:03,670 --> 00:03:07,130 sadece bir fantezi yoludur tahsisi, İşletim sistemini anlatan, Linux 74 00:03:07,130 --> 00:03:09,750 veya Mac OS veya Windows, Hey, bana bazı bellek ver 75 00:03:09,750 --> 00:03:11,780 ve sahip tüm anlatmak için İşletim sistemi 76 00:03:11,780 --> 00:03:14,699 bellek için bunu isterken budur. 77 00:03:14,699 --> 00:03:16,990 Bu ne bakım gitmiyor Eğer onunla yapmak için gidiyoruz 78 00:03:16,990 --> 00:03:19,786 ancak işletim söylememe gerek yok Ne malloc yoluyla sistem. 79 00:03:19,786 --> 00:03:20,286 Evet? 80 00:03:20,286 --> 00:03:21,078 >> HEDEF KİTLE: Ne kadar? 81 00:03:21,078 --> 00:03:21,994 DAVID MALAN: Ne kadar? 82 00:03:21,994 --> 00:03:25,280 Ne kadar bayt ve böylece, bu, yine zoraki bir örnek, sadece söylediğini 83 00:03:25,280 --> 00:03:27,360 Bana bir int boyutunu verir. 84 00:03:27,360 --> 00:03:30,550 Bir int Şimdi büyüklüğü Dört bayt veya 32 bit. 85 00:03:30,550 --> 00:03:32,850 Yani bu sadece bir yoludur diyerek, hey, işletim sistemi, 86 00:03:32,850 --> 00:03:37,290 Bana hafıza dört bayt vermek Benim emrinde kullanabileceğiniz, 87 00:03:37,290 --> 00:03:40,560 ve özellikle, ne yaptığını saygı ile malloc dönüş 88 00:03:40,560 --> 00:03:41,795 Dört bayt o yığın? 89 00:03:41,795 --> 00:03:44,110 90 00:03:44,110 --> 00:03:44,860 HEDEF KİTLE: Adres? 91 00:03:44,860 --> 00:03:45,901 DAVID MALAN: adresi. 92 00:03:45,901 --> 00:03:47,580 Dört bayt bu öbek adresi. 93 00:03:47,580 --> 00:03:48,190 Kesinlikle. 94 00:03:48,190 --> 00:03:51,430 Ve böylece sonuçta depolanan ne biz gerçekten yok neden x ve işte 95 00:03:51,430 --> 00:03:55,240 bakım şey bu sayısı o OX1 veya ox2 olsun adresi, 96 00:03:55,240 --> 00:03:57,110 ya da bazı şifreli onaltılık adresi. 97 00:03:57,110 --> 00:03:59,850 Biz sadece pictorially bakım O x değişkeni artık olduğunu 98 00:03:59,850 --> 00:04:01,630 belleğin o öbek işaret. 99 00:04:01,630 --> 00:04:05,570 Yani ok bir işaretçi temsil veya daha özel olarak, bir bellek adresi. 100 00:04:05,570 --> 00:04:09,120 Fakat yine de, biz genellikle umurumda değil Bu gerçek adresleri nelerdir. 101 00:04:09,120 --> 00:04:11,780 Şimdi, bu hat diyor Ne meslekten olmayan açısından? 102 00:04:11,780 --> 00:04:14,330 Yıldız x 42 noktalı virgül alır. 103 00:04:14,330 --> 00:04:17,390 Bu ne anlama gelir? 104 00:04:17,390 --> 00:04:18,200 Gitmek istiyorsun? 105 00:04:18,200 --> 00:04:20,102 Boynunu çizmeyin. 106 00:04:20,102 --> 00:04:22,360 >> İZLEYİCİ: x adresi 42 yer almaktadır. 107 00:04:22,360 --> 00:04:24,300 >> David MALAN: x adresi 42 yer almaktadır. 108 00:04:24,300 --> 00:04:25,190 Tam değil. 109 00:04:25,190 --> 00:04:28,485 Çok yakın, ama oldukça, var, çünkü Bu x önek var yıldızı. 110 00:04:28,485 --> 00:04:29,860 Yani biz biraz oynamak gerekiyor. 111 00:04:29,860 --> 00:04:31,032 Evet? 112 00:04:31,032 --> 00:04:36,044 >> HEDEF KİTLE: değer, işaretçi x 42 olduğunu işaret ediyor. 113 00:04:36,044 --> 00:04:36,710 DAVID MALAN: Tamam. 114 00:04:36,710 --> 00:04:40,840 Işaretçi x bu değer 42 olması, diyelim etmek zorundadır işaret ederek, 115 00:04:40,840 --> 00:04:44,165 ya da, yıldız başka bir deyişle x ne olursa olsun adrese gidin diyor 116 00:04:44,165 --> 00:04:48,340 bu 1 Oxford olsun, x ise Sokak ya da 33 Oxford Street 117 00:04:48,340 --> 00:04:51,850 ya OX1 ya OX33, ne olursa olsun sayısal adres olduğu 118 00:04:51,850 --> 00:04:54,380 Yıldız x x dereferencing olduğunu. 119 00:04:54,380 --> 00:04:57,297 Yani bu adrese gidin ve sonra oraya numarayı 42. koydu. 120 00:04:57,297 --> 00:04:59,380 Yani olacak bir söyleyerek eşdeğer yolu. 121 00:04:59,380 --> 00:05:01,860 Yani her şey yolunda ve sonra biz resmi temsil edeceğini 122 00:05:01,860 --> 00:05:05,370 aşağıdaki gibi biz ekledik nerede Dört bu öbekte 42 123 00:05:05,370 --> 00:05:09,370 Sağ taraftaki bayt ama işler ters gitti bu nerede çizgi 124 00:05:09,370 --> 00:05:11,120 ve Binky kafası attı Bu noktada kapalı, 125 00:05:11,120 --> 00:05:15,290 kötü şeyler olur, çünkü ne zaman Eğer çöp değerler inceleyebilirsiniz 126 00:05:15,290 --> 00:05:18,210 Geçersiz inceleyebilirsiniz sen ya işaretçiler ve geçersiz say 127 00:05:18,210 --> 00:05:21,020 çünkü bu noktada Hikaye, y içinde ne var? 128 00:05:21,020 --> 00:05:24,440 Temelli y değeri nedir Geçtiğimiz birkaç adım? 129 00:05:24,440 --> 00:05:25,360 Evet? 130 00:05:25,360 --> 00:05:26,115 Bu da ne? 131 00:05:26,115 --> 00:05:26,990 >> HEDEF KİTLE: bir adres. 132 00:05:26,990 --> 00:05:28,460 DAVID MALAN: bir adres. 133 00:05:28,460 --> 00:05:31,910 Bu bir adres olmalı ama ben başlatılmış var? 134 00:05:31,910 --> 00:05:32,800 Yani henüz yok. 135 00:05:32,800 --> 00:05:35,430 Yani orada olmak ne biliniyor? 136 00:05:35,430 --> 00:05:37,590 Sadece bazı çöp değerdir. 137 00:05:37,590 --> 00:05:41,500 O sıfırdan için herhangi bir adres olabilir 2 milyar RAM iki konser varsa, 138 00:05:41,500 --> 00:05:44,289 ya da sıfır 4 milyar Sizin yasiyorsaniz RAM dört gigabayt var. 139 00:05:44,289 --> 00:05:46,080 Bu, bazı çöp değer ama sorun 140 00:05:46,080 --> 00:05:48,200 işletim sistemi olduğu, Seni verilmediği takdirde 141 00:05:48,200 --> 00:05:51,140 bu bellek öbek özellikle Eğer gitmek için çalışıyoruz ki 142 00:05:51,140 --> 00:05:54,650 genellikle ne neden oluyor Biz parçalama arızası olarak gördüm. 143 00:05:54,650 --> 00:05:57,810 Yani aslında, size herhangi birine sahip olan ofis saatlerinde sorunlara mücadele 144 00:05:57,810 --> 00:06:00,393 veya sorunlar o daha var Genellikle anlamaya çalışıyorum ile 145 00:06:00,393 --> 00:06:02,150 Bir segmentasyon hatası, Bu genellikle gelir 146 00:06:02,150 --> 00:06:05,017 Eğer bir segment dokunuyorsun Eğer olmamalıdır bellek. 147 00:06:05,017 --> 00:06:07,350 Belleği dokunmadan konum İşletim sistemi değildir vardır 148 00:06:07,350 --> 00:06:10,450 o olsun, sen dokunmak için izin senin dizide çok giderek 149 00:06:10,450 --> 00:06:12,870 olsun veya olmasın, şimdi başlıyor Eğer dokunmadan çünkü bu kadar 150 00:06:12,870 --> 00:06:14,780 sadece bazı çöp değeri bellek. 151 00:06:14,780 --> 00:06:18,230 >> Yani burada yıldız x yapıyor tanımsız davranış tür. 152 00:06:18,230 --> 00:06:22,030 Bunu oran çünkü bunu asla , program sadece çökmesine gidiyor vardır, 153 00:06:22,030 --> 00:06:24,050 Söylediğiniz çünkü, Bu adrese gitmek 154 00:06:24,050 --> 00:06:27,000 ve hiç bir fikrim var nereye Bu adres aslında. 155 00:06:27,000 --> 00:06:30,300 Yani işletim sistemi muhtemeldir Programınızı çökmesine gidiyor 156 00:06:30,300 --> 00:06:33,840 bir sonucu olarak gerçekten, işte Ne Binky orada oldu. 157 00:06:33,840 --> 00:06:37,210 Bu yüzden, sonuçta, Binky sabit Bu bu sorun. 158 00:06:37,210 --> 00:06:38,909 Bu programın Yani kendisi hatalıydı. 159 00:06:38,909 --> 00:06:41,450 Ama tür adımlarla ilerlemek eğer ve bunun yerine bu satırı yürütmek, 160 00:06:41,450 --> 00:06:45,580 y sadece x eşittir ne demekse adresi bir x, y de koydum. 161 00:06:45,580 --> 00:06:48,740 >> Ve böylece resimsel, biz ettik İki oklarla bu temsil 162 00:06:48,740 --> 00:06:51,570 x ve y den işaret itibaren Aynı yerde. 163 00:06:51,570 --> 00:06:55,760 Yani semantik x eşittir y olanların hem çünkü 164 00:06:55,760 --> 00:07:00,300 Aynı depolamak adres, ergo, 42 işaret 165 00:07:00,300 --> 00:07:04,910 ve şimdi, ne zaman yıldız demek y, y adrese gitmek 166 00:07:04,910 --> 00:07:06,790 Bu ilginç bir yan etkisi yoktur. 167 00:07:06,790 --> 00:07:10,320 Yani y adresi x adrese aynı şey. 168 00:07:10,320 --> 00:07:15,060 Yani eğer sen adrese gitmek demek ve y 13 değerini değiştirin, 169 00:07:15,060 --> 00:07:17,140 başka kim etkileniyor? 170 00:07:17,140 --> 00:07:21,100 X, D noktası, yani, konuşmak için bir hem de etkilenmiş olmalıdır. 171 00:07:21,100 --> 00:07:24,340 >> Ve gerçekten, nasıl Nick bu resmi çizdim claymation tam olarak oldu. 172 00:07:24,340 --> 00:07:28,665 Biz işaretçi izleyin olsa y biz aynı yerde sona erdi 173 00:07:28,665 --> 00:07:32,780 ve bu yüzden yazdırmak için olsaydı x veya y en pointee üzerinden, 174 00:07:32,780 --> 00:07:35,720 o zaman 13 değerini görecekti. 175 00:07:35,720 --> 00:07:37,927 Şimdi, ben pointee olmak demek Video tutarlı. 176 00:07:37,927 --> 00:07:39,760 Programcılar için benim bilgi, asla gerçekte 177 00:07:39,760 --> 00:07:42,460 Kelime pointee demek, sivri olan bu 178 00:07:42,460 --> 00:07:44,650 en ama tutarlılık video ile gerçekleştirmek 179 00:07:44,650 --> 00:07:47,520 oldu hepsi bu durumda geliyordu. 180 00:07:47,520 --> 00:07:54,190 Claymation üzerinde Yani herhangi bir soru veya işaretçileri veya malloc henüz? 181 00:07:54,190 --> 00:07:54,850 Hayır mı? 182 00:07:54,850 --> 00:07:55,470 Pekala. 183 00:07:55,470 --> 00:07:58,560 >> Bu yüzden daha fazla olmadan ado, en bir göz atalım 184 00:07:58,560 --> 00:08:00,700 Bu aslında sahip olduğu at bir süre kullanılmıştır. 185 00:08:00,700 --> 00:08:03,580 Yani biz bu CS50 kütüphanesi yaşadım Bu bu fonksiyonların hepsi var. 186 00:08:03,580 --> 00:08:06,810 Biz, GETINT getString çok kullandım Muhtemelen daha önce GetLongLong 187 00:08:06,810 --> 00:08:09,840 Benim Pset bir ya da öylesine, ama aslında neler oluyor? 188 00:08:09,840 --> 00:08:12,920 Peki, hızlıca bir göz atalım Bir programda başlık altında olduğunu 189 00:08:12,920 --> 00:08:17,017 Size CS50 vermek neden ilham Kütüphane ve aslında geçen hafta olduğu gibi, 190 00:08:17,017 --> 00:08:18,850 Biz o almaya başladı Eğitim tekerlekleri kapalı. 191 00:08:18,850 --> 00:08:21,080 Yani bu şimdi sıralanır Bir postmortem ne 192 00:08:21,080 --> 00:08:23,690 vardır devam CS50 kütüphane içinde, 193 00:08:23,690 --> 00:08:27,250 Şimdi hareket başlayacak olsa da ondan programların çoğu için. 194 00:08:27,250 --> 00:08:29,460 >> Yani bu, 0 scanf denilen bir programdır. 195 00:08:29,460 --> 00:08:30,510 Bu süper kısa. 196 00:08:30,510 --> 00:08:33,909 Sadece bu satırları vardır, ama Bir işlevi çağrılır scanf tanıttı 197 00:08:33,909 --> 00:08:36,909 biz aslında görmek için gidiyoruz CS50 kütüphane içinde bir an, 198 00:08:36,909 --> 00:08:38,600 biraz farklı bir biçimde de olsa. 199 00:08:38,600 --> 00:08:41,330 Hat 16 Yani bu program değişken x ilan edilir. 200 00:08:41,330 --> 00:08:43,150 Bu yüzden bana bir int için dört bayt verir. 201 00:08:43,150 --> 00:08:45,750 Bu kullanıcıyı söyleyip duruyor sayı, lütfen ve sonra 202 00:08:45,750 --> 00:08:49,010 Bu ilginç bir çizgi olduğunu Aslında geçen hafta birbirine bağlayan 203 00:08:49,010 --> 00:08:49,790 ve bu. 204 00:08:49,790 --> 00:08:53,230 SCANF ve sonra bir alır fark biçim dizesi, sadece printf gibi, 205 00:08:53,230 --> 00:08:57,480 % i bir int anlamına gelir ve sonra bir sürer Biraz görünüyor İkinci argüman 206 00:08:57,480 --> 00:08:58,260 korkak. 207 00:08:58,260 --> 00:09:01,880 Bu işareti x, ve hatırlamak için, biz sadece bu kez geçen hafta gördüm. 208 00:09:01,880 --> 00:09:03,465 Işareti x neyi temsil ediyor? 209 00:09:03,465 --> 00:09:06,210 210 00:09:06,210 --> 00:09:08,450 Işareti C ne yapar? 211 00:09:08,450 --> 00:09:08,950 Evet? 212 00:09:08,950 --> 00:09:10,024 >> HEDEF KİTLE: adresi. 213 00:09:10,024 --> 00:09:11,190 DAVID MALAN: adresi. 214 00:09:11,190 --> 00:09:13,190 Yani tam tersi Yıldız operatörün, 215 00:09:13,190 --> 00:09:17,270 Yıldız operatörü diyor, oysa gitmek Bu adres, işareti operatörü 216 00:09:17,270 --> 00:09:20,280 anlamaya diyor Bu değişkenin adresi, 217 00:09:20,280 --> 00:09:23,530 ve böylece bu, çünkü anahtar Hayatta scanf amacı 218 00:09:23,530 --> 00:09:26,320 kullanıcının taramak için klavyeden girdi, 219 00:09:26,320 --> 00:09:29,970 ne bağlı o tipleri, ve sonra bu kullanıcı girişi okumak 220 00:09:29,970 --> 00:09:32,970 Bir değişkene, ama biz Son iki hafta içinde gördüm 221 00:09:32,970 --> 00:09:36,080 Bu takas fonksiyonu o biz uygulamaya zahmetsizce çalıştı 222 00:09:36,080 --> 00:09:37,110 Sadece kırıldı. 223 00:09:37,110 --> 00:09:42,470 Swap fonksiyonu ile hatırlayın, biz sadece ints olarak A ve B ilan eğer, 224 00:09:42,470 --> 00:09:47,040 başarıyla takas yaptım swap içinde iki değişken 225 00:09:47,040 --> 00:09:50,080 Sadece süt ve oj gibi, ancak takas, iade kısa sürede 226 00:09:50,080 --> 00:09:55,200 saygı ile sonuç ne oldu x ve y, özgün değerleri? 227 00:09:55,200 --> 00:09:55,700 Hiçbir şey. 228 00:09:55,700 --> 00:09:56,200 Evet. 229 00:09:56,200 --> 00:09:59,754 Hiçbir şey, çünkü o zaman oldu swap, sadece yerel kopyaları değiştirmek 230 00:09:59,754 --> 00:10:01,670 Tüm demek olan Bu sefer, ne zaman biz ettik 231 00:10:01,670 --> 00:10:04,010 argümanlar geçen edilmiş işlevleri nedeniyle, konum 232 00:10:04,010 --> 00:10:05,939 sadece bu argümanlar kopyalarını geçen. 233 00:10:05,939 --> 00:10:07,980 Bunu yapabilirsiniz Onlarla ne istersen, 234 00:10:07,980 --> 00:10:10,890 ama onlar hayır için gidiyoruz Orijinal değerler üzerinde etkisi. 235 00:10:10,890 --> 00:10:13,650 Yani bu eğer sorunlu scanf gibi bir işlevi var istiyorum 236 00:10:13,650 --> 00:10:17,170 Hayatta, amacı taramak için klavyeden kullanıcının giriş 237 00:10:17,170 --> 00:10:22,010 ve daha sonra bu yüzden, boşlukları doldurmak konuşmak olduğunu, x gibi bir değişken vermek 238 00:10:22,010 --> 00:10:25,410 Bir değer, ben olsaydım, çünkü Sadece scanf için x geçmek için, 239 00:10:25,410 --> 00:10:28,790 son mantığını düşünün hafta, scanf bunu istediğini yapabilir 240 00:10:28,790 --> 00:10:33,100 x bir kopyası, ama yapamadım Verdiğimiz takdirde kalıcı x değiştirmek 241 00:10:33,100 --> 00:10:37,120 , tabiri caizse, bir hazine haritası scanf x nokta işaretleri nerede, bu sayede 242 00:10:37,120 --> 00:10:41,860 Biz böylece x adresinde geçmek scanf orada aslında değişim gidebilirsiniz 243 00:10:41,860 --> 00:10:42,920 x değeri. 244 00:10:42,920 --> 00:10:45,080 Ve böylece aslında tüm bu program yapar 245 00:10:45,080 --> 00:10:53,180 Benim kaynağında scanf 0, yaparsanız 5m rehberi, scanf 0 yapmak, 246 00:10:53,180 --> 00:10:57,730 dot scanf yırtmaç, sayı 50 Lütfen, 50 için teşekkürler. 247 00:10:57,730 --> 00:11:01,020 >> Yani, tüm bu ilginç değil ama aslında ne oluyor 248 00:11:01,020 --> 00:11:04,820 en kısa sürede ben aramak gibi olduğunu burada, x değerini scanf 249 00:11:04,820 --> 00:11:06,410 kalıcı değiştirildi ediliyor. 250 00:11:06,410 --> 00:11:08,335 Şimdi, bu güzel görünüyor ve İyi, ve aslında, o 251 00:11:08,335 --> 00:11:11,200 biz gerçekten ihtiyacımız yok gibi görünüyor Tüm artık at CS50 kütüphanesi. 252 00:11:11,200 --> 00:11:13,960 Örneğin, en çalışmasına izin Burada bu kez daha. 253 00:11:13,960 --> 00:11:15,750 Bana bir saniye için yeniden edelim. 254 00:11:15,750 --> 00:11:20,600 En bir numara deneyelim lütfen yerine eskisi gibi 50 söyleyerek, 255 00:11:20,600 --> 00:11:22,810 Sadece hayır diyelim. 256 00:11:22,810 --> 00:11:24,000 Tamam, bu biraz garip. 257 00:11:24,000 --> 00:11:25,270 TAMAM. 258 00:11:25,270 --> 00:11:28,680 Burada ve sadece bazı saçma. 259 00:11:28,680 --> 00:11:31,170 Bu yüzden görünmüyor hatalı durumlarla başa. 260 00:11:31,170 --> 00:11:33,620 Bu yüzden başlangıç ​​minimal gerekiyor Bazı hata denetimi ekleme 261 00:11:33,620 --> 00:11:37,460 kullanıcının sahip olduğundan emin olmak için 50 gibi bir gerçek sayı yazdığınız, 262 00:11:37,460 --> 00:11:40,720 görünüşe yazarak kelimelerin çünkü sorunlu olarak algılanmaz, 263 00:11:40,720 --> 00:11:42,020 ama muhtemelen olmalıdır. 264 00:11:42,020 --> 00:11:46,450 >> Şimdi de bu bu sürümü bakalım benim girişimi getString reimplement için. 265 00:11:46,450 --> 00:11:48,437 Scanf bu varsa fonksiyonellik, yerleşik 266 00:11:48,437 --> 00:11:51,270 Neden bu uğraşmaya edilmiştir getString gibi eğitim jantlar? 267 00:11:51,270 --> 00:11:55,450 Peki, burada belki de benim kendimin getString basit versiyonu 268 00:11:55,450 --> 00:12:00,766 bu sayede bir hafta önce, dedim olabilir, Bana bir dize vermek ve tampon diyoruz. 269 00:12:00,766 --> 00:12:03,390 Bugün, sadece başlamak için gidiyorum , karakter yıldızı, geri çağırma söyleyerek 270 00:12:03,390 --> 00:12:04,400 sadece eşanlamlı olduğunu. 271 00:12:04,400 --> 00:12:06,629 Bu korkunç görünüyor ama var aynı şey. 272 00:12:06,629 --> 00:12:09,420 Bu yüzden bana bir değişken olarak adlandırılan tampon vermek bir dize depolamak için gidiyor, 273 00:12:09,420 --> 00:12:12,780 Kullanıcı dizesini lütfen söyle ve daha sonra, daha önce olduğu gibi, 274 00:12:12,780 --> 00:12:17,760 Şimdi bu dersi ödünç çalışalım scanf % s bu kez ve sonra tampon içinde geçmektedir. 275 00:12:17,760 --> 00:12:19,310 Şimdi hızlı bir aklı kontrol. 276 00:12:19,310 --> 00:12:22,120 Neden demiyorum işareti bu sefer tampon? 277 00:12:22,120 --> 00:12:25,190 278 00:12:25,190 --> 00:12:26,625 Önceki örnekte sonucuna. 279 00:12:26,625 --> 00:12:28,000 HEDEF KİTLE: Char yıldızı göstericisidir. 280 00:12:28,000 --> 00:12:29,920 DAVID MALAN: Kesinlikle, Bu sefer, Char çünkü 281 00:12:29,920 --> 00:12:34,080 Yıldız, zaten bir gösterici, bir adres Orada olmak o yıldızın tanımı gereği. 282 00:12:34,080 --> 00:12:37,530 Ve scanf bir adres bekliyorsa, sadece tamponda geçmesi yeterlidir. 283 00:12:37,530 --> 00:12:39,260 Ben işareti tampon söylemek gerekmez. 284 00:12:39,260 --> 00:12:42,177 Meraklı için, sen-ebil Böyle bir şey yapmak. 285 00:12:42,177 --> 00:12:43,510 Farklı bir anlamı olurdu. 286 00:12:43,510 --> 00:12:47,240 Bu size bir işaretçi verecek aslında bir işaretçi için 287 00:12:47,240 --> 00:12:50,050 C ancak için geçerli olan Şimdi, en basit tutalım 288 00:12:50,050 --> 00:12:51,750 ve tutarlı bir hikaye tutun. 289 00:12:51,750 --> 00:12:54,100 Ben sadece geçmek için gidiyorum tampon ve bu doğru. 290 00:12:54,100 --> 00:12:56,487 Sorun olsa budur. 291 00:12:56,487 --> 00:12:58,820 Beni go ahead ve bu çalıştıralım derlemeden sonra programı. 292 00:12:58,820 --> 00:13:00,902 Scanf 1 yapın. 293 00:13:00,902 --> 00:13:02,610 Lanet olsun, benim derleyici en benim hata yakalamak. 294 00:13:02,610 --> 00:13:04,090 Bana bir saniye izin ver. 295 00:13:04,090 --> 00:13:05,460 Clang. 296 00:13:05,460 --> 00:13:06,990 En scanf-1.c diyelim. 297 00:13:06,990 --> 00:13:10,880 298 00:13:10,880 --> 00:13:11,380 TAMAM. 299 00:13:11,380 --> 00:13:12,720 Oraya gidiyoruz. 300 00:13:12,720 --> 00:13:14,280 Ona ihtiyacım var. 301 00:13:14,280 --> 00:13:16,750 CS50 kimliği farklı olan yapılandırma ayarları 302 00:13:16,750 --> 00:13:18,280 kendinize karşı korumak. 303 00:13:18,280 --> 00:13:21,300 Ben ederek bu devre dışı bırakmak için gerekli El ile bu defa clang çalışıyor. 304 00:13:21,300 --> 00:13:22,140 Yani dize lütfen. 305 00:13:22,140 --> 00:13:25,560 Devam edin ve yazın gidiyorum Benim en sevdiğim merhaba dünya. 306 00:13:25,560 --> 00:13:26,490 Null, tamam. 307 00:13:26,490 --> 00:13:27,700 Ben yazdığınız değil. 308 00:13:27,700 --> 00:13:29,690 Yani göstergesidir bir şeyler yanlış olmak. 309 00:13:29,690 --> 00:13:33,920 Beni go ahead ve yazın bakalım Gerçekten uzun dize. 310 00:13:33,920 --> 00:13:37,210 Null Teşekkür ve ben bilmiyorum eğer bunu çökmesine edebilmek için gidiyorum. 311 00:13:37,210 --> 00:13:40,240 Hadi biraz kopyasını deneyelim yapıştırın ve bu yardımcı olmadığını görmek. 312 00:13:40,240 --> 00:13:43,290 Sadece bu bir sürü yapıştırın. 313 00:13:43,290 --> 00:13:47,310 Kesinlikle büyük bir var Her zamankinden daha dize. 314 00:13:47,310 --> 00:13:51,450 Sadece gerçekten yazalım. 315 00:13:51,450 --> 00:13:51,950 Hayır. 316 00:13:51,950 --> 00:13:52,650 Kahretsin. 317 00:13:52,650 --> 00:13:53,480 Komut bulunamadı. 318 00:13:53,480 --> 00:13:54,550 Yani hiçbir ilişkisi yoktur. 319 00:13:54,550 --> 00:13:56,440 Ben yapıştırılan Çünkü bu Bazı kötü karakterler, 320 00:13:56,440 --> 00:13:59,780 ancak bu çıkıyor işe gitmiyor. 321 00:13:59,780 --> 00:14:03,510 >> Çünkü en bu kez daha deneyelim biz aslında çökmesine eğer daha eğlenceli. 322 00:14:03,510 --> 00:14:09,116 Şimdi bu tip edelim ve şimdi, ben gerçekten uzun bir dize kopyalamak için gidiyor 323 00:14:09,116 --> 00:14:10,990 ve şimdi en olmadığını görelim biz Bu şeyi çökmesine sebep olabilir. 324 00:14:10,990 --> 00:14:14,235 Ben boşluk ihmal ve Uyarı Yeni hatlar ve noktalı virgül 325 00:14:14,235 --> 00:14:16,035 ve tüm funky karakter. 326 00:14:16,035 --> 00:14:16,535 Girin. 327 00:14:16,535 --> 00:14:21,090 328 00:14:21,090 --> 00:14:22,880 Ve şimdi ağ sadece yavaş davranıyor. 329 00:14:22,880 --> 00:14:27,460 Ben açıkça, çok uzun Command-V aşağı düzenledi. 330 00:14:27,460 --> 00:14:28,190 Kahretsin! 331 00:14:28,190 --> 00:14:29,260 Komut bulunamadı. 332 00:14:29,260 --> 00:14:29,780 >> TAMAM. 333 00:14:29,780 --> 00:14:32,240 Peki, nokta Yine de, aşağıdaki. 334 00:14:32,240 --> 00:14:36,910 Yani aslında neler olduğunu Bu deklarasyonla üzerinde 335 00:14:36,910 --> 00:14:39,240 hat 16 karakter yıldız tampon? 336 00:14:39,240 --> 00:14:41,820 Yani elde neyim Ben bir işaretçi bildirmek zaman? 337 00:14:41,820 --> 00:14:47,440 Ben alıyorum Bütün dört bayt değeri Tampon olarak adlandırılan, ancak bunun içinde ne 338 00:14:47,440 --> 00:14:49,540 o anda? 339 00:14:49,540 --> 00:14:50,930 Sadece bazı çöp değerdir. 340 00:14:50,930 --> 00:14:54,170 Herhangi bir zamanda Çünkü bir değişken bildirmek C, sadece bazı çöp değer, 341 00:14:54,170 --> 00:14:56,220 ve biz başlıyoruz Bu gerçeğin üzerinde yolculuk. 342 00:14:56,220 --> 00:14:59,720 Şimdi, ben scanf söyleyince, Bu adrese gitmek 343 00:14:59,720 --> 00:15:01,520 ve ne olursa olsun kullanıcı türleri koydu. 344 00:15:01,520 --> 00:15:06,400 Kullanıcı türleri varsa merhaba Dünya, iyi, bunu nereye koyacağım? 345 00:15:06,400 --> 00:15:07,750 Tampon bir çöp değeridir. 346 00:15:07,750 --> 00:15:11,510 >> Böylece bir ok gibi bir şey Bu nerede kim bilir işaret ediyor. 347 00:15:11,510 --> 00:15:13,880 Belki de işaret ediyor Burada benim bellek. 348 00:15:13,880 --> 00:15:16,560 Ve böylece, kullanıcı merhaba dünya tipleri, 349 00:15:16,560 --> 00:15:22,380 Program koymak için çalışır Dize merhaba dünya ters eğik çizgi 0 350 00:15:22,380 --> 00:15:23,910 bu bellek öbekte. 351 00:15:23,910 --> 00:15:27,070 Ama yüksek olasılıkla ancak açıkça değil,% 100 olasılık, 352 00:15:27,070 --> 00:15:30,440 Daha sonra bilgisayar çökmesine gidiyor Program bu değil çünkü 353 00:15:30,440 --> 00:15:32,490 Hafıza Ben dokunmak için izin verilmelidir. 354 00:15:32,490 --> 00:15:36,330 Yani kısacası, bu program tam olarak bu nedenden dolayı kusurlu. 355 00:15:36,330 --> 00:15:38,070 Ben temelde neyi yapmıyorum? 356 00:15:38,070 --> 00:15:42,366 Hangi adımları gibi, ihmal var Biz Binky ilk örnek ihmal? 357 00:15:42,366 --> 00:15:42,866 Evet? 358 00:15:42,866 --> 00:15:43,710 >> HEDEF KİTLE: Bellek ayırma? 359 00:15:43,710 --> 00:15:45,001 >> DAVID MALAN: Bellek ayırma. 360 00:15:45,001 --> 00:15:48,400 Aslında tahsis değil Bu dize için herhangi bir bellek. 361 00:15:48,400 --> 00:15:50,270 Bu yüzden şekillerde bir çift bu çözebilirsiniz. 362 00:15:50,270 --> 00:15:52,700 Bir, biz basit tutabilirsiniz ve aslında, şimdi sen 363 00:15:52,700 --> 00:15:55,116 Bir bulanıklık görmeye başlayacağız Neyin arasındaki çizgilerin 364 00:15:55,116 --> 00:15:58,520 bir dizi, bir dize nedir, ne değildir Char yıldız karakter ne bir dizidir 365 00:15:58,520 --> 00:15:59,020 olduğunu. 366 00:15:59,020 --> 00:16:02,450 İşte ikinci örnek dizeleri ve bildirim içeren 367 00:16:02,450 --> 00:16:05,690 Tüm on line yaptık 16 yerine söyleyerek, bir 368 00:16:05,690 --> 00:16:09,530 Bu tampon bir karakter olacak Yıldız, belleğin bir yığın bir işaretçi, 369 00:16:09,530 --> 00:16:14,057 Ben çok proaktif vereceğim 16 karakter kendimi bir tampon, 370 00:16:14,057 --> 00:16:16,390 ve aslında, bilginiz varsa süreli tamponlama ile 371 00:16:16,390 --> 00:16:20,570 Muhtemelen videoları dünyasından, Bir video tamponlama tamponlama olduğu, 372 00:16:20,570 --> 00:16:21,175 tamponlama. 373 00:16:21,175 --> 00:16:22,550 Peki, bağlantı burada ne var? 374 00:16:22,550 --> 00:16:24,960 YouTube Eh, İç ve video oynatıcılar içinde 375 00:16:24,960 --> 00:16:27,200 genellikle bir dizidir Bu 16 daha büyük. 376 00:16:27,200 --> 00:16:30,340 Bu boyutta bir tane bir dizi olabilir megabayt, belki 10 megabayt, 377 00:16:30,340 --> 00:16:34,330 ve bu diziye tarayıcınızı yok bayt bir sürü indir 378 00:16:34,330 --> 00:16:37,500 megabayt bir sürü video ve video oynatıcı, 379 00:16:37,500 --> 00:16:40,930 YouTube ya da kim var, başlar Bu diziden bayt okuma, 380 00:16:40,930 --> 00:16:43,530 ve her zaman gördüğünüz Kelime tamponlama, tamponlama, 381 00:16:43,530 --> 00:16:46,350 o oyuncu var demektir Bu dizinin sonuna kazanılmış. 382 00:16:46,350 --> 00:16:50,430 Ağ değil sahip olduğu çok yavaş Daha fazla bayt ile dizi doldurulmuş 383 00:16:50,430 --> 00:16:55,610 ve böylece bit bitti kullanıcıya gösterilecek. 384 00:16:55,610 --> 00:16:59,430 >> Yani tampon bir apt terim ki burada bu sadece bir dizi, bellek yığın var. 385 00:16:59,430 --> 00:17:02,530 Ve bu bunu çözecektir çıkıyor çünkü 386 00:17:02,530 --> 00:17:07,410 Eğer diziler tedavi olabilir sanki onlar bile tampon olsa, adresler 387 00:17:07,410 --> 00:17:10,710 sadece bir sembol, bir olmasıdır karakter dizisi, tampon 388 00:17:10,710 --> 00:17:14,760 bu benim için yararlıdır, programcı, etrafında adını iletebilirsiniz 389 00:17:14,760 --> 00:17:17,079 o sanki bir gösterici olarak onun olsa 390 00:17:17,079 --> 00:17:21,000 bir yığın adresi vardı 16 karakter hafıza. 391 00:17:21,000 --> 00:17:24,530 Demek bu yüzden ben geçebilir tam scanf o kelime 392 00:17:24,530 --> 00:17:30,670 ve şimdi, ben bu programı yaparsanız, scanf 2 yapmak, nokta çizgi scanf 2, 393 00:17:30,670 --> 00:17:35,386 ve yazın merhaba dünya, Bu zamanımı girin 394 00:17:35,386 --> 00:17:37,590 >> Hmm, ne oldu? 395 00:17:37,590 --> 00:17:39,340 Dize lütfen. 396 00:17:39,340 --> 00:17:41,430 Neyi yanlış yaptım? 397 00:17:41,430 --> 00:17:43,800 Merhaba dünya tampon. 398 00:17:43,800 --> 00:17:44,705 Merhaba Dünya. 399 00:17:44,705 --> 00:17:48,201 400 00:17:48,201 --> 00:17:49,420 Ah, o ne yaptığını biliyorum. 401 00:17:49,420 --> 00:17:49,920 TAMAM. 402 00:17:49,920 --> 00:17:51,628 Yani o kadar okuyor İlk uzay kadar. 403 00:17:51,628 --> 00:17:55,680 Yani sadece bir an için hile izin ve Ben sadece bir şey yazın istedim demek 404 00:17:55,680 --> 00:18:01,408 Gerçekten bu kadar uzun uzun cümle gibi de bu bir, iki, üç, dört, beş, 405 00:18:01,408 --> 00:18:04,420 altı, yedi, sekiz, dokuz, 10, 11, 12, 13, 14, 15, 16. 406 00:18:04,420 --> 00:18:05,300 TAMAM. 407 00:18:05,300 --> 00:18:07,600 Gerçekten uzun bir cümledir. 408 00:18:07,600 --> 00:18:10,710 Yani bu cümle uzun 16 karakter 409 00:18:10,710 --> 00:18:13,670 ve bu yüzden, Enter vurduğunuzda ne olacak? 410 00:18:13,670 --> 00:18:16,940 Eh, bu durumda Hikaye, ben ilan etmişti tampon 411 00:18:16,940 --> 00:18:22,190 aslında bir dizi olmanın gitmek için 16 karakter hazır olan. 412 00:18:22,190 --> 00:18:27,426 Bu yüzden, bir, iki, üç, dört, beş, altı, yedi, sekiz, dokuz, 10, 11, 12, 13, 14, 413 00:18:27,426 --> 00:18:29,440 15, 16. 414 00:18:29,440 --> 00:18:34,410 Yani 16 karakter ve şimdi, ne zaman Bu bir uzun gibi bir şey okumak 415 00:18:34,410 --> 00:18:43,950 cümle ne ne olduğunu gidiyor Ben bu okuyacağım bir uzun 416 00:18:43,950 --> 00:18:49,660 S-E-K-T-E-N = C-E, cümle. 417 00:18:49,660 --> 00:18:52,270 >> Yani bu kasıtlı olduğunu kötü bir şey olduğunu ben 418 00:18:52,270 --> 00:18:55,060 ötesinde yazmaya devam Benim dizinin sınırları, 419 00:18:55,060 --> 00:18:56,660 Benim tampon sınırları ötesinde. 420 00:18:56,660 --> 00:19:00,100 Şanslı ve programın alabilir bakım çalışan tutmak ve olmayacak 421 00:19:00,100 --> 00:19:03,450 ancak genellikle, bu konuşma Gerçekten benim program kilitlenmesine, 422 00:19:03,450 --> 00:19:06,440 ve bir hata olduğunu benim Ben adım anı kod 423 00:19:06,440 --> 00:19:08,576 sınırları ötesinde Bu dizinin, çünkü ben 424 00:19:08,576 --> 00:19:10,450 bu kadar bilmiyorum mutlaka çökmesine gidiyor 425 00:19:10,450 --> 00:19:12,120 ya da ben sadece şanslı alacağım eğer. 426 00:19:12,120 --> 00:19:15,750 Yani bu sorunlu çünkü Bu durumda, işe görünmektedir 427 00:19:15,750 --> 00:19:20,931 ve en olsa bile, burada kader özendirmek izin IDE biraz tahammül gibi görünüyor 428 00:19:20,931 --> 00:19:21,430 of-- 429 00:19:21,430 --> 00:19:22,040 >> Oraya gidiyoruz. 430 00:19:22,040 --> 00:19:23,240 Sonunda. 431 00:19:23,240 --> 00:19:26,470 Yani bu görebiliyorum tek kişi benim. 432 00:19:26,470 --> 00:19:29,630 Yani sadece eğlenceli yazarak bir sürü vardı gerçekten uzun bir fiili ifade dışında 433 00:19:29,630 --> 00:19:32,800 kesinlikle aştı 16 byte, çünkü ben 434 00:19:32,800 --> 00:19:38,050 Bu deli uzun multi-line yazdığınız ifade ve sonra ne oldu fark. 435 00:19:38,050 --> 00:19:41,110 Program yazdırmadan çalıştı ve daha sonra bir segment hataya var 436 00:19:41,110 --> 00:19:44,430 ve segmentasyon hataları olduğunda ise Böyle bir şey olur 437 00:19:44,430 --> 00:19:47,650 ve işletim sistemi diyor hayır, bu bellek dokunamaz. 438 00:19:47,650 --> 00:19:49,570 Biz öldüreceğiz tamamen bir program. 439 00:19:49,570 --> 00:19:51,180 >> Yani bu sorunlu görünüyor. 440 00:19:51,180 --> 00:19:54,540 Ben programı sayede geliştirdik En azından, bazı bellek var 441 00:19:54,540 --> 00:19:58,000 ancak bu sınırlandırmak gibi görünüyor almak için fonksiyon GetString 442 00:19:58,000 --> 00:20:00,780 Bazı sonlu uzunluktaki 16 dizeleri. 443 00:20:00,780 --> 00:20:04,200 Daha uzun desteklemek istiyorsanız Yani 16 karakterden daha cümleler, 444 00:20:04,200 --> 00:20:04,880 ne yaparsınız? 445 00:20:04,880 --> 00:20:07,970 Peki, sen artırabilir 32, bu tampon boyutu 446 00:20:07,970 --> 00:20:09,190 veya bu tür kısa görünüyor. 447 00:20:09,190 --> 00:20:12,260 Neden biz sadece yapmazlar o 1000 ama geri itin. 448 00:20:12,260 --> 00:20:17,100 Sezgisel tepkisi nedir Sadece yaparak bu sorunu önleme 449 00:20:17,100 --> 00:20:20,660 1000 karakter gibi, büyük benim tampon? 450 00:20:20,660 --> 00:20:23,470 Bu şekilde getString uygulayarak. 451 00:20:23,470 --> 00:20:27,130 Burada iyi ya da kötü? 452 00:20:27,130 --> 00:20:28,033 Evet? 453 00:20:28,033 --> 00:20:30,574 HEDEF KİTLE: Eğer çok fazla bağlarsanız alan ve bunu kullanmak değil, 454 00:20:30,574 --> 00:20:33,500 o zaman bu alanı tahsis edemiyor. 455 00:20:33,500 --> 00:20:34,500 DAVID MALAN: Kesinlikle. 456 00:20:34,500 --> 00:20:38,480 Bunu yapmazsanız sürece sanki savurgan var aslında bu bayt 900 ihtiyaç 457 00:20:38,480 --> 00:20:41,057 ve henüz sizin için soruyorsun Zaten toplam 1000, 458 00:20:41,057 --> 00:20:44,140 Sadece daha fazla bellek tüketen ediyoruz Gerekirse daha kullanıcının bilgisayarında, 459 00:20:44,140 --> 00:20:45,740 ve hepsi sonra bazı Zaten Karşılaştığınız 460 00:20:45,740 --> 00:20:47,620 hayatta sen o zaman programların çok çalışan 461 00:20:47,620 --> 00:20:50,470 ve onlar, büyük miktarda bellek kadar yiyorsanız Bu aslında performansı etkileyebilir 462 00:20:50,470 --> 00:20:52,220 ve kullanıcının deneyimi bilgisayarda. 463 00:20:52,220 --> 00:20:56,090 Yani bu tür bir tembel çözüm, emin ve tersine, 464 00:20:56,090 --> 00:21:00,140 değil sadece savurgan olduğunu, sorunun ne Hala benim tampon yapmak bile kalır 465 00:21:00,140 --> 00:21:02,100 1000? 466 00:21:02,100 --> 00:21:02,600 Evet? 467 00:21:02,600 --> 00:21:04,475 >> HEDEF KİTLE: dize uzunluğu 1.001 olduğunu. 468 00:21:04,475 --> 00:21:05,350 DAVID MALAN: Kesinlikle. 469 00:21:05,350 --> 00:21:08,280 Senin dize uzunluğu 1001 ise, Eğer aynı sorun var, 470 00:21:08,280 --> 00:21:10,705 ve benim argümanı ile, yapardım Sadece o zaman 2000 yapmak, 471 00:21:10,705 --> 00:21:12,830 ama sen bilmiyorsun olması gerektiği kadar büyük ilerlemek, 472 00:21:12,830 --> 00:21:16,890 ve henüz, benim programı derlemek zorunda insanların kullanımı icar önce ve indirme 473 00:21:16,890 --> 00:21:17,390 o. 474 00:21:17,390 --> 00:21:21,490 Yani bu tam olarak tür şeyler CS50 kütüphane çalışır olduğunu 475 00:21:21,490 --> 00:21:24,750 bize yardımcı ve biz sadece bakışta olacak etmek altında yatan uygulama bazı 476 00:21:24,750 --> 00:21:29,790 Burada, ancak bu CS50 nokta C Bu CS50 IDE oldu dosyadır 477 00:21:29,790 --> 00:21:31,420 Eğer kullanmakta olduğunuz bütün bu hafta. 478 00:21:31,420 --> 00:21:34,280 Önceden derlenmiş ve sen ettik otomatik olarak kullanıyorum 479 00:21:34,280 --> 00:21:38,780 olan doğası gereği clang L CS50 bayrağı dash, 480 00:21:38,780 --> 00:21:42,300 ama hepsi aşağı kaydırma eğer Bu işlevler, burada getString var, 481 00:21:42,300 --> 00:21:44,636 ve sadece sana vermek için Neyin tadı oluyor 482 00:21:44,636 --> 00:21:46,760 en kısaca bir göz atalım göreceli karmaşıklık. 483 00:21:46,760 --> 00:21:48,870 Bu bir süper uzun var fonksiyonu, ama biz yoktu 484 00:21:48,870 --> 00:21:52,530 Tüm sabit düşünmek zorunda nasıl dizeleri alma hakkında gitmek için. 485 00:21:52,530 --> 00:21:55,660 >> Yani burada benim tampon ve ben var görünüşte null başlatılamadı. 486 00:21:55,660 --> 00:21:57,990 Bu, tabii ki, Char yıldızı olarak aynı şey, 487 00:21:57,990 --> 00:22:00,585 ama ben karar verdim CS50 kitaplığı uygulama 488 00:22:00,585 --> 00:22:02,460 Biz gidiyoruz eğer tamamen dinamik 489 00:22:02,460 --> 00:22:05,770 Ben ne kadar büyük önceden bilmiyorum Dize kullanıcıları almak istiyorum gidiyoruz. 490 00:22:05,770 --> 00:22:08,140 Yani başlamak için gidiyorum Sadece boş bir dize ile 491 00:22:08,140 --> 00:22:11,507 ve ben çok kurmak için gidiyorum Bellek I kullanıcı dizesi sığdırmak gerekiyor gibi 492 00:22:11,507 --> 00:22:13,340 ve ben yoksa Yeterince ben soracağım 493 00:22:13,340 --> 00:22:15,010 Daha fazla bellek için işletim sistemi. 494 00:22:15,010 --> 00:22:17,510 Ben onların dize taşımak için gidiyorum bellek, daha büyük bir yığın haline 495 00:22:17,510 --> 00:22:21,847 ve ben serbest veya serbest gidiyorum bellek yetersiz büyük bir yığın 496 00:22:21,847 --> 00:22:23,680 ve biz sadece gidiyoruz iteratif bunu yapmak için. 497 00:22:23,680 --> 00:22:25,570 >> Yani hızlı bir bakışta, Burada sadece bir değişken 498 00:22:25,570 --> 00:22:28,780 hangi ile ben takip edeceğim Benim tampon kapasitesi. 499 00:22:28,780 --> 00:22:30,071 Kaç bayt sığabilir? 500 00:22:30,071 --> 00:22:32,070 İşte değişken n var Ben tutmak için gidiyorum hangi 501 00:22:32,070 --> 00:22:36,200 Aslında kaç byte iz Kullanıcı yazdığınız ya da o tampon. 502 00:22:36,200 --> 00:22:39,900 Eğer daha önce bu görmedim varsa, sizi belirtebilirsiniz bir int gibi bir değişken 503 00:22:39,900 --> 00:22:46,370 , adından da anlaşılacağı gibi, hangi imzasız demek o negatif olmayan, ve niye 504 00:22:46,370 --> 00:22:50,590 Şimdiye kadar belirterek rahatsız istiyorum bir int sadece bir int olmadığı, 505 00:22:50,590 --> 00:22:52,540 ancak bir unsigned int değil mi? 506 00:22:52,540 --> 00:22:55,064 Bu negatif olmayan bir int var. 507 00:22:55,064 --> 00:22:56,355 [Duyulamaz] ne anlama gelir? 508 00:22:56,355 --> 00:22:58,910 >> HEDEF KİTLE: Bir miktar tanımladığı bellek [inaudible] olabilir. 509 00:22:58,910 --> 00:22:59,660 >> DAVID MALAN: Evet. 510 00:22:59,660 --> 00:23:03,710 Ben imzasız demek, yani bu aslında size ekstra bellek bir bit veren 511 00:23:03,710 --> 00:23:07,440 eğer ve aptalca tür gibi görünüyor, ama , ek bellek bir bit var 512 00:23:07,440 --> 00:23:09,940 Birçok iki kat var demektir Temsil değerler, 513 00:23:09,940 --> 00:23:11,570 bir 0 ya da 1 olabilir, çünkü. 514 00:23:11,570 --> 00:23:14,660 Yani, varsayılan olarak, bir int kabaca olabilir Negatif 2 milyar tüm yol 515 00:23:14,660 --> 00:23:16,030 Pozitif 2 milyar kadar. 516 00:23:16,030 --> 00:23:18,540 Bunlar büyük aralıkları, ama hala biraz savurgan var 517 00:23:18,540 --> 00:23:21,280 Sadece umurumda eğer boyutları, hangi sadece sezgisel 518 00:23:21,280 --> 00:23:24,620 Negatif olmayan olmalı veya olumlu ya da 0, iyi o zaman, 519 00:23:24,620 --> 00:23:28,884 Neden 2 milyar harcıyorsun Negatif sayılar için olası değerler 520 00:23:28,884 --> 00:23:30,300 asla bunları kullanmak için gidiyoruz eğer? 521 00:23:30,300 --> 00:23:35,350 Yani can imzasız, şimdi benim int söyleyerek 4 milyar 0 ile kabaca olacak. 522 00:23:35,350 --> 00:23:39,280 >> Yani burada nedenlerden dolayı sadece bir int C bulunuyor Biz sadece şimdi içine almazsınız 523 00:23:39,280 --> 00:23:42,280 yerine bir int var neden Bir char, ama burada 524 00:23:42,280 --> 00:23:44,630 Neler özü Senin ve bazı 525 00:23:44,630 --> 00:23:48,340 Örneğin, kullanıyor olabilir, Hatta Pset dört fgetc işlevi 526 00:23:48,340 --> 00:23:51,580 veya bundan sonra, biz onu göreceğiz Yine problem beş set 527 00:23:51,580 --> 00:23:55,410 fgetc nedeniyle adı olarak güzel tür, çeşit arcanely anlaşılacağı 528 00:23:55,410 --> 00:23:57,940 bir işlev olduğunu Bir karakter alır ve böylece 529 00:23:57,940 --> 00:24:00,690 Ne temelde farklı Biz getString ne yaptığınızı hakkında 530 00:24:00,690 --> 00:24:03,110 Kullandığımız değiliz olduğunu Aynı şekilde scanf. 531 00:24:03,110 --> 00:24:07,550 Biz sadece adım-adım boyunca sürünen ne olursa olsun üzerinde kullanıcı yazdığınız etti, 532 00:24:07,550 --> 00:24:10,970 biz her zaman bir tane tahsis çünkü Char, ve böylece biz her zaman güvenli olabilir 533 00:24:10,970 --> 00:24:15,599 Bir seferde bir Char bakmak ve Sihir burada gerçekleşmesi başlar. 534 00:24:15,599 --> 00:24:17,890 Ben aşağı kaydırmak için gidiyorum Bu fonksiyonun, orta 535 00:24:17,890 --> 00:24:20,360 Sadece kısaca bu işlevi tanıtmak. 536 00:24:20,360 --> 00:24:22,670 Çok bir var gibi malloc işlevi, var 537 00:24:22,670 --> 00:24:27,740 Bir realloc fonksiyonu burada realloc Eğer bellek yığın yeniden tahsis sağlar 538 00:24:27,740 --> 00:24:29,570 ve daha büyük veya daha küçük yapmak. 539 00:24:29,570 --> 00:24:33,060 Çok uzun lafın kısası ile Bugün için elimi bir dalga, 540 00:24:33,060 --> 00:24:35,620 Bu ne biliyor getString yapıyor bu çeşit olduğunu 541 00:24:35,620 --> 00:24:39,720 bir sihirli büyüyen ya da kullanıcı olarak tampon küçülen 542 00:24:39,720 --> 00:24:41,440 onun dize türleri. 543 00:24:41,440 --> 00:24:43,962 >> Yani eğer kullanıcı türleri kısa bir dize, bu kod 544 00:24:43,962 --> 00:24:45,920 Sadece yeterli ayırır Bellek dize sığdırmak için. 545 00:24:45,920 --> 00:24:48,086 Kullanıcı yazarak tutarsa Ben tekrar ve tekrar yaptığımız gibi 546 00:24:48,086 --> 00:24:50,330 ve yine de, eğer Tampon adlı başlangıçta bu büyük 547 00:24:50,330 --> 00:24:53,310 ve programı, anlar Bir dakika bekleyin, ben boş alan kulüpler, 548 00:24:53,310 --> 00:24:55,410 o iki katına gidiyor tampon boyutu 549 00:24:55,410 --> 00:24:59,110 ve daha sonra tamponu boyutunu iki katına ve iki katına yapan kod, 550 00:24:59,110 --> 00:25:03,170 Burada ona bakarsanız, bu kadar Sadece bu akıllı one-liner. 551 00:25:03,170 --> 00:25:06,830 Bu sözdizimi görmüş olabilir daha önce, ancak yıldız eşittir derseniz, 552 00:25:06,830 --> 00:25:10,470 Bu aynı şey gibidir kapasite kez 2 söyleyerek. 553 00:25:10,470 --> 00:25:13,390 Yani bu sadece katlama tutar tampon kapasitesi 554 00:25:13,390 --> 00:25:17,480 ve sonra realloc söylüyorum vermek kendisi çok daha fazla bellek. 555 00:25:17,480 --> 00:25:19,720 >> Şimdi, bir kenara, orada Burada diğer fonksiyonlar 556 00:25:19,720 --> 00:25:23,680 Biz herhangi bir ayrıntı içine bakmak olmaz GETINT göstermek için başka, 557 00:25:23,680 --> 00:25:26,150 Biz GETINT bölgesindeki getString kullanın. 558 00:25:26,150 --> 00:25:28,192 Biz olmadığını kontrol null, hangi, geri çağırma, 559 00:25:28,192 --> 00:25:30,400 özel bir değerdir bir şeyler ters gitti demektir. 560 00:25:30,400 --> 00:25:31,233 Biz bellek bitti. 561 00:25:31,233 --> 00:25:32,310 Daha bunun için kontrol edin. 562 00:25:32,310 --> 00:25:33,710 Ve biz nöbetçi değerini döndürür. 563 00:25:33,710 --> 00:25:37,850 Ama olarak yorumlarına erteleme edeceğiz Neden sonra biz scanf bu kuzeni kullanın 564 00:25:37,850 --> 00:25:42,100 sscanf denilen ve çıkıyor Bu sscanf, veya dize scanf, 565 00:25:42,100 --> 00:25:45,310 Çizginin bir göz atın sağlar o Kullanıcı yazdığınız ve size izin verdi 566 00:25:45,310 --> 00:25:49,610 esasen analiz ve ben neyi Burada ne ben sscanf söylüyorum olduğunu, 567 00:25:49,610 --> 00:25:54,440 kullanıcının sahip olursa olsun analiz yazdığınız ve emin% i yapmak, 568 00:25:54,440 --> 00:25:59,250 Orada buna arasında bir tam sayı, ve olmaz orada da tam olarak neden bugün içine almak 569 00:25:59,250 --> 00:26:03,760 Özetle bir% burada c, ama bu izin verir Kullanıcı yazdığınız varsa bize algılamak 570 00:26:03,760 --> 00:26:06,050 sayıdan sonra sahte bir şey. 571 00:26:06,050 --> 00:26:11,766 Yani Bunun nedeni GETINT ve GetString yeniden, yeniden denemek için size, yeniden 572 00:26:11,766 --> 00:26:13,640 çünkü tüm olduğu biz yazdık o kod, 573 00:26:13,640 --> 00:26:17,900 bu tür kullanıcının giriş bakıyor emin olarak tamamen sayısal bulunuyor 574 00:26:17,900 --> 00:26:21,700 ya da gerçek bir kayan var nokta değeri veya benzeri 575 00:26:21,700 --> 00:26:24,233 Ne değerine bağlı olarak Kullandığınız çalışır. 576 00:26:24,233 --> 00:26:25,060 >> Yaşasın. 577 00:26:25,060 --> 00:26:25,710 TAMAM. 578 00:26:25,710 --> 00:26:27,592 Bu bir lokma oldu ama mesele burada 579 00:26:27,592 --> 00:26:29,550 biz vardı nedeni Bu eğitim tekerlekler üzerinde 580 00:26:29,550 --> 00:26:32,880 Çünkü en düşük seviyede olduğunu Sadece çok şey olduğunu 581 00:26:32,880 --> 00:26:35,674 Biz istedik yanlış gidebilir preemptively işlemek 582 00:26:35,674 --> 00:26:38,090 kesinlikle böyle şeyler sınıfının ilk hafta 583 00:26:38,090 --> 00:26:42,230 ama şimdi Pset dört ve beş ve Pset ötesinde bunu şöyle fazlası var olduğunu göreceksiniz 584 00:26:42,230 --> 00:26:45,570 Eğer aynı zamanda daha yetenekli olduğunu sorunları bu tür çözme 585 00:26:45,570 --> 00:26:47,180 Kendinizi. 586 00:26:47,180 --> 00:26:51,770 GetString veya GETINT üzerinde herhangi bir sorunuz var mı? 587 00:26:51,770 --> 00:26:52,630 Evet? 588 00:26:52,630 --> 00:26:55,130 >> HEDEF KİTLE: Neden iki katına çıkacak tampon kapasitesi 589 00:26:55,130 --> 00:26:57,630 yerine sadece artan daha bunun tam miktarda? 590 00:26:57,630 --> 00:26:58,100 >> DAVID MALAN: İyi bir soru. 591 00:26:58,100 --> 00:27:00,474 Neden kapasitesi iki katına çıkacak tampon aksine 592 00:27:00,474 --> 00:27:02,800 Sadece artan Bazı sabit değeri ile? 593 00:27:02,800 --> 00:27:03,900 Bu bir tasarım karardı. 594 00:27:03,900 --> 00:27:08,590 Biz sadece eğilimi nedeniyle karar verdi Zaman bilge biraz pahalı sormak için bir olmak 595 00:27:08,590 --> 00:27:10,440 İşletim sistemi bellek, we did not 596 00:27:10,440 --> 00:27:13,210 biniyorlar kadar bitirmek istiyorum Büyük dizeleri için bir durum 597 00:27:13,210 --> 00:27:14,960 biz soran ki tekrar ve tekrar işletim sistemi 598 00:27:14,960 --> 00:27:17,500 ve tekrar ve tekrar bellek için hızlı arkaya. 599 00:27:17,500 --> 00:27:20,387 Yani biz sadece biraz, karar keyfi ama biz makul umut, 600 00:27:20,387 --> 00:27:22,720 , sen, haydi biliyorum öncesinde kendimizi elde etmeye çalışmak 601 00:27:22,720 --> 00:27:25,520 ve sadece bu yüzden iki katına tutmak biz kez miktarını en aza indirmek 602 00:27:25,520 --> 00:27:29,010 Biz malloc aramak zorunda veya realloc, ancak toplam yargı 603 00:27:29,010 --> 00:27:31,820 bilerek yokluğunda çağrı Ne Kullanıcıların yazın isteyebilirsiniz. 604 00:27:31,820 --> 00:27:33,600 Her iki yol tartışılabilir olabilir. 605 00:27:33,600 --> 00:27:35,430 Tartışmasız iyi. 606 00:27:35,430 --> 00:27:39,240 >> Yani bir çift de bir göz atalım bellek başka yan etkilerin, 607 00:27:39,240 --> 00:27:41,610 ters gidebilir şeyler ve araçlar yapabilirsiniz 608 00:27:41,610 --> 00:27:43,880 hatalar bu tür yakalamak için kullanın. 609 00:27:43,880 --> 00:27:47,800 O halde hepiniz çıkıyor check50 size kadar söylemedi 610 00:27:47,800 --> 00:27:50,050 buggy yazıyorum edilmiştir Haftanın tek beri kod 611 00:27:50,050 --> 00:27:53,630 hatta tüm check50 testler ise geçti ve hatta eğer sizin ve TF 612 00:27:53,630 --> 00:27:56,010 süper eminiz amaçlanan gibi kod çalışır. 613 00:27:56,010 --> 00:27:59,190 Kodunuzu adamcağız olmuştur veya sizin bütün kusurlu, 614 00:27:59,190 --> 00:28:02,540 CS50 kütüphanesi kullanarak, bellek sızıntısı oylandı. 615 00:28:02,540 --> 00:28:06,040 Sen işletim sistemini soran oldum programlarının çoğunda bellek 616 00:28:06,040 --> 00:28:08,850 Eğer yazdım, ama sen ettik aslında iade asla. 617 00:28:08,850 --> 00:28:12,110 Sen GetString aradım ve GETINT ve GetFloat, 618 00:28:12,110 --> 00:28:15,270 ama getString, sen ettik unGetString veya Give aramadı 619 00:28:15,270 --> 00:28:19,890 Dize Arka veya benzeri ama biz gördük GetString bellek ayrılamadı yaptığı 620 00:28:19,890 --> 00:28:22,810 malloc yoluyla veya bu tarafından Sadece bir fonksiyon realloc, 621 00:28:22,810 --> 00:28:25,670 ruhu çok benzer, ve henüz biz oldum 622 00:28:25,670 --> 00:28:28,629 işletim sistemini soran hafıza ve bellek tekrar tekrar 623 00:28:28,629 --> 00:28:29,670 ama geri vermeyi asla. 624 00:28:29,670 --> 00:28:33,550 >> Şimdi, bir kenara olarak, o çıkıyor Bir program, belleğin tüm çıkar, 625 00:28:33,550 --> 00:28:34,870 otomatik olarak serbest. 626 00:28:34,870 --> 00:28:36,150 Bu yüzden büyük bir anlaşma olmadı. 627 00:28:36,150 --> 00:28:38,590 Bu kırmak için gitmiyor IDE veya yavaş aşağı şeyler, 628 00:28:38,590 --> 00:28:40,670 ama ne zaman programlar yapmak genellikle bellek sızdırıyor 629 00:28:40,670 --> 00:28:42,170 ve uzun bir süre için koşuyoruz. 630 00:28:42,170 --> 00:28:45,640 Hiç aptal gördüm Eğer Mac OS veya kum plaj topu 631 00:28:45,640 --> 00:28:51,160 Windows bu tür nerede yavaşlatan veya düşünce ya da düşünce 632 00:28:51,160 --> 00:28:53,770 ya da sadece gerçekten başlar Bir tarama yavaş, 633 00:28:53,770 --> 00:28:56,960 Çok büyük olasılıkla olabilir Bir bellek sızıntısı sonucu. 634 00:28:56,960 --> 00:28:59,970 Yazdı programcılar Kullandığınız yazılım 635 00:28:59,970 --> 00:29:03,570 bellek işletim sistemi isteyin her birkaç dakikada, her saat. 636 00:29:03,570 --> 00:29:05,570 Ama çalıştırıyorsanız o olsa bile yazılım, 637 00:29:05,570 --> 00:29:08,680 Bilgisayarınızda minimize saatlerce veya günlerce, 638 00:29:08,680 --> 00:29:11,980 Eğer daha soran olabilir Bellek ve asla aslında bunu kullanarak 639 00:29:11,980 --> 00:29:15,180 ve böylece kod olabilir veya olabilir programları, bellek sızıntısı olabilir 640 00:29:15,180 --> 00:29:18,350 ve bellek sızdırıyor başlarsanız, diğer programlar için daha az bellek var, 641 00:29:18,350 --> 00:29:21,220 ve etkisi olan Her şeyi yavaşlatmak. 642 00:29:21,220 --> 00:29:23,600 >> Şimdi, bu kadar biri tarafından En iğrenç programlar 643 00:29:23,600 --> 00:29:26,350 Eğer fırsat olacaktır CS50 çalıştırmak için sürece 644 00:29:26,350 --> 00:29:31,650 onun çıkış bile daha ezoterik olarak clang ya da 's yapmak veya komut herhangi 645 00:29:31,650 --> 00:29:35,930 Daha önce koşuyoruz satırı programları ama Neyse ki, onun çıkış gömülü 646 00:29:35,930 --> 00:29:39,810 Bazı süper yararlı ipuçları olduğunu yararlı ya Pset dört olacak 647 00:29:39,810 --> 00:29:41,510 ya kesinlikle beş Pset. 648 00:29:41,510 --> 00:29:44,250 Yani valgrind bir araçtır Bu bakmak için kullanılabilir 649 00:29:44,250 --> 00:29:46,930 Programda, bellek sızıntıları için. 650 00:29:46,930 --> 00:29:48,570 Bu çalıştırmak nispeten basit. 651 00:29:48,570 --> 00:29:51,420 Hatta, valgrind ve ardından koşmak Biraz ayrıntılı olsa, 652 00:29:51,420 --> 00:29:54,440 dash dash kaçak kontrolü Tam eşittir, ve sonra nokta 653 00:29:54,440 --> 00:29:56,320 çizgi ve programın adıdır. 654 00:29:56,320 --> 00:30:00,010 Yani valgrind sonra programı çalıştırmak olacak ve programın en sonunda 655 00:30:00,010 --> 00:30:02,240 bu beraberliği önce çalışan ve size başka istemi verir 656 00:30:02,240 --> 00:30:04,980 o analiz gidiyor senin Program yürütüyor esnada 657 00:30:04,980 --> 00:30:07,740 ve sen kaçak söylemedi daha henüz bellek ve 658 00:30:07,740 --> 00:30:10,610 Belleği dokunma ki sana ait değil mi? 659 00:30:10,610 --> 00:30:13,700 Her şeyi yakalamak değil, ama bu birçok şey yakalamak oldukça iyi. 660 00:30:13,700 --> 00:30:19,700 >> Yani burada benim sahip vadede bir örnek Bu program çalıştırmak valgrind sahip 661 00:30:19,700 --> 00:30:21,470 adı verilen bir program Bellek ve ben gidiyorum 662 00:30:21,470 --> 00:30:24,730 olan satırları vurgulamak için sonuçta bize ilgi. 663 00:30:24,730 --> 00:30:27,690 Yani daha fazla dikkat dağıtıcı var Ben slayt silinir ettik. 664 00:30:27,690 --> 00:30:30,930 Ama sadece ne bu görelim Program anlattıklarını yeteneğine sahiptir. 665 00:30:30,930 --> 00:30:34,800 Bu bize bir şeyler anlatmaya yetenekli büyüklüğü 4 geçersiz yazma gibi. 666 00:30:34,800 --> 00:30:38,020 Başka bir deyişle, bellek dokunursanız, bellek, özellikle 4 bayt 667 00:30:38,020 --> 00:30:40,350 Eğer olmamalıdır, valgrind sana bunu söyleyebilirim. 668 00:30:40,350 --> 00:30:41,660 Büyüklüğü 4 Geçersiz yazma. 669 00:30:41,660 --> 00:30:43,640 Sen dört bayt dokundu Eğer olmamalıdır. 670 00:30:43,640 --> 00:30:44,840 Nerede yaptın bunu? 671 00:30:44,840 --> 00:30:45,900 Bu güzelliktir. 672 00:30:45,900 --> 00:30:50,000 Bellek nokta c line 21 nereye olduğunu berbat ve yararlı olur bu yüzden. 673 00:30:50,000 --> 00:30:53,410 Çok GDB gibi, yardımcı olabilir Gerçek hataya işaret. 674 00:30:53,410 --> 00:30:57,170 >> Şimdi, bu biraz daha var ayrıntılı, karmaşık değilse. 675 00:30:57,170 --> 00:31:01,307 1 blokta 40 bayt kesinlikle kayıp kaydının 1 1 kaybetti. 676 00:31:01,307 --> 00:31:02,140 Bu ne anlama gelir? 677 00:31:02,140 --> 00:31:05,920 Peki, bu sadece sizin için sorduk demektir 40 byte ve bunu geri vermedim. 678 00:31:05,920 --> 00:31:08,930 Sen malloc denilen ya da denilen GetString ve işletim sistemi 679 00:31:08,930 --> 00:31:12,450 Seni 40 byte, ancak sizi asla verdi serbest veya bellek serbest, 680 00:31:12,450 --> 00:31:15,400 ve adil olmak, biz göstermek hiç nasıl bellek geri vermek. 681 00:31:15,400 --> 00:31:17,910 Süper var Çıkıyor basit bir işlev ücretsiz çağırdı. 682 00:31:17,910 --> 00:31:21,170 Bir argüman, bir şey alır Eğer, ücretsiz ya da geri vermek istiyorum 683 00:31:21,170 --> 00:31:23,430 ancak 40 byte, görünüşe göre, Bu programda 684 00:31:23,430 --> 00:31:27,300 satırında kaybolmuş Bellek 20 c nokta. 685 00:31:27,300 --> 00:31:28,650 >> Yani bu programı görelim. 686 00:31:28,650 --> 00:31:31,020 Bu süper yararsız. 687 00:31:31,020 --> 00:31:33,980 Sadece gösteriyor Bu belirli bir hata. 688 00:31:33,980 --> 00:31:34,920 Yani bir göz atalım. 689 00:31:34,920 --> 00:31:39,920 Burada ana ve ana, haber, aramalar Bir f fonksiyonu ve daha sonra döner çağırdı. 690 00:31:39,920 --> 00:31:41,550 Yani tüm bu ilginç değil. 691 00:31:41,550 --> 00:31:42,664 F ne yapar? 692 00:31:42,664 --> 00:31:44,330 Ben bir prototip ile uğraşmadı dikkat edin. 693 00:31:44,330 --> 00:31:46,520 Ben kodu tutmak istedim mümkün olduğu kadar az. 694 00:31:46,520 --> 00:31:49,530 Yani ana yukarıda f koymak ve Bu kesinlikle iyi, 695 00:31:49,530 --> 00:31:51,500 Böyle kısa programlar için. 696 00:31:51,500 --> 00:31:56,910 Yani f şeyi dönmek ve does değil değil bir şey almak, ama bunu yapmak yok. 697 00:31:56,910 --> 00:31:59,620 Bu çok gibi, beyan Binky örnekte 698 00:31:59,620 --> 00:32:02,682 Bu x adında bir işaretçi gidiyor bir int adresini saklamak için. 699 00:32:02,682 --> 00:32:03,890 Böylece sol taraf var. 700 00:32:03,890 --> 00:32:07,230 İngilizce, nedir yapıyor sağ taraf? 701 00:32:07,230 --> 00:32:09,770 Herkes? 702 00:32:09,770 --> 00:32:13,665 Bu bizim için ne yapıyor? 703 00:32:13,665 --> 00:32:14,651 Evet? 704 00:32:14,651 --> 00:32:16,623 >> HEDEF KİTLE: [duyulamaz] Zaman bir int boyutu 705 00:32:16,623 --> 00:32:19,175 olan 10 kat [duyulamaz] 706 00:32:19,175 --> 00:32:20,800 DAVID MALAN: İyi ve bana özetleyelim. 707 00:32:20,800 --> 00:32:25,480 Yani 10 tamsayılar için yeterli alan tahsis veya 10, bir int boyutu, ne 708 00:32:25,480 --> 00:32:29,340 bu 4 dört bayt, yani 10 kere bulunuyor 40, ben ettik o sağ tarafında, böylece 709 00:32:29,340 --> 00:32:33,930 Vurgulanan bana 40 bayt vermek ve İlk byte adresini saklamak 710 00:32:33,930 --> 00:32:34,940 x içine. 711 00:32:34,940 --> 00:32:38,380 Ve şimdi son olarak, burada nerede Bu program, buggy, ne olduğunu 712 00:32:38,380 --> 00:32:41,540 hat 21 yanlış olduğunu mantığa dayalı? 713 00:32:41,540 --> 00:32:45,197 714 00:32:45,197 --> 00:32:46,280 Ne hat 21 nesi var? 715 00:32:46,280 --> 00:32:46,780 Evet? 716 00:32:46,780 --> 00:32:49,550 HEDEF KİTLE: Yapamazsınız [duyulamaz] x içine dizin. 717 00:32:49,550 --> 00:32:50,300 DAVID MALAN: Evet. 718 00:32:50,300 --> 00:32:52,270 Ben böyle x içine dizin olmamalıdır. 719 00:32:52,270 --> 00:32:53,850 Yani sözdizimsel, sorun değil. 720 00:32:53,850 --> 00:32:56,990 Ne güzel senin gibi çok olduğu Bir dizinin adını tedavi edebilir 721 00:32:56,990 --> 00:33:01,080 sanki benzer bir işaretçi var bu kadar sanki bir işaretçi davranabilirsiniz 722 00:33:01,080 --> 00:33:06,425 bir dizi ve bu yüzden sözdizimsel can x braket şeyler söylemek x braket i, 723 00:33:06,425 --> 00:33:07,800 ama 10 problemlidir. 724 00:33:07,800 --> 00:33:09,096 Neden? 725 00:33:09,096 --> 00:33:10,910 >> HEDEF KİTLE: Bu içeride değil çünkü. 726 00:33:10,910 --> 00:33:12,390 >> DAVID MALAN: Öyle değil bu bellek yığın içinde. 727 00:33:12,390 --> 00:33:15,306 En büyük değeri ne olmalıdır var Bu köşeli parantez içinde koyarak? 728 00:33:15,306 --> 00:33:16,870 9 arasındaki 9, 0. 729 00:33:16,870 --> 00:33:18,160 Sıfır indeksleme çünkü. 730 00:33:18,160 --> 00:33:20,190 Yani 0 ile 9 arasında iyi olurdu. 731 00:33:20,190 --> 00:33:23,960 Parantez 10 iyi değil ve ancak, her zaman olsa da hatırlamak 732 00:33:23,960 --> 00:33:27,017 Ben CS50 IDE yapmaya görünüyor sahte değerler yazarak kazasında, 733 00:33:27,017 --> 00:33:29,100 her zaman, işbirliği yok ve gerçekten de, sık sık 734 00:33:29,100 --> 00:33:31,460 şanslı sırf İşletim sistemi yok 735 00:33:31,460 --> 00:33:35,467 dikkat edin hiç bu kadar biraz belleğin bazı öbek geçmesi, 736 00:33:35,467 --> 00:33:38,300 Eğer teknik olarak içinde kaldı çünkü senin bölüm, ama daha bu konuda 737 00:33:38,300 --> 00:33:40,940 Bir işletim sistemleri sınıfında, Böyle bir şey ve bu yüzden 738 00:33:40,940 --> 00:33:43,000 çok kolay algılanmayan gidebiliriz. 739 00:33:43,000 --> 00:33:48,120 Programınız asla çökmesine gidiyor sürekli ama belki bir süre içinde. 740 00:33:48,120 --> 00:33:50,610 >> Ve o yüzden valgrind deneyelim Bunun üzerine, ve burada 741 00:33:50,610 --> 00:33:52,870 nerede bunalmış alırsınız anlık çıkışı. 742 00:33:52,870 --> 00:34:00,810 Yani bellek valgrind sızıntısı kontrolü yapmak Tam nokta çizgi belleği eşittir. 743 00:34:00,810 --> 00:34:03,040 Söz veriyorum yüzden burada Bu mahçup olur. 744 00:34:03,040 --> 00:34:05,700 İşte valgrind, burada ne var ne Bir programcı, birkaç yıl önce- 745 00:34:05,700 --> 00:34:08,469 iyi bir fikir olacağını karar verdi gibi çıktı bakmak için. 746 00:34:08,469 --> 00:34:09,750 Yani bu anlamda yapalım. 747 00:34:09,750 --> 00:34:13,120 Sol-el Yani tüm yol sebepsiz tarafı 748 00:34:13,120 --> 00:34:16,620 Programın süreç kimliğidir Biz sadece, benzersiz bir tanımlayıcı çalıştırmak 749 00:34:16,620 --> 00:34:18,030 Program için biz sadece koştu. 750 00:34:18,030 --> 00:34:19,738 Biz o silindi slayt, ama orada 751 00:34:19,738 --> 00:34:22,190 Burada bazı yararlı bilgiler. 752 00:34:22,190 --> 00:34:24,684 >> En çok üst yukarı edelim. 753 00:34:24,684 --> 00:34:25,600 Biz başladı burada. 754 00:34:25,600 --> 00:34:27,040 Yani tüm bu çok çıktı değil. 755 00:34:27,040 --> 00:34:30,429 İşte bu geçersiz yazma bulunuyor hat 21 büyüklüğü 4. 756 00:34:30,429 --> 00:34:31,760 Peki, line 21 neydi? 757 00:34:31,760 --> 00:34:34,500 Satır 21 tam olarak Bu ve mantıklı 758 00:34:34,500 --> 00:34:37,290 Ben validly içinde olduğumu Ben çünkü 4 bayt yazma 759 00:34:37,290 --> 00:34:40,389 Bu tamsayı koymak için çalışırken, hangi bir şey olabilir 760 00:34:40,389 --> 00:34:42,370 Sadece olur sıfır, ama ben çalışıyorum 761 00:34:42,370 --> 00:34:44,940 bir yerde koymak için Bu bana ait değil. 762 00:34:44,940 --> 00:34:50,900 Tek üstelik, buraya, 40 byte bloklar kesinlikle kayıt 1 kaybolur. 763 00:34:50,900 --> 00:34:56,500 Ben malloc çağırdığınızda çünkü var Burada, ben aslında belleği serbest asla. 764 00:34:56,500 --> 00:34:58,140 >> Peki bu düzeltebilirim? 765 00:34:58,140 --> 00:35:02,970 Bana devam edelim ve biraz daha güvenli ve orada 9 yapın ve burada serbest x beni. 766 00:35:02,970 --> 00:35:04,820 Bu bugün için yeni bir işlevdir. 767 00:35:04,820 --> 00:35:11,520 Ben şimdi hafıza nokta çizgi yapmak yeniden varsa, , yine buna valgrind çalışmasına izin 768 00:35:11,520 --> 00:35:14,990 Benim pencere maksimize etmek ve Enter tuşuna basın. 769 00:35:14,990 --> 00:35:16,900 Şimdi, bu iyi. 770 00:35:16,900 --> 00:35:19,590 Onlar iyi bir haber gömmek Bu çıkış tüm. 771 00:35:19,590 --> 00:35:20,810 Tüm yığın blokları özgürdü. 772 00:35:20,810 --> 00:35:23,604 Biz neyi yığın geri geleceğiz ancak herhangi bir sızıntı mümkündür. 773 00:35:23,604 --> 00:35:25,520 Yani bu sadece başka bir senin alet kiti için aracı 774 00:35:25,520 --> 00:35:30,220 hangi ile başlayabilirsiniz Şimdi böyle hataları bulmak. 775 00:35:30,220 --> 00:35:34,532 >> Ama bakalım neler daha Burada yanlış gidebilir. 776 00:35:34,532 --> 00:35:38,890 Şimdi geçişi edelim aslında bir sorun çözme. 777 00:35:38,890 --> 00:35:42,440 Bir kenara, bu bir rahatlatmak eğer konfüzyon veya gerginlik biraz, 778 00:35:42,440 --> 00:35:43,430 Bu artık komik. 779 00:35:43,430 --> 00:35:46,400 780 00:35:46,400 --> 00:35:46,900 Evet. 781 00:35:46,900 --> 00:35:49,040 Bu oldukça iyi. 782 00:35:49,040 --> 00:35:50,890 Göstericiler Çünkü adresleri ve adresleri 783 00:35:50,890 --> 00:35:53,098 Kongre tarafından genellikle onaltılık yazılmış. 784 00:35:53,098 --> 00:35:54,650 Ha, ha, bu artık komik. 785 00:35:54,650 --> 00:35:58,390 Her neyse, bu yüzden şimdi atalım aslında bir sorunu çözmek. 786 00:35:58,390 --> 00:36:00,840 Bu, süper olmuş süper şimdiye kadar düşük seviyeli, 787 00:36:00,840 --> 00:36:03,950 ve biz aslında yararlı yapabiliriz Bu düşük seviyeli detayları ile işler. 788 00:36:03,950 --> 00:36:06,710 >> Bu yüzden birkaç hafta tanıttı önce bir dizi kavramı. 789 00:36:06,710 --> 00:36:09,177 Bir dizi güzeldi çünkü Bizim kodunu temizlemek zor 790 00:36:09,177 --> 00:36:11,760 Biz yazmak istedim çünkü eğer Birden öğrencilerle programı 791 00:36:11,760 --> 00:36:15,270 veya birden fazla isim ve evler ve Yurtlar ve kolejler ve bütün, 792 00:36:15,270 --> 00:36:19,430 Biz her şeyi daha saklamak temiz bir dizi içinde. 793 00:36:19,430 --> 00:36:23,039 Ama bir olumsuz önermek Bir dizinin bugüne kadar. 794 00:36:23,039 --> 00:36:26,080 Bunu kendiniz acı değil olsanız bile Bir programda, sadece içgüdüsel, 795 00:36:26,080 --> 00:36:30,870 kötü bir şey ne Bir dizi hakkında, belki? 796 00:36:30,870 --> 00:36:32,337 Bazı üfürümler duyuyorum. 797 00:36:32,337 --> 00:36:34,170 HEDEF KİTLE: Zor boyutunu değiştirmek için. 798 00:36:34,170 --> 00:36:36,128 DAVID MALAN: Bu zor boyutunu değiştirmek için. 799 00:36:36,128 --> 00:36:38,660 Sen boyutunu değiştiremezsiniz Bir dizinin, aslında, tek başına 800 00:36:38,660 --> 00:36:43,040 C. başka dizi ayırabilirsiniz, eski olandan şeyi taşımak 801 00:36:43,040 --> 00:36:45,380 şimdi yeni ve içine bazı ekstra boşluk var, 802 00:36:45,380 --> 00:36:47,469 ama bir gibi değil Java veya Python gibi dil 803 00:36:47,469 --> 00:36:49,760 ya da diğer herhangi bir sayıda diller bazılarınız 804 00:36:49,760 --> 00:36:52,070 tanıdık olabilir nereye Sadece bir şeyler eklemeye devam edebilirsiniz 805 00:36:52,070 --> 00:36:53,930 Bir dizinin sonuna bıktıracak. 806 00:36:53,930 --> 00:36:57,880 Eğer bir dizi varsa onun büyüklüğü büyüklüğü 6, 807 00:36:57,880 --> 00:37:01,970 ve fikri daha önce benzeri çok Belirli bir boyutta bir tampon sahip 808 00:37:01,970 --> 00:37:05,940 Eğer kapıdan tahmin etmek zorunda Ne boyutu olmasını istiyorsun? 809 00:37:05,940 --> 00:37:07,880 Eğer çok büyük tahmin ederseniz Eğer uzay harcıyorsun. 810 00:37:07,880 --> 00:37:10,950 Eğer çok küçük tahmin ederseniz sizi En azından, bu verileri depolamak olamaz 811 00:37:10,950 --> 00:37:12,940 çok daha fazla işsiz. 812 00:37:12,940 --> 00:37:18,180 >> Işaretçileri Yani bugün, teşekkürler, biz Birlikte kendi özel dikiş başlangıç 813 00:37:18,180 --> 00:37:20,989 veri yapıları, ve Aslında, burada bir şey 814 00:37:20,989 --> 00:37:23,030 Bu biraz daha bakar ilk bakışta şifreli, 815 00:37:23,030 --> 00:37:26,440 ama bu bir bağlantılı arayacağım budur Liste ve özetliyor onun adını tür 816 00:37:26,440 --> 00:37:26,940 o. 817 00:37:26,940 --> 00:37:29,550 Bu sayı bir liste veya Bu durumda, numaralarının listesini, 818 00:37:29,550 --> 00:37:33,480 ama bu şey bir liste olabilir, ama Bu arada okları yolu ile bağlantılıdır 819 00:37:33,480 --> 00:37:36,380 ve sadece bir tahmin almak hangi teknik ile 820 00:37:36,380 --> 00:37:38,310 biz güçlü olacak Birlikte dikiş, 821 00:37:38,310 --> 00:37:42,540 çeşit iplikle patlamış mısır gibi, burada bir liste dikdörtgenler bağlantılı? 822 00:37:42,540 --> 00:37:43,936 Onun numaralar? 823 00:37:43,936 --> 00:37:45,560 Altta yatan bir dil özelliği nedir? 824 00:37:45,560 --> 00:37:46,350 >> HEDEF KİTLE: Bir işaretçi. 825 00:37:46,350 --> 00:37:47,308 >> DAVID MALAN: Bir işaretçi. 826 00:37:47,308 --> 00:37:51,700 Peki bu okların her burada temsil Bir gösterici ya da sadece bir adres. 827 00:37:51,700 --> 00:37:54,590 Yani diğer bir deyişle, ben istiyorum numaralarının listesini saklamak için, 828 00:37:54,590 --> 00:37:59,040 Ben istiyorum ben sadece bunu saklayamazsınız büyümek ve küçültmek yeteneği 829 00:37:59,040 --> 00:38:00,990 Bir dizide benim veri yapısı. 830 00:38:00,990 --> 00:38:03,000 Bu yüzden biraz olması gerekir daha sofistike, 831 00:38:03,000 --> 00:38:05,720 ama bu fark Resim tür anlaşılacağı 832 00:38:05,720 --> 00:38:08,650 Sadece küçük parçacığı var eğer o her şeyi birlikte bağlama, 833 00:38:08,650 --> 00:38:13,100 Muhtemelen yer açmak için o kadar da zor değil Bu dikdörtgenler içinde arasında iki 834 00:38:13,100 --> 00:38:16,750 ya da bu düğümlerin iki olarak biz başlayacağız Yeni bir düğüm koymak, onları çağıran, 835 00:38:16,750 --> 00:38:19,547 ve daha sonra bazı yeni iplikle, sadece Birlikte üç düğüm hendek, 836 00:38:19,547 --> 00:38:22,880 Birincisi, sonuncusu, ve bir Sadece orta takıldığında söyledi. 837 00:38:22,880 --> 00:38:26,000 >> Ve gerçekten bir bağlantılı liste, Bir dizi farklı dinamiktir. 838 00:38:26,000 --> 00:38:27,840 Bu büyüyebilir ve can küçültmek ve yok 839 00:38:27,840 --> 00:38:32,434 bilmek ya da peşin nasıl bakmak zorundasınız kadar veri depoladığınız için gidiyoruz, 840 00:38:32,434 --> 00:38:35,600 ama biz biraz olmak zorunda çıkıyor Bu nasıl uygulanacağına dikkat. 841 00:38:35,600 --> 00:38:39,070 Bu yüzden ilk en biz uygulamak nasıl düşünelim Bu küçük dikdörtgenler biri. 842 00:38:39,070 --> 00:38:40,690 Bir int uygulamak kolaydır. 843 00:38:40,690 --> 00:38:44,000 Sadece o int n ve say Eğer bir int için 4 byte olsun, 844 00:38:44,000 --> 00:38:49,089 ama ben bir int alırım nasıl, n diyoruz ve daha sonra bir gösterici, gelecek diyelim. 845 00:38:49,089 --> 00:38:50,880 Biz bu diyebiliriz şeyler şey istediğimiz 846 00:38:50,880 --> 00:38:53,590 ama özel bir veri yapısı gerekir. 847 00:38:53,590 --> 00:38:54,257 Evet? 848 00:38:54,257 --> 00:38:57,020 >> HEDEF KİTLE: Ampersand [duyulamaz]. 849 00:38:57,020 --> 00:39:00,940 >> DAVID MALAN: Yani işareti biz kullanacağız potansiyel bir düğümün adresini almak. 850 00:39:00,940 --> 00:39:02,740 Ama biz başka bir ihtiyacımız C özelliği sipariş 851 00:39:02,740 --> 00:39:06,700 Bana oluşturma becerisi vermek Bu özel dikdörtgen, bu özel 852 00:39:06,700 --> 00:39:08,919 Değişken hafızada, olacak eğer. 853 00:39:08,919 --> 00:39:09,710 HEDEF KİTLE: A struct. 854 00:39:09,710 --> 00:39:10,626 DAVID MALAN: Bir struct. 855 00:39:10,626 --> 00:39:14,310 Geçen hafta hatırlayın, biz tanıttı yapı, bu nispeten basit kelime 856 00:39:14,310 --> 00:39:16,254 bu bize böyle şeyler yapmanıza olanak sağlar. 857 00:39:16,254 --> 00:39:18,420 C verilerle gelmedi yapı öğrenciyi denir. 858 00:39:18,420 --> 00:39:22,190 Bu int ve şamandıra ve char ile birlikte geliyor Böyle, ancak öğrenci ile gelmiyor, 859 00:39:22,190 --> 00:39:26,750 ama biz bir öğrenci veri türü oluşturabilir, Bu sözdizimi ile bir öğrenci yapısı, 860 00:39:26,750 --> 00:39:27,250 İşte. 861 00:39:27,250 --> 00:39:28,350 Ve tekrar tekrar bu görürsünüz. 862 00:39:28,350 --> 00:39:30,426 Yani dert etmeyin Anahtar kelimeleri ezberlemeye, 863 00:39:30,426 --> 00:39:33,300 ama önemli anahtar kelime dedik sadece gerçeği yapı 864 00:39:33,300 --> 00:39:37,590 ve sonra biz öğrenciyi denilen ve içinde Öğrencinin bir isim ve bir evdi 865 00:39:37,590 --> 00:39:39,390 Bir yurt veya benzeri ya da. 866 00:39:39,390 --> 00:39:41,980 >> Ve şimdi, bugün, en bu teklif edelim. 867 00:39:41,980 --> 00:39:45,240 Ben birkaç kelime ekledi, ama isterseniz ettik var bu dikdörtgen uygulamak için 868 00:39:45,240 --> 00:39:48,440 bir int ve her ikisi de var işaretçi, sen ne olduğumu biliyorum 869 00:39:48,440 --> 00:39:51,540 düğüm denilen bir yapı bildirmek için gidiyor. 870 00:39:51,540 --> 00:39:55,630 Ben diyecektim, bunun içinde de değilim Bir düğüm, bu dikdörtgen, bir int olduğunu 871 00:39:55,630 --> 00:39:59,730 ve biz onu arayacağım n ve Bir sonraki işaretçi vardır. 872 00:39:59,730 --> 00:40:02,540 Ve bu, biraz ayrıntılı bir ama bu konuda düşünüyorsanız, 873 00:40:02,540 --> 00:40:07,300 Resimde vardı oklar Bir an önce nasıl veri türü vardır? 874 00:40:07,300 --> 00:40:12,330 Nerede bu okların her işaret ediyor veri yapısı ne tür mi? 875 00:40:12,330 --> 00:40:14,332 Bu sadece kendi başına bir int işaret değil. 876 00:40:14,332 --> 00:40:16,165 Bu işaret ediyor Bütün dikdörtgen şey 877 00:40:16,165 --> 00:40:18,720 ve bu dikdörtgen şey Biz düğüm denir, dedi. 878 00:40:18,720 --> 00:40:21,720 Ve böylece biz tür var yinelemeli bu tür tanımlar 879 00:40:21,720 --> 00:40:26,270 bir düğüm, biz, diyelim n adında bir int içerecektir 880 00:40:26,270 --> 00:40:31,070 ve bir işaretçi bir sonraki ve denir veri yapısının tipi 881 00:40:31,070 --> 00:40:35,770 Bu işaretçi noktaları görünüşte struct düğüm olacak. 882 00:40:35,770 --> 00:40:41,550 >> Yani bu rahatsız edici ayrıntılı bir ve sadece bilgiçlik olmak 883 00:40:41,550 --> 00:40:44,100 sebebi biz değil sadece bu demek, hangi açıkçası 884 00:40:44,100 --> 00:40:46,860 , çok daha okunabilir görünüyor hatırlama okumak C o çünkü 885 00:40:46,860 --> 00:40:48,710 şeyler yukarıdan aşağıya, sağdan sola. 886 00:40:48,710 --> 00:40:54,120 Biz noktalı virgül elde edene kadar bu değil Anahtar kelime düğüm aslında var olduğunu. 887 00:40:54,120 --> 00:40:57,980 Biz bu tür olmasını istiyorsanız Yani verilerin içinde döngüsel başvuru 888 00:40:57,980 --> 00:41:02,120 yapı, biz bunu yapmak zorunda, nerede Biz üstündeki yapı düğüm demek ki 889 00:41:02,120 --> 00:41:06,770 bize bu tanımlamanın daha uzun bir yol verir şey, biz yapı düğüm demek o içinde 890 00:41:06,770 --> 00:41:09,560 ve daha sonra çok son satırında diyoruz, tamam, C, bu arada, 891 00:41:09,560 --> 00:41:12,060 Sadece tüm bu lanet çağrı şey bir düğüm ve durdurma 892 00:41:12,060 --> 00:41:14,360 tamamen anahtar yapı kullanma. 893 00:41:14,360 --> 00:41:18,030 Yani bu sadece bir çeşit sözdizimsel olduğu sonuçta bize oluşturmanızı sağlar hüner 894 00:41:18,030 --> 00:41:21,370 aynen şuna benzer bir şey. 895 00:41:21,370 --> 00:41:25,010 >> Şimdi varsayalım eğer biz So C Bu şeyi uygulamak, 896 00:41:25,010 --> 00:41:28,040 nasıl aslında biz bunu Bu geçme başlar? 897 00:41:28,040 --> 00:41:32,360 Eh, aslında, yapmamız gereken tek şey sağa ve sadece soldan yineleme 898 00:41:32,360 --> 00:41:35,960 tür düğümleri eklemek veya düğümleri silmek ya da istediğiniz yere şeyler aramak, 899 00:41:35,960 --> 00:41:39,560 ama bunu yapmak için, en önde gidip yapalım işler biraz daha gerçek bu çünkü 900 00:41:39,560 --> 00:41:42,560 Bugüne kadar süper düşük seviyeli olmuştur. 901 00:41:42,560 --> 00:41:45,700 Herkes tam anlamıyla ilk olmak ister misiniz? 902 00:41:45,700 --> 00:41:46,200 TAMAM. 903 00:41:46,200 --> 00:41:47,092 Yukarı gel. 904 00:41:47,092 --> 00:41:47,800 Adın ne? 905 00:41:47,800 --> 00:41:48,499 >> DAVID: David. 906 00:41:48,499 --> 00:41:49,290 DAVID MALAN: David. 907 00:41:49,290 --> 00:41:49,998 Tanıştığımıza memnun oldum. 908 00:41:49,998 --> 00:41:50,960 Ben de. 909 00:41:50,960 --> 00:41:52,450 Pekala. 910 00:41:52,450 --> 00:41:53,990 Ve biz bir numara 9 ihtiyacım var. 911 00:41:53,990 --> 00:41:55,240 Değil kadar iyi ilk olarak, belki. 912 00:41:55,240 --> 00:41:56,430 Tamam, 9 numaralı. 913 00:41:56,430 --> 00:41:59,667 Bir sayı 17, lütfen. 914 00:41:59,667 --> 00:42:01,000 Bana biraz geriye dönelim. 915 00:42:01,000 --> 00:42:03,980 Sayı 22, lütfen, ve nasıl geriye hakkında 916 00:42:03,980 --> 00:42:06,344 Ben herhangi bir elleri görürseniz Tüm ışık veya hiç sahip. 917 00:42:06,344 --> 00:42:08,010 Birisi orada gönüllü ediliyor. 918 00:42:08,010 --> 00:42:08,968 Eğer gelmek ister misin? 919 00:42:08,968 --> 00:42:10,450 Sizin kol zorla gidiyor. 920 00:42:10,450 --> 00:42:12,340 17 Tamam. 921 00:42:12,340 --> 00:42:13,690 22. 922 00:42:13,690 --> 00:42:15,120 26 iniyor. 923 00:42:15,120 --> 00:42:18,450 Başkasının ister misiniz forcefully-- yukarı gel. 924 00:42:18,450 --> 00:42:21,030 Gerçek bir gönüllü. 925 00:42:21,030 --> 00:42:23,330 >> Yani çok hızlı bir şekilde, eğer Siz düzenlemek olabilir 926 00:42:23,330 --> 00:42:26,550 Kendinizi tıpkı Ekranda düğümler. 927 00:42:26,550 --> 00:42:27,510 Teşekkür ederim. 928 00:42:27,510 --> 00:42:29,234 Ve 26 olacak. 929 00:42:29,234 --> 00:42:30,650 Pekala ve hızlı tanıtımları. 930 00:42:30,650 --> 00:42:32,139 Yani Davut değilim ve ayrıca nelerdir? 931 00:42:32,139 --> 00:42:32,680 DAVID: David. 932 00:42:32,680 --> 00:42:33,721 DAVID MALAN: Ve sen? 933 00:42:33,721 --> 00:42:34,229 Jake: Jake. 934 00:42:34,229 --> 00:42:34,729 SUE: Sue. 935 00:42:34,729 --> 00:42:35,229 ALEX: Alex. 936 00:42:35,229 --> 00:42:36,475 RAPHAEL: Raphael. 937 00:42:36,475 --> 00:42:37,100 TAYLOR: Taylor. 938 00:42:37,100 --> 00:42:37,466 DAVID MALAN: Taylor. 939 00:42:37,466 --> 00:42:37,590 Mükemmel. 940 00:42:37,590 --> 00:42:39,810 Peki bu bizim gönüllüler bugün ve go ahead 941 00:42:39,810 --> 00:42:43,090 ve, bu şekilde biraz vardiya ve sadece go ahead ve tutmak 942 00:42:43,090 --> 00:42:47,024 Eğer ya sizin yanınızdaki gibi numaralar tutan ilk işareti ve sol elinizi kullanarak, 943 00:42:47,024 --> 00:42:48,940 go ahead ve sadece uygulamak Bu oklar, sadece 944 00:42:48,940 --> 00:42:51,360 sol eli tam anlamıyla böylece Eğer işaret etmelidir ne işaret 945 00:42:51,360 --> 00:42:54,610 ve en kendinizi o yüzden bazı oda vermek görsel olarak aslında kollarınızı görebilir 946 00:42:54,610 --> 00:42:58,120 işaret ve sadece işaret edebilir çeşit zemin gayet iyi. 947 00:42:58,120 --> 00:43:03,040 >> Yani burada biz, tek bir bağlantılı liste var iki, üç, dört, beş düğüm başlangıçta 948 00:43:03,040 --> 00:43:05,860 ve biz bu özel olması fark var başında işaretçi 949 00:43:05,860 --> 00:43:09,770 Anahtar biz takip etmek zorunda, çünkü Bütün uzunluk listesinin nasılsa. 950 00:43:09,770 --> 00:43:13,590 Onlar kalacaksın bile bu adamlar, sağa, geriye bellekte arkaya, 951 00:43:13,590 --> 00:43:15,950 aslında herhangi bir yerde olabilir bilgisayarın belleğinde. 952 00:43:15,950 --> 00:43:18,240 Yani bu adamlar olabilir sahnede her yerde ayakta 953 00:43:18,240 --> 00:43:20,960 ve böylece sürece konum olarak iyi, aslında birbirlerine göstererek 954 00:43:20,960 --> 00:43:22,770 ama şeyleri tutmak için temiz ve basit, yaparız 955 00:43:22,770 --> 00:43:25,728 sadece onları çizmek gibi soldan sağa Bu, ancak büyük boşluklar olabilir 956 00:43:25,728 --> 00:43:26,790 Bu düğümler arasında. 957 00:43:26,790 --> 00:43:30,710 >> Şimdi, ben aslında bazı eklemek istiyorsanız yeni değer, en önde gidip yapalım. 958 00:43:30,710 --> 00:43:33,720 Biz şimdi bir fırsat var başka bir düğüm seçin. 959 00:43:33,720 --> 00:43:39,820 En 55 mallocing ile başlayalım söyleyin. 960 00:43:39,820 --> 00:43:41,320 Birisi malloc olmak misin? 961 00:43:41,320 --> 00:43:42,280 Tamam, yukarı gel. 962 00:43:42,280 --> 00:43:42,992 Adın ne? 963 00:43:42,992 --> 00:43:43,700 RAINBOW: Gökkuşağı. 964 00:43:43,700 --> 00:43:44,050 DAVID MALAN: Gökkuşağı? 965 00:43:44,050 --> 00:43:44,810 Pekala. 966 00:43:44,810 --> 00:43:46,600 Malloc Gökkuşağı. 967 00:43:46,600 --> 00:43:47,450 Yukarı gel. 968 00:43:47,450 --> 00:43:51,610 Şimdi biz kendimize sormak zorundayız algoritmik biz 55 koyabilirsiniz. 969 00:43:51,610 --> 00:43:53,610 Yani hepimiz biliyoruz, Açıkçası, nerede o muhtemelen 970 00:43:53,610 --> 00:43:55,401 biz çalışıyorsanız aittir bu sıralama tutmak 971 00:43:55,401 --> 00:43:58,299 ve siz birini almak eğer geri adım yüzden düşmek yok 972 00:43:58,299 --> 00:43:59,590 sahne, bu harika olurdu. 973 00:43:59,590 --> 00:44:01,420 Yani aslında, Gökkuşağı, burada benimle baştan başlamak, 974 00:44:01,420 --> 00:44:04,200 Çünkü biz şimdi bilgisayardan olarak Bir seferde sadece tek bir değişkeni bakın. 975 00:44:04,200 --> 00:44:05,190 Bu ilk düğümü Yani eğer. 976 00:44:05,190 --> 00:44:07,160 O bir düğüm değil dikkat edin O, sadece bir işaretçi var 977 00:44:07,160 --> 00:44:10,270 o olmak çizilir neden ve işte Bir işaretçi sadece boyutu değil, 978 00:44:10,270 --> 00:44:11,780 Bu tam dikdörtgenler biri. 979 00:44:11,780 --> 00:44:16,650 Yani biz her birinde kontrol için gidiyoruz yineleme 9 den 55 daha azdır? 980 00:44:16,650 --> 00:44:17,150 Hayır. 981 00:44:17,150 --> 00:44:19,060 17 den 55 az mı? 982 00:44:19,060 --> 00:44:19,720 Hayır. 983 00:44:19,720 --> 00:44:20,800 22 Az? 984 00:44:20,800 --> 00:44:22,020 26 Az? 985 00:44:22,020 --> 00:44:23,390 34 Az? 986 00:44:23,390 --> 00:44:25,890 Ve şimdi, tabii ki Gökkuşağı sonunda aittir. 987 00:44:25,890 --> 00:44:27,270 Yani net ve ne Senin adın, Taylor? 988 00:44:27,270 --> 00:44:27,895 >> TAYLOR: Taylor. 989 00:44:27,895 --> 00:44:32,510 DAVID MALAN: Taylor arasında Yani sol el ve burada Rainbow elleri, 990 00:44:32,510 --> 00:44:38,324 kimin eli de ne işaret etmek gerekiyor Bu listeye 55 eklemek için sipariş? 991 00:44:38,324 --> 00:44:39,240 Ne yapmamız gerekiyor? 992 00:44:39,240 --> 00:44:39,700 Evet? 993 00:44:39,700 --> 00:44:41,140 >> HEDEF KİTLE: Taylor'ın eli Sol işaret gerekiyor. 994 00:44:41,140 --> 00:44:41,680 >> DAVID MALAN: Kesinlikle. 995 00:44:41,680 --> 00:44:43,800 Yani bir düğüm ekleyerek Listenin sonunda içine 996 00:44:43,800 --> 00:44:47,140 oldukça basit çünkü Taylor, sadece zemin, yerine noktasına sahip 997 00:44:47,140 --> 00:44:49,640 ya da biz, boş arayacağım Boş yokluğu tür 998 00:44:49,640 --> 00:44:51,640 bir işaretçi veya özel bir sıfır gösterici, sen 999 00:44:51,640 --> 00:44:53,740 sol ile işaret edecek El Gökkuşağı ve ardından Rainbow, 1000 00:44:53,740 --> 00:44:55,910 nerede sol gereken El muhtemelen gelin? 1001 00:44:55,910 --> 00:44:56,570 Down. 1002 00:44:56,570 --> 00:45:00,140 Elini tür eğer iyi değil Burada veya sıralama herhangi kapalı işaret 1003 00:45:00,140 --> 00:45:00,640 hangi yön. 1004 00:45:00,640 --> 00:45:02,407 Bu düşünülebilir Bir çöp değeri, 1005 00:45:02,407 --> 00:45:04,240 ama o işaret eğer bazı bilinen değer, biz olacak 1006 00:45:04,240 --> 00:45:07,360 sıfır veya boş diyoruz ki tamam Bu bir terim var, çünkü 1007 00:45:07,360 --> 00:45:09,390 ve biz liste artık tamamlanmıştır biliyoruz. 1008 00:45:09,390 --> 00:45:11,550 >> Peki başka var nispeten basit dava? 1009 00:45:11,550 --> 00:45:13,125 Biz 5 malloc miyiz? 1010 00:45:13,125 --> 00:45:14,010 Yukarı gel. 1011 00:45:14,010 --> 00:45:14,782 Adın ne? 1012 00:45:14,782 --> 00:45:15,490 Tiffany: Tiffany. 1013 00:45:15,490 --> 00:45:16,000 DAVID MALAN: Üzgünüm? 1014 00:45:16,000 --> 00:45:16,470 Tiffany: Tiffany. 1015 00:45:16,470 --> 00:45:16,880 DAVID MALAN: Tiffany. 1016 00:45:16,880 --> 00:45:17,110 Pekala. 1017 00:45:17,110 --> 00:45:19,071 Tiffany malloced edilmiştir değeri 5 ile. 1018 00:45:19,071 --> 00:45:19,570 Yukarı gel. 1019 00:45:19,570 --> 00:45:23,820 Bu kimse, çok nispeten kolay ama Şimdi işlemlerin sırasını düşünelim. 1020 00:45:23,820 --> 00:45:25,820 Oldukça kolay oldu sonunda Taylor ile. 1021 00:45:25,820 --> 00:45:30,302 Sayı 5, tabii ki daha az 9 taşımaktadır ve bu yüzden, biz Tiffany var, David var 1022 00:45:30,302 --> 00:45:31,260 ve senin adın neydi? 1023 00:45:31,260 --> 00:45:31,680 >> Jake: Jake. 1024 00:45:31,680 --> 00:45:32,470 >> DAVID MALAN: Jake. 1025 00:45:32,470 --> 00:45:34,300 Tiffany, Jake ve David. 1026 00:45:34,300 --> 00:45:36,580 Kimin eli öncelikle güncellenmesi gerekir? 1027 00:45:36,580 --> 00:45:39,260 1028 00:45:39,260 --> 00:45:40,590 Burada ne yapmak istiyorsun? 1029 00:45:40,590 --> 00:45:45,244 Birkaç olası yolları var, ama Bir veya daha fazla yanlış yolları da var. 1030 00:45:45,244 --> 00:45:46,620 >> HEDEF KİTLE: soldakinden ile başlayın. 1031 00:45:46,620 --> 00:45:47,800 >> DAVID MALAN: soldakinden ile başlayın. 1032 00:45:47,800 --> 00:45:49,008 Kim o zaman burada soldaki var? 1033 00:45:49,008 --> 00:45:49,700 HEDEF KİTLE: İlk. 1034 00:45:49,700 --> 00:45:50,366 >> DAVID MALAN: Tamam. 1035 00:45:50,366 --> 00:45:53,781 Yani ilk ile başlar ve sizi nereye do David'in ellerini olmak güncelleştirmek istiyor? 1036 00:45:53,781 --> 00:45:54,780 HEDEF KİTLE: 5 Doğru. 1037 00:45:54,780 --> 00:45:55,446 DAVID MALAN: Tamam. 1038 00:45:55,446 --> 00:45:59,026 Beşte Böylece Davut, gelin veya Tiffany burada ve şimdi? 1039 00:45:59,026 --> 00:46:01,072 >> HEDEF KİTLE: Tiffany 9 işaret? 1040 00:46:01,072 --> 00:46:04,030 DAVID MALAN: Mükemmel, Binky en haricinde Kafa sadece tür doğru, düştü? 1041 00:46:04,030 --> 00:46:06,820 Nesi var, çünkü kelimenin tam anlamıyla bu resmi? 1042 00:46:06,820 --> 00:46:08,070 HEDEF KİTLE: Hiçbir şey işaret ediyor. 1043 00:46:08,070 --> 00:46:09,945 DAVID MALAN: Nothing Şimdi Jake işaret. 1044 00:46:09,945 --> 00:46:13,360 Biz tam anlamıyla 9 yetim ettik ve 17 ve tam anlamıyla ettik 1045 00:46:13,360 --> 00:46:18,450 Bu belleğin tüm sızan tarafından çünkü İlk David'in elini güncellenmesi, işte 1046 00:46:18,450 --> 00:46:21,660 Doğru olduğu gibi sürece ince Şimdi Tiffany işaret ederek, 1047 00:46:21,660 --> 00:46:25,410 ama kimse olsaydı Jake işaret etmek görüşte, 1048 00:46:25,410 --> 00:46:27,490 o zaman kaybettik Bu listenin tamamı. 1049 00:46:27,490 --> 00:46:28,200 O yüzden geri verelim. 1050 00:46:28,200 --> 00:46:30,950 Yani iyi bir şey oldu düşmeyeceği ama şimdi düzeltmek edelim. 1051 00:46:30,950 --> 00:46:33,624 Ne zaman biz ilk yerine yapmalıyız? 1052 00:46:33,624 --> 00:46:34,124 Evet? 1053 00:46:34,124 --> 00:46:35,791 >> HEDEF KİTLE: Tiffany 9'da işaret etmelidir? 1054 00:46:35,791 --> 00:46:37,582 DAVID MALAN: Yapamam Size bu kadar yakın olsun. 1055 00:46:37,582 --> 00:46:38,720 9 kimler işaret etmelidir? 1056 00:46:38,720 --> 00:46:39,220 >> HEDEF KİTLE: Tiffany. 1057 00:46:39,220 --> 00:46:39,390 >> DAVID MALAN: Pekala. 1058 00:46:39,390 --> 00:46:41,200 Yani Tiffany 9'da Birinci nokta olmalıdır. 1059 00:46:41,200 --> 00:46:43,550 Yani Tiffany almalı benzer bir değer 1060 00:46:43,550 --> 00:46:45,820 Davut'a, hangi görünüyor Bir an için gereksiz, 1061 00:46:45,820 --> 00:46:48,820 ancak ikinci, çünkü artık gayet iyi adım biz David'in elini güncelleyebilirsiniz 1062 00:46:48,820 --> 00:46:52,680 Tiffany ve daha sonra eğer işaret Biz sadece tür temiz şeyler kadar 1063 00:46:52,680 --> 00:46:55,740 Bu bahar gibi tür sanki, Şimdi bu doğru sokma var. 1064 00:46:55,740 --> 00:46:56,700 Yani mükemmel. 1065 00:46:56,700 --> 00:46:57,970 Yani şimdi neredeyse oradayız. 1066 00:46:57,970 --> 00:47:01,075 En tek finalini eklemek edelim değeri 20 gibi değer. 1067 00:47:01,075 --> 00:47:03,010 Biz son bir gönüllüye malloc olsaydı? 1068 00:47:03,010 --> 00:47:04,140 Yukarı gel. 1069 00:47:04,140 --> 00:47:06,224 Yani bu biraz daha zor. 1070 00:47:06,224 --> 00:47:08,390 Ama gerçekten, kod we ' yazma, sözlü de olsa, 1071 00:47:08,390 --> 00:47:10,610 sadece bir demet olması gibi Şimdi koşulları, doğru olur? 1072 00:47:10,610 --> 00:47:12,318 Biz bir durum vardı o aitse kontrol 1073 00:47:12,318 --> 00:47:13,840 Sonunda, belki başında. 1074 00:47:13,840 --> 00:47:15,940 Biz döngü çeşit gerekiyor ortasında yer bulmak. 1075 00:47:15,940 --> 00:47:17,400 Yani senin adın ne o yapsın? 1076 00:47:17,400 --> 00:47:17,700 >> ERIC: Eric. 1077 00:47:17,700 --> 00:47:18,340 >> DAVID MALAN: Eric? 1078 00:47:18,340 --> 00:47:18,660 Eric. 1079 00:47:18,660 --> 00:47:19,368 Tanıştığımıza memnun oldum. 1080 00:47:19,368 --> 00:47:20,490 Yani biz 20 var. 1081 00:47:20,490 --> 00:47:21,220 Beşten az? 1082 00:47:21,220 --> 00:47:21,530 Hayır. 1083 00:47:21,530 --> 00:47:22,160 Dokuz Az? 1084 00:47:22,160 --> 00:47:22,410 Hayır. 1085 00:47:22,410 --> 00:47:23,050 17 Az? 1086 00:47:23,050 --> 00:47:23,550 Hayır. 1087 00:47:23,550 --> 00:47:23,740 TAMAM. 1088 00:47:23,740 --> 00:47:25,701 O buraya ait ve senin isimleri yine? 1089 00:47:25,701 --> 00:47:26,200 SUE: Sue. 1090 00:47:26,200 --> 00:47:26,880 DAVID MALAN: Sue. 1091 00:47:26,880 --> 00:47:27,379 ALEX: Alex. 1092 00:47:27,379 --> 00:47:28,790 DAVID MALAN: Sue, Alex ve? 1093 00:47:28,790 --> 00:47:29,290 ERIC: Eric. 1094 00:47:29,290 --> 00:47:30,120 DAVID MALAN: Eric. 1095 00:47:30,120 --> 00:47:32,140 Kimin elleri ilk güncellenen almak gerekir? 1096 00:47:32,140 --> 00:47:32,930 >> HEDEF KİTLE: Eric. 1097 00:47:32,930 --> 00:47:33,429 TAMAM. 1098 00:47:33,429 --> 00:47:35,200 Yani Eric nerede işaret etmelidir? 1099 00:47:35,200 --> 00:47:35,930 22 at. 1100 00:47:35,930 --> 00:47:36,430 İyi. 1101 00:47:36,430 --> 00:47:38,180 Ve şimdi sırada ne var? 1102 00:47:38,180 --> 00:47:40,800 Sue sonra Eric işaret edebilir ve şimdi, eğer çocuklar sadece 1103 00:47:40,800 --> 00:47:44,077 gayet bazı oda yapmak görsel, şimdi ekleme yaptık. 1104 00:47:44,077 --> 00:47:47,160 Yani şimdi bir soru düşünelim ama Bizim gönüllüler için size çok teşekkür ederim. 1105 00:47:47,160 --> 00:47:48,090 Çok iyi yapılmış. 1106 00:47:48,090 --> 00:47:50,831 İsterseniz, bu tutabilirsiniz. 1107 00:47:50,831 --> 00:47:54,140 Ve biz güzel bir ayrılık hediyesi eğer var Her bir stres topu almak istiyorum. 1108 00:47:54,140 --> 00:47:56,030 Bana sadece bu aşağı geçmek edelim. 1109 00:47:56,030 --> 00:47:58,430 Yani bu paket nedir? 1110 00:47:58,430 --> 00:48:02,430 Bu inanılmaz gibi görünüyor şimdi var sürece 1111 00:48:02,430 --> 00:48:06,360 Bir alternatif tanıttı yani sınırlı değildir dizisi 1112 00:48:06,360 --> 00:48:07,780 Bazı sabit boyutta bir dizi. 1113 00:48:07,780 --> 00:48:09,380 Onlar dinamik büyüyebilir. 1114 00:48:09,380 --> 00:48:13,220 >> Ama biz gibi çok haftalarda gördüm Geçmiş, biz ücretsiz bir şey asla 1115 00:48:13,220 --> 00:48:15,740 gibi kesinlikle burada bir trade-off var. 1116 00:48:15,740 --> 00:48:18,890 Bağlantılı bir ters Yani Liste, bu dinamizm nedir? 1117 00:48:18,890 --> 00:48:21,590 Bu yetenek, açıkçası büyümek ve Biz silme yapmış olabilir 1118 00:48:21,590 --> 00:48:23,570 gerektiği gibi ve biz küçültmek olabilir. 1119 00:48:23,570 --> 00:48:24,710 Ne fiyat ödüyoruz? 1120 00:48:24,710 --> 00:48:28,510 1121 00:48:28,510 --> 00:48:30,340 Twice her şeyden önce çok alanı olarak. 1122 00:48:30,340 --> 00:48:34,010 Resimde bakarsanız, artık ben ben tamsayılar listesini depolamak. 1123 00:48:34,010 --> 00:48:36,740 I'e ait bir listesini depolamak ediyorum tamsayılar artı işaretçiler. 1124 00:48:36,740 --> 00:48:38,240 Yani alan miktarını iki katına ediyorum. 1125 00:48:38,240 --> 00:48:40,740 Şimdi, belki böyle değil büyük bir anlaşma 4 bayt, 8 bayt, 1126 00:48:40,740 --> 00:48:43,160 ama kesinlikle ekleyebilirsiniz büyük veri kümeleri için. 1127 00:48:43,160 --> 00:48:45,570 Başka bir dezavantajı nedir? 1128 00:48:45,570 --> 00:48:46,070 Evet? 1129 00:48:46,070 --> 00:48:48,010 >> HEDEF KİTLE: Biz var onları bir-bir hareket. 1130 00:48:48,010 --> 00:48:48,760 DAVID MALAN: Evet. 1131 00:48:48,760 --> 00:48:50,260 Biz onları bir-birer hareket ettirmek zorunda. 1132 00:48:50,260 --> 00:48:53,860 Sen bu super vazgeçti, ne biliyor Kare dirseğin kullanışlı özellik 1133 00:48:53,860 --> 00:48:57,240 gösterim, daha düzgün Rasgele erişim olarak bilinen, 1134 00:48:57,240 --> 00:48:59,280 biz sadece atlayabilir nerede bağımsız bir elemana 1135 00:48:59,280 --> 00:49:01,470 ama şimdi hala olsaydı Burada benim gönüllüler, 1136 00:49:01,470 --> 00:49:04,660 Ben bulmak istiyorsa 22 numara, ben sadece yapamam 1137 00:49:04,660 --> 00:49:06,620 braket şey şey atlamak. 1138 00:49:06,620 --> 00:49:10,530 Ben çok, liste üzerinde bakmak zorunda doğrusal bizim arama örneklerde olduğu gibi, 1139 00:49:10,530 --> 00:49:12,260 sayı 22 bulmak için. 1140 00:49:12,260 --> 00:49:14,340 Yani biz orada bir fiyat ödemiş gibi görünüyor. 1141 00:49:14,340 --> 00:49:16,430 Ama biz yine de can diğer sorunları çözmek. 1142 00:49:16,430 --> 00:49:18,587 >> Aslında, bana tanıştırayım görsellerin sadece bir çift. 1143 00:49:18,587 --> 00:49:20,920 Aşağı oldum Yani eğer Mather'ın Yemekhane son zamanlarda 1144 00:49:20,920 --> 00:49:23,320 Bunu Hatırlayacaksınız onların Böyle tepsiler yığınları, 1145 00:49:23,320 --> 00:49:26,300 Biz bu ödünç Dersten önce Annenberg. 1146 00:49:26,300 --> 00:49:28,930 Yani tepsileri bu yığını olsa da, temsilcisi aslında 1147 00:49:28,930 --> 00:49:30,860 Bir bilgisayar bilimi veri yapısının. 1148 00:49:30,860 --> 00:49:32,910 Bir veri yapısı vardır bilgisayar bilimi 1149 00:49:32,910 --> 00:49:38,010 bir yığın olarak bilinen hangi çok güzel Tam bu görsel için oldukça rahat. 1150 00:49:38,010 --> 00:49:41,380 Bu kasetlerin her bir değilse Yani tepsi ancak bir sayı gibi ve ben istediğim 1151 00:49:41,380 --> 00:49:45,010 sayıları saklamak için, ben Burada bir aşağı koymak olabilir, 1152 00:49:45,010 --> 00:49:48,320 ve ben, burada başka bir yere koymak olabilir ve sayıları istifleme devam 1153 00:49:48,320 --> 00:49:53,180 birbirlerine ve ne var üstünde Bu konuda potansiyel yararlı 1154 00:49:53,180 --> 00:49:55,450 Ne ima olmasıdır Bu veri yapısı? 1155 00:49:55,450 --> 00:49:58,045 Ben çekin hangi numara İlk en uygun? 1156 00:49:58,045 --> 00:50:00,640 1157 00:50:00,640 --> 00:50:03,030 Orada en son tek koymak. 1158 00:50:03,030 --> 00:50:06,430 >> Yani bu biz dediğimiz olur bilgisayar bilimi, bir LIFO veri yapısı. 1159 00:50:06,430 --> 00:50:08,070 , İlk out sürer. 1160 00:50:08,070 --> 00:50:10,800 Ve uzun neden önce görürsünüz Bu, artık yararlı ama için olabilir 1161 00:50:10,800 --> 00:50:12,200 Sadece özelliğini düşünün. 1162 00:50:12,200 --> 00:50:15,158 Eğer düşünüyorsanız ve bu tür aptal yemekhane yapıyor nasıl. 1163 00:50:15,158 --> 00:50:17,910 Her zaman onlar temiz tepsiler ve üstüne taze olanları koymak, 1164 00:50:17,910 --> 00:50:22,160 Daha önce temiz olabilir ama sonunda çok kirli ve tozlu 1165 00:50:22,160 --> 00:50:24,360 çok altında tepsi eğer hiç aslında 1166 00:50:24,360 --> 00:50:26,820 Bunun altına almak yığın, çünkü sen sadece 1167 00:50:26,820 --> 00:50:29,380 Yeni koyarak tutmak bunun üstüne temiz olanlar. 1168 00:50:29,380 --> 00:50:31,840 Aynı şey gerçekleşebilir Bir süpermarkette de. 1169 00:50:31,840 --> 00:50:35,450 Bir vitrinin varsa süt ve her zaman CVS 1170 00:50:35,450 --> 00:50:37,610 ya da daha fazla süt alır kim, Sadece sütler kıpırdamak 1171 00:50:37,610 --> 00:50:39,880 Zaten arka ve Eğer ön yenilerini koymak 1172 00:50:39,880 --> 00:50:43,088 Eğer bazı oldukça kötü zorunda gidiyoruz veri yapısının sonunda süt, 1173 00:50:43,088 --> 00:50:46,390 o dibinde daima çünkü ya eşdeğer o arka hep. 1174 00:50:46,390 --> 00:50:50,407 >> Ama düşünmek için başka bir yolu var veri ve örneğin, bu sıraya. 1175 00:50:50,407 --> 00:50:53,490 O insanlardan biri iseniz kim sever Apple mağazaları dışında sıraya 1176 00:50:53,490 --> 00:50:55,610 ne zaman yeni bir ürün geliyor dışarı, muhtemelen konum 1177 00:50:55,610 --> 00:50:58,780 Bir yığın verileri kullanılarak değil yapısı sizin için 1178 00:50:58,780 --> 00:51:03,070 herkes kim uzaklaştıracaktır sıraya bazı yeni oyuncağı satın almak için. 1179 00:51:03,070 --> 00:51:06,610 Aksine, muhtemelen kullanarak konum veri yapısının ne tür 1180 00:51:06,610 --> 00:51:10,050 Sistemin veya ne tür gerçek dünyada? 1181 00:51:10,050 --> 00:51:13,493 Umarım bu bir çizgi, ya da daha fazla Düzgün veya daha fazla İngiliz gibi bir kuyruk. 1182 00:51:13,493 --> 00:51:17,700 Ve bir kuyruk da olduğunu çıkıyor bilgisayar bilimi veri yapısı, 1183 00:51:17,700 --> 00:51:19,700 ama bir kuyruk çok var Farklı özellik. 1184 00:51:19,700 --> 00:51:20,820 Bu LIFO değil. 1185 00:51:20,820 --> 00:51:21,990 , İlk out sürer. 1186 00:51:21,990 --> 00:51:22,800 Allah korusun. 1187 00:51:22,800 --> 00:51:24,280 Bunun yerine FIFO var. 1188 00:51:24,280 --> 00:51:26,110 İlk giren ilk çıkar. 1189 00:51:26,110 --> 00:51:27,970 Ve bu iyi bir şey adalet 'uğruna 1190 00:51:27,970 --> 00:51:30,428 Kesinlikle ne zaman astar ediyoruz sabah süper erken. 1191 00:51:30,428 --> 00:51:33,400 Eğer size orada ilk alırsanız İlk yanı çıkmak istiyorum. 1192 00:51:33,400 --> 00:51:35,880 >> Ve böylece bu verilerin hepsi yapıları, kuyruklar ve yığınlar 1193 00:51:35,880 --> 00:51:39,220 ve diğerleri salkımları, seni çıkıyor Bu tıpkı bir dizi düşünebilirsiniz. 1194 00:51:39,220 --> 00:51:41,820 Bu, belki bir dizidir Sabit boyutu 4, ama istiyorum 1195 00:51:41,820 --> 00:51:44,990 biz sadece kazık eğer tür güzel olacak tepsiler neredeyse sonsuz uzun boylu biz eğer 1196 00:51:44,990 --> 00:51:46,780 birçok tepsileri veya numaraları vardır. 1197 00:51:46,780 --> 00:51:48,840 Bu yüzden belki biz istiyoruz Burada bağlantılı listesini kullanın, 1198 00:51:48,840 --> 00:51:51,800 ama ticaret-off olacak Potansiyel biz daha fazla bellek gerektiğini, 1199 00:51:51,800 --> 00:51:55,930 biraz daha fazla zaman alır, ama biz yığının yüksekliğini sınırı yok, 1200 00:51:55,930 --> 00:51:59,550 çok Mather'ın vitrinin gibi yığının boyutunu sınırlamak olabilir, 1201 00:51:59,550 --> 00:52:03,117 ve bu yüzden bu tasarım kararları veya vardır sonuçta bizim için mevcut seçenekler. 1202 00:52:03,117 --> 00:52:04,950 Bu verilerle Yani yapıları, biz başladık 1203 00:52:04,950 --> 00:52:09,360 Potansiyel yeni üst sınırları görme ne daha önce süper hızlı 1204 00:52:09,360 --> 00:52:11,260 ve biz bırakacağım nerede kapalı, bugün ve nerede 1205 00:52:11,260 --> 00:52:13,200 biz almak için umut olacak Çarşamba günü, biz olacak 1206 00:52:13,200 --> 00:52:15,740 Bir veri bakmaya başlar Bizi arama yapmanızı sağlar yapı 1207 00:52:15,740 --> 00:52:18,260 Günlük bitiş zamanında veri üzerinden yeniden. 1208 00:52:18,260 --> 00:52:21,470 Ve biz hafta sıfır, hatırlama, gördüm İkili arama veya bölmek olan ve bir 1209 00:52:21,470 --> 00:52:22,180 ve fethetmek. 1210 00:52:22,180 --> 00:52:26,240 Bu, henüz geri ve daha iyi geliyor Bu Çarşamba Holy Grail 1211 00:52:26,240 --> 00:52:29,510 ile gelip olacak Gerçekten çalışan veri yapısı 1212 00:52:29,510 --> 00:52:32,070 ya da teorik olarak zaman sabiti, bu sayede, 1213 00:52:32,070 --> 00:52:34,760 o kaç önemli değil milyonlarca ya da milyarlarca şeylerin 1214 00:52:34,760 --> 00:52:38,470 Biz veri yapısı var, o olacak Bize sürekli zaman alabilir, belki bir adım 1215 00:52:38,470 --> 00:52:41,387 veya iki adım veya 10 adım ama adımlarla sürekli sayılar 1216 00:52:41,387 --> 00:52:42,970 Bu veri yapısı üzerinden aramak için. 1217 00:52:42,970 --> 00:52:46,300 Bu gerçekten Kutsal Kâse olacak ama Çarşamba günü bu konuda daha fazla. 1218 00:52:46,300 --> 00:52:49,045 Sonra görüşürüz. 1219 00:52:49,045 --> 00:52:53,704 >> [MÜZİK OYUN] 1220 00:52:53,704 --> 00:56:08,448