1 00:00:00,000 --> 00:00:03,395 >> [MÜZİK OYUN] 2 00:00:03,395 --> 00:00:11,031 3 00:00:11,031 --> 00:00:13,280 DAVID J. MALAN: Bu gibi Bir çaylak seminer bugün. 4 00:00:13,280 --> 00:00:14,060 TAMAM. 5 00:00:14,060 --> 00:00:15,024 Dışarı Yani çok yağışlı. 6 00:00:15,024 --> 00:00:17,690 Bu Çarşamba meydana eğilimindedir, ama daha fırsatı 7 00:00:17,690 --> 00:00:18,700 sorular bugün. 8 00:00:18,700 --> 00:00:22,210 Yani aslında başlamak edelim sadece bir an film ile. 9 00:00:22,210 --> 00:00:24,560 Ama biz her zaman olduğu gibi görkemli başlayacağız. 10 00:00:24,560 --> 00:00:28,000 >> Bu CS50 ve bu Haftanın 4 sonudur. 11 00:00:28,000 --> 00:00:30,820 Hiç izledim Yani eğer Tv ya da film burada 12 00:00:30,820 --> 00:00:34,690 Bazı bilgisayar uzmanları var ve Polis ya da FBI, ya da bazı ajans 13 00:00:34,690 --> 00:00:36,930 Bazı yakalamaya çalışıyor düşman, iyi, sen ettik 14 00:00:36,930 --> 00:00:40,850 Muhtemelen ", geliştirmek" ifadesini duydu bu sayede o teknisyen nasılsa 15 00:00:40,850 --> 00:00:44,750 sihirli sonsuz yakınlaştırır suçluları görmek kadar 16 00:00:44,750 --> 00:00:48,640 kimlik veya plaka numarası Bir ayna bile ışıltı içinde 17 00:00:48,640 --> 00:00:50,390 ya da birinin gözünün ışıltı. 18 00:00:50,390 --> 00:00:55,196 Yani aslında, en az bir göz atalım Hollywood'dan birkaç tür sahneleri. 19 00:00:55,196 --> 00:00:55,862 [VİDEO OYNATMA] 20 00:00:55,862 --> 00:00:59,243 -Tamam, Şimdi sana iyi bir görünüm alır. 21 00:00:59,243 --> 00:01:06,488 22 00:01:06,488 --> 00:01:07,415 >> Bunu tut. 23 00:01:07,415 --> 00:01:08,267 Onu geri çalıştırın. 24 00:01:08,267 --> 00:01:09,121 >> -Bir dakika bekle. 25 00:01:09,121 --> 00:01:11,300 Sağa git. 26 00:01:11,300 --> 00:01:12,209 >> -Orada Bu dondurma. 27 00:01:12,209 --> 00:01:12,750 -Tam ekran. 28 00:01:12,750 --> 00:01:13,558 -Tamam, Bu dondurma. 29 00:01:13,558 --> 00:01:14,820 Eğer, bu konuda olacak kadar -Tighten? 30 00:01:14,820 --> 00:01:16,530 Bu üzerinde -Vector arka tekerleği ile adam. 31 00:01:16,530 --> 00:01:19,400 Burada bu noktada üzerinde -Zoom. 32 00:01:19,400 --> 00:01:22,846 Doğru ekipman -with görüntü genişlemiş ve bilenmiş olabilir. 33 00:01:22,846 --> 00:01:24,065 -Bu da ne? 34 00:01:24,065 --> 00:01:25,600 -Bu Bir donanım program. 35 00:01:25,600 --> 00:01:26,860 Bu kadar net bir sen misin? 36 00:01:26,860 --> 00:01:27,890 -Bilmiyorum. 37 00:01:27,890 --> 00:01:29,050 Şunu geliştirmek edelim. 38 00:01:29,050 --> 00:01:31,575 >> -Enhance Bölüm A6. 39 00:01:31,575 --> 00:01:33,642 >> -I Detay geliştirilmiş, ve-- ben olduğunu düşünüyorum 40 00:01:33,642 --> 00:01:35,433 geliştirmek için yeterli, Benim ekrana bırakın. 41 00:01:35,433 --> 00:01:37,080 -Ben Onun gözünde yansımasını gelişmiş. 42 00:01:37,080 --> 00:01:38,830 >> -Hadi Ile bu çalıştırıldığı video geliştirme. 43 00:01:38,830 --> 00:01:40,100 -Edgar, Bunu artırabilirsiniz? 44 00:01:40,100 --> 00:01:41,875 >> -Dayan. 45 00:01:41,875 --> 00:01:44,010 >> Bu yansıması üzerinde çalışıyor -Ben. 46 00:01:44,010 --> 00:01:44,995 >> -Biri Yansıması. 47 00:01:44,995 --> 00:01:45,495 -Reflection. 48 00:01:45,495 --> 00:01:47,399 Adamın yüzünün bir yansıması -İşte bu. 49 00:01:47,399 --> 00:01:48,065 -The Yansıması. 50 00:01:48,065 --> 00:01:48,981 Bir yansıması -İşte bu. 51 00:01:48,981 --> 00:01:50,600 Aynaya üzerinde -Zoom. 52 00:01:50,600 --> 00:01:52,712 -Bir Yansıma görebilirsiniz. 53 00:01:52,712 --> 00:01:54,350 Buradan imajını geliştirmek miyiz? 54 00:01:54,350 --> 00:01:55,370 Eğer burada onu geliştirmek miyiz? 55 00:01:55,370 --> 00:01:56,210 Bunu geliştirmek miyiz? 56 00:01:56,210 --> 00:01:56,900 Bunu geliştirmek misin? 57 00:01:56,900 --> 00:01:57,870 >> Bunu geliştirmek miyiz? 58 00:01:57,870 --> 00:01:58,717 >> Bunu geliştirmek miyiz? 59 00:01:58,717 --> 00:02:00,050 -Bekle Bir saniye, ben geliştirmek gerekir. 60 00:02:00,050 --> 00:02:00,924 Kapı üzerinde -Zoom. 61 00:02:00,924 --> 00:02:01,700 10 -Times. 62 00:02:01,700 --> 00:02:02,586 -Zoom. 63 00:02:02,586 --> 00:02:03,490 -Taşınmak. 64 00:02:03,490 --> 00:02:03,990 -Daha. 65 00:02:03,990 --> 00:02:04,690 Bekle, dur. 66 00:02:04,690 --> 00:02:05,190 -Dur. 67 00:02:05,190 --> 00:02:05,970 Bunu -Pause. 68 00:02:05,970 --> 00:02:09,460 Bize 75 derece -Döndür Dikey etrafında, lütfen. 69 00:02:09,460 --> 00:02:10,962 -Dur. 70 00:02:10,962 --> 00:02:14,040 Kısmına geri dön Yine kapı, yaklaşık. 71 00:02:14,040 --> 00:02:15,860 >> Bitmap bir görüntü artırıcı Yakaladım? 72 00:02:15,860 --> 00:02:18,776 >> -Hey, Belki Pradeep kullanabilirsiniz Sen yöntemi pencerelere görmek için. 73 00:02:18,776 --> 00:02:20,372 -Bu Yazılım sanat halidir. 74 00:02:20,372 --> 00:02:21,845 >> -The Özdeğer kapalıdır. 75 00:02:21,845 --> 00:02:24,300 >> Sağ -Kendinle algorithm-- kombinasyonu 76 00:02:24,300 --> 00:02:26,755 >> -Sigara Alınan eliminasyon sonraki seviyeye algoritmaları, 77 00:02:26,755 --> 00:02:28,730 ve ben bunları kullanabilirsiniz bu fotoğrafı geliştirmek. 78 00:02:28,730 --> 00:02:31,286 >> Üzerine -Lock ve z-eksenini büyütmek. 79 00:02:31,286 --> 00:02:32,560 >> -Enhance. 80 00:02:32,560 --> 00:02:33,100 >> -Enhance. 81 00:02:33,100 --> 00:02:33,600 >> -Enhance. 82 00:02:33,600 --> 00:02:34,960 -freeze Ve geliştirmek. 83 00:02:34,960 --> 00:02:37,180 >> [SON OYNATMA] 84 00:02:37,180 --> 00:02:41,160 >> DAVID J. MALAN: Pekala, Bunların hepsi aslında kelimelerdir. 85 00:02:41,160 --> 00:02:44,450 Onlar sadece bir araya sinirli konum Aslında mantıklı değil yol. 86 00:02:44,450 --> 00:02:48,400 Bunun gibi Ve aslında, CS50 ve kurslar TV ve filmler bir sürü berbat eğilimi 87 00:02:48,400 --> 00:02:48,900 senin için. 88 00:02:48,900 --> 00:02:52,330 Ne zaman o bilgisayar uzmanları Çünkü terimleri kapalı tehdidi ve diyorsun 89 00:02:52,330 --> 00:02:56,860 gibi fantezi şeyler özvektörler ve z-ekseni, 90 00:02:56,860 --> 00:02:59,572 ve diğer herhangi bir sayıda aslında daha teknik terimler, 91 00:02:59,572 --> 00:03:02,030 Onlar gerçekten sadece çekimi ediyoruz kelimeler birbirine çok sık. 92 00:03:02,030 --> 00:03:05,020 Bizim umutları biri olduğunu olduğunu, alma derslerin bir yan etkisi olarak 93 00:03:05,020 --> 00:03:08,245 Bu gibi olacak daha fazla kişi dünya aslında tartmak mümkün 94 00:03:08,245 --> 00:03:12,040 ve sadece çok hafif etkilemek Kalite ve bu filmlerin doğruluğu? 95 00:03:12,040 --> 00:03:14,350 >> Aslında, en gerçeklik bir göz atalım. 96 00:03:14,350 --> 00:03:18,070 Yani burada personel fotoğraf Meryem, bizim eğitim arkadaşlarının biri. 97 00:03:18,070 --> 00:03:20,050 Ve o olduğunu varsayalım bir şey şüpheli. 98 00:03:20,050 --> 00:03:23,730 Ve yine, bir ışığı var Onun gözünde kanıt bazı parça, 99 00:03:23,730 --> 00:03:25,480 ya da onu gözlük yansımasında. 100 00:03:25,480 --> 00:03:30,760 Peki, biz filmlerde tam olarak yaparsanız Biz yakınlaştırmak ve "geliştirmek" burada, teklif, 101 00:03:30,760 --> 00:03:34,080 Bu ne kadar bilgi olduğunu Mary yüzüne olduğu 102 00:03:34,080 --> 00:03:36,795 Bir görüntü çekerken orijinal çözünürlükte. 103 00:03:36,795 --> 00:03:39,120 >> Ve aslında, bu noktalar görebilirsiniz. 104 00:03:39,120 --> 00:03:41,900 Ve bunlar ne vardır adı piksel, P-I-X-E-L-S, 105 00:03:41,900 --> 00:03:45,740 hangi tipik bir kare Bu görüntüyü oluşturan bir noktadır. 106 00:03:45,740 --> 00:03:49,200 Ve geri gün ve aslında hatta Bugünün LED TV ile bazı Bugün 107 00:03:49,200 --> 00:03:51,950 veya LCD TV'ler, sen var ise Odanızda veya evde bir tane, 108 00:03:51,950 --> 00:03:55,100 ona süper yakın gitmek, ve eğer o biraz eski TV var, özellikle 109 00:03:55,100 --> 00:03:58,760 muhtemelen hatta bu noktalar görebilirsiniz ve bu bir görüntüyü kompoze budur. 110 00:03:58,760 --> 00:04:00,980 >> Ve artık orada Bu daha bilgiler. 111 00:04:00,980 --> 00:04:05,400 Biz anlamında, "geliştirmek" olabilir üzerinde ve çeşit şeyler yumuşatma 112 00:04:05,400 --> 00:04:09,040 tür, çeşit, ne çıkarım Renk Mary'nin gözüne yanında olmalı 113 00:04:09,040 --> 00:04:10,910 Böylece aslında o kadar pikselli değil. 114 00:04:10,910 --> 00:04:14,510 Ama yakınlaştırma devam edersen, orada Onun gözünde kötü adam olduğunu. 115 00:04:14,510 --> 00:04:16,600 Bunun gibi hepsi bilgi elimizde. 116 00:04:16,600 --> 00:04:18,920 Sen oluşturamazsınız yoktan bilgiler. 117 00:04:18,920 --> 00:04:20,790 Sadece bir sonlu var Orada bit sayısı. 118 00:04:20,790 --> 00:04:22,873 >> Problem Set 4, So Eğer bir fırsat var 119 00:04:22,873 --> 00:04:24,580 Dünyada bu tür oynamak için. 120 00:04:24,580 --> 00:04:27,610 Problem Set 4, sen ele alacağız grafik ve adli tıp dünyası, 121 00:04:27,610 --> 00:04:30,870 ve aslında kod yazmak Bu kayıp görüntüleri kurtarır. 122 00:04:30,870 --> 00:04:33,510 Sen kod yazmak edeceğiz mevcut görüntüleri manipüle 123 00:04:33,510 --> 00:04:36,120 ve sonuçta ne anlama başlık altında oluyor. 124 00:04:36,120 --> 00:04:38,540 >> Ve, o aslında, çıkıyor tüm bu karmaşık değil. 125 00:04:38,540 --> 00:04:41,320 Örneğin, eğer biz istedik Bir gülen yüz nerede temsil 126 00:04:41,320 --> 00:04:44,160 Bu siyah pikseller ile veya bu siyah noktalar, 127 00:04:44,160 --> 00:04:47,230 Evet, biz sadece temsil edebilecek Onları da gerçekten bir bitmap. 128 00:04:47,230 --> 00:04:50,040 Ve eğer hiç duymuştu ifade bitmap belki 129 00:04:50,040 --> 00:04:52,330 şimdi bir yapmaya başlar Biraz daha anlamda bugün. 130 00:04:52,330 --> 00:04:53,580 >> Biz zaten biraz ne olduğunu biliyorum. 131 00:04:53,580 --> 00:04:54,160 0 veya 1 var. 132 00:04:54,160 --> 00:04:56,201 Ve bir harita sadece bir şeydir bir kağıt parçası gibi 133 00:04:56,201 --> 00:04:59,180 Bu size yön verir ve sahip belki x ve y koordinatları bir tablo. 134 00:04:59,180 --> 00:05:00,540 Yani burada bir bit eşlem. 135 00:05:00,540 --> 00:05:03,680 Bu bit haritası bulunuyor böylece, bir 1 görünüşte 136 00:05:03,680 --> 00:05:07,857 beyaz pikseli temsil edecek ve 0 siyah pikseli temsil edecek. 137 00:05:07,857 --> 00:05:09,440 Ama biz kesinlikle bunu etrafında çevirmek olabilir. 138 00:05:09,440 --> 00:05:11,648 O gerçekten önemi yapar Biz tutarlı konum sürece. 139 00:05:11,648 --> 00:05:15,570 Ve burada iç binary-- olarak, nasıl Bir bilgisayar belleği, hatta içeride 140 00:05:15,570 --> 00:05:18,160 Sabit bir dosyanın drive-- saklamak olabilir 141 00:05:18,160 --> 00:05:20,240 gülen yüz görüntülerinin basit. 142 00:05:20,240 --> 00:05:23,990 Ama biz ne, tabii ki, Bu görüntüde eksik? 143 00:05:23,990 --> 00:05:24,610 Renk, değil mi? 144 00:05:24,610 --> 00:05:28,220 Bu bariz bir sonraki adım ya da geliştirme renk ile bu geliştirmek. 145 00:05:28,220 --> 00:05:32,230 Yani maalesef sadece tek bir tıklama ile bit, 0 ya da 1, Rengini temsil edebilir. 146 00:05:32,230 --> 00:05:36,100 Yani, kırmızı veya mavi olabilir, ya da olabilir Siyah ya da beyaz veya yeşil veya pembe, 147 00:05:36,100 --> 00:05:37,420 veya renk herhangi çiftleri. 148 00:05:37,420 --> 00:05:40,860 Ama basitlik aşkına, biz olacak Sadece siyah ve beyaz varsayalım. 149 00:05:40,860 --> 00:05:45,930 >> Yani mantıklı biz eğer ihtiyacımız ne biz Bir görüntüdeki renk uygulamak ister misin? 150 00:05:45,930 --> 00:05:49,080 Ne yapmalıyız? 151 00:05:49,080 --> 00:05:51,900 Burada sınırlayıcı faktör eğer gibi bu bir bit ile sadece can olduğunu 152 00:05:51,900 --> 00:05:55,977 iki devlet, 0 veya 1 beyaz temsil ya da siyah, ne yapmak istiyorsun? 153 00:05:55,977 --> 00:05:56,810 HEDEF KİTLE: Daha fazla veri. 154 00:05:56,810 --> 00:05:58,813 DAVID J. MALAN: Daha bit, evet daha fazla veri, daha fazla bit. 155 00:05:58,813 --> 00:06:01,440 Ve aslında, tam olarak nasıl Renkli görüntülerin temsil edilmektedir. 156 00:06:01,440 --> 00:06:05,120 Tek bir bit kullanmak yerine, bir 0 veya her piksel için 1, her nokta, 157 00:06:05,120 --> 00:06:06,170 Sadece birden fazla kullanın. 158 00:06:06,170 --> 00:06:09,660 Belki, belki daha yaygın, 8 kullanın Problem Set, aslında 24 kullanın ve 159 00:06:09,660 --> 00:06:13,300 4, bir dosya ile oynayacak tipik olarak 24 bit kullanır biçimi. 160 00:06:13,300 --> 00:06:15,430 >> Ama çoğunuz muhtemelen JPEG aşina. 161 00:06:15,430 --> 00:06:17,460 Hiç geçtiniz Telefonunuza bir fotoğraf, 162 00:06:17,460 --> 00:06:20,360 veya yüklenen veya bir şey görüldü Facebook'tan veya fiske, herhangi bir sayıda 163 00:06:20,360 --> 00:06:24,882 fotoğraf tabanlı web siteleri, sen ettik Muhtemelen daha önce JPEG görüntü görüldü. 164 00:06:24,882 --> 00:06:27,840 Ve bu dosya, çıkıyor biçimi biz Pset 4 kullanmak için gidiyoruz 165 00:06:27,840 --> 00:06:30,340 böylece sen gidiyorsun görüntüleri kurtarmak zorunda 166 00:06:30,340 --> 00:06:35,160 Yanlışlıkla bir sildiğiniz olduğunu Kamerada bozuk hafıza kartı, 167 00:06:35,160 --> 00:06:35,800 eğer sen. 168 00:06:35,800 --> 00:06:38,490 >> Ve çıkıyor ki olsa bile JPEG oldukça sophisticated-- olduğunu 169 00:06:38,490 --> 00:06:40,906 çok daha sofistike siyah ve beyaz noktalardan daha 170 00:06:40,906 --> 00:06:44,480 var çünkü biz bir an önce gördüm aslında fantezi algoritmaları 171 00:06:44,480 --> 00:06:47,410 bu nedenle, bir JPEG sıkıştırmak için kullanılır Eğer gerçekten güzel bir olabileceğini, 172 00:06:47,410 --> 00:06:49,832 kaliteli resim ama kullanan görece az sayıda bit. 173 00:06:49,832 --> 00:06:51,790 Ve biz geri geleceğiz uzun zaman önce sıkıştırma. 174 00:06:51,790 --> 00:06:56,280 İlk çıkıyor JPEG image-- üç bayt 175 00:06:56,280 --> 00:07:02,750 olursa olsun bir fotoğrafı çekilen kadarıyla of-- değerleri 255, 216, 255 bulunmaktadır. 176 00:07:02,750 --> 00:07:05,990 >> Diğer bir deyişle, eğer sadece bit o desen bakın, 177 00:07:05,990 --> 00:07:09,180 üç olarak burada temsil bayt veya 24 bit, toplam 178 00:07:09,180 --> 00:07:13,810 yüksek olasılıkla bunu çıkarabiliriz Bu ilk üç ona bakıyor 179 00:07:13,810 --> 00:07:15,230 Bir JPEG bayt. 180 00:07:15,230 --> 00:07:18,040 Ve bu nedir bilinen olmasıdır Bir JPEG imza olarak. 181 00:07:18,040 --> 00:07:20,540 Dosya formatları bir çok başlatmak için orada eğilimi dışında 182 00:07:20,540 --> 00:07:23,735 0 ve 1 belirli desenleri ile, Bu, Windows ve Mac OS ve iOS yüzden, 183 00:07:23,735 --> 00:07:28,272 Android biliyorum dosyanın ne tür Sözde dosyasına ek olarak, bulunmaktadır 184 00:07:28,272 --> 00:07:29,730 uzantılı dosyaların bir sürü var. 185 00:07:29,730 --> 00:07:32,590 Eğer .jpg varsa, işte bilgisayara başka ipucu. 186 00:07:32,590 --> 00:07:35,310 >> Yani şimdi bu bak diyelim daha teknik biraz. 187 00:07:35,310 --> 00:07:37,390 Biz biliyoruz ondalık Sistem 0 ile 9 arasında olduğunu. 188 00:07:37,390 --> 00:07:38,740 Biz ikili 0 ve 1 olduğunu biliyorum. 189 00:07:38,740 --> 00:07:41,842 Ve Pset geri düşünüyorsanız 0, biz sizinle güreş vardı 190 00:07:41,842 --> 00:07:43,800 Biraz, bir şey için onaltılık olarak adlandırılan, 191 00:07:43,800 --> 00:07:47,320 16 basamak var burada, 10 yerine veya 2 yerine. 192 00:07:47,320 --> 00:07:50,405 Ve bu rakam, kongre tarafından, Daha sonra 9 ve 0 ile 193 00:07:50,405 --> 00:07:55,040 f ne temsil f aracılığıyla sadece hızlı aklı olarak ondalık sayı, 194 00:07:55,040 --> 00:07:56,640 kontrol ettiniz mi? 195 00:07:56,640 --> 00:07:57,610 Yani, 15. 196 00:07:57,610 --> 00:08:01,390 Ve adil tarafından, 10 temsil etmelidir Ben verdiğim sipariş doğası. 197 00:08:01,390 --> 00:08:04,350 Bu, sadece bir keyfi var kongre ama oldukça standart. 198 00:08:04,350 --> 00:08:06,870 >> Bu desen bakmak Yani eğer Üç atalım bytes-- 199 00:08:06,870 --> 00:08:09,620 sadece bakmak başlar nasıl tutarlı bir şekilde 200 00:08:09,620 --> 00:08:12,450 Genellikle bilgisayar bilimcileri bakmak ve dosyalar hakkında düşünüyorum. 201 00:08:12,450 --> 00:08:15,580 Kesinlikle düşünmek olabilir 0s dosyalar ve 1'ler ve ondalık, 202 00:08:15,580 --> 00:08:19,340 ama gerçekte, biz ikili kullanma eğiliminde ya da daha fazla, tipik olarak hexadecimal-- 203 00:08:19,340 --> 00:08:20,760 geri Pset 0 dan. 204 00:08:20,760 --> 00:08:25,857 Bu yüzden bana teklif izin vermenizi 255, 216, 255 ve 0 ve 1 sadece bu kalıpları vardır. 205 00:08:25,857 --> 00:08:28,440 Ve sen bu olmadığını kontrol edebilirsiniz Hafta 0 dan matematik yapmak istiyorum. 206 00:08:28,440 --> 00:08:30,810 Ama, şimdi, sadece varsayalım bu gerçekten doğrudur. 207 00:08:30,810 --> 00:08:33,850 Ben sadece üç ondalık yeniden yazıldı ettik Üç ikili değerler olarak sayılar. 208 00:08:33,850 --> 00:08:36,100 Şimdi ne yapacağım ise sadece bazı beyaz boşluk eklemek, 209 00:08:36,100 --> 00:08:37,266 Sadece okunabilirliği aşkına. 210 00:08:37,266 --> 00:08:39,940 Ve haber, ben sadece gidiyorum şeyleri birbirinden hareket etmek için. 211 00:08:39,940 --> 00:08:43,090 Yani önce, sonra daha önce, sonra. 212 00:08:43,090 --> 00:08:46,180 Ben diğer ilginç bir şey yapıyorum sadece bu yüzden şeyler yayılan daha 213 00:08:46,180 --> 00:08:50,380 Bu haber sekiz her set bit artık dört bitlik iki takım olduğunu. 214 00:08:50,380 --> 00:08:54,920 Bu onaltılı nedeniyle yararlıdır Özellikle moda 215 00:08:54,920 --> 00:09:00,930 Çünkü her onaltılık basamak 0 ile f, ya da daha özel olarak 0 ile 15, 216 00:09:00,930 --> 00:09:03,430 temsil edilebilir Tam dört bit ile. 217 00:09:03,430 --> 00:09:07,960 Bir başka deyişle, onaltılık eğer Sadece 0000 var, bir 0 temsil etmek istiyorum, 218 00:09:07,960 --> 00:09:08,780 Dört sıfır. 219 00:09:08,780 --> 00:09:13,997 Ve 15 temsil etmek istiyorsanız, Bu dört bit olan, 1111 var. 220 00:09:13,997 --> 00:09:16,080 Ve sen matematik yaparsanız, Bu olanlar yer ise, 221 00:09:16,080 --> 00:09:18,210 Bu, 16s yerdir Bu sen-- vermek için gidiyor 222 00:09:18,210 --> 00:09:19,960 yerine o gidiyor Özür aşağıdaki amaçlara, ikili, 223 00:09:19,960 --> 00:09:23,660 Bu 15 size vermek için gidiyor, olanları yer, twos yer, ayak ve sekizli yer. 224 00:09:23,660 --> 00:09:26,821 Bu yüzden bana o teklif izin solundaki dört bit dizisi 225 00:09:26,821 --> 00:09:28,070 Biz f aramak için gidiyoruz budur. 226 00:09:28,070 --> 00:09:30,110 En büyük sayı sen Dört bit ile temsil edebilir. 227 00:09:30,110 --> 00:09:33,300 Ve biz zaten onaltılık biliyoruz, f onaltılık en büyük rakamdır. 228 00:09:33,300 --> 00:09:36,020 Biz, orada başka bir f var İki oraya daha. 229 00:09:36,020 --> 00:09:38,980 Ve şimdi, sadece inanç almak Ben matematik hakkı yapmış 230 00:09:38,980 --> 00:09:41,890 ve sol yarım bu bit, 1101, 231 00:09:41,890 --> 00:09:43,980 onaltılık d aynı şeydir. 232 00:09:43,980 --> 00:09:46,490 Ve sağ el, 1000, sadece 8'dir. 233 00:09:46,490 --> 00:09:48,140 >> Ve o kadar kolay kimse sağ görmek için? 234 00:09:48,140 --> 00:09:51,670 8 represents-- doğru bu Sekiz yer altında. 235 00:09:51,670 --> 00:09:56,040 Bu yüzden eights sütununda bir tane var ve ayak, ikişer veya olanları hiçbir şey. 236 00:09:56,040 --> 00:09:59,830 Yani şimdi daha geleneksel, insanlar eğilimi Böyle onaltılık basamak yazmak için, 237 00:09:59,830 --> 00:10:03,000 Sadece birlikte onları ezmek ve sonra 0x onları öneki. 238 00:10:03,000 --> 00:10:05,920 Bu başka bir şey ifade Bir human-- görsel ipucu 239 00:10:05,920 --> 00:10:10,350 Burada onaltılık value-- çünkü geliyor aksi takdirde açık olmayabilir. 240 00:10:10,350 --> 00:10:13,629 >> Hangi ki sonuçta söylemek için sıfırlar ve olanları desen, 241 00:10:13,629 --> 00:10:16,170 veya onaltılık modeli basamak eşdeğer sen o 242 00:10:16,170 --> 00:10:18,990 aramaya başlamak için gidiyoruz Sorun Set 4 bu-- olduğunu 243 00:10:18,990 --> 00:10:22,120 ve Problem Set 4 spec yürüyecek Daha fazla detail-- Bu yoluyla size 244 00:10:22,120 --> 00:10:25,344 ancak Arcane tür olarak gerçekleştirmek Bu, ilk bakışta görünebilir 245 00:10:25,344 --> 00:10:27,010 Bu çok görmeye başlamak için gidiyoruz. 246 00:10:27,010 --> 00:10:30,320 Ve aslında, hatta GDB içinde, ayıklayıcı biz Pazartesi günü tanıtıldı 247 00:10:30,320 --> 00:10:35,440 ve Dan Pset 3, gidiyor tanıttı sık sık size onaltılık değerler göstermek için 248 00:10:35,440 --> 00:10:39,910 Sadece onlar daha olma eğilimindedir, çünkü ondalık veya ikili daha geleneksel 249 00:10:39,910 --> 00:10:41,157 bilgisayar dünyasında. 250 00:10:41,157 --> 00:10:42,490 Şimdi bağlam içine bu etsinler. 251 00:10:42,490 --> 00:10:48,040 Birçoğunuz bu hatırlayabilir ve Neyden geldiği, burada hayal? 252 00:10:48,040 --> 00:10:51,240 Vista, bu yüzden bile daha önce Bu, Windows XP, bu ilk yaptı. 253 00:10:51,240 --> 00:10:52,620 Yani bu güzel bir manzara olduğunu. 254 00:10:52,620 --> 00:10:55,940 Ve aslında, online-- etrafında kurcalamak ise Ben bir Wikipedia makalesi olduğunu düşünüyorum, 255 00:10:55,940 --> 00:11:00,110 burada birileri çok şaşırtıcı dışarı gitti Bulunan Dünyada bu konum kurmak 256 00:11:00,110 --> 00:11:02,240 Onun ya da onu kamera içinde tam doğru duymak yüzden 257 00:11:02,240 --> 00:11:06,510 ve bu bugün öyle gözüküyor ki-- ama tam olarak aynı ayar var. 258 00:11:06,510 --> 00:11:10,060 Bu görüntü olsa da, bir dosyada ise format bitmap, b-m-s. 259 00:11:10,060 --> 00:11:12,910 Ve biz bir süper almaya gidiyoruz Bunun ne anlama geldiğini de hızlı bir bakış. 260 00:11:12,910 --> 00:11:17,770 >> Ama bitmap sadece farklı bir yoludur temsil eden görüntüler hala pikselleri kullanarak 261 00:11:17,770 --> 00:11:19,580 0 ve 1 de sonuçta. 262 00:11:19,580 --> 00:11:23,282 Ama hızlı bir bakışta, sahip olduğu Bir daha ilginç imza 263 00:11:23,282 --> 00:11:24,490 Dosyanın başında. 264 00:11:24,490 --> 00:11:26,670 Sadece üç değil bayt yerine var 265 00:11:26,670 --> 00:11:30,770 bayt desen bir sürü Bu anlam önceden belirlenmiş oylandı. 266 00:11:30,770 --> 00:11:34,490 Örneğin, bir yerde Bir bitmap görüntüsünün ilk birkaç bayt 267 00:11:34,490 --> 00:11:37,440 boyutu olacak Görüntü, görüntü genişliği, 268 00:11:37,440 --> 00:11:40,390 Resim yüksekliği, yani kullanışlı meta, eğer sen. 269 00:11:40,390 --> 00:11:43,940 Faydalı bilgiler olduğunu Photoshop veya herhangi bir grafik kullandığınız programı 270 00:11:43,940 --> 00:11:45,180 Aslında umurumda olabilir. 271 00:11:45,180 --> 00:11:47,170 >> Bu konuda Böylece daha fazla Problem 4 Set, ancak bu 272 00:11:47,170 --> 00:11:49,220 demek sadece günün sonunda 273 00:11:49,220 --> 00:11:52,390 Eğer kullanmakta olduğunuz tüm dosya biçimlerini senedir Microsoft Word dosyaları için, 274 00:11:52,390 --> 00:11:55,820 Sayılar dosyaları, Excel dosyaları, dosya formatları herhangi bir sayı 275 00:11:55,820 --> 00:11:57,770 Bazı olabilir Bilinen dosya uzantısı 276 00:11:57,770 --> 00:12:00,130 Kaputun altında sadece 0'lar ve 1'ler vardır. 277 00:12:00,130 --> 00:12:02,970 Ve insanlar karar verdik sözleşmeler ne, 278 00:12:02,970 --> 00:12:08,340 Ne 0 ve 1 desenleri temsil Word, Excel dosyası karşı dosyası 279 00:12:08,340 --> 00:12:10,322 diğer dosya formatlarını herhangi bir sayı karşı. 280 00:12:10,322 --> 00:12:12,780 Pset 4 Yani, bir gerekecek fırsat bu ile oynamak. 281 00:12:12,780 --> 00:12:14,405 >> Ama ne bir yapı var demek. 282 00:12:14,405 --> 00:12:18,012 Bu artık gerçekten güzel bir segue olduğunu Sadece bir çift vardır içine C, 283 00:12:18,012 --> 00:12:20,220 ek özellikleri olduğunu Henüz bakmadım. 284 00:12:20,220 --> 00:12:24,230 Oldukça küçük bir dil ve biri C hakkında güzel özellikleri olan bir yapıdır. 285 00:12:24,230 --> 00:12:27,300 Örneğin, eğer haydi represent-- istedim 286 00:12:27,300 --> 00:12:33,690 Eğer bir değişken var istedim söylüyorlar Bazı programda bir öğrenci temsil eder. 287 00:12:33,690 --> 00:12:37,330 Belki bir ders yazarken Kayıt program veya çekirdek alışveriş 288 00:12:37,330 --> 00:12:38,870 aracı, ya da onun gibi bir şey. 289 00:12:38,870 --> 00:12:42,922 Ilgili verilerin parçaları nelerdir akla gelen bir öğrenciye? 290 00:12:42,922 --> 00:12:44,880 Bir öğrenci gibi hangi değerleri temsil? 291 00:12:44,880 --> 00:12:45,732 Evet? 292 00:12:45,732 --> 00:12:46,940 Bir öğrenci olarak bir isim var. 293 00:12:46,940 --> 00:12:48,900 Tipik bir öğrenci başka ne var? 294 00:12:48,900 --> 00:12:49,320 >> HEDEF KİTLE: [duyulamaz] 295 00:12:49,320 --> 00:12:50,200 >> DAVID J. MALAN: Peki, özür dilerim. 296 00:12:50,200 --> 00:12:50,660 >> HEDEF KİTLE: Yaş. 297 00:12:50,660 --> 00:12:52,980 >> DAVID J. MALAN: Bir yaş ya da doğum günü eşdeğer, evet. 298 00:12:52,980 --> 00:12:53,557 Başka? 299 00:12:53,557 --> 00:12:54,390 HEDEF KİTLE: Kimlik numarası? 300 00:12:54,390 --> 00:12:57,460 DAVID J. MALAN: belki Yani bir kimlik numarası, Bir telefon numarası, belki bir yurt veya ev, 301 00:12:57,460 --> 00:12:58,670 kolej, ya da onun gibi bir şey ya. 302 00:12:58,670 --> 00:13:01,820 Veri parçalarının herhangi bir sayı olduğunu Eğer kişi listenizde olabilir 303 00:13:01,820 --> 00:13:03,890 Bir öğrenci tanımlayabilirsiniz budur. 304 00:13:03,890 --> 00:13:08,490 Biz kodda, bunu yapmak istedim eğer öyleyse, Bu gibi basit bir şey yapmak gerekebilir. 305 00:13:08,490 --> 00:13:15,670 Biz böylece bir program olabilir vardır, diyelim int main (void) izin verin. 306 00:13:15,670 --> 00:13:18,920 Ve ben bir temsil etmek istiyorsanız Ben mesela, olabilir öğrenci, 307 00:13:18,920 --> 00:13:24,330 Bu öğrenci için isim adında bir dize, Bu öğrenci için yurt adında bir dize, 308 00:13:24,330 --> 00:13:26,900 Belki bir int o öğrenci için kimliğini çağırdı. 309 00:13:26,900 --> 00:13:30,840 Ve ben dize kullanıyorum, çünkü CS50.h. geri dönün ve yukarı koymak gerekir 310 00:13:30,840 --> 00:13:33,300 Belki stdio.h ihtiyacım gidiyorum. 311 00:13:33,300 --> 00:13:38,190 Bu yüzden bana preemptively olanlar yapalım ve ben Şimdilik bu student.c arayacağım 312 00:13:38,190 --> 00:13:40,080 ve bu kaydedin. 313 00:13:40,080 --> 00:13:44,206 >> Ve şimdi ben bir şey yapabilirim Bu değişkenler ile. 314 00:13:44,206 --> 00:13:46,830 Ve biz sadece yazmak için gidiyoruz Bu sözde kodda bir açıklama olarak, 315 00:13:46,830 --> 00:13:48,829 ilginç değil çünkü şimdi için ne. 316 00:13:48,829 --> 00:13:51,242 Tamam, bu bir program olduğunu nasılsa bir öğrenci saklar. 317 00:13:51,242 --> 00:13:53,450 Ben ne yapmalı istiyorsun ben iki öğrenci depolamak istiyor? 318 00:13:53,450 --> 00:13:55,991 Yani benim ilk içgüdüsü gidiyor Bir dakika bekleyin, tamam olmak, 319 00:13:55,991 --> 00:14:01,920 Başka bir öğrenci varsa neden yok Sadece dize adı 2, dize yurt 2 yapın 320 00:14:01,920 --> 00:14:04,190 int id2. 321 00:14:04,190 --> 00:14:06,540 Ve biz gitmiş yaptık Bu yolda önce aşağı 322 00:14:06,540 --> 00:14:10,890 ve ne gibi görünüyor bizim çözüm neydi Bir hackish kopya macun tür olarak 323 00:14:10,890 --> 00:14:11,555 Burada iş? 324 00:14:11,555 --> 00:14:12,346 HEDEF KİTLE: bir dizi. 325 00:14:12,346 --> 00:14:13,830 DAVID J. MALAN: Evet, Biz bir dizi kullanabilirsiniz. 326 00:14:13,830 --> 00:14:15,620 Tam bu çok hızlı bir şekilde hantal hale gelir. 327 00:14:15,620 --> 00:14:18,453 Sen keyfi sıralamak zorunda tüm bu değişkenler adlandırma başlar. 328 00:14:18,453 --> 00:14:22,190 Ve sen, insan, tutmak zorunda Tamam name2 tekabül izlemek 329 00:14:22,190 --> 00:14:25,060 dorm2 ile ID2 karşılık gelir. 330 00:14:25,060 --> 00:14:26,200 Bu sadece bir karışıklık olur. 331 00:14:26,200 --> 00:14:29,350 Bu yüzden, çok daha kolay Bir kaç hafta önce hatırlarsanız, 332 00:14:29,350 --> 00:14:34,300 aradı dize isimlere sahip olmaya ve belki de bize bu üç ver. 333 00:14:34,300 --> 00:14:36,940 Ve sonra belki var Dize Yurtlar ve sahip 334 00:14:36,940 --> 00:14:41,900 Bu üç ya da bir sabit ile, kimlikleri int ve bu üç var. 335 00:14:41,900 --> 00:14:45,250 Ama şimdi bile bu hissediyor Biraz özensiz, doğru. 336 00:14:45,250 --> 00:14:49,440 Henüz öğrenci ve hakkında konuşuyor Ben gerçekten düşük seviyede konut ediyorum 337 00:14:49,440 --> 00:14:50,470 uygulama detayları. 338 00:14:50,470 --> 00:14:52,790 Öğrenci bir isim ve yurt ve kimliğidir. 339 00:14:52,790 --> 00:14:59,814 >> Neden sadece bir değişken bildirmek olamaz Öğrenci denir ve s diyoruz. 340 00:14:59,814 --> 00:15:02,230 Ve ben başka bir öğrenciyi istiyorsanız, neden sadece t demiyorlar. 341 00:15:02,230 --> 00:15:05,260 Ya ben bir sürü istiyorsanız Öğrencilerin, neden sadece yok 342 00:15:05,260 --> 00:15:09,740 Ben bütün bir sınıf var demek Öğrenciler ve üçü var. 343 00:15:09,740 --> 00:15:12,470 Başka bir deyişle, neden gelemiyorum denilen benim kendi veri türü, ile 344 00:15:12,470 --> 00:15:15,641 Öğrenci içinde olan bir Bir isim, bir kimliği bir yurt olduğunu, 345 00:15:15,641 --> 00:15:16,890 Diğer alanlarda herhangi bir sayıdır. 346 00:15:16,890 --> 00:15:19,030 Ve seni çıkıyor tam olarak bunu yapabilirsiniz. 347 00:15:19,030 --> 00:15:21,850 >> Yani C yapı olarak adlandırılan bu özellik vardır. 348 00:15:21,850 --> 00:15:24,700 Bu bir dil özelliği olduğunu Bize tam olarak bunu yapmak için izin verir. 349 00:15:24,700 --> 00:15:28,370 Ben devam edeceğim ve structs.h açmak 350 00:15:28,370 --> 00:15:32,299 biz görmek nereye gidiyoruz Bir öğrencinin tanımı aşağıdaki. 351 00:15:32,299 --> 00:15:35,215 Bu çıkıyor - ve bu bile var bir kimlik kapsayan bir daha basit 352 00:15:35,215 --> 00:15:36,080 az önce. 353 00:15:36,080 --> 00:15:39,120 Eğer ile gelmek isterseniz Ev yapımı veri türü, 354 00:15:39,120 --> 00:15:42,750 ve int ek ve char ve , mevcut ve tüm bu diğerlerini yüzer 355 00:15:42,750 --> 00:15:45,810 kelimenin tam anlamıyla bunu yapabilirsiniz typedef struct yazma, 356 00:15:45,810 --> 00:15:47,880 sonra bazı kaşlı, Hangi içinde size 357 00:15:47,880 --> 00:15:51,460 İstediğiniz değişkenleri listelemek Bu yeni özel verileri ile ilişkilendirmek 358 00:15:51,460 --> 00:15:55,670 Bir isim ve bir yatakhane gibi yazın ve daha sonra kaşlı ayraçlar sonra 359 00:15:55,670 --> 00:15:57,860 Yeni veri türü için bir ad verin. 360 00:15:57,860 --> 00:15:59,220 Yani, örneğin, öğrenci. 361 00:15:59,220 --> 00:16:03,247 >> Ve şimdi ne bu konuda güzel olduğunu Biz gelen kod bakarsanız, 362 00:16:03,247 --> 00:16:05,080 İlk kongre, Tüm bu koymak için 363 00:16:05,080 --> 00:16:08,230 Bir dosya diye bir şey nokta h, biz değil bir başlık dosyası, 364 00:16:08,230 --> 00:16:09,780 Çok fazla kendimizi kullanmaya başladı. 365 00:16:09,780 --> 00:16:12,120 Ama biz başlatmak için gidiyoruz Şimdi biraz kullanarak. 366 00:16:12,120 --> 00:16:18,650 Ve biz bu ile neler yapabileceğinizi, sonuçta, bu kod birkaç satırlık 367 00:16:18,650 --> 00:16:22,130 tam beyan edilir veri türü, bir öğrenci. 368 00:16:22,130 --> 00:16:23,230 Ve şimdi bunu kullanalım. 369 00:16:23,230 --> 00:16:27,274 >> Ben şimdi gitmek için gidiyorum Bir dosya structs1.c çağırdı. 370 00:16:27,274 --> 00:16:29,440 Ve en bir göz atalım Burada birkaç özellikleri. 371 00:16:29,440 --> 00:16:32,250 Yani buraya şeyler Çoğunlukla tanıdık ve yaparız 372 00:16:32,250 --> 00:16:35,040 ne değildir geri gelmek sadece bir an tanıdık. 373 00:16:35,040 --> 00:16:39,880 Bu tabii benim kendi de dahil olmak üzere yanı sıra yeni başlık dosyası, 374 00:16:39,880 --> 00:16:42,580 Pset 3 hariç olmak üzere, hatırlama, biz helpers.h var. 375 00:16:42,580 --> 00:16:45,150 Yani #include helpers.h çağırmak olabilir. 376 00:16:45,150 --> 00:16:49,381 >> Neden olsa tırnak kullanıyorum yerine açılı parantez içinde? 377 00:16:49,381 --> 00:16:50,630 Ne zaman aralarında seçmeliyim? 378 00:16:50,630 --> 00:16:52,310 Neredeyse her zaman görünüyor açılı parantez kullanmak için. 379 00:16:52,310 --> 00:16:55,040 Ve sonra, bir bütün aniden üzerinde çizgi altı Ben çift tırnak kullanıyorum. 380 00:16:55,040 --> 00:16:55,860 Neden olabilir? 381 00:16:55,860 --> 00:16:56,700 Evet? 382 00:16:56,700 --> 00:16:57,725 >> HEDEF KİTLE: [duyulamaz] 383 00:16:57,725 --> 00:16:59,350 DAVID J. MALAN: Yani, ne gerçek bir değil mi? 384 00:16:59,350 --> 00:17:00,559 HEDEF KİTLE: Bu senin IDE var. 385 00:17:00,559 --> 00:17:02,475 DAVID J. MALAN: Evet, O benim gerçek IDE içinde. 386 00:17:02,475 --> 00:17:05,690 Ve, çünkü en IDE üzerinde durmak vermeyelim sadece ben kullanıyorum bir araçtır. 387 00:17:05,690 --> 00:17:08,119 Bu benim akımı var Dizin, özellikle. 388 00:17:08,119 --> 00:17:11,647 Yani structs.h kendi dosya IDE yüklü değil, 389 00:17:11,647 --> 00:17:14,480 işletim sisteminin kendisi, daha ziyade benim geçerli dizinde var. 390 00:17:14,480 --> 00:17:16,910 Yani kongre isterseniz olduğunu Kendi başlık dosyası dahil, 391 00:17:16,910 --> 00:17:18,200 Sadece çift tırnak kullanın. 392 00:17:18,200 --> 00:17:23,290 >> Biz bu şeyi diyorsunuz ne hat 8, genel anlamda? 393 00:17:23,290 --> 00:17:25,200 Bu nedir? 394 00:17:25,200 --> 00:17:28,220 #define şey. 395 00:17:28,220 --> 00:17:31,040 Bu hak, sabitleri temsil? 396 00:17:31,040 --> 00:17:33,140 Eğer olmasını istiyorsanız Programda, değer 397 00:17:33,140 --> 00:17:35,110 Eğer bütün kullanmanızı kez demet, bu kadar 398 00:17:35,110 --> 00:17:39,330 o dışarı faktör kongre iyi karma sembolü ile, beyan 399 00:17:39,330 --> 00:17:43,340 Sonuç olarak, kongre tarafından, daha sonra, tanımlamak o değil ama word-- harfe 400 00:17:43,340 --> 00:17:45,320 kesinlikle gerekli fakat İnsan kongre var 401 00:17:45,320 --> 00:17:47,210 sabitleri yararlanmak için Onlar dışarı atlamak böylece 402 00:17:47,210 --> 00:17:50,380 Eğer boşluk visually-- at ve sonra istediğiniz değeri olduğu 403 00:17:50,380 --> 00:17:52,250 Bu sabitin adını eşdeğer. 404 00:17:52,250 --> 00:17:56,110 Hiçbir noktalı virgül, ama sadece sen Oradaki desen izleyin. 405 00:17:56,110 --> 00:17:57,770 >> Peki bu gerçek kod yapıyor duyuyorum. 406 00:17:57,770 --> 00:18:00,660 Yani bir göz atalım Burada ana program. 407 00:18:00,660 --> 00:18:04,080 Hat 12 çünkü ben structs.h dahil ettik, 408 00:18:04,080 --> 00:18:06,492 Ben şimdi de sihirli var benim bertaraf yeni bir veri türü. 409 00:18:06,492 --> 00:18:09,200 Ben sadece, int erişiminiz yok ve kömür ve şamandıra ve dize, 410 00:18:09,200 --> 00:18:10,060 ve mavi ve diğerleri. 411 00:18:10,060 --> 00:18:12,470 Şimdi erişimi Bir öğrenci veri türü. 412 00:18:12,470 --> 00:18:17,740 Hat 12, ben ikisini birleştiren ediyorum Yani , bir özel veri tipi ve iki ideas-- 413 00:18:17,740 --> 00:18:18,940 bir dizi kullanarak. 414 00:18:18,940 --> 00:18:21,700 Ve böylece bu programda eğer Aslında desteklemek istiyorum 415 00:18:21,700 --> 00:18:24,320 Üç farklı öğrenciler Benim programda, ben 416 00:18:24,320 --> 00:18:30,480 Bana bir değişken vermek demek sadece edebilirsiniz her biri adlandırılan öğrencilerin, 417 00:18:30,480 --> 00:18:32,970 tip öğrencileri, hangi benim özel veri türüdür. 418 00:18:32,970 --> 00:18:35,890 Ve özellikle, bana ver Benim dizide olanların üç. 419 00:18:35,890 --> 00:18:37,750 >> Yani şimdi bu programda ne iş yapıyorsun? 420 00:18:37,750 --> 00:18:40,670 İşte sadece bir döngü iterating için var çünkü o, 0 ila 3 arasında 421 00:18:40,670 --> 00:18:42,110 Öğrencilerin değeri nedir. 422 00:18:42,110 --> 00:18:44,420 Ben sadece kullanıcıya sorulmadan ediyorum Bana öğrencinin ismini verin. 423 00:18:44,420 --> 00:18:48,090 Sonra hattı 17, biz çoğunlukla tanıdık bir çizgi var. 424 00:18:48,090 --> 00:18:50,370 Bizim eski dostumuz var Sağdaki getString. 425 00:18:50,370 --> 00:18:52,345 Sözdizimi ve hangi parça , görünüşe göre yeni 426 00:18:52,345 --> 00:18:55,130 Eğer daha önce C programlanmış hiç eğer, ve yapılar kullanılmış hiç? 427 00:18:55,130 --> 00:18:55,510 Evet? 428 00:18:55,510 --> 00:18:56,417 >> HEDEF KİTLE: .name. 429 00:18:56,417 --> 00:18:57,500 DAVID J. MALAN: .name. 430 00:18:57,500 --> 00:19:01,220 Ama bu, bir sıçrama çok fazla değil Şimdi öğrenciler i paranteze çünkü 431 00:19:01,220 --> 00:19:02,590 Size i-inci öğrenci verir. 432 00:19:02,590 --> 00:19:04,730 Ve dalmak istiyorsanız bu yapının içinde 433 00:19:04,730 --> 00:19:09,490 Eğer sadece tek bir süre kullanmak ve Daha sonra iç değişkenin adı, 434 00:19:09,490 --> 00:19:11,900 ya da iç mülkiyet Eğer erişmek istiyorum. 435 00:19:11,900 --> 00:19:14,816 Benzer sonra, ben o zaman soracak eğer Kullanıcı, bana öğrencinin yurt verin 436 00:19:14,816 --> 00:19:18,390 Eğer benzer o saklayabilirsiniz içeride yurt değişkeni string 437 00:19:18,390 --> 00:19:19,940 O öğrenci yapısının. 438 00:19:19,940 --> 00:19:21,410 >> Ve şimdi işler biraz fantezi olsun. 439 00:19:21,410 --> 00:19:24,420 Ve bu bakmaya gidiyor belki bir sürü çok yakında. 440 00:19:24,420 --> 00:19:27,970 Ama Pset bu çok daha görürsünüz 4, bu yüzden şimdi ona sadece bakışta gelelim. 441 00:19:27,970 --> 00:19:33,364 Bu hat 23 yoluyla çıkıyor 38, ben belki yapıyorum ne düşünüyorsunuz? 442 00:19:33,364 --> 00:19:35,530 Ben yorum kaldırdık Bugün, ancak versiyonu için 443 00:19:35,530 --> 00:19:38,660 online kod referans Tüm yorumları vardır. 444 00:19:38,660 --> 00:19:40,171 Ben yapıyor olması ne görünüyor? 445 00:19:40,171 --> 00:19:42,530 >> HEDEF KİTLE: Tüm dosyayı kaydetme kullanıcının girdiği bilgiler. 446 00:19:42,530 --> 00:19:44,530 >> DAVID J. MALAN: Evet, tam olarak bu yeni bir yoludur 447 00:19:44,530 --> 00:19:46,370 biz iki görüyorsanız o, C bir diğer özelliği, 448 00:19:46,370 --> 00:19:48,700 bu sayede kendim dosyaları oluşturabilirsiniz. 449 00:19:48,700 --> 00:19:51,580 Bugüne kadar hemen hemen her program yazdım seni vatansız olduğunu. 450 00:19:51,580 --> 00:19:53,334 En kısa sürede çalışmakta bitti gibi o kadar. 451 00:19:53,334 --> 00:19:55,000 Bellek veya onun hatırlama var. 452 00:19:55,000 --> 00:19:56,110 Kaydedilen bir dosya var. 453 00:19:56,110 --> 00:19:58,120 Ama istiyorsun eğer sahip girişi kaydetmek 454 00:19:58,120 --> 00:20:02,100 Bir oyun veya program gibi oldu, Bu gibi biz bunu yapabilirsiniz çıkıyor. 455 00:20:02,100 --> 00:20:04,360 Ve bunu daha göreceksiniz Pset 4 ve Bölüm. 456 00:20:04,360 --> 00:20:08,661 Ama bu hat 23 esasen students.csv adlı bir dosya oluşturur. 457 00:20:08,661 --> 00:20:10,160 Ve daha önce bu görmüş olabilir. 458 00:20:10,160 --> 00:20:14,250 Daha önce CS okudu hiç olsanız bile, CSV virgülle ayrılmış değişkenler olduğunu. 459 00:20:14,250 --> 00:20:19,000 Bu çok kötü bir adam gibi Bir Excel dosyasının sürümü, 460 00:20:19,000 --> 00:20:22,270 bu da açılabilir demektir Excel'de ve Apple Sayılarla, 461 00:20:22,270 --> 00:20:23,830 ve satır ve sütun vardır. 462 00:20:23,830 --> 00:20:26,485 Ama bu özel bir değil Microsoft veya Apple'ın gibi biçimi. 463 00:20:26,485 --> 00:20:29,840 Bu ayıran sadece virgül var Biz bir an görürsünüz değerler. 464 00:20:29,840 --> 00:20:31,010 >> Ve sadece bir tahmin almak. 465 00:20:31,010 --> 00:20:33,480 Çok satırında 23 yılında sonunda, benim ikinci argüman 466 00:20:33,480 --> 00:20:37,700 olarak adlandırılan bu yeni işlev f dosya açıkken açık w. 467 00:20:37,700 --> 00:20:39,430 W Ne göstermek olabilir? 468 00:20:39,430 --> 00:20:40,022 Evet? 469 00:20:40,022 --> 00:20:41,260 >> HEDEF KİTLE: Bu dosyaya yazabilirsiniz? 470 00:20:41,260 --> 00:20:42,630 >> DAVID J. MALAN: Bu sağlar Dosyaya yazma. 471 00:20:42,630 --> 00:20:44,810 Yani varyantları bir çift var biz burada takabilirsiniz. 472 00:20:44,810 --> 00:20:47,184 Ama sadece okumak istiyorsanız Dosya, o bakmak olduğunu 473 00:20:47,184 --> 00:20:50,010 ve belleğe sizi okumak Sadece alıntı Alıntı sonu "r" kullanın. 474 00:20:50,010 --> 00:20:53,110 Eğer yazmak isterseniz Dosya, "w" unquote alıntı kullanın. 475 00:20:53,110 --> 00:20:55,190 Orada da eklemek var ve Diğer şeylerin bir çift 476 00:20:55,190 --> 00:20:57,356 Varolan dosyaları değiştirmek istiyorum. 477 00:20:57,356 --> 00:21:00,480 Şimdi bu görmeye devam edeceğiz 24 satır bir şey, o zaman biz geri geleceğiz. 478 00:21:00,480 --> 00:21:02,640 NULL, o çıkıyor, bir Özel bir değer olduğunu 479 00:21:02,640 --> 00:21:06,070 belirli işlevleri tarafından iade edilebilir bir şey wrong-- gitti eğer 480 00:21:06,070 --> 00:21:08,490 Dosya yoksa, bellek tükendi ettik, 481 00:21:08,490 --> 00:21:09,620 Diğer hatalar veya bir demet. 482 00:21:09,620 --> 00:21:13,470 Ama şimdi, hadi bu varsayalım Sadece konvansiyonel hata denetleme olduğunu. 483 00:21:13,470 --> 00:21:17,090 İşte hat 26, ben yineleme ediyorum 0'dan tüm öğrenciler üzerinde 3. 484 00:21:17,090 --> 00:21:20,470 Ve bu tür tür Yeni işlev, fprintf, 485 00:21:20,470 --> 00:21:21,460 ama sadece bir tahmin almak. 486 00:21:21,460 --> 00:21:24,370 Printf sadece baskı ise biçimlendirilmiş bir dize 487 00:21:24,370 --> 00:21:26,507 fprintf muhtemelen ne anlama geliyor? 488 00:21:26,507 --> 00:21:27,590 HEDEF KİTLE: Dosyaya yazdırın. 489 00:21:27,590 --> 00:21:29,290 DAVID J. MALAN: Yazdır Bir dosyaya formatlanmış dize. 490 00:21:29,290 --> 00:21:31,180 Bu ek ne var f aracı dosyasıdır. 491 00:21:31,180 --> 00:21:36,420 Ve yeni ilk argüman olmak zorunda Dosyanızı temsil eden değişken. 492 00:21:36,420 --> 00:21:38,866 Sonra biz sadece bir formata sahip sadece printf gibi dize. 493 00:21:38,866 --> 00:21:40,740 Ve hatta bu olsa sözdizimi, bu sadece, yeni 494 00:21:40,740 --> 00:21:44,610 Öğrencinin adına fiş demektir, Öğrenci yurt plug-in ve daha sonra 495 00:21:44,610 --> 00:21:47,160 fclose ile dosyayı kapatın. 496 00:21:47,160 --> 00:21:49,730 Sonra, bu yeni lastly-- ve biz bu geri geleceğiz 497 00:21:49,730 --> 00:21:53,240 Ben azat ediyorum long-- önce nedenlerle Öğrenci 498 00:21:53,240 --> 00:21:54,860 orada kadar yukarıda oldu. 499 00:21:54,860 --> 00:21:56,820 Ama biz geri geleceğiz edilene long-- önce 500 00:21:56,820 --> 00:21:59,820 çünkü GetString kadar bir bulunuyor Aslında başlık altında çalışan. 501 00:21:59,820 --> 00:22:01,280 >> Yani burada hızlı bir göz atalım. 502 00:22:01,280 --> 00:22:04,380 Benim dizinde ls yazarsanız, I do not fark 503 00:22:04,380 --> 00:22:09,360 , students.csv adında bir dosya var Sadece orada değil, yok. 504 00:22:09,360 --> 00:22:14,965 Ben şimdi bu programı derlemek Yani, , yapılar-1 yapın. / yapılar-1, 505 00:22:14,965 --> 00:22:20,570 ve ben devam edin ve yazın gidiyorum Yale'de Berkeley yaşayan Andi. 506 00:22:20,570 --> 00:22:26,350 Biz Rob zorunda gidiyoruz kim Bugünlerde Thayer yaşıyor. 507 00:22:26,350 --> 00:22:33,760 Ve en nerede ile gelip izin , sanırım, Maria, Mather ise 508 00:22:33,760 --> 00:22:35,100 eğer doğru hatırladım. 509 00:22:35,100 --> 00:22:36,460 >> Yani hiçbir şey olmuyor. 510 00:22:36,460 --> 00:22:40,680 Ama şimdi ls yazarsanız, students.csv vardır. 511 00:22:40,680 --> 00:22:43,080 En önde ve açık students.csv gidelim. 512 00:22:43,080 --> 00:22:46,050 Bu yine çok olduğunu Hafif dosya biçimi. 513 00:22:46,050 --> 00:22:49,570 Ama ben sadece bir kongre kabul ettik ben burada iki satır ve sütunları vardır. 514 00:22:49,570 --> 00:22:52,020 İlk sütun İnsanların ilk isimler. 515 00:22:52,020 --> 00:22:55,740 İkinci sütun öğrencinin ise yurt, veya üniversite ya da ev veya etajer. 516 00:22:55,740 --> 00:22:57,900 Ve şimdi ben bu biriktirdim kalıcı bir dosya. 517 00:22:57,900 --> 00:22:59,280 >> Yani tüm bu ilginç değil. 518 00:22:59,280 --> 00:23:02,980 Ama bu sadece bir atlama taşı artık bilgi devam edememek 519 00:23:02,980 --> 00:23:04,040 kalıcı. 520 00:23:04,040 --> 00:23:08,340 Peki şimdi ne daha biz görelim Bu ve diğer özellikleri ile yapmak. 521 00:23:08,340 --> 00:23:10,729 Ama önce, herhangi bir sorunuz var mı? 522 00:23:10,729 --> 00:23:12,145 O çok oldu, ve bu kadar hızlı oldu. 523 00:23:12,145 --> 00:23:16,131 Ama bir sürü görürsünüz Pset 4 daha, hem de. 524 00:23:16,131 --> 00:23:16,630 Evet? 525 00:23:16,630 --> 00:23:19,360 >> HEDEF KİTLE: bir yolu var mı Bu dosyaya isim ekleyerek devam edecek mi? 526 00:23:19,360 --> 00:23:19,880 >> DAVID J. MALAN: İyi bir soru. 527 00:23:19,880 --> 00:23:21,800 Devam etmek için bir yolu var mı Bu dosyaya isim ekleyerek? 528 00:23:21,800 --> 00:23:22,340 Evet. 529 00:23:22,340 --> 00:23:24,630 Ve aslında, sen sonuna eğer yukarı, dosyayı yeniden açarak 530 00:23:24,630 --> 00:23:26,780 Eğer teklifi kullanmak istiyorsunuz unquote "a" Append için, 531 00:23:26,780 --> 00:23:31,090 hangi sadece yeni bir satır eklemek istiyorum, bir Yeni hat tekrar ve tekrar, kesinlikle. 532 00:23:31,090 --> 00:23:32,010 İyi soru. 533 00:23:32,010 --> 00:23:32,950 Diğer sorular? 534 00:23:32,950 --> 00:23:33,450 Evet? 535 00:23:33,450 --> 00:23:35,580 HEDEF KİTLE: kaçtın ise Program yine şimdi, 536 00:23:35,580 --> 00:23:38,000 o isimler eklemeye devam ediyorum dosya veya yeni bir dosya açmak istiyorum? 537 00:23:38,000 --> 00:23:38,740 >> DAVID J. MALAN: Ah, iyi bir soru. 538 00:23:38,740 --> 00:23:41,448 Yine doğru programı çalıştırdıysanız Şimdi, belki de yeni isimler yazdığınız, 539 00:23:41,448 --> 00:23:44,820 o dosyaya eklemek istiyorum ya da dosyanın üzerine? 540 00:23:44,820 --> 00:23:47,420 İkincisi, ben olduğum için Ekleme modunu kullanarak değil. 541 00:23:47,420 --> 00:23:49,930 Ve ben sadece körü körüne olduğum için yazma dosyasını açarken, 542 00:23:49,930 --> 00:23:51,310 Sadece dosyanın üzerine yazmak için gidiyor. 543 00:23:51,310 --> 00:23:54,570 Yani gerçekten eklemek yapmanız gerekir, Ben aslında uzun vadeli olmasını istiyorsanız 544 00:23:54,570 --> 00:23:55,350 veri tabanı. 545 00:23:55,350 --> 00:23:58,220 >> Şimdi CSV bile, açıkçası, yararlıdır için gibi iseniz writing-- 546 00:23:58,220 --> 00:24:00,100 ve sonunda bu göreceğiz Daha sonra ne zaman yarıyılda 547 00:24:00,100 --> 00:24:01,455 diğer amaçlar için CSV'leri kullanımı. 548 00:24:01,455 --> 00:24:04,920 Eğer tüm insanlar saklamak istiyorsanız Kim, kimi olay için kayıt yaptırdı 549 00:24:04,920 --> 00:24:07,420 ya da öğrenci için kaydoldum grup, veya böyle bir şey, 550 00:24:07,420 --> 00:24:10,330 Bu tür bir veri saklamak biçimi süper uygundur. 551 00:24:10,330 --> 00:24:12,580 Kelimenin tam anlamıyla Çünkü ben eğer Bu dosyayı indirmek için vardı. 552 00:24:12,580 --> 00:24:14,540 Ben double-- olabilir ve en doğrusu bu deneyelim 553 00:24:14,540 --> 00:24:16,720 Ben burada Excel veya Numaraları varsa. 554 00:24:16,720 --> 00:24:19,130 >> Doğru tıklama gidiyorum ya da benim dosyayı kontrol tıklayın. 555 00:24:19,130 --> 00:24:20,020 Whoops. 556 00:24:20,020 --> 00:24:21,830 Sağ tıklayın veya dosyamı kontrolü tıklatın. 557 00:24:21,830 --> 00:24:24,960 Hadi, benim fare işbirliği değil. 558 00:24:24,960 --> 00:24:32,694 Ben gidiyorum Download-- işte tüm dosyaları indirmek 559 00:24:32,694 --> 00:24:33,860 Sadece bu yüzden bu bir yakalayabilir. 560 00:24:33,860 --> 00:24:37,850 Ve bu işler bakalım students.csv-- ilk kez 561 00:24:37,850 --> 00:24:39,310 Ben aktif ettik. 562 00:24:39,310 --> 00:24:41,360 Şimdi onlar benim kişileri görmek istiyorum. 563 00:24:41,360 --> 00:24:44,310 Şimdi, ben kayıt olmanız gerekmektedir. 564 00:24:44,310 --> 00:24:47,620 O CSV'leri kullanmanın ne kadar kolay olduğunu görmek? 565 00:24:47,620 --> 00:24:50,840 Evet, bunu güncel tutmak. 566 00:24:50,840 --> 00:24:52,375 Tamam, şimdi biz sınıf için hazırız. 567 00:24:52,375 --> 00:24:58,750 568 00:24:58,750 --> 00:25:00,370 Oh, tamam, yeni ne var? 569 00:25:00,370 --> 00:25:02,920 Tamam, yakındır. 570 00:25:02,920 --> 00:25:04,750 O büyülü oldu. 571 00:25:04,750 --> 00:25:07,280 Tamam, şimdi biz güncellemeniz gerekir. 572 00:25:07,280 --> 00:25:10,890 Ve şimdi, ne unuttum Ben başlangıçta açılan dosya, 573 00:25:10,890 --> 00:25:13,090 ama orada A- ne gitmek. 574 00:25:13,090 --> 00:25:16,341 Tamam, şimdi biz bir Excel dosyası var. 575 00:25:16,341 --> 00:25:18,290 Teşekkür ederim. 576 00:25:18,290 --> 00:25:20,764 >> Tamam, ben yaptım yani ne kolay kısmıydı. 577 00:25:20,764 --> 00:25:23,930 Tabii ki önceden yüklenmiş olabilir Excel veya Sayılar, ya da her neyse programı. 578 00:25:23,930 --> 00:25:25,846 Ama bu, çünkü güzel şimdi işleyebilirsiniz 579 00:25:25,846 --> 00:25:28,090 standart bir formatta veri. 580 00:25:28,090 --> 00:25:30,294 >> Bu yüzden şimdi diyelim bağlam Biz kaldığı yerden geçmek 581 00:25:30,294 --> 00:25:32,710 başlatmak için son kez Eğitim tekerlekleri çıkarmak. 582 00:25:32,710 --> 00:25:34,543 Ama önce, değil mi Bu erken öğle bakın 583 00:25:34,543 --> 00:25:38,150 Yine Ateş burada oluyor ve New Haven Cambridge, Sitar Buz. 584 00:25:38,150 --> 00:25:43,150 Asap CS50s web sitesinde kaydol CS50 öğrenci ve personel katılmak için. 585 00:25:43,150 --> 00:25:46,090 >> Bu yüzden eğitim jantlar aldı Pazartesi günü kapalı olarak follows-- 586 00:25:46,090 --> 00:25:49,120 Dize ilan edildi Bir süre CS50s kütüphanesi. 587 00:25:49,120 --> 00:25:52,650 O verdiğinden Ve bu güzel Bize varlık olarak değişkenlere hakkında konuşmak 588 00:25:52,650 --> 00:25:54,660 tam kelime ve cümleler ve daha fazlası. 589 00:25:54,660 --> 00:25:56,710 Ama yok dize çıkıyor. 590 00:25:56,710 --> 00:26:00,200 Bu sadece bir eş anlamlısı, ya da diğer adıdır, Biz bir şey için oluşturduğunuz o 591 00:26:00,200 --> 00:26:03,780 aslında biraz daha fazla Teknik * bir char çağırdı. 592 00:26:03,780 --> 00:26:07,900 >> Ve gerçekten biz bir örnek gördüm Pazartesi günü bir program 593 00:26:07,900 --> 00:26:11,200 biz beklendiği gibi davranmasına oldukça etmedi. 594 00:26:11,200 --> 00:26:13,630 Bu karşılaştırma-0, dosya oldu. 595 00:26:13,630 --> 00:26:17,910 Ve eğer, o karşılaştırmak-0 hatırlama Ben Pazartesi günkü programını yeniden derleyin 596 00:26:17,910 --> 00:26:22,670 ve run-0 karşılaştırmak ve annemi yazın Yine küçük harflerle küçük ve anne. 597 00:26:22,670 --> 00:26:25,320 Program I ısrar farklı şeyler yazın 598 00:26:25,320 --> 00:26:29,210 Hatta anne, tüm gerçi küçük, görsel aynıdır. 599 00:26:29,210 --> 00:26:31,990 Yani kısa cevap neydi Bilgisayar düşünüyor niçin 600 00:26:31,990 --> 00:26:34,500 Bu iki dizeleri farklı? 601 00:26:34,500 --> 00:26:35,250 Evet? 602 00:26:35,250 --> 00:26:36,534 >> HEDEF KİTLE: [duyulamaz] 603 00:26:36,534 --> 00:26:37,450 DAVID J. MALAN: Doğru. 604 00:26:37,450 --> 00:26:39,600 Yani, anne, ilk kez Ben ediliyor, o yazdığınız 605 00:26:39,600 --> 00:26:42,710 Bilgisayarımın yıllarda yerde saklanan Bellek ama farklı bir konumda 606 00:26:42,710 --> 00:26:44,690 İkinci kez daha ben anne yazın. 607 00:26:44,690 --> 00:26:46,580 Şimdi kesinlikle optimize edilebilir. 608 00:26:46,580 --> 00:26:49,205 Bilgisayar akıllı olabilir ve hey, bu iki dizeleri gerçekleştirmek 609 00:26:49,205 --> 00:26:49,954 onlar aynılar. 610 00:26:49,954 --> 00:26:51,520 Bana yedekli saklayın vermeyelim. 611 00:26:51,520 --> 00:26:54,229 Ama bilgisayarlar bunu yapma optimizasyon onlara anlatmak edilmiştir. 612 00:26:54,229 --> 00:26:56,061 Yani, varsayılan olarak, onlar Sadece sonuna kadar gidiyor 613 00:26:56,061 --> 00:26:57,670 bellekte iki farklı yerde. 614 00:26:57,670 --> 00:27:01,570 Ve böylece, ne zaman daha net olması için biz iki dizeleri karşılaştırıldığında 615 00:27:01,570 --> 00:27:03,950 İlk denirdi s, İkinci çağrıldı 616 00:27:03,950 --> 00:27:08,530 t, özellikle ben ne hat 13 burada karşılaştırarak? 617 00:27:08,530 --> 00:27:09,494 Evet. 618 00:27:09,494 --> 00:27:12,390 >> HEDEF KİTLE: Bu bellekte yer Değişken işaret edeceği. 619 00:27:12,390 --> 00:27:14,900 >> DAVID J. MALAN: Kesinlikle, ben belleğinde yer karşılaştırırken 620 00:27:14,900 --> 00:27:16,300 o değişkenlerin işaret etti. 621 00:27:16,300 --> 00:27:20,560 Yani özellikle eğer anne oldu byte numarası 1 ve 2 ve 3, 622 00:27:20,560 --> 00:27:24,020 ve 4-- çünkü ters eğik çizgi hatırlıyorum 0 sonunda tüm yol olması gerekiyor. 623 00:27:24,020 --> 00:27:29,420 Ve anne, m-o-m diğer örneği, adresi 10, 11, 12 ve 13 idi. 624 00:27:29,420 --> 00:27:33,100 Ben 1 karşılaştırarak oldu, o adres, belleğinde bu konumu, 625 00:27:33,100 --> 00:27:35,160 10'a karşı, ki bu Açıkçası değil aynı. 626 00:27:35,160 --> 00:27:36,260 1 10 değildir. 627 00:27:36,260 --> 00:27:39,620 >> Yani bu ki güzel oldukça basittir. 628 00:27:39,620 --> 00:27:42,870 Ama o kadar sürece sorunlu Biz dizeleri karşılaştırmak için görünmüyor olabilir. 629 00:27:42,870 --> 00:27:44,930 Yani fundamentally-- ve bu düşük seviyede, 630 00:27:44,930 --> 00:27:47,300 Eğer uygulamak istedim Bir program karşılaştırmak 631 00:27:47,300 --> 00:27:50,270 iki ayrı kelime olduğunu Kullanıcı, kalite yazdığınız etti 632 00:27:50,270 --> 00:27:53,944 onlar için kömürü sıraya do Sadece genel anlamda karakter, 633 00:27:53,944 --> 00:27:55,360 ne görünüşe yapmak gerekiyor? 634 00:27:55,360 --> 00:27:57,940 Sadece yeterli değil Bu iki adreslerine bak. 635 00:27:57,940 --> 00:27:58,860 Ne yapmamız gerekiyor? 636 00:27:58,860 --> 00:27:59,360 Evet? 637 00:27:59,360 --> 00:28:01,120 >> HEDEF KİTLE: yineleme string [duyulamaz]. 638 00:28:01,120 --> 00:28:02,600 >> DAVID J. MALAN: Evet, haydi dize üzerinden yineleme. 639 00:28:02,600 --> 00:28:05,808 En döngü, bir süre döngü için bir kullanma izin veya Kendinizi en rahat konum ne olursa olsun. 640 00:28:05,808 --> 00:28:08,840 Ve biz bir yerde iki dizeleri var eğer bellekte, birbirlerinin yıllardan bakalım 641 00:28:08,840 --> 00:28:11,770 İlk karakter, sonra her saniye var karakter, daha sonra üçüncü ve dördüncü, 642 00:28:11,770 --> 00:28:15,206 ve beşinci biz girene kadar Ne özel Sentinel değeri var mı? 643 00:28:15,206 --> 00:28:16,080 HEDEF KİTLE: [duyulamaz] 644 00:28:16,080 --> 00:28:18,800 DAVID J. MALAN: Evet, ters eğik çizgi Sıfır ya dizesinde hangi noktada 645 00:28:18,800 --> 00:28:20,100 Biz işte bu karar verebilirsiniz. 646 00:28:20,100 --> 00:28:21,970 Biz her karakter eşleşti mı? 647 00:28:21,970 --> 00:28:22,990 Değilse, return false. 648 00:28:22,990 --> 00:28:24,770 Eğer öyleyse, doğru dönmek. 649 00:28:24,770 --> 00:28:28,800 Ve böylece bu ne bu sürümü tam olarak Programın karşılaştırmak-1.c yapar. 650 00:28:28,800 --> 00:28:31,677 Bu aynıdır ne ben oldum hariç Pazartesi baktı 651 00:28:31,677 --> 00:28:34,760 gerçi kelimesinin string-- kurtulmak kazanılmış tüm fonksiyonel impact-- sahip 652 00:28:34,760 --> 00:28:37,450 Ben şimdi yapıyorum kaldırıyor Bazı görsel eğitim jantlar, 653 00:28:37,450 --> 00:28:40,880 ama açıkça görmek için s ve t adresleri. 654 00:28:40,880 --> 00:28:43,020 Ve bu ne yıldızı Yıldız işareti temsil eder, 655 00:28:43,020 --> 00:28:46,690 Bir adres normalde bilinen olduğunu daha teknik bir işaretçi olarak. 656 00:28:46,690 --> 00:28:49,880 >> Yani ben s bildirirken hat 9 ve char * s demek, 657 00:28:49,880 --> 00:28:52,160 Bu bana bir dize vermek anlamına gelmez. 658 00:28:52,160 --> 00:28:56,360 Bu bana olan bir değişken vermek anlamına gelir Hayatta amaç bir adres saklamaktır. 659 00:28:56,360 --> 00:29:00,400 Ben koymak üzereyim çünkü içine bir dize adresi. 660 00:29:00,400 --> 00:29:03,500 Gerçekten de, GetString olmak net bir dize dönmez. 661 00:29:03,500 --> 00:29:06,110 Bu Annemi dönmez eğik sıfır, per se olarak. 662 00:29:06,110 --> 00:29:10,005 Özellikle ne getString yok ve hassas dönmek? 663 00:29:10,005 --> 00:29:10,880 HEDEF KİTLE: [duyulamaz] 664 00:29:10,880 --> 00:29:14,080 DAVID J. MALAN: Bir adres, İlk karakterin adresi 665 00:29:14,080 --> 00:29:16,070 Bazı dize o aldı. 666 00:29:16,070 --> 00:29:19,250 Ve şimdi biz görüyoruz Yine bir özel anahtar kelime. 667 00:29:19,250 --> 00:29:20,640 Ve ben bu daha önce değindiğim. 668 00:29:20,640 --> 00:29:23,620 Bu iyi bir kongre olacak Şimdi tekrar görürsünüz. 669 00:29:23,620 --> 00:29:27,540 Ben emin olmak için kontrol ediyorum s boş değildir ve t boş değil. 670 00:29:27,540 --> 00:29:30,100 Gerçekten kız kardeşimle dayalı olduğundan Hızlı Mansiyon önce, 671 00:29:30,100 --> 00:29:35,510 GetString değil dönerse ne anlama geldiğini Bir adres ama yine, N-U-L-L, 672 00:29:35,510 --> 00:29:36,990 Bazı özel değeri var mı? 673 00:29:36,990 --> 00:29:37,890 >> HEDEF KİTLE: Hata. 674 00:29:37,890 --> 00:29:38,600 >> DAVID J. MALAN: Bu bir hata değil. 675 00:29:38,600 --> 00:29:39,550 Bir şeyler yanlış gitti. 676 00:29:39,550 --> 00:29:41,341 Peki tipik Özellikle, meydana gelebilecek 677 00:29:41,341 --> 00:29:45,162 strings-- hangi olabilir advance-- bilinmeyen uzunluğunun 678 00:29:45,162 --> 00:29:46,870 belki bilgisayarların bellek yetersiz, belki 679 00:29:46,870 --> 00:29:49,280 Böyle a yazdığınız Uzun bir kelime veya cümle 680 00:29:49,280 --> 00:29:51,880 ya da büyük bir deneme yapıştırılan Sadece yeterli bellek var. 681 00:29:51,880 --> 00:29:55,340 Ve böylece GetString geri dönemezsiniz her şeyi adresi, 682 00:29:55,340 --> 00:29:56,620 bu yüzden sadece bir şey verir. 683 00:29:56,620 --> 00:30:00,580 Ve bu bir hata oldu diyor Özel NULL değeri döndürerek. 684 00:30:00,580 --> 00:30:02,890 Tabiri caizse, sıfır adresi. 685 00:30:02,890 --> 00:30:06,157 >> Şimdi çıkıyor C ile geliyor Bu yineleme yapar işlevi. 686 00:30:06,157 --> 00:30:09,240 Biz bu uygulamak zorunda değilsiniz döngü veya while döngüsüne kendimiz için. 687 00:30:09,240 --> 00:30:11,150 Biz işlevini kullanabilirsiniz, özlü denilen 688 00:30:11,150 --> 00:30:15,400 kimin, comp karıştırın, veya dize karşılaştırmak Hayatta amaç tam olarak yapmaktır. 689 00:30:15,400 --> 00:30:19,990 Bunu iki işaretçiler, iki adres vermek, ve bu adreslere gidecek 690 00:30:19,990 --> 00:30:23,130 ve daha sonra da mektubu karşılaştırmak kalite harfi için harf, 691 00:30:23,130 --> 00:30:26,610 Gerçek nedir yalnızca durdurma? 692 00:30:26,610 --> 00:30:31,540 Sezgisel comp karıştırın ne zaman Sadece net ilerlerken olmak durdurmak? 693 00:30:31,540 --> 00:30:35,400 O bir ters eğik çizgi 0 çarptığında ya Dize, bu noktada o karar verebilirsiniz 694 00:30:35,400 --> 00:30:38,910 Her şey, uyumlu olan veya Bir tutarsızlık olmuştur? 695 00:30:38,910 --> 00:30:42,740 >> Şimdi bu çalışma ve eğer öyleyse, denemek Bizim küçük harf oyunu, 696 00:30:42,740 --> 00:30:49,260 bu yüzden karşılaştırmak-1, ./compare-1 yapmak ve küçük harflerle iki kere annemi yazın. 697 00:30:49,260 --> 00:30:50,560 Şimdi aynı şey. 698 00:30:50,560 --> 00:30:54,080 Ve ben tekrar yapmak durumunda küçük ve belki büyük. 699 00:30:54,080 --> 00:30:56,720 Şimdi gerçekten ayırt üst ve küçük arasındadır. 700 00:30:56,720 --> 00:31:00,440 Yani bütün o sert veya büyülü, ama şimdi açıklıyor 701 00:31:00,440 --> 00:31:03,140 Ne başlık altında oluyor. 702 00:31:03,140 --> 00:31:07,640 >> Bu yüzden daha fazla biz özü ne Dersin bu tür? 703 00:31:07,640 --> 00:31:08,980 Yani bu bir göz atalım. 704 00:31:08,980 --> 00:31:15,380 Devam edin ve bir yazmak için gidiyorum Hızlı programı burada kopya 0 çağırdı. 705 00:31:15,380 --> 00:31:21,594 Ve şimdi önde aslında gidelim , kopyasını-0 ile bu-- yapalım 706 00:31:21,594 --> 00:31:23,010 Burada ne var bir göz atın. 707 00:31:23,010 --> 00:31:24,712 Ben ilk kullanıcı anlatmak, bir şey söyle. 708 00:31:24,712 --> 00:31:26,420 Sonra bir dize almak ve ben s onu saklanır. 709 00:31:26,420 --> 00:31:29,810 S eşitse Sonra kontrol NULL eşittir, sadece 1 döndürür. 710 00:31:29,810 --> 00:31:31,590 Yani bu sadece standart hata denetimi olduğunu. 711 00:31:31,590 --> 00:31:33,112 Ilginç bir şey oldu. 712 00:31:33,112 --> 00:31:36,320 Ve aslında, biz hata kurtulmak eğer kontrol, bu hafta 1 kod gibi görünüyor 713 00:31:36,320 --> 00:31:36,985 o anda. 714 00:31:36,985 --> 00:31:39,110 Ama olsun başladım Bu konuda biraz daha iyi. 715 00:31:39,110 --> 00:31:43,340 >> Şimdi hattı 16, bir hafta önce, belki Hatta bir kaç gün veya dakika önce, 716 00:31:43,340 --> 00:31:46,720 Eğer çizgi 16 diyebilirsiniz Değişken olarak adlandırılan t oluşturma 717 00:31:46,720 --> 00:31:48,219 ve kopyalama içine s. 718 00:31:48,219 --> 00:31:50,010 Ve bu mükemmel var: Makul paket. 719 00:31:50,010 --> 00:31:51,560 Ama şimdi daha hassas olması. 720 00:31:51,560 --> 00:31:54,190 16 hattı neler oluyor? 721 00:31:54,190 --> 00:31:56,170 Ne kopyalanan oluyor sağa sola doğru? 722 00:31:56,170 --> 00:31:56,669 Evet? 723 00:31:56,669 --> 00:31:58,490 HEDEF KİTLE: t s adresini alıyor mu? 724 00:31:58,490 --> 00:32:01,220 >> DAVID J. MALAN: Kesinlikle, t s adresini oluyor. 725 00:32:01,220 --> 00:32:05,170 Ben gidersem Yani, şimdi açık olmak geri o erken örnek 726 00:32:05,170 --> 00:32:08,520 ve ben yazdığınız şeyi çizin. 727 00:32:08,520 --> 00:32:11,640 Ve ben yazdıklarınızla açmayız burada s, ve burada 728 00:32:11,640 --> 00:32:15,830 Ben bir yere yazdığınız ne hafıza, anne ve ardından ters eğik çizgi 729 00:32:15,830 --> 00:32:17,840 Benim için eklenen oluyor 0. 730 00:32:17,840 --> 00:32:23,060 Ne ben burada saklanan, hatırlama Bu, konum 1, 2, 3, 4, olduğu 731 00:32:23,060 --> 00:32:24,655 Bu s şu anda ne olduğunu. 732 00:32:24,655 --> 00:32:29,220 Hat 16 Yani, eğer beni vermek demek Başka bir değişken olarak adlandırılan t ve mağaza 733 00:32:29,220 --> 00:32:33,590 s değerinde de ne Burada saklanan gets anne olmaz 734 00:32:33,590 --> 00:32:35,480 ama yerine sadece 1 numara. 735 00:32:35,480 --> 00:32:38,520 >> Bu programda ileriyi Yani eğer Şimdi, ne olacak ki? 736 00:32:38,520 --> 00:32:40,690 Yani orada olduğunu fark Bu fonksiyon olabilir 737 00:32:40,690 --> 00:32:44,410 Sezar için bir süre önce bu kullanmışlardır, veya Vigenere, ya da belki de değil. 738 00:32:44,410 --> 00:32:48,170 Ben değilim, benim printf ile iddia Kopya t yararlanmak için gidiyor. 739 00:32:48,170 --> 00:32:51,616 İlk satır 19, hızlı aklı içinde , t strlen kontrolleri uzunluğunu kontrol edebilirsiniz. 740 00:32:51,616 --> 00:32:53,740 Çünkü ben .... istemiyorum bir şey yararlanmak için çalışın 741 00:32:53,740 --> 00:32:55,104 eğer orada hiçbir dize var. 742 00:32:55,104 --> 00:32:57,520 Kullanıcı sadece Enter vurursanız, yararlanmak için bir şey yok. 743 00:32:57,520 --> 00:33:01,100 Yani çizgi 21 yapmak istemiyorum. 744 00:33:01,100 --> 00:33:05,758 Yani line 21 birikiminden hangi görünüşte mektup, t? 745 00:33:05,758 --> 00:33:06,514 >> HEDEF KİTLE: m? 746 00:33:06,514 --> 00:33:08,722 DAVID J. MALAN: görünüyor gibi kopyalama hangi biri? 747 00:33:08,722 --> 00:33:09,486 HEDEF KİTLE: m. 748 00:33:09,486 --> 00:33:10,450 DAVID J. MALAN: Ah, m. 749 00:33:10,450 --> 00:33:12,685 Tamam, ilk m yüzden, Ben olduğumu haber çünkü 750 00:33:12,685 --> 00:33:14,935 , işlev toupper geçen hangi Bunu hiç görmedim eğer var 751 00:33:14,935 --> 00:33:16,980 sadece bir işlev girdi olarak yararlanmak. 752 00:33:16,980 --> 00:33:20,240 t dirseği sıfır vermek anlamına gelir Bana t sıfır karakteri. 753 00:33:20,240 --> 00:33:22,550 Ve böylece bu nasıl yapar resim değişikliği, açık olması? 754 00:33:22,550 --> 00:33:25,490 755 00:33:25,490 --> 00:33:29,160 Ne yeniden yazılamaz veya değiştirilmiş almak gerekiyor s saygı ve t ve anne ile 756 00:33:29,160 --> 00:33:30,097 Ters eğik çizgi sıfır. 757 00:33:30,097 --> 00:33:31,470 >> HEDEF KİTLE: [duyulamaz] 758 00:33:31,470 --> 00:33:34,030 >> DAVID J. MALAN: Evet, bu yüzden bu bir burada sadece 759 00:33:34,030 --> 00:33:40,860 bu-- düzeltmek aşağıdaki amaçlara değişmiş ihtiyacı sermaye m değiştirildi almak gerekiyor. 760 00:33:40,860 --> 00:33:44,330 Ama şimdi, daha sonra bakmak Program, ben çıktısını eğer 761 00:33:44,330 --> 00:33:49,800 Burada temiz olarak s ve t, ne izle s ve t yazdırmak olacağını. 762 00:33:49,800 --> 00:33:54,310 Yani kopya 0, ./copy-0 olun. 763 00:33:54,310 --> 00:33:57,140 Beni go ahead ve yazın bakalım Bütün küçük harflerle anne olarak. 764 00:33:57,140 --> 00:34:00,140 Uyarı hem orijinal ve Kopya harfle oylandı. 765 00:34:00,140 --> 00:34:00,850 Neden? 766 00:34:00,850 --> 00:34:04,431 Eh, s ve t her ikisi de işaret ediyor, eğer sen, hafıza aynı yığın. 767 00:34:04,431 --> 00:34:06,930 Ve açıkçası, bu oluyor Gerçekten gerçeğini uninteresting-- 768 00:34:06,930 --> 00:34:09,150 Burada adres sıfır kullandığınızı. 769 00:34:09,150 --> 00:34:11,719 Yani, ben gerçekten umurumda değil nerede şeyler bellekte olduğunu. 770 00:34:11,719 --> 00:34:13,550 Üzgünüm biraz fazla siliyorum. 771 00:34:13,550 --> 00:34:15,674 Ama ben gerçekten umurumda değil şeyler hafızada olduğu. 772 00:34:15,674 --> 00:34:18,510 Ve böylece, gerçekten ne programcılar düşünmek eğilimindedir 773 00:34:18,510 --> 00:34:21,080 hakkında konuşmak ne zaman olduğunu bir adres ya da bir işaretçi, 774 00:34:21,080 --> 00:34:22,679 bellekte olduğu kimin umurunda. 775 00:34:22,679 --> 00:34:24,989 En eğer umrumda değil Bayt bir ya da bir milyar. 776 00:34:24,989 --> 00:34:27,920 Ben sadece bu umurumda Değişken etkili bir şekilde bir 777 00:34:27,920 --> 00:34:29,620 belleğin o öbek işaret. 778 00:34:29,620 --> 00:34:33,350 Ve böylece, bundan böyle, yerine kelime oyunu keyfi bellek adresleri üzerinden, diyelim 779 00:34:33,350 --> 00:34:36,710 Sadece işaretçileri çizmek başlar oklar olarak işaretçiler olarak. 780 00:34:36,710 --> 00:34:39,340 Yani t gerçekten ne s Bu programa göre, 781 00:34:39,340 --> 00:34:42,130 Ben t oluşturulan nasıl nedeniyle Sadece iki ayrı değişken var 782 00:34:42,130 --> 00:34:43,840 bellek aynı yığın işaret. 783 00:34:43,840 --> 00:34:45,215 Nerede olduklarını Ve biz umurumda değil. 784 00:34:45,215 --> 00:34:47,130 Bu yüzden soyut uzakta o ayrıntı olabilir. 785 00:34:47,130 --> 00:34:48,780 >> Peki nasıl bu düzeltebilirim? 786 00:34:48,780 --> 00:34:54,120 Ben kopya bir sürümünü yazmak istiyorsanız Program aslında kopya dize 787 00:34:54,120 --> 00:34:56,840 ve tek istifade kopyalama, sadece sezgisel, 788 00:34:56,840 --> 00:34:59,766 Ne var bir olmak Bizim çözüm bileşen? 789 00:34:59,766 --> 00:35:00,640 HEDEF KİTLE: [duyulamaz] 790 00:35:00,640 --> 00:35:01,420 DAVID J. MALAN: Bir Neyi mı ihtiyacınız var? 791 00:35:01,420 --> 00:35:01,820 HEDEF KİTLE: Hafıza Chunk. 792 00:35:01,820 --> 00:35:03,280 DAVID J. MALAN: We need bellek başka öbek, değil mi? 793 00:35:03,280 --> 00:35:05,360 Biz bilmiyoruz nasıl mutlaka, ama bunu. 794 00:35:05,360 --> 00:35:11,330 Ama ben biraz bu yüzden gerçekleşmesi için bu ihtiyaç Bu küçük harf orijinal anne 795 00:35:11,330 --> 00:35:14,170 bellek bu ekstra öbek biter. 796 00:35:14,170 --> 00:35:19,770 Ve sonra kopya değiştirdiğinizde, ben Burada bu kopyayı değiştirmek istemiyorum. 797 00:35:19,770 --> 00:35:26,020 Bunun yerine sadece bunu değiştirmek istiyorum Kopya böylece orijinal değişmez. 798 00:35:26,020 --> 00:35:27,980 >> Yani, biz bunu nasıl görelim. 799 00:35:27,980 --> 00:35:31,800 Kopyalama-1, zaten yorumun soyulduğunu, 800 00:35:31,800 --> 00:35:33,250 ancak çevrimiçi yorumladı edilir. 801 00:35:33,250 --> 00:35:36,710 Biz bunun yerine following-- bu do çizgiler aynıdır, bana bir dize almak 802 00:35:36,710 --> 00:35:38,340 ve s diyoruz. 803 00:35:38,340 --> 00:35:43,500 Ama şimdi en en birine bakalım karmaşık ama karmaşıklığı son 804 00:35:43,500 --> 00:35:47,340 süre, satır 16 tam yapar. 805 00:35:47,340 --> 00:35:49,400 Ile rahat Yani resim biz sadece drew-- 806 00:35:49,400 --> 00:35:51,790 Bana yeni bir bellek yığın vermek içine her şeyi kopyalayın 807 00:35:51,790 --> 00:35:53,730 en koda o çevirmek nasıl görelim. 808 00:35:53,730 --> 00:35:59,400 >> Yani çizgi 16, sol tarafta, char * t buraya bana bu kutuyu veriyor. 809 00:35:59,400 --> 00:36:00,230 Yani öyle hepsi bu. 810 00:36:00,230 --> 00:36:03,240 Sağ tarafta, m alloc veya malloc, 811 00:36:03,240 --> 00:36:06,480 süper fantezi bellek ayırma, bir Sadece demenin bir yolu şifreli 812 00:36:06,480 --> 00:36:07,640 Bana belleğin bir öbek verir. 813 00:36:07,640 --> 00:36:09,290 Ne kadar hafıza ihtiyacınız var? 814 00:36:09,290 --> 00:36:10,910 Peki, büyük bir ifadenin türüdür. 815 00:36:10,910 --> 00:36:12,570 Ama burada ne diyor bakalım. 816 00:36:12,570 --> 00:36:15,940 Yani bu, elbette, vermek Bana s dize uzunluğu. 817 00:36:15,940 --> 00:36:19,094 Yani, anne ne olmalıdır? 818 00:36:19,094 --> 00:36:21,010 Yani sadece üç, değil mi? Annem üç karakterdir. 819 00:36:21,010 --> 00:36:22,830 Sen sayılmaz Ters eğik çizgi sıfır seni 820 00:36:22,830 --> 00:36:25,960 bu kadar bir dize uzunluğu hakkında konuşmak Aslında insan görünür harfler. 821 00:36:25,960 --> 00:36:28,020 Yani anne, bu nedenle bu 3 bana veriyor. 822 00:36:28,020 --> 00:36:31,170 Ama şimdi 1 ekleyerek kulüpler, bir dakika bekleyin. 823 00:36:31,170 --> 00:36:34,861 Neden ben aslında istiyorsun 4 bayt ve sadece 3 tahsis? 824 00:36:34,861 --> 00:36:35,360 Evet? 825 00:36:35,360 --> 00:36:36,910 >> HEDEF KİTLE: Sentinel değeri için? 826 00:36:36,910 --> 00:36:38,951 >> DAVID J. MALAN: Kesinlikle, Bu Nöbetçi değeri. 827 00:36:38,951 --> 00:36:40,840 Ters eğik çizgi sıfır için, Ben 4 bayt toplam gerekir. 828 00:36:40,840 --> 00:36:42,870 Yani uzunluk ihtiyacım dize artı 1. 829 00:36:42,870 --> 00:36:45,400 Ve sonra sadece iyi measure-- için Hatta bu sistemde de, 830 00:36:45,400 --> 00:36:49,390 Her zaman diyorum 1-- olacak char büyüklüğüne göre bu çarpın. 831 00:36:49,390 --> 00:36:51,552 Sizeof olduğunu çıkıyor C bir operatör olduğunu 832 00:36:51,552 --> 00:36:53,260 Sadece seni söyler bu bayt sayısı 833 00:36:53,260 --> 00:36:54,700 Belirli bir veri türü için gerekli. 834 00:36:54,700 --> 00:36:57,740 Bu diziler için çalışmıyor, tipik bazen öyle. 835 00:36:57,740 --> 00:36:59,210 Ancak genel durumda, hayır. 836 00:36:59,210 --> 00:37:02,330 Birçok bayt nasıl Ama bana anlatacak çıkıyor char, her zaman 1'dir. 837 00:37:02,330 --> 00:37:04,080 Yani bu 1 ile çarpılarak gibidir. 838 00:37:04,080 --> 00:37:05,900 >> Kod Yani süper şifreli görünümlü hattı. 839 00:37:05,900 --> 00:37:09,320 Ama yaptığı tüm verir ise Bana bellek yığın. 840 00:37:09,320 --> 00:37:13,590 Ama kopyalama gibi görünüyor Bu belleğe şey var mı? 841 00:37:13,590 --> 00:37:14,560 Henüz değil. 842 00:37:14,560 --> 00:37:22,040 Ve böylece on line 22 ben ne ve 23, 24, 25, kuyu, ben sadece bunu. 843 00:37:22,040 --> 00:37:23,760 Ve bu tür bir Şimdi eski okul şeyler. 844 00:37:23,760 --> 00:37:26,010 Bu Pset 2, gibi Sadece bir şeyler taşıyoruz 845 00:37:26,010 --> 00:37:28,620 etrafında bellekte, ya da daha doğrusu dizeleri. 846 00:37:28,620 --> 00:37:31,920 >> Yani 0'dan yineleme yaşıyorum Dize s uzunluğu. 847 00:37:31,920 --> 00:37:37,820 Ve ben-inci karakteri taklit ediyorum t i-inci bir karakter haline s. 848 00:37:37,820 --> 00:37:41,820 Ve ben, çünkü programcı, yapılan tam olarak birçok bayt tahsis emin 849 00:37:41,820 --> 00:37:44,600 İhtiyacım olduğu gibi, mükemmel Bire bir ilişki. 850 00:37:44,600 --> 00:37:47,060 Ve ben anneni kopya yenisine küçük harfe. 851 00:37:47,060 --> 00:37:50,170 Ve sonra son olarak, ben bu çizgiyi yok. 852 00:37:50,170 --> 00:37:54,637 Ve böylece etkisi sadece Burada bu t yararlanmak. 853 00:37:54,637 --> 00:37:56,470 Yani bir sürü absorbe, ancak Sadece düşünün 854 00:37:56,470 --> 00:37:58,220 Gerçekten ne oluyor başlık altında üzerinde 855 00:37:58,220 --> 00:38:00,880 Sadece bu hareket ediyor Tüm bu, etrafında bayt 856 00:38:00,880 --> 00:38:06,617 Bu sorunun çözümü için gerekli olan Sadece bize belleğin bu yığın vermek. 857 00:38:06,617 --> 00:38:08,450 Şimdi riski ezici, bana göstereyim 858 00:38:08,450 --> 00:38:13,200 Neredeyse bu bir başka örnek, Bu biri hariç, özdeş 859 00:38:13,200 --> 00:38:14,350 kod satırı. 860 00:38:14,350 --> 00:38:18,870 Yani bu korsan versiyonu Bu programın, eğer sen. 861 00:38:18,870 --> 00:38:21,050 Ama sadece damıtmak edelim o ne oluyor içine. 862 00:38:21,050 --> 00:38:28,920 Satır 24 bu t olarak kullanılan dirsek i s i dirseğini alır. 863 00:38:28,920 --> 00:38:33,370 Şimdi, ben bu değişen ediyorum daha şifreli yıldız t 864 00:38:33,370 --> 00:38:36,280 artı 1 yıldız s artı 1 eşittir. 865 00:38:36,280 --> 00:38:38,702 >> Peki ne oluyor ve neden Biz bir yıldız karakteri var mı? 866 00:38:38,702 --> 00:38:41,410 Biz daha önce yıldızı gördüm ve o farklı Burada kullanılan ediliyor. 867 00:38:41,410 --> 00:38:45,490 Biz daha önce şimdi görüyorum, char * gördüm Bir başında yıldız ve bu sorun değil. 868 00:38:45,490 --> 00:38:48,190 O biz çıkıyor çünkü tür sadece çıkarabiliriz 869 00:38:48,190 --> 00:38:50,280 Bu birinci ilkeler neler oluyor. 870 00:38:50,280 --> 00:38:53,860 Dolayısıyla, sadece temiz olması için, s nedir? 871 00:38:53,860 --> 00:38:55,052 Geçen hafta, bir dize oldu. 872 00:38:55,052 --> 00:38:56,260 Bu artık yeterli değildir. 873 00:38:56,260 --> 00:38:57,690 Özellikle, s nedir? 874 00:38:57,690 --> 00:38:58,590 >> HEDEF KİTLE: [duyulamaz] 875 00:38:58,590 --> 00:38:59,881 >> DAVID J. MALAN: Bu bir işaretçi var. 876 00:38:59,881 --> 00:39:02,610 Bu adresi var İlk karakter biz yazdınız. 877 00:39:02,610 --> 00:39:04,780 Tamam, t nedir? 878 00:39:04,780 --> 00:39:05,660 >> HEDEF KİTLE: [duyulamaz] 879 00:39:05,660 --> 00:39:07,950 >> DAVID J. MALAN: ilk byte adresi 880 00:39:07,950 --> 00:39:10,490 t, bellek o yığın tahsis. 881 00:39:10,490 --> 00:39:14,720 Bu yüzden çıkıyor zaman dize kadar üzerinde 0'dan yineleme 882 00:39:14,720 --> 00:39:17,424 length-- her şeyden önce, i Çünkü 0, başlar 883 00:39:17,424 --> 00:39:18,840 loop şey için bu eski okul. 884 00:39:18,840 --> 00:39:22,400 Yani sadece basitlik için, diyelim kod bu ilk satırı varsayalım 885 00:39:22,400 --> 00:39:23,760 Gerçekten sadece bu, doğru. 886 00:39:23,760 --> 00:39:26,080 Ben sıfır ekleyerek, sıfır ise şey muhtemelen 887 00:39:26,080 --> 00:39:27,540 bir etkiye sahip gitmiyor. 888 00:39:27,540 --> 00:39:28,560 >> Peki bu söz ne? 889 00:39:28,560 --> 00:39:31,600 Bu yıldızın çıkıyor Bu bağlamda kullanıcı 890 00:39:31,600 --> 00:39:33,700 dereference olduğunu sadece operatör, 891 00:39:33,700 --> 00:39:37,530 gitmek söylemenin süslü yolu aşağıdaki adrese. 892 00:39:37,530 --> 00:39:42,080 Yani s eğer ilk adresi bellek bu öbekte karakter, 893 00:39:42,080 --> 00:39:43,630 * s araçlar oraya gitmek. 894 00:39:43,630 --> 00:39:45,630 Ve biz boğuldum çünkü Bu şekilde resmi, 895 00:39:45,630 --> 00:39:47,430 Eğer kabul edebilirsiniz zihinsel modeli takip. 896 00:39:47,430 --> 00:39:51,030 Bu s ve * s * s derseniz tür oluklar ve merdivenleri gibi, 897 00:39:51,030 --> 00:39:54,540 Eğer çocukluk oyun hatırlamıyorsam, O ok takip ve gitmek gibi 898 00:39:54,540 --> 00:39:55,570 adrese. 899 00:39:55,570 --> 00:39:57,080 >> * t aynı şeydir. 900 00:39:57,080 --> 00:39:59,855 Yani burada başlar, kendi öbek gidin. 901 00:39:59,855 --> 00:40:03,350 Ben sadece çekemez Bu ekran bu şekilde. 902 00:40:03,350 --> 00:40:05,560 * Buraya gitmek anlamına gelir. 903 00:40:05,560 --> 00:40:08,830 Ve sonra, döngü sadece bir Burada bu karakter hareket söyleyerek 904 00:40:08,830 --> 00:40:11,330 Burada bu karakteri taşımak, Burada bu karakter taşıyın. 905 00:40:11,330 --> 00:40:12,890 Ama bunu nasıl incrementation yapmalıyım? 906 00:40:12,890 --> 00:40:15,430 Ben sadece silinen neyi geri almak gerekir. 907 00:40:15,430 --> 00:40:18,140 Bu genellikle denir ne işaretçi aritmetiği, hangi 908 00:40:18,140 --> 00:40:20,040 adresleri ile matematik demektir. 909 00:40:20,040 --> 00:40:22,460 >> Eğer bu döngü için, Ben, i artırılmıyor devam 910 00:40:22,460 --> 00:40:26,880 ve s bir adres ve t bir olduğu adres, sadece 1 ekleyerek devam edersen, 911 00:40:26,880 --> 00:40:31,406 bu sadece ilerlemeye devam anlamına gelir, ve ileriye ve hafızada ileri. 912 00:40:31,406 --> 00:40:34,030 Bu Oxford Caddesi'nden gibi, CS bina üzerinde sokak. 913 00:40:34,030 --> 00:40:36,490 CS binaları 33 Oxford Street'teki olduğunu. 914 00:40:36,490 --> 00:40:39,870 Yani eğer 33 yapmak vardı Oxford Street artı 1, 915 00:40:39,870 --> 00:40:42,870 Bu 34 Oxford getiriyor Sokak, daha sonra 35 Oxford Street, 916 00:40:42,870 --> 00:40:46,380 Daha sonra 36 Oxford Street, ne olursa olsun o Binalar aslında - eğer varsa. 917 00:40:46,380 --> 00:40:50,540 Ve böylece, biz yapıyoruz hepsi Burada işaretçi aritmetiği ile. 918 00:40:50,540 --> 00:40:53,820 >> Yani süper gizli yolu kendimizi ifade. 919 00:40:53,820 --> 00:40:56,160 Ama bütün bu oluyor başlık altında 920 00:40:56,160 --> 00:40:59,330 sadece bu adresleri takip ediyor, Bir harita aşağıdaki gibi eğer sen, 921 00:40:59,330 --> 00:41:02,692 ya da bu gibi okları Aşağıdaki Biz ekranda boğuldum. 922 00:41:02,692 --> 00:41:04,910 Tamam, çok sindirmek için. 923 00:41:04,910 --> 00:41:10,410 Sözdizimi üzerinde herhangi bir soru, kavramlar, işaretçiler, Malloc veya benzerlerini içerir. 924 00:41:10,410 --> 00:41:11,480 Evet, buraya ilk. 925 00:41:11,480 --> 00:41:13,755 >> HEDEF KİTLE: Peki o * t * t toupper eşittir diyor 926 00:41:13,755 --> 00:41:15,575 yararlanmak için gidiş olduğunu Tüm harfler veya sadece-- 927 00:41:15,575 --> 00:41:17,283 >> DAVID J. MALAN: Ah, Gerçekten iyi bir soru. 928 00:41:17,283 --> 00:41:19,805 Burada bu hat Yani, 31, Bu yararlanmak için gidiyor 929 00:41:19,805 --> 00:41:21,430 İlk harf veya harfleri. 930 00:41:21,430 --> 00:41:23,460 Yani giderek o cevap vereyim tekrar ilk ilkelere. 931 00:41:23,460 --> 00:41:26,168 Ve burada ilk prensipler demek Sadece temel tanımlar gitmek 932 00:41:26,168 --> 00:41:27,000 ilgili ne. 933 00:41:27,000 --> 00:41:29,770 Yani toupper bir işlev var Bu bir char aktifleştirmektedir. 934 00:41:29,770 --> 00:41:30,530 Bu kadar. 935 00:41:30,530 --> 00:41:36,740 * t birinci-- gitmek demektir t adrese gidin. 936 00:41:36,740 --> 00:41:40,350 Yani, resimde, bu öbek ise bellek Biz malloc ile ayrılmış, 937 00:41:40,350 --> 00:41:43,310 ve bu t * t buraya gitmek anlamına gelir olduğunu. 938 00:41:43,310 --> 00:41:46,710 >> Bu arada, geçen ediyoruz Bu değer, küçük m 939 00:41:46,710 --> 00:41:50,040 ToUpper için geri alıyoruz Sermaye M, nereye koyuyoruz? 940 00:41:50,040 --> 00:41:52,410 O aynı konumda koyuyorlar. 941 00:41:52,410 --> 00:41:55,540 Ve böylece o bu mantık tarafından temel tanımlar sadece var 942 00:41:55,540 --> 00:41:58,792 birinci harfini büyük harf Eğer i veya a ile yineleme sürece 943 00:41:58,792 --> 00:42:02,000 döngü veya bir while döngüsü için, bu gitmiyor Bunu sormak daha fazla bir şey yapmak. 944 00:42:02,000 --> 00:42:02,583 İyi soru. 945 00:42:02,583 --> 00:42:03,237 Evet? 946 00:42:03,237 --> 00:42:05,369 >> HEDEF KİTLE: Neden kullandınız yöntemi yerine KQUEUE 947 00:42:05,369 --> 00:42:05,979 dizi? 948 00:42:05,979 --> 00:42:07,395 >> DAVID J. MALAN: Ah, iyi bir soru. 949 00:42:07,395 --> 00:42:10,672 Neden dereference kullanmak istiyorsunuz yerine dizi yöntemi yöntemi? 950 00:42:10,672 --> 00:42:12,130 Özel bir nedeni yok, dürüst olmak gerekirse. 951 00:42:12,130 --> 00:42:15,290 Ve aslında, bunun için Örneğin tür, sağ, 952 00:42:15,290 --> 00:42:17,556 Ben sadece yapım savunarak ediyorum daha karmaşık bir program 953 00:42:17,556 --> 00:42:19,680 Daha fazla gözler, üzerinde cam vardır insanlar kontrol 954 00:42:19,680 --> 00:42:22,830 Bu, süper gizemli görünüyor çünkü ancak Hatta aynı şeyi yapıyor olsa. 955 00:42:22,830 --> 00:42:26,695 Ve böylece, açıkçası, bu bir gereksiz görsel karmaşık bir çözümdür 956 00:42:26,695 --> 00:42:27,320 soruna. 957 00:42:27,320 --> 00:42:29,580 >> O, yine de iyi bir tasarım Beş tasarımı için beş üzerinden, 958 00:42:29,580 --> 00:42:33,140 o parantez içinde olsun notasyonu veya işaretçi gösterimde. 959 00:42:33,140 --> 00:42:36,299 Aldığımız zaman özellikle ama- Daha sonra ders Pset 5 960 00:42:36,299 --> 00:42:39,340 biz bu sözlüğü uygulamak o zaman Ben times-- bir çift söz ettik 961 00:42:39,340 --> 00:42:42,300 biz aslında umurumda edeceğiz düşük seviye bellek adresleri 962 00:42:42,300 --> 00:42:44,140 biz gerçekten anlıyorum nasıl gidiyor. 963 00:42:44,140 --> 00:42:48,300 >> Ama, şimdi, bu çıkıyor Kod burada köşeli parantez hattı 964 00:42:48,300 --> 00:42:49,900 Gerçekten yok. 965 00:42:49,900 --> 00:42:52,230 Onlar diyorlar sözdizimsel şeker, hangi 966 00:42:52,230 --> 00:42:58,390 demenin bir esrarlı serin bir yoludur derleyici köşeli parantezler olmak dönüştürür 967 00:42:58,390 --> 00:43:00,420 matematiksel ifadesi. 968 00:43:00,420 --> 00:43:02,660 Yani bir insan kongre var Sadece yazmak mümkün 969 00:43:02,660 --> 00:43:04,220 Bu derece kullanıcı dostu parantez. 970 00:43:04,220 --> 00:43:06,850 Ama ne derleyici, clang, Gerçekten her zaman yapıyor 971 00:43:06,850 --> 00:43:10,970 satır vurgulanan ne yazmak 24 başlık altında gerçekten var 972 00:43:10,970 --> 00:43:12,330 Bu dönüştürülmesi. 973 00:43:12,330 --> 00:43:16,200 Bir insan olarak sadece daha zevkli olduğunu okuma ve hat 24 gibi kod yazmak. 974 00:43:16,200 --> 00:43:18,530 Ama sonunda o Eğitim tekerlekleri de dökülmek 975 00:43:18,530 --> 00:43:21,780 Kişinin kendi konfor güçlendiği zaman. 976 00:43:21,780 --> 00:43:27,240 >> Pekâlâ, o zaman bu hatırlamak En büyük sorunun sıralama oldu 977 00:43:27,240 --> 00:43:27,807 Biz koştu. 978 00:43:27,807 --> 00:43:30,640 Ve bu bütün yol açtı ne işaretçileri hakkında lanet konuşma, 979 00:43:30,640 --> 00:43:32,340 ve adresleri, ve kopyalama şeyler. 980 00:43:32,340 --> 00:43:35,410 Biz takıldı çünkü öyleydi Bu aptal, aptal bir konu, bu sayede 981 00:43:35,410 --> 00:43:38,830 Ben Lauren ile logically-- uygulamaya Burada demo ve portakal suyu kadar 982 00:43:38,830 --> 00:43:43,770 milk-- mükemmel bir şekilde algoritmik doğru işlev 983 00:43:43,770 --> 00:43:47,010 iki değişken 'pompalanması amaçlı değerler, ama lanet şey 984 00:43:47,010 --> 00:43:50,550 Herhangi bir kalıcı olması, ya da yoktu Benim kod kalıcı etkisi. 985 00:43:50,550 --> 00:43:51,820 >> Ve neden oldu? 986 00:43:51,820 --> 00:43:54,650 Özetle, bu yüzden swap uygulanması 987 00:43:54,650 --> 00:43:58,740 mantıksal olarak doğru, ama hiçbir etkisi yoktur kendisine geçirilen değişkenlere, 988 00:43:58,740 --> 00:44:01,119 Ana için x ve y gibi? 989 00:44:01,119 --> 00:44:02,410 Sorunun özü neydi? 990 00:44:02,410 --> 00:44:02,909 Evet? 991 00:44:02,909 --> 00:44:05,532 HEDEF KİTLE: Değişken yapılan Çünkü geçişte değişken kopyaları 992 00:44:05,532 --> 00:44:06,240 fonksiyonu sayesinde. 993 00:44:06,240 --> 00:44:09,060 >> DAVID J. MALAN: Kesinlikle, ne zaman geçmesine Bir işlev değişkenleri veya argümanlar 994 00:44:09,060 --> 00:44:11,030 bir işlev, onlar kopya, geçti ki 995 00:44:11,030 --> 00:44:14,770 Aradığınız özdeş olsun anlamına gelir x ve y her ikisi için bitlerin paterni, 996 00:44:14,770 --> 00:44:15,955 a ve b burada çağırdı. 997 00:44:15,955 --> 00:44:18,080 Ve sen her şeyi yapabilir O kopyaları ile istediğiniz 998 00:44:18,080 --> 00:44:20,657 ama onlar hayır için gidiyoruz Çağıran fonksiyonu üzerine etkisi. 999 00:44:20,657 --> 00:44:22,990 Ve, aslında, bu çekti Ekran, hatırlama resim 1000 00:44:22,990 --> 00:44:25,520 son kez, bu sayede eğer Gerçekten ne düşünmek 1001 00:44:25,520 --> 00:44:28,570 eğer hood-- altında oluyor Bu, bilgisayarınızın bellek 1002 00:44:28,570 --> 00:44:31,650 ve burada aşağı yığınıdır Bellek, ana için kullanılan 1003 00:44:31,650 --> 00:44:34,020 Bu yığınıdır Bellek, takas için kullanılan 1004 00:44:34,020 --> 00:44:37,090 ve bu yüzden bile ana vardır iki değişken, x ve y, 1005 00:44:37,090 --> 00:44:41,840 takas özdeş görünümlü olabilir 1 ve 2 her ikisi de değerleri, 1006 00:44:41,840 --> 00:44:44,520 ancak tamamen değil belleğin farklı parçalar. 1007 00:44:44,520 --> 00:44:46,130 >> Yani biz bu bir çözüm gerekir. 1008 00:44:46,130 --> 00:44:51,580 Ve açıkçası, şimdi biz bu gibi görünüyor Doğru, bu soruna bir çözüm var. 1009 00:44:51,580 --> 00:44:55,760 Şimdi yeteneği varsa adresleri yoluyla şeyleri manipüle 1010 00:44:55,760 --> 00:44:59,310 ve, sıralama oluklar ve merdivenleri stil, bu okları takip edin 1011 00:44:59,310 --> 00:45:02,820 ve istediğimiz yere gitmek bellekte, biz could not 1012 00:45:02,820 --> 00:45:06,220 Bu sorunu çözmek Ana geçen takas 1013 00:45:06,220 --> 00:45:09,650 değil değerler istiyoruz swap, ama sadece sezgisel 1014 00:45:09,650 --> 00:45:11,630 ne yerine takas geçebileceği? 1015 00:45:11,630 --> 00:45:12,620 >> [SESLER interposing] 1016 00:45:12,620 --> 00:45:15,244 >> DAVID J. MALAN: Neden sadece yok Doğru, adresler geçmektedir? 1017 00:45:15,244 --> 00:45:17,470 Neden swap a vermeyin define haritası, eğer sen, 1018 00:45:17,470 --> 00:45:20,950 Bu içine yönlendirir gerçek değerleri, x ve y. 1019 00:45:20,950 --> 00:45:24,340 Diyelim takas, aslında değiştirmek Bu orijinal bit yerine 1020 00:45:24,340 --> 00:45:26,797 sadece bit kopyalarını geçen. 1021 00:45:26,797 --> 00:45:29,130 Ve böylece, aslında, işte budur gidiş çözüm olarak. 1022 00:45:29,130 --> 00:45:31,899 Bu sürüm burada açıkça kötü ve kusurlu. 1023 00:45:31,899 --> 00:45:35,190 Ve şimdi, ilk bakışta, sadece görünüyor gibi rastgele yıldızlı bir demet eklendi 1024 00:45:35,190 --> 00:45:37,106 ve bizim parmak çarpı işareti derlemek söyledi. 1025 00:45:37,106 --> 00:45:38,460 Ama, şimdi derlemek olacaktır. 1026 00:45:38,460 --> 00:45:40,090 >> Ama bunlar ne anlama geldiğini görelim. 1027 00:45:40,090 --> 00:45:43,990 Ve ne yazık ki, yazarlar C başka bir sembol seçmiş 1028 00:45:43,990 --> 00:45:46,380 Bu küçük hale getirmek için net, ancak yıldız operatörü 1029 00:45:46,380 --> 00:45:48,610 farklı bir anlamı vardır İki farklı bağlamlarda. 1030 00:45:48,610 --> 00:45:50,890 Ve ikimiz de gördüm, ama en ayırt edelim. 1031 00:45:50,890 --> 00:45:55,310 >> Orada üst kısmında yukarıya Yani Ben a ve b değişti zaman 1032 00:45:55,310 --> 00:46:00,470 Kötü int 's olmaktan Sürüm yıldız, a ve b int, 1033 00:46:00,470 --> 00:46:01,740 Daha önce, tam sayılar idi. 1034 00:46:01,740 --> 00:46:05,752 Şimdi a ve b nelerdir İyi, yeşil versiyonu? 1035 00:46:05,752 --> 00:46:06,900 Onlar adresleri konum. 1036 00:46:06,900 --> 00:46:09,610 Neyin, adresleri açık olması? 1037 00:46:09,610 --> 00:46:10,770 Tamsayılar Adresleri. 1038 00:46:10,770 --> 00:46:12,520 Ben gerçeği Yani int yıldızı araçları söyleyerek 1039 00:46:12,520 --> 00:46:15,440 Bu adresi bir tamsayıdır, özellikle. 1040 00:46:15,440 --> 00:46:19,120 >> Yani şimdi kod satırları fark, başka bir şey de değişti. 1041 00:46:19,120 --> 00:46:22,770 tmp, çünkü aynı kalır Sadece geçici bir tamsayı var, 1042 00:46:22,770 --> 00:46:24,110 hiçbir hafıza büyüsü. 1043 00:46:24,110 --> 00:46:26,370 Ama şimdi bir yıldız ihtiyacı var. 1044 00:46:26,370 --> 00:46:28,560 Ve, aslında, her a ve b diğer söz, 1045 00:46:28,560 --> 00:46:31,780 Tüm bu olduğunu fark kırmızıdan yeşile değişen 1046 00:46:31,780 --> 00:46:34,209 Ben önek olmam yıldızlı olan değişkenler. 1047 00:46:34,209 --> 00:46:35,750 Ben a ve b kopyalamak istemiyorum. 1048 00:46:35,750 --> 00:46:40,350 Çünkü ben sadece a ve b ve takas kopyalarsanız a ve b, ben aslında ne takas ediyorum? 1049 00:46:40,350 --> 00:46:43,760 Sadece adresler, ben takas istiyorum Ne o adreslere var. 1050 00:46:43,760 --> 00:46:44,860 Oraya gitmek istiyorum. 1051 00:46:44,860 --> 00:46:48,000 Ve böylece yıldız operatörü Benim işlev içinde, 1052 00:46:48,000 --> 00:46:51,700 değil parametre listesi içinde, Eğer bu adreslere gidin demektir 1053 00:46:51,700 --> 00:46:54,490 ve aslında bu değerleri değiştirmek. 1054 00:46:54,490 --> 00:46:56,500 >> Peki resmi yapar Şimdi yerine benziyor. 1055 00:46:56,500 --> 00:47:03,250 Eh, bunun yerine eğer ben geçiyorum Bir için de değil, 1 ve b 2-- 1056 00:47:03,250 --> 00:47:05,790 Aslında eklemeniz gerekir Burada bir başka tanım. 1057 00:47:05,790 --> 00:47:09,030 Yani bu öbekte varsayalım bellek yeri 10 yer almaktadır. 1058 00:47:09,030 --> 00:47:12,960 >> Bu konumda 11 olan, fakat bu Bir basitleştirme biraz, 1059 00:47:12,960 --> 00:47:18,900 Ben şimdi x iki seçenek Ben geçmesi yapmak zorunda ve y veya onların adreslerini geçmek? 1060 00:47:18,900 --> 00:47:22,500 Ben onların adreslerini geçirirseniz Bu gibi ben sadece 1061 00:47:22,500 --> 00:47:25,390 Şimdi uygulamak gerekir Yeşil kod başına takas 1062 00:47:25,390 --> 00:47:29,080 o gördüğünde böylece ve ne zaman b, sadece a ve b kopyalamaz görür 1063 00:47:29,080 --> 00:47:30,540 süt ve portakal suyu taşıyın. 1064 00:47:30,540 --> 00:47:32,664 Süt ve portakal suyu metafor, şimdi yıkar 1065 00:47:32,664 --> 00:47:35,060 Bu çünkü bardak vardır Sıvı ve haritaların. 1066 00:47:35,060 --> 00:47:37,750 Biz bunun yerine gitmek gerekir 10 ve biz çözmek için 1067 00:47:37,750 --> 00:47:42,420 11 adrese gitmek gerekir, ve o takas mantığı gerçekleştirin. 1068 00:47:42,420 --> 00:47:45,580 >> Yani mantık, aynı ama Biz biraz farklı bir yol gerekir 1069 00:47:45,580 --> 00:47:47,160 bu değişkenleri erişirken. 1070 00:47:47,160 --> 00:47:52,400 Ve böylece sonunda ne Program bu gibi bakmak zorunda. 1071 00:47:52,400 --> 00:47:56,610 Swap.c tam anlamıyla kopyalanan ve yeşil versiyonu yapıştırılan. 1072 00:47:56,610 --> 00:47:58,450 Ama tek değişiklik yapmak gerekir. 1073 00:47:58,450 --> 00:48:00,180 Bu sadece takas değiştirmek için yeterli değil. 1074 00:48:00,180 --> 00:48:03,830 Ne kod satırı diğer Ben değiştirmek gerekiyor? 1075 00:48:03,830 --> 00:48:04,330 Evet? 1076 00:48:04,330 --> 00:48:05,770 >> HEDEF KİTLE: Bu argüman alır. 1077 00:48:05,770 --> 00:48:07,603 >> DAVID J. MALAN: onun argüman alır. 1078 00:48:07,603 --> 00:48:09,985 Yani ana kadar ilerleyin, ben sadece x ve y geçemez, 1079 00:48:09,985 --> 00:48:12,820 ve ben, son söz Yeni sözdizimi parçası bugün. 1080 00:48:12,820 --> 00:48:17,200 Ben x geçmesi gerekiyor ve y, ancak, x ve y adresi. 1081 00:48:17,200 --> 00:48:20,400 Ve bu, sembol çıkıyor C yazarları seçti 1082 00:48:20,400 --> 00:48:23,860 Burada bir işareti kullanırsanız değil, bir Bitwise işareti ile karıştırılmamalıdır, 1083 00:48:23,860 --> 00:48:27,130 Eğer bir ve işareti kullanırsanız burada ve burada bir işareti, 1084 00:48:27,130 --> 00:48:29,570 Bu, sizin için dışarı rakamlar x adresi nedir, 1085 00:48:29,570 --> 00:48:31,740 belki de 10 var, ne y adresi, belki de var 1086 00:48:31,740 --> 00:48:35,400 11, ve bunun yerine, bu geçer. 1087 00:48:35,400 --> 00:48:37,210 >> Yani bir sürü bir kerede tüm emmek için. 1088 00:48:37,210 --> 00:48:40,190 Ama hızlı bir şekilde şimdi görelim bizim kalan dört dakika 1089 00:48:40,190 --> 00:48:42,150 nereye işler ters gidebilir. 1090 00:48:42,150 --> 00:48:45,120 Ve bir kenara, aslında olduğu gibi Ben bu resmi aldı, 1091 00:48:45,120 --> 00:48:46,920 TF bir veya iki yıl önce bu resmi aldı. 1092 00:48:46,920 --> 00:48:49,190 Yani bu arka köşe Eliot Yemek Hall. 1093 00:48:49,190 --> 00:48:52,310 Göstericiler belki zor olan Biz CS50 örtmek konu. 1094 00:48:52,310 --> 00:48:54,810 Sıralama Merak Yani eğer belki gibi yamaç olduğu 1095 00:48:54,810 --> 00:48:56,770 Bir hokey sopası daha Bu gibi fark 1096 00:48:56,770 --> 00:49:00,160 biz tür bir zirve olarak yaklaşıyor konum kavramsal karmaşıklık açısından. 1097 00:49:00,160 --> 00:49:02,300 >> Ve ben bu getirmek Fotoğraf, yemin ederim çünkü 1098 00:49:02,300 --> 00:49:05,920 sonbaharda 1996 yılında tanrı için, ne zaman aldı Benim öğretim görevlisi ile CS50, 1099 00:49:05,920 --> 00:49:09,620 Nishat Mehta, o beni oturdu öğle yemeğinde Eliot D. Hall köşesi, 1100 00:49:09,620 --> 00:49:12,330 ya da akşam yemeği, ya da bir şey denemek için Bana işaretçileri anlamalarına yardımcı olmak. 1101 00:49:12,330 --> 00:49:16,520 Ben hafta sonra nerede Ve bu o dersin ne zaman tanıtıldı 1102 00:49:16,520 --> 00:49:18,170 Sonunda işaretçiler anladım. 1103 00:49:18,170 --> 00:49:20,590 Ve ben bu umutlu değilim çok erken senin için tıklayınız olacaktır. 1104 00:49:20,590 --> 00:49:23,540 Ama kesinlikle arasında bu fark Daha sofistike konular 1105 00:49:23,540 --> 00:49:24,420 Biz baktım. 1106 00:49:24,420 --> 00:49:25,819 Ama en güçlü arasında bulunuyor. 1107 00:49:25,819 --> 00:49:28,860 Bunu alınca Ve, gerçekten hepsi sadece nihayet bir araya gelip gidiyor. 1108 00:49:28,860 --> 00:49:31,460 Yani geri kalan öyle değil güvence Bugün tüm lavabo gerekir. 1109 00:49:31,460 --> 00:49:32,980 >> Yani burada geçen program biz bakmak için gidiyoruz. 1110 00:49:32,980 --> 00:49:35,605 Ve biz birlikte sonuna kadar gidiyoruz claymation hızlı üç dakika 1111 00:49:35,605 --> 00:49:37,030 Bizim arkadaş, Nick Parlante tarafından yapılan. 1112 00:49:37,030 --> 00:49:41,440 İşte bir program ilk iki o, var çizgiler değişken x ve y bildirir. 1113 00:49:41,440 --> 00:49:44,780 Her ikisi de adresleri tamsayılar, AKA işaretçiler. 1114 00:49:44,780 --> 00:49:48,125 Daha sonra yeterli tahsis Bellek bir int depolamak 1115 00:49:48,125 --> 00:49:51,344 ve adresi saklamak x, bellek. 1116 00:49:51,344 --> 00:49:53,260 Yani, hatta basittir daha önce, örneğin daha. 1117 00:49:53,260 --> 00:49:56,100 Bana hafıza dört bayt ver Bu bir int büyüklüğünde, 1118 00:49:56,100 --> 00:49:58,000 ve x bu adresi koydu. 1119 00:49:58,000 --> 00:50:01,070 Bu hat burada demektir x adrese gitmek 1120 00:50:01,070 --> 00:50:05,270 ve anlamını koymak Hayat, orada numarası 42. 1121 00:50:05,270 --> 00:50:07,710 Ama bu çizgi beni endişelendiriyor. 1122 00:50:07,710 --> 00:50:12,620 Y y adrese gitmek demektir yıldız, ve orada şanssız sayı 13 koyun. 1123 00:50:12,620 --> 00:50:15,780 Neden bu noktada, bu tehlikeli story-- de olsa hızlı söylendi 1124 00:50:15,780 --> 00:50:17,980 Bizim azalan dakikada burada-- neden kötü 1125 00:50:17,980 --> 00:50:19,660 bana söylemek için, y adrese gidilir? 1126 00:50:19,660 --> 00:50:21,077 >> HEDEF KİTLE: Sen yok [duyulamaz]. 1127 00:50:21,077 --> 00:50:22,910 DAVID J. MALAN: I have not y şey koymak. 1128 00:50:22,910 --> 00:50:25,520 Yani y nin değeri nedir, Hikayenin bu noktasında? 1129 00:50:25,520 --> 00:50:26,570 Biz hiçbir fikrim yok. 1130 00:50:26,570 --> 00:50:29,190 Bazı çöp değer ve de Binky biliyor. 1131 00:50:29,190 --> 00:50:32,532 Bu kayda göre sonuna gelebilir. 1132 00:50:32,532 --> 00:50:34,832 >> [VİDEO OYNATMA] 1133 00:50:34,832 --> 00:50:36,500 >> -Hey, Binky, uyan. 1134 00:50:36,500 --> 00:50:39,140 Bu işaretçi eğlenmek için zamanı geldi. 1135 00:50:39,140 --> 00:50:40,210 >> -Bu da ne? 1136 00:50:40,210 --> 00:50:41,690 Işaretçileri hakkında bilgi edinin? 1137 00:50:41,690 --> 00:50:43,570 Oh, goody. 1138 00:50:43,570 --> 00:50:46,600 >> -Peki, Başlamak için, biz sanırım Birkaç işaretçileri ihtiyacımız olacak. 1139 00:50:46,600 --> 00:50:47,380 >> -TAMAM. 1140 00:50:47,380 --> 00:50:51,120 Bu kod iki işaretçiler ayırır Hangi tamsayılar işaret edebilir. 1141 00:50:51,120 --> 00:50:53,557 >> -Tamam, Iyi görüyorum İki işaretçiler, ama onlar 1142 00:50:53,557 --> 00:50:55,140 bir şey işaret olmak görünmemektedir. 1143 00:50:55,140 --> 00:50:55,970 >> -Bu doğru. 1144 00:50:55,970 --> 00:50:58,100 Başlangıçta değineği bir şey işaret etmemektedir. 1145 00:50:58,100 --> 00:51:00,950 Onlar işaret şeyler pointees çağırdı ve onları kurma 1146 00:51:00,950 --> 00:51:02,330 Ayrı bir adımdır. 1147 00:51:02,330 --> 00:51:03,210 >> Sağ, sağ, Oh. 1148 00:51:03,210 --> 00:51:03,940 Bunu biliyordum. 1149 00:51:03,940 --> 00:51:05,730 Pointees ayrıdır. 1150 00:51:05,730 --> 00:51:08,310 Peki nasıl bir pointee tahsis edebilirim? 1151 00:51:08,310 --> 00:51:11,960 >> -Tamam, Iyi bu kod ayırır Yeni tamsayı pointee, 1152 00:51:11,960 --> 00:51:15,050 ve bu parça setleri x buna işaret etmek. 1153 00:51:15,050 --> 00:51:16,240 >> -Hey, O daha iyi görünüyor. 1154 00:51:16,240 --> 00:51:17,743 Yani bir şeyler yapmak istiyorum. 1155 00:51:17,743 --> 00:51:23,580 >> -Tamam, Ben olacak işaretçi x inceleyebilirsiniz onun pointee içine sayısını 42 depolar. 1156 00:51:23,580 --> 00:51:27,130 Bu hile için, ben gerekir benim çözümleyecek sihirli değnek. 1157 00:51:27,130 --> 00:51:30,200 >> Çözümleyecek -Senin sihirli değnek? 1158 00:51:30,200 --> 00:51:32,310 Ah, o, bu harika. 1159 00:51:32,310 --> 00:51:34,270 >> -Bu Kod neye benzediğini olduğunu. 1160 00:51:34,270 --> 00:51:35,970 Ben sadece numara ayarlamak gerekir ve- 1161 00:51:35,970 --> 00:51:37,070 >> [POP SES] 1162 00:51:37,070 --> 00:51:39,140 >> Hey, nereye giderse oraya bak. 1163 00:51:39,140 --> 00:51:43,980 Yani, x bir dereference yapıyor izler ok onun pointee erişmek için. 1164 00:51:43,980 --> 00:51:46,150 Bu durumda, orada 42 saklamak için. 1165 00:51:46,150 --> 00:51:50,700 Hey, numarayı saklamak için kullanmayı deneyin Diğer işaretçi 13, y. 1166 00:51:50,700 --> 00:51:51,840 >> -TAMAM. 1167 00:51:51,840 --> 00:51:56,270 Ben sadece y buraya gidersiniz, ve sayı 13 set up olsun. 1168 00:51:56,270 --> 00:52:00,380 Ve daha sonra değnek almak dereferencing ve sadece-- 1169 00:52:00,380 --> 00:52:01,646 >> [SİNYAL SESİ] 1170 00:52:01,646 --> 00:52:04,080 >> Oh, hey bu işe yaramadı. 1171 00:52:04,080 --> 00:52:06,470 Binky uh, I do not Say dereferencing düşünüyorum 1172 00:52:06,470 --> 00:52:10,850 ayarı nedeniyle y iyi bir fikir pointee kadar ayrı bir adımdır. 1173 00:52:10,850 --> 00:52:12,480 Ve biz hiç yaptım sanmıyorum. 1174 00:52:12,480 --> 00:52:14,620 >> -Hmm, Iyi bir nokta. 1175 00:52:14,620 --> 00:52:19,810 >> -Evet, Biz gösterici, y tahsis ama Biz pointee işaret ayarlayın asla. 1176 00:52:19,810 --> 00:52:21,590 >> -Hmm, Çok dikkatli. 1177 00:52:21,590 --> 00:52:23,215 -Hey, Sen orada Binky iyi arıyoruz. 1178 00:52:23,215 --> 00:52:26,390 O yüzden bunu düzeltmek Can y noktaları x aynı pointee için. 1179 00:52:26,390 --> 00:52:29,290 >> -Tabii, Benim sihirli değnek kullanmak işaretçi atama. 1180 00:52:29,290 --> 00:52:31,970 >> Bir olacak o -Bu Sorun, daha önce benzeri? 1181 00:52:31,970 --> 00:52:33,790 >> -Hayır, Bu pointees dokunmaz. 1182 00:52:33,790 --> 00:52:35,840 Sadece bir işaretçiyi değiştirir Aynı thing-- işaret 1183 00:52:35,840 --> 00:52:36,465 >> [Patlama sesi] 1184 00:52:36,465 --> 00:52:37,450 Başka resmedildiği gibi. 1185 00:52:37,450 --> 00:52:38,440 >> Oh, anladım. 1186 00:52:38,440 --> 00:52:41,200 X aynı yere şimdi y noktaları. 1187 00:52:41,200 --> 00:52:42,950 Yani, şimdi y sabit bekleyin. 1188 00:52:42,950 --> 00:52:44,110 Bir pointee sahiptir. 1189 00:52:44,110 --> 00:52:47,779 Yani bir değnek deneyebilirsiniz 13 over göndermek için yeniden dereferencing. 1190 00:52:47,779 --> 00:52:51,110 >> Oh, tamam, buraya. 1191 00:52:51,110 --> 00:52:52,330 >> -Hey, Şuna bak. 1192 00:52:52,330 --> 00:52:53,570 Şimdi y çalışmaları dereferencing. 1193 00:52:53,570 --> 00:52:57,900 Ve göstericiler paylaşan çünkü tek pointee ki her ikisi de 13 bkz. 1194 00:52:57,900 --> 00:52:59,952 >> -Evet, Paylaşma, ah, ne olursa olsun. 1195 00:52:59,952 --> 00:53:01,535 Peki, şimdi yerlerini değiştirmek için gidiyorsun? 1196 00:53:01,535 --> 00:53:03,730 >> Oh, biz zaman bitti bak. 1197 00:53:03,730 --> 00:53:04,660 >> -Ama-- 1198 00:53:04,660 --> 00:53:06,520 >> Üç gösterici kurallarını hatırlamak -Sadece. 1199 00:53:06,520 --> 00:53:09,550 Sayı 1, temel yapısı Eğer bir işaretçi olması, 1200 00:53:09,550 --> 00:53:11,630 ve bir pointee üzerinde işaret ediyor. 1201 00:53:11,630 --> 00:53:13,740 Ama işaretçi ve pointee ayrıdır. 1202 00:53:13,740 --> 00:53:15,620 Ve yaygın hata bir işaretçi kurmak için 1203 00:53:15,620 --> 00:53:18,000 ama bir pointee vermek unutmak. 1204 00:53:18,000 --> 00:53:21,170 >> Sayı 2, işaretçiyi kaldırma işaretçi başlar 1205 00:53:21,170 --> 00:53:24,020 ve üzerindeki ok takip onun pointee erişmek için. 1206 00:53:24,020 --> 00:53:27,815 Hepimizin bildiği gibi, bu sadece orada çalışır tür geri alır bir pointee olduğunu 1207 00:53:27,815 --> 00:53:29,260 1 numaralı kural. 1208 00:53:29,260 --> 00:53:31,990 >> Sayı 3, işaretçi atama tek işaretçi alır 1209 00:53:31,990 --> 00:53:35,330 ve işaret değiştirir Başka bir işaretçi olarak aynı pointee. 1210 00:53:35,330 --> 00:53:37,150 Atama sonrası Yani, İki işaretçileri 1211 00:53:37,150 --> 00:53:40,927 Aynı pointee işaret eder, bazen bu paylaşım denir. 1212 00:53:40,927 --> 00:53:42,510 Ve bu gerçekten, ona orada hepsi bu. 1213 00:53:42,510 --> 00:53:43,130 Güle güle şimdi. 1214 00:53:43,130 --> 00:53:43,475 >> [SON OYNATMA] 1215 00:53:43,475 --> 00:53:44,830 >> DAVID J. MALAN: İşte CS50 için var. 1216 00:53:44,830 --> 00:53:46,246 Profesör Nick Parlante teşekkürler. 1217 00:53:46,246 --> 00:53:47,730 Gelecek hafta görüşürüz. 1218 00:53:47,730 --> 00:53:51,706 1219 00:53:51,706 --> 00:53:56,435 >> [ELEKTRONİK MÜZİK OYUN] 1220 00:53:56,435 --> 00:57:22,775