1 00:00:00,000 --> 00:00:01,110 >> [MÜZİK OYUN] 2 00:00:01,110 --> 00:00:10,567 3 00:00:10,567 --> 00:00:11,650 DAVID J. MALAN: Pekala. 4 00:00:11,650 --> 00:00:15,610 Bu CS50 ve bu Hafta Four sonudur. 5 00:00:15,610 --> 00:00:19,420 Ve konulardan biri bugün dijital adli tıp yani, 6 00:00:19,420 --> 00:00:20,989 bilgi kurtarma sanatı. 7 00:00:20,989 --> 00:00:22,780 Ve gerçekten de, olsa bile Eğer ortasında konum 8 00:00:22,780 --> 00:00:25,070 Şu anda Barış Üç at ve Breakout, önümüzdeki hafta, 9 00:00:25,070 --> 00:00:27,880 Odak olacak tam da bu etki. 10 00:00:27,880 --> 00:00:30,686 Havalı işlerin şimdiye kadar olan >> Yani bir vardı, geri lisansüstü okulda oldu 11 00:00:30,686 --> 00:00:33,560 Ben yerel için çalışırken Middlesex County Bölge Savcısı en 12 00:00:33,560 --> 00:00:34,950 ofis, yapıyor adli çalışır. 13 00:00:34,950 --> 00:00:37,450 Bu nedenle esas olarak, Massachusetts Eyalet Polisi, zaman zaman, 14 00:00:37,450 --> 00:00:40,100 davalar üzerinde çalışırken olur sabit diskler gibi şeyler getirmek 15 00:00:40,100 --> 00:00:42,185 ve disket ve hafıza kartları ve benzerleri. 16 00:00:42,185 --> 00:00:44,060 Ve onları el istiyorum Bana ve benim akıl hocası için, 17 00:00:44,060 --> 00:00:48,070 ve hedefimiz kanıt bulmak oldu, Bu medya üzerinde herhangi, varsa. 18 00:00:48,070 --> 00:00:50,700 Şimdi, sen görmüş olabilir Glimpses adli tıp bu dünya 19 00:00:50,700 --> 00:00:53,000 medya, televizyon ve sinemada. 20 00:00:53,000 --> 00:00:55,730 Ama işim vardı, ve daresay dünya, 21 00:00:55,730 --> 00:00:57,550 Bunu görmek istiyorsunuz gibi oldukça değildir. 22 00:00:57,550 --> 00:01:00,794 En az bir göz atalım ne muhtemelen gördüm. 23 00:01:00,794 --> 00:01:01,460 [VİDEO OYNATMA] 24 00:01:01,460 --> 00:01:02,930 -TAMAM MI. 25 00:01:02,930 --> 00:01:05,380 Şimdi, sana bir iyi bir görünüm elde edelim. 26 00:01:05,380 --> 00:01:06,850 >> [MÜZİK OYUN] 27 00:01:06,850 --> 00:01:12,260 28 00:01:12,260 --> 00:01:12,932 >> Bunu tut. 29 00:01:12,932 --> 00:01:13,657 O geri çalıştırın. 30 00:01:13,657 --> 00:01:14,733 >> Bir dakika bekle. 31 00:01:14,733 --> 00:01:15,233 Sağa git. 32 00:01:15,233 --> 00:01:16,371 33 00:01:16,371 --> 00:01:16,870 -Orada. 34 00:01:16,870 --> 00:01:17,369 Bu dondurun. 35 00:01:17,369 --> 00:01:17,930 -Tam Ekran. 36 00:01:17,930 --> 00:01:18,376 >> -Tamam. 37 00:01:18,376 --> 00:01:18,875 Bu dondurun. 38 00:01:18,875 --> 00:01:20,160 Eğer, bu konuda edecek kadar -Tighten? 39 00:01:20,160 --> 00:01:22,126 >> Bu üzerinde -Vector arka tekerlek ile adam. 40 00:01:22,126 --> 00:01:24,435 >> Burada bu noktada üzerinde -Zoom. 41 00:01:24,435 --> 00:01:28,580 >> Doğru ekipman -with, Görüntü genişlemiş ve bilenmiş edilebilir. 42 00:01:28,580 --> 00:01:29,330 >> Ne o? 43 00:01:29,330 --> 00:01:30,780 >> -Bu Bir geliştirme programı. 44 00:01:30,780 --> 00:01:32,170 >> Misin net o kadar herhangi? 45 00:01:32,170 --> 00:01:33,070 >> -Bilmiyorum. 46 00:01:33,070 --> 00:01:34,150 Şunu geliştirmek edelim. 47 00:01:34,150 --> 00:01:35,440 >> Kabiliyetlerinin Bölüm A6. 48 00:01:35,440 --> 00:01:36,570 49 00:01:36,570 --> 00:01:38,562 Ben detay geliştirilmiş, ve- 50 00:01:38,562 --> 00:01:40,020 -Ben Geliştirmek için yeterli olduğunu düşünüyorum. 51 00:01:40,020 --> 00:01:40,976 Benim ekrana bırakın. 52 00:01:40,976 --> 00:01:42,559 >> -Ben Onun gözünde yansımasını gelişmiş. 53 00:01:42,559 --> 00:01:44,322 -Hadi Ile bu çalıştırılır video geliştirme. 54 00:01:44,322 --> 00:01:45,210 >> -Edgar, Bunu artırabilirsiniz? 55 00:01:45,210 --> 00:01:45,710 >> -Dayan. 56 00:01:45,710 --> 00:01:47,570 57 00:01:47,570 --> 00:01:49,458 >> -Bunu Bu yansıma üzerinde çalışıyor. 58 00:01:49,458 --> 00:01:50,402 >> -Burada Birinin yansıması. 59 00:01:50,402 --> 00:01:50,902 >> -Reflection. 60 00:01:50,902 --> 00:01:52,870 Adamın yüzünün bir yansıması -İşte. 61 00:01:52,870 --> 00:01:53,694 >> -The Yansıması! 62 00:01:53,694 --> 00:01:54,610 Bir yansıma -İşte. 63 00:01:54,610 --> 00:01:55,880 Aynaya üzerinde -Zoom. 64 00:01:55,880 --> 00:01:57,860 Bir yansıma görebilirsiniz. 65 00:01:57,860 --> 00:01:59,630 >> Buradan imajını geliştirmek miyiz? 66 00:01:59,630 --> 00:02:00,377 67 00:02:00,377 --> 00:02:01,210 Bunu geliştirmek miyiz? 68 00:02:01,210 --> 00:02:02,190 Bunu geliştirmek miyiz? 69 00:02:02,190 --> 00:02:03,066 Bu geliştirmek miyiz? 70 00:02:03,066 --> 00:02:03,898 Bunu geliştirmek miyiz? 71 00:02:03,898 --> 00:02:04,740 Bir saniye tut. 72 00:02:04,740 --> 00:02:05,281 Ben geliştirmek gerekir. 73 00:02:05,281 --> 00:02:06,470 Kapı üzerinde -Zoom. 74 00:02:06,470 --> 00:02:06,970 10 -Times. 75 00:02:06,970 --> 00:02:08,009 -Zoom. 76 00:02:08,009 --> 00:02:08,509 Içinde -Move. 77 00:02:08,509 --> 00:02:09,340 -Daha. 78 00:02:09,340 --> 00:02:10,094 Bekle, dur. 79 00:02:10,094 --> 00:02:10,750 -Dur. 80 00:02:10,750 --> 00:02:11,250 Bunu -Pause. 81 00:02:11,250 --> 00:02:13,542 Bize 75 derece-döndürün Dikey etrafında, lütfen. 82 00:02:13,542 --> 00:02:14,750 83 00:02:14,750 --> 00:02:16,127 >> -Stop. 84 00:02:16,127 --> 00:02:19,330 Kısmı geri dön Kapının hakkında tekrar. 85 00:02:19,330 --> 00:02:21,420 >> Bitmap bir görüntü arttırıcı Yakaladım? 86 00:02:21,420 --> 00:02:24,420 >> Biz Pradeep Singh kullanabilir -Belki yöntem pencereleri görmek için. 87 00:02:24,420 --> 00:02:25,902 >> -The Yazılım sanat durumudur. 88 00:02:25,902 --> 00:02:26,866 >> -The Özdeğer kapalıdır. 89 00:02:26,866 --> 00:02:29,758 >> Sağ -with algorithms-- kombinasyonu 90 00:02:29,758 --> 00:02:32,168 >> -Sigara Alınan aydınlatma Bir sonraki seviyeye algoritmaları, 91 00:02:32,168 --> 00:02:34,110 ve ben bunları kullanabilirsiniz Bu fotoğrafı geliştirmek. 92 00:02:34,110 --> 00:02:36,840 >> Üzerine -Lock ve z-eksenini büyütmek. 93 00:02:36,840 --> 00:02:37,351 >> Kabiliyetlerinin. 94 00:02:37,351 --> 00:02:37,850 Geliştirin. 95 00:02:37,850 --> 00:02:38,720 Kabiliyetlerinin. 96 00:02:38,720 --> 00:02:40,070 -Freeze Ve geliştirmek. 97 00:02:40,070 --> 00:02:43,420 [SON VİDEO OYNATMA] 98 00:02:43,420 --> 00:02:45,830 DAVID J. MALAN: Yani olanlardır Tüm kelimeleri, ama onlar değildi 99 00:02:45,830 --> 00:02:47,870 Doğru cümle kullanılır. 100 00:02:47,870 --> 00:02:52,370 Ve gerçekten de gelecekte, her zaman, , birisi kelime duymak lütfen, 101 00:02:52,370 --> 00:02:54,250 Sadece biraz kıkırdama ", geliştirmek". 102 00:02:54,250 --> 00:02:57,190 Eğer geliştirmek çalıştığınızda Çünkü, Örneğin, bu ne olur. 103 00:02:57,190 --> 00:02:58,580 >> Yani burada muhteşem bir fotoğraf var. 104 00:02:58,580 --> 00:02:59,720 Bu CS50 kendi Daven olduğunu. 105 00:02:59,720 --> 00:03:03,740 Ve biz istedik ki varsayalım Onun gözünde pırıltı odaklanmanızı, 106 00:03:03,740 --> 00:03:05,870 veya yansıması açıkça kötü adam 107 00:03:05,870 --> 00:03:07,820 güvenlik kamerası tarafından yakalanan. 108 00:03:07,820 --> 00:03:10,330 Bu ne olur Bir resmi yakınlaştırmak olduğunu 109 00:03:10,330 --> 00:03:14,060 Sadece sınırlı sayıda vardır bununla birlikte bulunan bit. 110 00:03:14,060 --> 00:03:15,420 >> Yani alacağı budur. 111 00:03:15,420 --> 00:03:19,190 Gerçekten de, Daven gözüne , belki altı piksel ama dört 112 00:03:19,190 --> 00:03:22,110 tam olarak ne oluşturmak Orada ışıltılı oldu. 113 00:03:22,110 --> 00:03:25,890 Yani Sorun Seti Dört sonuçta olacak Eğer özellikle, bu dünyayı keşfetmek 114 00:03:25,890 --> 00:03:28,090 şey doğası gereği Biz dosya g / ç, nerede çağrı 115 00:03:28,090 --> 00:03:31,000 i / o sadece bir fantezi yoludur giriş ve çıkış söyleyerek. 116 00:03:31,000 --> 00:03:34,280 >> Nedenle, şimdiye kadar, etkileşimleri Biz bilgisayar ile yaşadım 117 00:03:34,280 --> 00:03:36,770 büyük ölçüde olmuştur senin Klavye ve ekran, 118 00:03:36,770 --> 00:03:40,770 ancak sabit disk ile çok değil, veya olanlar dışında dosyaların kaydedilmesi 119 00:03:40,770 --> 00:03:41,620 kendiniz yazabilir. 120 00:03:41,620 --> 00:03:44,570 Sizin programları bugüne kadar var değil, yaratma ve kaydetme edilmiş 121 00:03:44,570 --> 00:03:46,270 ve kendi dosyalarını güncelleyerek. 122 00:03:46,270 --> 00:03:47,150 >> Peki, bir dosya nedir? 123 00:03:47,150 --> 00:03:48,105 Peki, bir JPEG gibi bir şey. 124 00:03:48,105 --> 00:03:50,520 Bu belki bir görüntü ya Facebook'a yüklemek, 125 00:03:50,520 --> 00:03:51,690 veya herhangi bir yerde web üzerinde bakın. 126 00:03:51,690 --> 00:03:54,460 Nitekim, bu fotoğraf sadece Daven testere JPEG oldu. 127 00:03:54,460 --> 00:03:57,570 Ve ne ilginç JPEG gibi dosyalar hakkında 128 00:03:57,570 --> 00:04:02,170 Bunlar tespit edilebilmesidir, tipik, bit belirli kalıpları ile. 129 00:04:02,170 --> 00:04:05,200 >> Diğer bir deyişle, ne var ki Bir GIF JPEG ayırır 130 00:04:05,200 --> 00:04:08,109 Bir Word bir PING gelen Bir Excel dosyasından belge? 131 00:04:08,109 --> 00:04:09,900 Peki, bu sadece farklı bit desenleri. 132 00:04:09,900 --> 00:04:12,820 Ve bu farklı desenleri Genellikle bu dosyaların aralığındadır. 133 00:04:12,820 --> 00:04:18,200 Böylece >> Bilgisayarınız bir Kelime açtığında doc veya bir bilgisayar JPEG açtığında, 134 00:04:18,200 --> 00:04:20,940 en tipik görünüyor dosyanın ilk birkaç bit. 135 00:04:20,940 --> 00:04:24,059 Ve bir model tanırsa, oh, bu bir görüntü, diyor. 136 00:04:24,059 --> 00:04:25,850 Bana bunu göstermek Let Bir grafik olarak kullanıcı. 137 00:04:25,850 --> 00:04:27,870 Ya da, ah, bu bir Word doc gibi görünüyor. 138 00:04:27,870 --> 00:04:30,480 Bana bir deneme olarak kullanıcıya göstermek edelim. 139 00:04:30,480 --> 00:04:33,020 >> Yani örneğin, JPEG, o vardır çıkıyor 140 00:04:33,020 --> 00:04:35,460 Oldukça sofistike Kaputun altında. 141 00:04:35,460 --> 00:04:40,140 Ama en her ilk üç bayt JPEG, bu üç sayı ile başlar. 142 00:04:40,140 --> 00:04:44,680 Böylece bayt, sıfır, bir, iki, bu bölgede en her JPEG, 255, daha sonra sayı 143 00:04:44,680 --> 00:04:46,675 216, daha sonra sayı 255. 144 00:04:46,675 --> 00:04:48,990 >> Ve mümkün olacak ne Gelecek hafta yapmaya başlamak için 145 00:04:48,990 --> 00:04:52,920 aslında altında alay edilir JPEG gibi dosya başlık 146 00:04:52,920 --> 00:04:57,210 ve bitmap dosyaları gibi, ve görme ne zaman sürece orada oldu 147 00:04:57,210 --> 00:04:58,650 Bir bilgisayar kullanarak oldum gibi. 148 00:04:58,650 --> 00:05:01,860 >> Ama genellikle orada ne değil mi Bu gibi ondalık sayılar gibi yazılmış. 149 00:05:01,860 --> 00:05:04,620 Bilgisayar bilim adamları yok ondalık konuşmak eğilimindedir. 150 00:05:04,620 --> 00:05:06,139 Onlar gerçekten ikili do not speak. 151 00:05:06,139 --> 00:05:07,930 Tipik olarak, ne zaman biz istiyoruz sayıları ifade etmek, 152 00:05:07,930 --> 00:05:10,710 biz aslında onaltılık kullanmak, hangi Hatırlayacağınız 153 00:05:10,710 --> 00:05:13,027 Sorun Set, diyelim ki, Meydan biri, 154 00:05:13,027 --> 00:05:14,610 Eğer farklı bir sistem düşünmek. 155 00:05:14,610 --> 00:05:17,170 >> Biz, elbette, tanıdık dokuza kadar ondalık, sıfır ile. 156 00:05:17,170 --> 00:05:18,215 Biz ikili hakkında konuştuk. 157 00:05:18,215 --> 00:05:20,710 Ve biz gerçekten yok çok burada bu kullanmak için 158 00:05:20,710 --> 00:05:22,470 out, bilgisayarlar kullanan çünkü. 159 00:05:22,470 --> 00:05:24,900 Ama programcılar çok olacak çoğu zaman, ancak her zaman değil, 160 00:05:24,900 --> 00:05:29,360 Sadece, yani onaltılık kullanın Eğer, sizin alfabesinde 16 harf var 161 00:05:29,360 --> 00:05:31,330 olarak iki ya da 10 karşı çıktı. 162 00:05:31,330 --> 00:05:34,530 >> Yani daha yüksek saymak nasıl onaltılık dokuz daha? 163 00:05:34,530 --> 00:05:41,120 Gidip 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, Bir, sadece sözleşmeyle c, d, e, f, b. 164 00:05:41,120 --> 00:05:43,540 Ama ne anahtar her olduğunu Bu tek bir sembolüdür. 165 00:05:43,540 --> 00:05:44,340 Hiçbir 10 vardır. 166 00:05:44,340 --> 00:05:48,400 Her Çünkü, hiçbir 11, başına var senin basamak, sadece ondalık gibi 167 00:05:48,400 --> 00:05:51,940 Sadece ikili gibi ve sadece gerektiği Kongre tarafından tek bir karakter olmak. 168 00:05:51,940 --> 00:05:55,280 >> Peki o zaman biz alfabe onaltılık bizim emrinde. 169 00:05:55,280 --> 00:05:58,600 Yani JPEG eğer neye benziyor bu ilk üç yazmak için edildi 170 00:05:58,600 --> 00:06:01,980 , ondalık olarak değil bayt ama Örneğin, onaltılık olarak? 171 00:06:01,980 --> 00:06:03,640 Ve neden altıgen o yararlı hatta tüm mı? 172 00:06:03,640 --> 00:06:05,290 >> Peki, bir örnek hızlı bir bakış. 173 00:06:05,290 --> 00:06:09,030 Ben bit dışarı yazarsanız böylece Bu ondalık Numaraları temsil 174 00:06:09,030 --> 00:06:12,450 Bu biraz paslanmış olabilir Şimdi geri birkaç hafta, 175 00:06:12,450 --> 00:06:14,820 Sol bir ve ancak Doğru bir oldukça kolaydır. 176 00:06:14,820 --> 00:06:17,990 255 büyük numara biz oldu Sekiz bit ile temsil edebilir. 177 00:06:17,990 --> 00:06:18,820 Tüm olanlar oldu. 178 00:06:18,820 --> 00:06:21,320 Yani hafif tek kişi ilginç orta biridir. 179 00:06:21,320 --> 00:06:24,700 Ve ne tür dışarı yaparsanız matematik, sen, gerçekten, bu anlamak olacaktır 180 00:06:24,700 --> 00:06:27,949 biri bu desen ve sıfır 216 temsil eder. 181 00:06:27,949 --> 00:06:30,240 Yani sadece için şart izin artık bu doğru olduğunu. 182 00:06:30,240 --> 00:06:31,730 Ama neden bu ilginç? 183 00:06:31,730 --> 00:06:33,970 >> Peki, bir bayt, elbette, sekiz bittir. 184 00:06:33,970 --> 00:06:38,980 Ve bu düşünüyorsanız çıkıyor Dört bitlik iki parçalarını bir bayt, 185 00:06:38,980 --> 00:06:39,500 böyle. 186 00:06:39,500 --> 00:06:41,000 Bana sadece bazı boşluk eklemek edelim. 187 00:06:41,000 --> 00:06:42,550 Yani önce, sonra. 188 00:06:42,550 --> 00:06:46,520 Ben sadece bazı beyaz boşluk ekledik Burada görselleştirme aşkına. 189 00:06:46,520 --> 00:06:51,840 Nasıl şimdi temsil edebilir, diyelim ki, onaltılık bit her dört, 190 00:06:51,840 --> 00:06:52,880 her dört bitlik dizi? 191 00:06:52,880 --> 00:06:56,420 >> Örneğin, soldaki Yani Şimdi, biz ikili 1111 var. 192 00:06:56,420 --> 00:07:00,420 Ondalık bu sayı nedir, Eğer matematik dışarı yaparsanız? 193 00:07:00,420 --> 00:07:03,780 Siz olanları bir yere sahip, ikişer ikişer yeri, ayak yer ve sekizli yer. 194 00:07:03,780 --> 00:07:04,341 >> İZLEYİCİ: 15. 195 00:07:04,341 --> 00:07:05,340 DAVID J. MALAN: Bu 15 var. 196 00:07:05,340 --> 00:07:08,340 Bu yüzden sekiz artı dört yaparsanız artı iki artı bir, biz 15 olsun. 197 00:07:08,340 --> 00:07:11,790 Yani aşağıda 15 aşağı yazabilirsiniz 1111, ama burada bütün mesele 198 00:07:11,790 --> 00:07:13,190 onaltılık olduğunu, ondalık değil. 199 00:07:13,190 --> 00:07:17,310 Bunun yerine yazarak 15, 1-5, Ben, onaltılık o yazmak için gidiyorum 200 00:07:17,310 --> 00:07:22,311 Eğer varsa, geri düşünüyorsanız, hangi f yoluyla sıfır, ne 15 olacak? 201 00:07:22,311 --> 00:07:22,810 HEDEF KİTLE: f. 202 00:07:22,810 --> 00:07:24,434 DAVID J. MALAN: Yani o en f çıkıyor. 203 00:07:24,434 --> 00:07:29,140 Ve sen diyerek dışarı çalışabilir, 10 ise iyi, sonra Tamam, f 15 olduğunu. 204 00:07:29,140 --> 00:07:33,250 Yani gerçekten, biz yazabilirsiniz f f olarak sayılar aynı seti. 205 00:07:33,250 --> 00:07:35,750 Ve sonra matematik biraz yaparsanız, biz d olduğunu anlamak gerekir. 206 00:07:35,750 --> 00:07:38,650 Sekiz, oldukça kolaydır çünkü biz Sekiz yerine bir tane. 207 00:07:38,650 --> 00:07:40,620 Ve sonra, biz f f en bir çift daha var. 208 00:07:40,620 --> 00:07:44,669 >> Peki insanlar kongre tarafından yapmak eğilimindedir Kullandıkları zaman onaltılık onlar sadece bir 209 00:07:44,669 --> 00:07:47,710 daha özlü Bu biraz geç, o beyaz alanı en kurtulmak. 210 00:07:47,710 --> 00:07:50,890 Ve sadece süper temiz olması için Bu onaltılık olduğunu okuyucular, 211 00:07:50,890 --> 00:07:54,670 arasında basit kongre İnsanlar size sıfır yazma 212 00:07:54,670 --> 00:07:58,000 Diğer anlamı yoktur x görsel bir tanımlayıcı daha, 213 00:07:58,000 --> 00:07:59,590 Burada bir altıgen numarası geliyor. 214 00:07:59,590 --> 00:08:04,210 >> Ve sonra, iki basamak koymak, f Bu durumda f sonra d, f, f sonra. 215 00:08:04,210 --> 00:08:06,700 Yani uzun lafın kısası, onaltılık sadece eğilimi 216 00:08:06,700 --> 00:08:11,990 yararlı olduğu her çünkü onun rakam, f yoluyla sıfır, mükemmel hatları 217 00:08:11,990 --> 00:08:13,880 dört bitlik bir desen ile. 218 00:08:13,880 --> 00:08:18,080 >> Iki onaltılık basamak var ise, sıfır tekrar F suretiyle, 219 00:08:18,080 --> 00:08:20,256 Bu mükemmel size verir Sekiz bit veya bir bayt. 220 00:08:20,256 --> 00:08:22,380 Bu eğilimi yüzden de bu geleneksel yararlı olabilir. 221 00:08:22,380 --> 00:08:24,990 Hiçbir fikri yok Gerçekten bunun ötesinde içerik, 222 00:08:24,990 --> 00:08:27,010 gerçek programı dışında. 223 00:08:27,010 --> 00:08:29,310 >> Şimdi JPEG sadece değil grafik biçimlerini dosya. 224 00:08:29,310 --> 00:08:33,230 Sen olduğunu hatırlatmak olabilir Dünyada böyle dosyalar, 225 00:08:33,230 --> 00:08:34,830 en azından bir kaç yıl. 226 00:08:34,830 --> 00:08:37,580 >> Peki bu aslında Windows XP yüklü 227 00:08:37,580 --> 00:08:39,960 Dünyada bilgisayarların milyonlarca. 228 00:08:39,960 --> 00:08:43,000 Ve bu bir bitmap dosyası, BMP oldu. 229 00:08:43,000 --> 00:08:47,690 Ve bitmap dosyası olarak gelecek görürsünüz Hafta, sadece noktaların bir desen anlamına gelmektedir, 230 00:08:47,690 --> 00:08:51,710 dedikleri gibi piksel, Gerçekten, bit üzerinde harita. 231 00:08:51,710 --> 00:08:55,160 >> Peki ama, ilginç ne, Bu dosya biçimi, BMP hakkında olduğunu 232 00:08:55,160 --> 00:08:58,590 Bu başlık altında, onu Sadece üç bayt daha vardır 233 00:08:58,590 --> 00:09:01,020 içerir, böylece başlık oluşturmak , ilk birkaç ısırıkları konuşmak. 234 00:09:01,020 --> 00:09:03,330 Aslında biraz görünüyor İlk bakışta karmaşık. 235 00:09:03,330 --> 00:09:04,704 Ve P set bu görürsünüz. 236 00:09:04,704 --> 00:09:06,810 Ve bir şey elde Bu özel dışarı şimdi 237 00:09:06,810 --> 00:09:10,720 Sadece gerçek olarak, çok önemli değil her bitmap başında 238 00:09:10,720 --> 00:09:13,823 Dosya, bir grafik formatı, sayıların bir sürü var. 239 00:09:13,823 --> 00:09:14,980 240 00:09:14,980 --> 00:09:16,720 >> Şimdi Microsoft, Bu formatta yazarı, 241 00:09:16,720 --> 00:09:18,820 Bu çağrı eğilimindedir şeyler değil ints ve karakter 242 00:09:18,820 --> 00:09:22,259 ve yüzer ama sözcükler d kelimeler ve uzun ürün ve bayt. 243 00:09:22,259 --> 00:09:23,800 Yani sadece farklı veri türlerini konum. 244 00:09:23,800 --> 00:09:25,170 Onlar farklı isimler konum Aynı şey için. 245 00:09:25,170 --> 00:09:26,740 Ama P Seti Four olduğunu görürsünüz. 246 00:09:26,740 --> 00:09:31,450 >> Ama bu demek sadece bir insan eğer Bazı .bmp dosyasını çift tıkladığında onun 247 00:09:31,450 --> 00:09:35,015 ya da onu sabit disk, ve bir pencere açılır ona o görüntü gösteren kadar, 248 00:09:35,015 --> 00:09:38,500 Bu işletim nedeniyle oldu Sistem muhtemelen sadece fark 249 00:09:38,500 --> 00:09:41,460 BMP dosya uzantısı Dosya adı, 250 00:09:41,460 --> 00:09:45,010 ama aynı zamanda gerçek var ki, bazı bit desen kongre 251 00:09:45,010 --> 00:09:47,490 başında Bu bitmap dosyasının. 252 00:09:47,490 --> 00:09:50,270 >> Ama şimdi odaklanmak izin Böyle karmaşık bir dosya, 253 00:09:50,270 --> 00:09:52,120 ancak bunun yerine böyle bir şey. 254 00:09:52,120 --> 00:09:55,190 Ben, gedit burada varsayalım Sadece başlangıçlar var 255 00:09:55,190 --> 00:09:57,070 Oldukça basit bir program. 256 00:09:57,070 --> 00:09:58,860 Bazı kontör içerir var. 257 00:09:58,860 --> 00:10:02,120 Şimdi var #include "structs.h" ama Ben bir an geri buna geleceğiz. 258 00:10:02,120 --> 00:10:03,974 Ancak bu artık için yararlıdır. 259 00:10:03,974 --> 00:10:05,890 Yani bu bir program Bu uygulamaya gidiyor 260 00:10:05,890 --> 00:10:07,335 sicil veritabanı gibi. 261 00:10:07,335 --> 00:10:09,710 Yani öğrenci bir veritabanı, ve dünyadaki her öğrenci 262 00:10:09,710 --> 00:10:13,190 muhtemelen bazı isim ve bir ev vardır ve diğer şeyler, ama biz basit tutacağız. 263 00:10:13,190 --> 00:10:15,140 Her öğrenci bir isim ve bir evi var. 264 00:10:15,140 --> 00:10:17,700 >> Ben bir yazmak istedim Yani eğer Amacı hayatında programı 265 00:10:17,700 --> 00:10:19,860 Sadece gelen yineleme oldu üç yukarı sıfır, 266 00:10:19,860 --> 00:10:22,070 üç öğrenci varsa Harvard Üniversitesi'nde. 267 00:10:22,070 --> 00:10:25,350 Ve ben sadece GetString kullanarak, almak istiyorum, Her öğrencinin adı ve ev, 268 00:10:25,350 --> 00:10:26,600 ve daha sonra sadece bu çıktı. 269 00:10:26,600 --> 00:10:28,630 >> Bu Hafta gibi çeşit olduğunu Bir, Hafta İki şeyler şimdi, 270 00:10:28,630 --> 00:10:30,810 Ben sadece bir istediğiniz döngü veya böyle bir şey. 271 00:10:30,810 --> 00:10:34,500 Ve ben getString bir kaç aramak istediğiniz kez, ve sonra bir kaç kez f yazdırın. 272 00:10:34,500 --> 00:10:37,340 Yani olsa, bunu nasıl, ne zaman bir isim ve bir ev hem de 273 00:10:37,340 --> 00:10:39,070 Her öğrenci için katılmaktadırlar? 274 00:10:39,070 --> 00:10:42,830 >> Yani benim ilk içgüdüsü olabilir Böyle bir şey yapmak olacak. 275 00:10:42,830 --> 00:10:49,620 Ben ilk sıra, bana ver, diyebilirsiniz, isimler olarak adlandırılan dizelerden oluşan bir dizi söylüyorlar. 276 00:10:49,620 --> 00:10:51,530 Ve ben bir hardcode üç burada istemiyorum. 277 00:10:51,530 --> 00:10:53,064 Ne var koymak istiyorsun? 278 00:10:53,064 --> 00:10:55,730 Sadece, çünkü ÖĞRENCİLER Yani üstünde ilan sabit, 279 00:10:55,730 --> 00:10:57,860 Ben hardcode zorunda değilsiniz sadece bu yüzden Birden fazla yerde üç. 280 00:10:57,860 --> 00:11:00,859 Bu şekilde, ben, o, bir yerde değiştirebilirsiniz ve her yerde bir değişiklik etkiler. 281 00:11:00,859 --> 00:11:04,470 Ve sonra, ben yapabilirim dize ÖĞRENCİLERİ evler. 282 00:11:04,470 --> 00:11:10,250 >> Ve şimdi, ben böyle bir şey yapmak olabilir Ben ÖĞRENCİLER <;; for (i = 0 int i ++. 283 00:11:10,250 --> 00:11:14,390 Yani hızlı yazarak kulüpler, ama bu Şimdi muhtemelen tanıdık sözdizimi. 284 00:11:14,390 --> 00:11:17,030 >> Ve şimdi, bu daha yeni oldu. 285 00:11:17,030 --> 00:11:22,890 I-inci koymak istiyorsanız öğrencinin adı, ben bunu düşünüyorum. 286 00:11:22,890 --> 00:11:26,480 Ve sonra, değil isimleri ama evler i paranteze. 287 00:11:26,480 --> 00:11:29,930 Ben bu GetString yapmak ve izin bana geri dönmek ve bu hattı düzeltmek. 288 00:11:29,930 --> 00:11:30,430 Kabul? 289 00:11:30,430 --> 00:11:31,200 Katılmıyorum? 290 00:11:31,200 --> 00:11:32,366 Çok kullanıcı dostu değil. 291 00:11:32,366 --> 00:11:33,890 Ne yapacağımı kullanıcı söylemedim. 292 00:11:33,890 --> 00:11:36,520 >> Ama şimdi, aynı zamanda ben eğer Daha sonra, diyelim istedim 293 00:11:36,520 --> 00:11:40,060 diyelim ki, bu şeyleri yazdırmak Şunları bir konrtol böylece YAPILACAKLAR sonra. 294 00:11:40,060 --> 00:11:42,330 Ben daha fazla yapmak için gidiyorum belki isimli bu bu-- 295 00:11:42,330 --> 00:11:45,970 doğru bir uygulama isimleri ve evler, üç alıyorum 296 00:11:45,970 --> 00:11:48,870 bir kullanıcıdan gelen her bunların toplamı. 297 00:11:48,870 --> 00:11:51,280 >> Ama bu çok iyi bir tasarım hakkı, değil mi? 298 00:11:51,280 --> 00:11:55,220 Ne bir öğrenci sadece bir isim varsa ve bir ev değil, aynı zamanda bir kimlik numarası, 299 00:11:55,220 --> 00:11:57,770 ve bir telefon numarası, ve bir e-posta adresi, 300 00:11:57,770 --> 00:12:00,280 ve belki de bir ana sayfa ve belki Twitter sap, 301 00:12:00,280 --> 00:12:03,730 ve diğer detaylar herhangi bir sayı Bir öğrenci ya da bir kişi ile ilgili, 302 00:12:03,730 --> 00:12:04,610 daha genel olarak. 303 00:12:04,610 --> 00:12:07,720 Eklemek başlayacak nasıl Bu programa işlevselliği? 304 00:12:07,720 --> 00:12:14,080 >> Peki, ben olabilir basit yolu gibi hissediyorum gibi bir şey yapmak diyelim olsun, 305 00:12:14,080 --> 00:12:16,490 kimlikleri ÖĞRENCİLERİNE int. 306 00:12:16,490 --> 00:12:18,380 Yani orada bütün kimliklerini koyabilirsiniz. 307 00:12:18,380 --> 00:12:22,240 Ve sonra, bir şey için telefon numaraları gibi, 308 00:12:22,240 --> 00:12:24,400 Ben nasıl emin değilim Henüz bu temsil. 309 00:12:24,400 --> 00:12:30,280 Yani öncesinde ve adil çağrı gidelim Bu ÖĞRENCİLERİ, twitters hangi 310 00:12:30,280 --> 00:12:33,550 Biraz garip, ama- olduğunu ve alanlar bir demet daha. 311 00:12:33,550 --> 00:12:36,360 >> Ben etkin bir başladım kopyalayıp buraya yapıştırın. 312 00:12:36,360 --> 00:12:39,416 Ve bu oldukça büyümeye devam ediyor oldukça hızlı hantal, değil mi? 313 00:12:39,416 --> 00:12:42,290 Olsaydı güzel olmaz mıydı dünya veri yapısı, bilinen 314 00:12:42,290 --> 00:12:45,600 değil bir int veya bir dize, ancak bir şey olarak üst düzey bir soyutlama, yani 315 00:12:45,600 --> 00:12:47,570 Bir öğrenci olarak bilinen, konuşmak? 316 00:12:47,570 --> 00:12:50,220 C built-in ile gelmedi Öğrenciler için işlevsellik, 317 00:12:50,220 --> 00:12:52,260 ama ben böyle vermek istedim ne olur? 318 00:12:52,260 --> 00:12:55,640 >> Peki, ben gidiyorum, çıkıyor , structs.h burada adında bir dosyayı açmak 319 00:12:55,640 --> 00:12:57,090 ve tam olarak bunu yapabilirsiniz. 320 00:12:57,090 --> 00:12:58,290 Ve şimdi bu yapmaya başlamak için gidiyoruz. 321 00:12:58,290 --> 00:13:01,490 Ve P Seti Üç başlık altında, Zaten şimdi bu yapıyorum. 322 00:13:01,490 --> 00:13:05,920 Bir g rect olarak böyle bir şey yoktur ya da programlama dili C bir g oval 323 00:13:05,920 --> 00:13:10,570 >> Stanford'da Dostlarım bu uygulamaya Burada bu yaklaşımı kullanarak veri tipleri, 324 00:13:10,570 --> 00:13:13,900 Kendi yeni veri ilan Yeni bir anahtar kelime kullanarak tipleri 325 00:13:13,900 --> 00:13:16,744 adı yapı ve bir biri olarak adlandırılan typedef. 326 00:13:16,744 --> 00:13:19,660 Ve gerçekten de, olsa sözdizimi şeyler biraz farklı görünüyor 327 00:13:19,660 --> 00:13:23,550 Biz, daha önce görmüştüm prensibi, süper basit. 328 00:13:23,550 --> 00:13:25,297 >> Bu sadece "bir tür tanımlar." Anlamına gelir 329 00:13:25,297 --> 00:13:27,255 Bu bir olacak yapı ve bir yapı 330 00:13:27,255 --> 00:13:29,400 Sadece bir kap gibi Birden fazla şeyler için. 331 00:13:29,400 --> 00:13:31,780 Ve bu yapı gidiyor isim adında bir dize var, 332 00:13:31,780 --> 00:13:33,210 ve bir dize evini aradı. 333 00:13:33,210 --> 00:13:37,520 Ve Sadece kolaylık, diyelim, Bütün bu veri yapısı öğrencisi. 334 00:13:37,520 --> 00:13:40,320 >> Peki an olsun noktalı virgül, şimdi var 335 00:13:40,320 --> 00:13:43,280 Kendi veri yarattı tipi olarak adlandırılan öğrenci 336 00:13:43,280 --> 00:13:46,420 şimdi, int yanında duruyor ve şamandıra ve Char ve dize, 337 00:13:46,420 --> 00:13:50,270 ve g, ru, ve g, oval, herhangi bir sayıda Diğer şeylerin insanların icat. 338 00:13:50,270 --> 00:13:53,340 >> Peki bu konuda yararlı ne Şimdi geri giderseniz olduğunu 339 00:13:53,340 --> 00:13:57,430 0 struct ve bu bitirmek için Yazdığım uygulama, 340 00:13:57,430 --> 00:14:02,080 Burada önceden tüm fark kaçınılmaz messiness o 341 00:14:02,080 --> 00:14:05,490 Ben ekledi oluyor başlamak üzereydi telefon numaralarını ve twitters ve 342 00:14:05,490 --> 00:14:07,370 Bu diğer şeyler Bir öğrencinin tanımı, 343 00:14:07,370 --> 00:14:11,810 şimdi kısaca sarılmış oluyor Öğrencilerin sadece bir dizi olarak. 344 00:14:11,810 --> 00:14:15,500 >> Ve şimdi bu öğrencilerin her biri Bunun içinde birden fazla şeyler vardır. 345 00:14:15,500 --> 00:14:16,930 Böylece sadece bir soru bırakır. 346 00:14:16,930 --> 00:14:19,700 Nasıl ismi de alırım, ve ev ve kimlik, 347 00:14:19,700 --> 00:14:21,640 ve ne olursa olsun başka bir Öğrencinin içinde? 348 00:14:21,640 --> 00:14:22,930 Süper basit, hem de. 349 00:14:22,930 --> 00:14:25,730 Yeni sözdizimi, ama basit bir fikir. 350 00:14:25,730 --> 00:14:29,239 >> Diziye Sadece endeksi, Biz geçen hafta ve bu yaptığı gibi. 351 00:14:29,239 --> 00:14:31,030 Ve ne açıkça var sözdizimi yeni parça? 352 00:14:31,030 --> 00:14:32,590 353 00:14:32,590 --> 00:14:35,880 Sadece., Demek ki "içeri yapı ve saha denilen olsun 354 00:14:35,880 --> 00:14:39,030 isim, ev denilen alan olsun Öğrenci denilen alan olsun. " 355 00:14:39,030 --> 00:14:41,940 >> Yani P Seti Üç de, sen eğer Hala üzerinde çalışıyor, 356 00:14:41,940 --> 00:14:44,020 hala ve çoğu millet Senin gibi fark vardır 357 00:14:44,020 --> 00:14:46,130 gibi şeyler kullanmaya başlayabilirsiniz g rects ve g oval 358 00:14:46,130 --> 00:14:50,201 ve diğer şeyler görünmüyor ki Hafta Zero One, Two veya gelen, 359 00:14:50,201 --> 00:14:52,950 Bu Stanford çünkü olduğunu fark Bazı yeni veri türleri ilan etti. 360 00:14:52,950 --> 00:14:56,160 >> Ve gerçekten de, bu tam olarak ne olacak P Seti Four yanı sıra, yapmak, zaman 361 00:14:56,160 --> 00:14:59,880 Biz şeylerle uğraşmak başlar görüntüler, bitmap, ve daha fazlası gibi. 362 00:14:59,880 --> 00:15:02,882 Yani bu sadece bir teaser ve var gelmek ne için zihinsel bir model. 363 00:15:02,882 --> 00:15:04,590 Şimdi, Cloud Biraz bu sabah. 364 00:15:04,590 --> 00:15:09,560 Ben ne olduğunu görmek için bir tür merak ediyordum Microsoft duvar aslında 365 00:15:09,560 --> 00:15:10,310 bugün gibi görünüyor. 366 00:15:10,310 --> 00:15:15,200 Ve 2006 yılında birisi çıkıyor aslında neredeyse kesin gitti 367 00:15:15,200 --> 00:15:19,210 Aynı nokta gerçekte fotoğraflamak ne bu gün ki gibi görünüyor. 368 00:15:19,210 --> 00:15:21,380 alan şimdi biraz büyümüş. 369 00:15:21,380 --> 00:15:24,850 >> Böylece görüntülerin hemen olarak, burada Daven geri getirsin 370 00:15:24,850 --> 00:15:26,890 ekran ve Nicholas, ve sadece hatırlatmak 371 00:15:26,890 --> 00:15:30,540 Bu öğle yemeği için bize katılmak isterseniz Bizim her zamanki URL'ye bu Cuma, baş 372 00:15:30,540 --> 00:15:31,440 işte. 373 00:15:31,440 --> 00:15:33,530 >> Yani biz Pazartesi günü kapalı bıraktın nerede? 374 00:15:33,530 --> 00:15:35,140 Biz doğru, bu sorunu tanıttı? 375 00:15:35,140 --> 00:15:37,610 Bu görünüşte bir doğru swap uygulanması, 376 00:15:37,610 --> 00:15:40,460 bu sayede siz, iki ints alarak Bir b olarak adlandırılan bir, olarak adlandırılan 377 00:15:40,460 --> 00:15:44,130 Laura burada yaptığı gibi, onları takas süt ve su ile sahnede, 378 00:15:44,130 --> 00:15:46,820 Geçici kullanılarak değişken veya boş bir fincan, 379 00:15:46,820 --> 00:15:50,540 Biz ve bir in içinde b koymak böylece şeylerin bir karışıklık yapmadan, b. 380 00:15:50,540 --> 00:15:51,560 Bir değişken kullanılır. 381 00:15:51,560 --> 00:15:52,870 Bu geçici denir. 382 00:15:52,870 --> 00:15:55,520 >> Ama temel ne oldu Pazartesi günü bu kod ile sorun nedir? 383 00:15:55,520 --> 00:15:57,700 384 00:15:57,700 --> 00:15:58,870 Buradaki sorun neydi? 385 00:15:58,870 --> 00:16:00,106 386 00:16:00,106 --> 00:16:00,605 Evet. 387 00:16:00,605 --> 00:16:01,970 >> İZLEYİCİ: Bu daha fazla yer kaplıyor. 388 00:16:01,970 --> 00:16:04,719 >> DAVID J. MALAN: daha fazla Alır uzay, ben bir değişken kullanıyorum çünkü, 389 00:16:04,719 --> 00:16:05,400 ve bu Tamam. 390 00:16:05,400 --> 00:16:07,300 Bu doğru, ama ben değilim Bu Tamam diyecek. 391 00:16:07,300 --> 00:16:10,030 Bu büyük sadece 32 bit var şeylerin düzeni, öyle değil büyük bir anlaşma. 392 00:16:10,030 --> 00:16:10,655 Diğer düşünceler? 393 00:16:10,655 --> 00:16:12,572 HEDEF KİTLE: Sadece swapları Yerel değişkenler. 394 00:16:12,572 --> 00:16:13,571 DAVID J. MALAN: Kesinlikle. 395 00:16:13,571 --> 00:16:15,090 Sadece yerel değişkenleri değiştirir. 396 00:16:15,090 --> 00:16:18,173 Her zaman bir function-- çağrı Çünkü Ben Annenberg gelen tepsileri vardı 397 00:16:18,173 --> 00:16:19,840 son kez, sen alt ana var. 398 00:16:19,840 --> 00:16:23,560 En kısa sürede size adında bir işlev çağrısı olarak takas, takas x ve y almaz, 399 00:16:23,560 --> 00:16:24,400 Orijinal değerlerin. 400 00:16:24,400 --> 00:16:26,392 Ne iddia etmedi, takas get yapar? 401 00:16:26,392 --> 00:16:27,100 HEDEF KİTLE: kopyalar. 402 00:16:27,100 --> 00:16:28,090 DAVID J. MALAN: Bunlardan kopya Yani. 403 00:16:28,090 --> 00:16:31,120 Bu yüzden eğer, bir ve iki alır Son zaman örnek hatırlama, 404 00:16:31,120 --> 00:16:34,730 ama bir ve iki kopyası başarıyla takas edilir. 405 00:16:34,730 --> 00:16:38,550 Ama ne yazık ki sonunda, Bu değerler hala aynıdır. 406 00:16:38,550 --> 00:16:41,880 Yani biz bu görebilirsiniz bizim Yeni arkadaş, umarım GDB, 407 00:16:41,880 --> 00:16:45,180 Siz veya TF'ler ve Ca en olması aşağıdaki gibi doğru yönlendirmeye edilmiştir. 408 00:16:45,180 --> 00:16:51,210 >> Yani takas hatırlama yapalım da-- görünüyor Böyle paha görünüyor açmak. 409 00:16:51,210 --> 00:16:54,160 Biz iki, birine y x başlatıldı. 410 00:16:54,160 --> 00:16:55,620 Baskı f en bir grup vardı. 411 00:16:55,620 --> 00:16:58,080 Ama sonra, anahtar arama Burada, takas oldu 412 00:16:58,080 --> 00:17:00,260 tam kod biziz Sadece bir an önce gördüm. 413 00:17:00,260 --> 00:17:03,180 Hangi ilk başta doğru bakışta, ama işlevsel, 414 00:17:03,180 --> 00:17:06,800 Bu programın, çünkü çalışmıyor kalıcı x ve y takas olmaz. 415 00:17:06,800 --> 00:17:10,190 >> Peki, en bu bkz hızlı sıcak olsun Burada GDB, bir ./noswap ile. 416 00:17:10,190 --> 00:17:11,867 417 00:17:11,867 --> 00:17:15,200 Ezici bir bilgi demet o Şimdi Kontrol L kurtulmak gerekir. 418 00:17:15,200 --> 00:17:17,516 Ve şimdi, ben gidiyorum go ahead ve çalıştırın. 419 00:17:17,516 --> 00:17:19,349 Ve ne yazık ki, o Bu kullanışlı değildi. 420 00:17:19,349 --> 00:17:22,355 Bu iç programı koştu Program, GDB, bir hata ayıklayıcı denilen 421 00:17:22,355 --> 00:17:23,730 ama bana etrafında kurcalamak izin vermedi. 422 00:17:23,730 --> 00:17:26,229 >> Yani aslında duraklama nasıl Bu program içinde yürütme? 423 00:17:26,229 --> 00:17:27,410 424 00:17:27,410 --> 00:17:28,329 Yani kırmak. 425 00:17:28,329 --> 00:17:32,340 Ve ben herhangi kırılabilir satır numarası, bir, 10, 15. 426 00:17:32,340 --> 00:17:35,530 Ama aynı zamanda sembolik kırabilir mola main söyleyerek. 427 00:17:35,530 --> 00:17:38,980 Ve bir mola ayarlamak için gidiyor nokta, görünüşe göre, ana hat 16 de. 428 00:17:38,980 --> 00:17:40,050 Ve nerede hat 16? 429 00:17:40,050 --> 00:17:42,960 Koduyla kadar gidelim ve noswap kadar gidin. 430 00:17:42,960 --> 00:17:46,930 Ve gerçekten de, satır 16 ilk programda. 431 00:17:46,930 --> 00:17:52,130 >> Peki şimdi, ben devam eğer ve tipi Bu zaman çalıştırmak girin, o durakladı. 432 00:17:52,130 --> 00:17:53,080 Yani etrafında kurcalamak edelim. 433 00:17:53,080 --> 00:17:55,716 Neden x'in sıfır x-- Yazdır? 434 00:17:55,716 --> 00:17:56,705 435 00:17:56,705 --> 00:17:57,830 Ve dolar işaretini görmezden. 436 00:17:57,830 --> 00:17:59,725 Bu meraklısı için sadece var Programın kullanımı. 437 00:17:59,725 --> 00:18:00,780 438 00:18:00,780 --> 00:18:03,140 Neden şu anda x sıfır mı? 439 00:18:03,140 --> 00:18:03,640 Evet. 440 00:18:03,640 --> 00:18:07,061 >> İZLEYİCİ: Bu hemen önce durakladı hat 16, aslında hat 16. 441 00:18:07,061 --> 00:18:08,060 DAVID J. MALAN: Kesinlikle. 442 00:18:08,060 --> 00:18:11,630 GDB, varsayılan olarak, duraklatılmış etti Sadece hat 16 öncesi yürütme. 443 00:18:11,630 --> 00:18:14,820 Yani, idam değil hangi Bazı bilinmeyen değer olduğu x anlamına gelir. 444 00:18:14,820 --> 00:18:17,150 Ve biz bu kadar şanslı var sıfır gibi temiz bir şey. 445 00:18:17,150 --> 00:18:20,310 Yani şimdi ben önümüzdeki yazarsanız, şimdi 16 idam. 446 00:18:20,310 --> 00:18:22,000 Bana 17 yürütmek için bu bekliyor. 447 00:18:22,000 --> 00:18:23,400 Beni öncesinde ve baskı x gidelim. 448 00:18:23,400 --> 00:18:24,094 Bu biri. 449 00:18:24,094 --> 00:18:25,260 Beni öncesinde ve baskı y gidelim. 450 00:18:25,260 --> 00:18:26,176 Şimdi ne görmelisiniz? 451 00:18:26,176 --> 00:18:27,660 452 00:18:27,660 --> 00:18:28,560 >> İZLEYİCİ: [Duyulmaz] 453 00:18:28,560 --> 00:18:29,165 >> DAVID J. MALAN: Biraz daha yüksek sesle. 454 00:18:29,165 --> 00:18:30,040 >> İZLEYİCİ: [Duyulmaz] 455 00:18:30,040 --> 00:18:30,537 456 00:18:30,537 --> 00:18:32,120 DAVID J. MALAN: Değil oldukça uzlaşma. 457 00:18:32,120 --> 00:18:34,760 Yani evet, bazı çöp değerini görmek. 458 00:18:34,760 --> 00:18:37,862 Şimdi, y orada 134514064 olup. 459 00:18:37,862 --> 00:18:39,320 Peki, sadece bazı çöp değer. 460 00:18:39,320 --> 00:18:41,350 Benim program RAM kullanır Farklı amaçlar için. 461 00:18:41,350 --> 00:18:42,350 Diğer işlevleri var. 462 00:18:42,350 --> 00:18:44,040 Diğer insanlar benim bilgisayarın içinde yazdı. 463 00:18:44,040 --> 00:18:46,789 Yani bu bit kullanılmaktadır diğer değerler, ve ne görüyorum 464 00:18:46,789 --> 00:18:49,470 Bazı kalıntıları olduğunu bellek önceden kullanımı. 465 00:18:49,470 --> 00:18:53,350 >> Yani hayır büyük dağıtmak, en kısa sürede, çünkü Ben yanında yazın ve sonra y yazdırmak gibi, 466 00:18:53,350 --> 00:18:55,640 o başlatıldı oluyor Ben istiyorum değer. 467 00:18:55,640 --> 00:18:57,400 Yani şimdi, en biraz daha hızlı devam edelim. 468 00:18:57,400 --> 00:18:58,540 Gelecek N. 469 00:18:58,540 --> 00:18:59,570 Tekrar yapalım. 470 00:18:59,570 --> 00:19:00,530 Tekrar yapalım. 471 00:19:00,530 --> 00:19:02,404 Ama ben vurmak istemiyorum Burada, çünkü eğer ben 472 00:19:02,404 --> 00:19:05,110 içeride neler olup bittiğini görmek istiyorum swap, komut nedir? 473 00:19:05,110 --> 00:19:05,520 >> İZLEYİCİ: adımlar. 474 00:19:05,520 --> 00:19:06,436 >> DAVID J. MALAN: adımlar. 475 00:19:06,436 --> 00:19:09,800 Yani bu beni adımları yerine üzerinde çok fonksiyonu. 476 00:19:09,800 --> 00:19:12,270 Ve şimdi, biraz şifreli var dürüst, ama bu sadece bir 477 00:19:12,270 --> 00:19:14,581 Ben şimdi hat 33 olduğumu söylüyorsun. 478 00:19:14,581 --> 00:19:15,580 Ve yine bu yapalım. 479 00:19:15,580 --> 00:19:16,080 Baskı sıcaklığı. 480 00:19:16,080 --> 00:19:17,129 481 00:19:17,129 --> 00:19:20,170 Çöp değeri, negatif bu sefer, ama bu sadece hala çöp değer. 482 00:19:20,170 --> 00:19:22,810 Yani sonraki yazdırma sıcaklığı yapalım. 483 00:19:22,810 --> 00:19:27,130 Bu, 1 başlatıldı var olan Bir aka x değeri oldu. 484 00:19:27,130 --> 00:19:29,110 >> Şimdi, nerede bizim bir ve gelen x? 485 00:19:29,110 --> 00:19:32,510 Peki, biz ana fark bu değerler, x ve y olarak adlandırılır. 486 00:19:32,510 --> 00:19:34,740 Daha sonra aşağıdaki gibi onları takas geçti. 487 00:19:34,740 --> 00:19:37,010 X virgül y birinci oldu. 488 00:19:37,010 --> 00:19:40,020 Ve sonra, takas onlara x ve y diyebiliriz. 489 00:19:40,020 --> 00:19:42,630 Ancak netlik sağlamak için, bu kadar a ve b onları çağıran. 490 00:19:42,630 --> 00:19:45,970 Ama a ve b şimdi olacak sırasıyla x ve y, kopyaları. 491 00:19:45,970 --> 00:19:50,660 >> Yani GDB geri dönersek, geçici Şimdi biridir ve hemen biridir. 492 00:19:50,660 --> 00:19:56,130 Ben şimdi bir sonraki yapmak ve eğer ancak baskı yapmak Bir, bir zaten üzerinde taşındı. 493 00:19:56,130 --> 00:20:00,030 süt, eski dökülmüş Portakal Suyu cam, ya da tam tersi. 494 00:20:00,030 --> 00:20:04,750 >> Ve şimdi yanında tekrar yapmak ve eğer Ben bir aklı kontrol olarak yazdırmak, 495 00:20:04,750 --> 00:20:07,687 hala iki, ama b şimdi biridir. 496 00:20:07,687 --> 00:20:08,770 Açıkçası, hala var. 497 00:20:08,770 --> 00:20:10,670 Ben ne geçici umurumda değil. 498 00:20:10,670 --> 00:20:16,850 Ama en kısa sürede ben şimdi yazarken, diyelim Şimdi ben sonunda değilim, geri gitmeye devam 499 00:20:16,850 --> 00:20:17,480 programı. 500 00:20:17,480 --> 00:20:20,730 Ve ne yazık ki, x Hala bir ve y hala iki. 501 00:20:20,730 --> 00:20:22,272 >> Yani orada GDB yarar neydi? 502 00:20:22,272 --> 00:20:23,980 Bana düzeltmek yardımcı olmadı Sorun başına, 503 00:20:23,980 --> 00:20:26,265 ama umarım bana yardım gerçekleştirerek bunu anlamak 504 00:20:26,265 --> 00:20:30,000 evet, benim mantık doğru, ama benim kod sonuçta sahip değil 505 00:20:30,000 --> 00:20:31,450 kalıcı bir etki. 506 00:20:31,450 --> 00:20:34,570 Yani biz konum bir sorun var Şimdi bugün çözeceğiz. 507 00:20:34,570 --> 00:20:37,870 >> Ama bu arada oraya verelim. 508 00:20:37,870 --> 00:20:39,230 Dize bir yalandır. 509 00:20:39,230 --> 00:20:41,860 Bu, çok değil, bir veri türü Bu It C var 510 00:20:41,860 --> 00:20:44,750 Bazı eşanlamlı oldu başka bir şey için zaman, 511 00:20:44,750 --> 00:20:47,300 ve biz takip ettiği ortaya çıkarabilir. 512 00:20:47,300 --> 00:20:53,282 >> Beni go ahead ve açalım Bir program Karşılaştırma-0 denilen. 513 00:20:53,282 --> 00:20:56,240 Ve bu bir tip dışarı ziyade, Biz kodu ile yürümeye başlayacağız 514 00:20:56,240 --> 00:20:58,040 Ben zaten yazdım, ama sadece bir kaç satır var. 515 00:20:58,040 --> 00:20:59,570 Yani bu karşılaştırma-0 edilmektedir. 516 00:20:59,570 --> 00:21:02,380 Ve ilk şey yapıyorum metin satırı oluyor. 517 00:21:02,380 --> 00:21:05,610 >> Ama ben ne fark İlk defa yapıyorum. 518 00:21:05,610 --> 00:21:07,910 Ne açıkça hat yaklaşık 21 farklı? 519 00:21:07,910 --> 00:21:10,020 520 00:21:10,020 --> 00:21:11,402 Aslında, bir dakika bekleyin. 521 00:21:11,402 --> 00:21:12,110 Bu kopya ikidir. 522 00:21:12,110 --> 00:21:13,568 Bu bile doğru program değildir. 523 00:21:13,568 --> 00:21:14,780 Pekala, spoiler uyarısı. 524 00:21:14,780 --> 00:21:16,890 Pekala, böylece aldırma. 525 00:21:16,890 --> 00:21:18,520 Bu bir gelecekte sorunun cevabı var. 526 00:21:18,520 --> 00:21:21,450 >> İşte 0-karşılaştırmak ve ben bir metin satırı almak için yaklaşık. 527 00:21:21,450 --> 00:21:22,435 Programın çok basit. 528 00:21:22,435 --> 00:21:23,560 Yani bu basittir. 529 00:21:23,560 --> 00:21:28,070 Bu Hafta One, Hafta İki şeyler gibi Şu anda. string s = GetString. 530 00:21:28,070 --> 00:21:29,700 Şimdi, ben buraya tekrar söylemek. 531 00:21:29,700 --> 00:21:31,830 dize t = GetString. 532 00:21:31,830 --> 00:21:35,300 Bu ve daha sonra, son şey Program, isminden de anlaşılacağı gibi, 533 00:21:35,300 --> 00:21:37,090 Ben bunları karşılaştırmak için denemek için gidiyorum edilir. 534 00:21:37,090 --> 00:21:40,709 >> Peki s eğer, ilk dize, = t, sonra ben eşittir 535 00:21:40,709 --> 00:21:42,250 Aynı şeyi yazın diyecek. 536 00:21:42,250 --> 00:21:44,291 Else, söylemek için gidiyorum Eğer farklı şeyler yazın. 537 00:21:44,291 --> 00:21:45,880 Yani derlemek ve bu programı çalıştırın. 538 00:21:45,880 --> 00:21:48,481 Yani sıfır karşılaştırma yapmak. 539 00:21:48,481 --> 00:21:48,980 İyi görünüyor. 540 00:21:48,980 --> 00:21:50,490 Hiçbir derleme hataları. 541 00:21:50,490 --> 00:21:52,386 >> Beni şimdi devam edelim ve ./compare-0 yazın. 542 00:21:52,386 --> 00:21:55,230 543 00:21:55,230 --> 00:21:59,220 Beni go ahead ve bir şey diyelim : Daven ve bir şey: Rob. 544 00:21:59,220 --> 00:22:00,450 Ve ben farklı şeyler yazın. 545 00:22:00,450 --> 00:22:01,250 Şimdiye kadar, çok iyi. 546 00:22:01,250 --> 00:22:02,680 Program doğru gibi görünüyor. 547 00:22:02,680 --> 00:22:03,880 >> Ama tekrar çalıştırın. 548 00:22:03,880 --> 00:22:05,800 Bir şey söyle: Gabe. 549 00:22:05,800 --> 00:22:07,140 Bir şey söyle: Gabe. 550 00:22:07,140 --> 00:22:08,520 551 00:22:08,520 --> 00:22:09,020 Tamam. 552 00:22:09,020 --> 00:22:10,851 Belki boşluk çubuğuna vurmak ya korkak bir şey. 553 00:22:10,851 --> 00:22:11,600 Tekrar yapalım. 554 00:22:11,600 --> 00:22:13,020 Zamyla Yani. 555 00:22:13,020 --> 00:22:13,970 556 00:22:13,970 --> 00:22:14,470 Zamyla. 557 00:22:14,470 --> 00:22:15,740 558 00:22:15,740 --> 00:22:17,330 Farklı şeyler. 559 00:22:17,330 --> 00:22:19,430 Peki ne oluyor? 560 00:22:19,430 --> 00:22:23,200 >> Bu yüzden bu iki satır var kod, GetString iki defa çağrıldığını. 561 00:22:23,200 --> 00:22:25,760 Ve sonra, ben sadece kulüpler s ve t karşılaştırmak için çalışıyor. 562 00:22:25,760 --> 00:22:28,370 Ama oluyor, sonra gerçekten ne? 563 00:22:28,370 --> 00:22:31,180 Eh, benim el yazısı en hakkında biraz bu örneği kasap. 564 00:22:31,180 --> 00:22:34,630 Ve en doğrusu atmak izin Bu kadar buraya, hem de. 565 00:22:34,630 --> 00:22:37,390 566 00:22:37,390 --> 00:22:45,712 >> Yani bir çizgi gibi var string s = GetString. 567 00:22:45,712 --> 00:22:48,295 Yani sadece ilk değil Bu programdan ilginç satır. 568 00:22:48,295 --> 00:22:49,920 569 00:22:49,920 --> 00:22:52,974 Ama bütün bu zaman oldu ne kaputun altında oluyor? 570 00:22:52,974 --> 00:22:55,890 Peki, sol-el yan dize, hangi değişkenin bazı türüdür, 571 00:22:55,890 --> 00:22:56,785 ve s denir. 572 00:22:56,785 --> 00:23:00,019 Yani bu bellek kullandığını biliyoruz, ya da RAM, nasılsa benim bilgisayar. 573 00:23:00,019 --> 00:23:02,060 Yani soyut gidiyorum Bir kare olarak çizebilir. 574 00:23:02,060 --> 00:23:04,820 32 bit, çıkıyor, ama Gelecekte bu konuda daha fazla. 575 00:23:04,820 --> 00:23:06,410 Ve sonra, ne burada oluyor? 576 00:23:06,410 --> 00:23:08,700 >> Peki, açıkçası getString kullanıcıdan bir dize alır. 577 00:23:08,700 --> 00:23:11,360 Ve GetString var Zamyla veya Gabe veya Daven. 578 00:23:11,360 --> 00:23:14,640 Yani ilk tercih edelim Bunların, Daven olan. 579 00:23:14,640 --> 00:23:19,174 Peki etkili ne GetString var Bana şekilde birinci durumda, D-A-V-E-N oldu. 580 00:23:19,174 --> 00:23:22,690 581 00:23:22,690 --> 00:23:25,045 Ve sonra, başka ne yaptım bana gizlice ver? 582 00:23:25,045 --> 00:23:25,920 HEDEF KİTLE: [Duyulmaz] 583 00:23:25,920 --> 00:23:28,720 DAVID J. MALAN: Evet, / 0 veya boş karakter. 584 00:23:28,720 --> 00:23:30,550 Bu yüzden etkili bir bana bir dize verdi. 585 00:23:30,550 --> 00:23:34,550 Ama biz zaten Önceki biliyorum Bir dize sadece bir dizi olduğunu görünüyor 586 00:23:34,550 --> 00:23:37,895 karakter ve sona erdirildi var Bu özel Sentinel karakter, / 0. 587 00:23:37,895 --> 00:23:39,220 588 00:23:39,220 --> 00:23:42,310 >> Ama bu doğruysa ve bu bir kare, 589 00:23:42,310 --> 00:23:44,160 Bu açıkça bir daha büyük dikdörtgen. 590 00:23:44,160 --> 00:23:46,830 Ve gerçekten de, bu, Ben, sadece 32 bit iddia. 591 00:23:46,830 --> 00:23:49,500 Ve bu açıkça fazla 32 olduğunu bit, bu muhtemelen çünkü 592 00:23:49,500 --> 00:23:51,583 Sekiz artı sekiz artı sekiz artı sekiz artı sekiz, 593 00:23:51,583 --> 00:23:53,320 Sadece ASCII bayt çünkü. 594 00:23:53,320 --> 00:23:57,030 Nasıl halt biz uygun gidiyoruz Burada bu küçük kutuya Daven? 595 00:23:57,030 --> 00:23:59,880 >> Peki, ne gerçekte getString yapıyor? 596 00:23:59,880 --> 00:24:03,680 Peki, bu ızgara burada temsil Benim bilgisayarınızın bellek veya RAM. 597 00:24:03,680 --> 00:24:07,564 Yani keyfi eğer diyelim bunların her biri, bir bayt temsil eder 598 00:24:07,564 --> 00:24:09,730 Daha sonra her düşünebilirsiniz bayt bir adrese sahip olan, 599 00:24:09,730 --> 00:24:13,830 33 Oxford Street, ya da 34 gibi Oxford Caddesi, ya da 35 Oxford Caddesi. 600 00:24:13,830 --> 00:24:16,700 >> Peki evleri adresleri gibi ve binalar adresleri var, 601 00:24:16,700 --> 00:24:19,810 yani bireysel bayt do Bellek adreslerini veya numaraları 602 00:24:19,810 --> 00:24:21,042 Bu benzersiz onları tanımlamak. 603 00:24:21,042 --> 00:24:22,000 Şimdi, bu keyfi. 604 00:24:22,000 --> 00:24:25,370 Ama ben gidiyorum, basit tutmak için Sadece kongre tarafından onaltılık kullanmak, 605 00:24:25,370 --> 00:24:28,200 ama 0x başka bir şey ifade daha "Bu onaltılık olduğunu." 606 00:24:28,200 --> 00:24:31,030 ve ben iddia gidiyorum "D" bellekte Byte Bir de biter. 607 00:24:31,030 --> 00:24:34,210 >> Ben başka bir şey oluyor var Bellek, yani DAV ilk nokta var 608 00:24:34,210 --> 00:24:35,509 Byte Bir de. 609 00:24:35,509 --> 00:24:36,800 Bu, daha sonra, 0x2 olacak. 610 00:24:36,800 --> 00:24:37,831 611 00:24:37,831 --> 00:24:38,705 Bu 0x3 gidiyor. 612 00:24:38,705 --> 00:24:39,840 613 00:24:39,840 --> 00:24:41,800 Bu 0x4 olacak. 614 00:24:41,800 --> 00:24:43,025 Bu 0x5 gidiyor. 615 00:24:43,025 --> 00:24:44,025 Bu 0x6 olacak. 616 00:24:44,025 --> 00:24:45,560 617 00:24:45,560 --> 00:24:48,290 >> Ama senin bir kez düşünmeye başlayın ne bilgisayarın suçum hakkında 618 00:24:48,290 --> 00:24:50,710 Kaputun altında, Eğer anlaması başlayabilirsiniz 619 00:24:50,710 --> 00:24:54,960 nasıl, birkaç yıl önce, olur kendisi C hayata geçirdik. 620 00:24:54,960 --> 00:24:58,360 Muhtemelen GetString nedir returning-- çünkü o 621 00:24:58,360 --> 00:25:00,946 o değil gibi hissediyor dönen DAV, per se olarak, 622 00:25:00,946 --> 00:25:03,320 o kesinlikle gitmiyor çünkü Bu küçük box-- sığacak şekilde 623 00:25:03,320 --> 00:25:05,090 yani ne GetString muhtemelen dönüyor? 624 00:25:05,090 --> 00:25:07,958 625 00:25:07,958 --> 00:25:08,920 >> İZLEYİCİ: [Duyulmaz] 626 00:25:08,920 --> 00:25:10,540 >> DAVID J. MALAN: Daven yeri. 627 00:25:10,540 --> 00:25:12,770 Ve bu yapıyor var Hiç Hafta Bir beri. 628 00:25:12,770 --> 00:25:16,150 Ne GetString gerçekten dönen bir dize, başına değil. 629 00:25:16,150 --> 00:25:17,780 O küçük beyaz yalanlar biri. 630 00:25:17,780 --> 00:25:22,520 Bu adresi dönen ediyor bellekte dize, benzersiz adres. 631 00:25:22,520 --> 00:25:24,820 Daven 33 Oxford Street'te yaşıyor. 632 00:25:24,820 --> 00:25:29,310 Ama daha özlü, Gavin yaşıyor 0x1 de, Number One Adresi. 633 00:25:29,310 --> 00:25:32,280 >> Peki bu koymak alır küçük kutu, sonra açık olmak 634 00:25:32,280 --> 00:25:35,930 Bu dize sadece adresidir. 635 00:25:35,930 --> 00:25:38,110 Peki tüm bu zaman, bu vardır devam. 636 00:25:38,110 --> 00:25:41,650 Ama bu ipuçları ne Şimdi hepsi eğer olmasıdır 637 00:25:41,650 --> 00:25:44,710 Bunun içinde bir dizi, var olan sizi durdurmak için, programcı, 638 00:25:44,710 --> 00:25:47,970 herhangi bir sayı koyarak Herhangi bir değişken ve sadece atlama 639 00:25:47,970 --> 00:25:49,080 belleğin o yığın? 640 00:25:49,080 --> 00:25:51,320 Ve gerçekten de, biz göreceğiz Bu bir tehdit dahaki sefere bu. 641 00:25:51,320 --> 00:25:53,500 >> Ama şimdi, bu yetersiz hissediyor. 642 00:25:53,500 --> 00:25:55,630 Ben derseniz, bana bir olsun Dize, bana Daven ver. 643 00:25:55,630 --> 00:25:57,230 Ama gerçekten bana Daven vermeyin. 644 00:25:57,230 --> 00:25:59,310 Bana ver Tüm Daven adresidir. 645 00:25:59,310 --> 00:26:04,310 Sonra Emin nasıl burada DAV başlar ve ends-- 646 00:26:04,310 --> 00:26:07,140 Hikaye weird-- alıyorum Daven başlar ve nerede biter, 647 00:26:07,140 --> 00:26:10,435 ve sonraki ardından bellekte dize başlar? 648 00:26:10,435 --> 00:26:11,520 649 00:26:11,520 --> 00:26:13,620 >> Peki, teslim eğer Bana Daven başlangıcı, 650 00:26:13,620 --> 00:26:17,230 aslında, nasıl biliyor musunuz Onun adının sonu nerede? 651 00:26:17,230 --> 00:26:20,550 Bu özel boş karakter, hangi daha da önem şimdi 652 00:26:20,550 --> 00:26:23,040 altında dizeleri ise Kaput sadece tanımlanır 653 00:26:23,040 --> 00:26:25,820 benzersiz bellekte konumlarına göre. 654 00:26:25,820 --> 00:26:28,130 Peki tüm bu zaman, işte ne devam ediyor. 655 00:26:28,130 --> 00:26:32,470 >> Peki şimdi baktığımızda Burada kod, açıklamak 656 00:26:32,470 --> 00:26:35,790 Eğer hat 26 hata olur eğer. 657 00:26:35,790 --> 00:26:39,560 Neden Zamyla ve Zamyla farklı? 658 00:26:39,560 --> 00:26:41,330 Neden Gabe ve Gabe farklı? 659 00:26:41,330 --> 00:26:42,154 Evet, arka. 660 00:26:42,154 --> 00:26:43,390 >> İZLEYİCİ: Farklı adresleri var. 661 00:26:43,390 --> 00:26:45,931 >> DAVID J. MALAN: Sadece çünkü onlar farklı adresler var. 662 00:26:45,931 --> 00:26:48,820 Eğer GetString çağırdığınızda Çünkü Yine, ben burada hızlı bir şekilde yapacağım, hangi 663 00:26:48,820 --> 00:26:52,870 Bu ikinci hat, dize ise t, o programda olduğu gibi, 664 00:26:52,870 --> 00:26:55,030 getString başka bir çağrı eşittir. 665 00:26:55,030 --> 00:26:56,370 666 00:26:56,370 --> 00:26:58,670 Ben çağrı dahaki sefere GetString, ben gidiyorum 667 00:26:58,670 --> 00:27:00,190 belleğin farklı bir yığın almak için. 668 00:27:00,190 --> 00:27:02,220 >> GetString bırakılır işletim sormak için 669 00:27:02,220 --> 00:27:03,800 Daha fazla ve daha fazla bellek için sistem. 670 00:27:03,800 --> 00:27:07,894 Aynı yeniden gitmiyor Altı bayt her zaman. 671 00:27:07,894 --> 00:27:09,810 Bu yeni almak için gidiyor bellek yığın, hangi 672 00:27:09,810 --> 00:27:12,780 t almak için gidiyor demektir Burada bazı diğer değer. 673 00:27:12,780 --> 00:27:15,380 Ben ne zaman >> Böylece s = eşittir t, sen karşılaştırarak değil 674 00:27:15,380 --> 00:27:17,880 Bu ve bir karşı karşı D Bu ve buna karşı V. 675 00:27:17,880 --> 00:27:19,588 Bunu karşılaştırarak konum , burada buna karşı 676 00:27:19,588 --> 00:27:24,020 Açıkçası oldukça useful-- useless-- olduğunu oldukça yararsız gerçekten kim çünkü 677 00:27:24,020 --> 00:27:25,830 dizeleri bellekte nerede umurunda? 678 00:27:25,830 --> 00:27:26,850 >> Ve gerçekten, biz değil. 679 00:27:26,850 --> 00:27:28,980 Ve biz gitmiyoruz Özellikle sevecen başlar. 680 00:27:28,980 --> 00:27:34,180 Sadece hata ortaya çıkabilir ölçüde ve güvenlik tehditleri iradesini ortaya çıkabilir 681 00:27:34,180 --> 00:27:36,100 biz aslında bu umurumda başlar. 682 00:27:36,100 --> 00:27:37,230 Yani bu sorunu çözmek edelim. 683 00:27:37,230 --> 00:27:39,650 Süper sadece bunu düzeltmek, çıkıyor. 684 00:27:39,650 --> 00:27:42,600 >> Ve aslında diyelim, I önce Yine ortaya koyuyor, ne olur 685 00:27:42,600 --> 00:27:47,170 Bir CS50 sınıfında eğer, yapmak ve uygulamak zorunda 686 00:27:47,170 --> 00:27:48,600 İki dizeleri karşı bir karşılaştırma. 687 00:27:48,600 --> 00:27:51,440 Sen açıkça sadece s = t eşittir kullanamazsınız. 688 00:27:51,440 --> 00:27:54,090 Ama sadece mantıksal, nasıl Bu dize karşılaştırmak istiyorsunuz 689 00:27:54,090 --> 00:27:56,370 C kodu kullanarak bu dize karşı? 690 00:27:56,370 --> 00:27:56,880 Evet. 691 00:27:56,880 --> 00:27:58,780 >> İZLEYİCİ: Just do döngüsü için [duyulamaz] 692 00:27:58,780 --> 00:28:00,670 693 00:28:00,670 --> 00:28:01,670 DAVID J. MALAN: Mükemmel. 694 00:28:01,670 --> 00:28:02,900 HEDEF KİTLE: [Duyulmaz] 695 00:28:02,900 --> 00:28:03,310 DAVID J. MALAN: Evet. 696 00:28:03,310 --> 00:28:05,390 Sadece döngü veya a bir kullanın döngü ya da her neyse ise. 697 00:28:05,390 --> 00:28:08,710 Ama sadece temel fikir uygularsanız o Bu bellek veya bir dizinin bir yığınıdır 698 00:28:08,710 --> 00:28:11,590 ve bu, üzerinde yineleme her ikisi de aynı anda. 699 00:28:11,590 --> 00:28:12,960 Ve sadece harfleri karşılaştırın. 700 00:28:12,960 --> 00:28:14,260 >> Ve bir olmak zorundasın Biraz dikkatli, size, çünkü 701 00:28:14,260 --> 00:28:16,247 bir parmak istemiyorum Diğer geçmişte gitmek 702 00:28:16,247 --> 00:28:18,080 bir dize olduğundan diğerinden daha uzun. 703 00:28:18,080 --> 00:28:21,380 Yani kontrol etmek istiyorum gidiyoruz sonunda bu özel değeri null. 704 00:28:21,380 --> 00:28:24,017 Ama gerçekten, bir sonunda, bu kadar basit. 705 00:28:24,017 --> 00:28:26,100 Ve açıkçası, biz ihtiyacımız yok Bu tekerleği yeniden icat etmek. 706 00:28:26,100 --> 00:28:27,960 İşte Sürüm İki. 707 00:28:27,960 --> 00:28:32,910 Ve ne ben burada söylemek için gidiyorum olduğunu yerine s karşılaştırarak, = t eşittir 708 00:28:32,910 --> 00:28:38,964 Dize eğer bunun yerine, söylemek için gidiyorum s virgül t karşılaştırılması = 0 eşittir. 709 00:28:38,964 --> 00:28:40,130 Şimdi, dize ne karşılaştırmak nedir? 710 00:28:40,130 --> 00:28:43,046 >> Bu, çıkıyor bir işlev olduğunu Amacı hayatında C ile geliyor 711 00:28:43,046 --> 00:28:44,650 İki dizeleri karşılaştırmak için. 712 00:28:44,650 --> 00:28:48,300 Okuduğumuz Ve eğer, karşılaştırın karıştırın onun Adam sayfası veya belgeleri veya CS50 713 00:28:48,300 --> 00:28:50,630 Referans, o olacak sadece sana o heyecan söylemek 714 00:28:50,630 --> 00:28:55,730 negatif ya döner karşılaştırmak numara veya pozitif bir sayı veya sıfır, 715 00:28:55,730 --> 00:28:57,660 sıfır anlamına nerede eşitiz. 716 00:28:57,660 --> 00:28:58,570 >> Yani sadece varsayım. 717 00:28:58,570 --> 00:29:00,390 Ne olursa anlamına gelebilir Karşılaştırma döner karıştırın 718 00:29:00,390 --> 00:29:02,110 Negatif bir değer veya pozitif değer? 719 00:29:02,110 --> 00:29:02,785 720 00:29:02,785 --> 00:29:04,285 HEDEF KİTLE: Büyüktür veya daha az. 721 00:29:04,285 --> 00:29:05,570 DAVID J. MALAN: Evet, daha büyük ya da daha azdır. 722 00:29:05,570 --> 00:29:08,640 Yani bir bütün sıralamak istedim Bir dictionary-- dizeleri demet 723 00:29:08,640 --> 00:29:12,975 biz sonunda road-- aşağı olacak gibi Mükemmel işlevi potansiyel kullanımı, 724 00:29:12,975 --> 00:29:15,850 o yapacak çünkü Sizin için dizeleri karşılaştırılması, ve söyle 725 00:29:15,850 --> 00:29:20,060 Eğer bir b önce gelir yapar, ya da yok b alfabetik önce gelir. 726 00:29:20,060 --> 00:29:21,490 Biz tam bunu yapabilirsiniz. 727 00:29:21,490 --> 00:29:23,620 >> Ve ben diğerini yaptım fark Bu örnekte bir şey. 728 00:29:23,620 --> 00:29:26,870 Başka ne yüksek değişti Bu ana işlevi kadar? 729 00:29:26,870 --> 00:29:28,500 730 00:29:28,500 --> 00:29:29,350 Char *. 731 00:29:29,350 --> 00:29:31,150 Ve bu diğer beyaz yalandır. 732 00:29:31,150 --> 00:29:33,750 Tüm bu zaman, ne zaman var dize yazıyor, 733 00:29:33,750 --> 00:29:38,350 Biz gizlice yeniden edilmiş karakter olarak dize * yani aslında o clang 734 00:29:38,350 --> 00:29:39,270 sizi anlıyor. 735 00:29:39,270 --> 00:29:42,450 >> Diğer bir deyişle, CS50.h bölgesindeki ve biz sonunda göreceğimiz gibi, 736 00:29:42,450 --> 00:29:45,950 Biz eşanlamlı olarak adlandırılan dize yapılan O char * aynı şey. 737 00:29:45,950 --> 00:29:49,910 Ve şimdi, sadece biliyorum * Bu bağlamda, en azından, 738 00:29:49,910 --> 00:29:51,286 adresi anlamına gelir. 739 00:29:51,286 --> 00:29:52,210 >> Neyin adresi? 740 00:29:52,210 --> 00:29:56,390 Eh, aslında dedim ki char *, ve, * int veya float * değil 741 00:29:56,390 --> 00:30:00,820 char * demektir Bir karakter adresi. 742 00:30:00,820 --> 00:30:06,770 Yani burada bu küçük kutu, aka dize, gerçekten tipi char * biridir, 743 00:30:06,770 --> 00:30:10,490 hangi söyleyerek basitçe bir fantezi yoludur, Bu kutuya bir adres gidecek. 744 00:30:10,490 --> 00:30:12,430 Ve ne adres bakın mu? 745 00:30:12,430 --> 00:30:13,780 Görünüşe göre, bir karakter. 746 00:30:13,780 --> 00:30:16,410 >> Ama biz kesinlikle olabilir int * ve diğer şeyler var. 747 00:30:16,410 --> 00:30:20,790 Ama şimdi, char * gerçekten en çok basit ve ilgi biri. 748 00:30:20,790 --> 00:30:23,310 Yani bu sorun gidiyor Yine olsa, yükselmeye. 749 00:30:23,310 --> 00:30:24,830 >> Ben bu programı açmak varsayalım. 750 00:30:24,830 --> 00:30:27,670 Şimdi biz tahmin edebilir Bakalım ne bu kod ile yanlış. 751 00:30:27,670 --> 00:30:31,140 Bu programda Yani, kopya 0, ben değilim go ahead ve tekrar arayacağım 752 00:30:31,140 --> 00:30:34,190 GetString ve s değeri saklamak. 753 00:30:34,190 --> 00:30:38,800 >> Ve sonra, neden bu yapıyorum, Sadece hafta geçmişten gelen bir hatırlatma olarak? 754 00:30:38,800 --> 00:30:40,960 Biz GetString dedin bazen null döndürür. 755 00:30:40,960 --> 00:30:42,793 Ne olursa demek GetString null döndürür? 756 00:30:42,793 --> 00:30:45,040 757 00:30:45,040 --> 00:30:46,034 Bir şeyler yanlış gitti. 758 00:30:46,034 --> 00:30:48,950 Muhtemelen dizesi çok demektir Büyük, bellek bilgisayarın dışında. 759 00:30:48,950 --> 00:30:51,724 Süper, süper, süper olur nadiren, ama olabilirdi. 760 00:30:51,724 --> 00:30:53,890 Biz bunun için kontrol etmek istediğiniz, ve biz yapıyoruz hepsi bu. 761 00:30:53,890 --> 00:30:57,910 >> Eğer yapmazsan biz şimdi göreceğiz Çünkü şeyler için alışkanlıkla kontrol başlayın 762 00:30:57,910 --> 00:31:00,870 boş gibi, sen olabilir Aslında gitmek başlar 763 00:31:00,870 --> 00:31:03,106 bellekte adreslere geçersiz olduğunu vardır. 764 00:31:03,106 --> 00:31:05,980 Ve uyaran başlatmak için gidiyoruz daha fazla segmentasyon hataları. 765 00:31:05,980 --> 00:31:08,360 Ya da bir Mac veya PC, sadece Bir bilgisayar neden asmak için 766 00:31:08,360 --> 00:31:10,340 ya da bir program potansiyel, dondurma. 767 00:31:10,340 --> 00:31:14,930 >> Peki şimdi, ben, kopya 0.c iddiasına ki ben Bu arada bu dizeleri kopyalamak için gidiyorum 768 00:31:14,930 --> 00:31:15,685 28 satır. 769 00:31:15,685 --> 00:31:16,850 770 00:31:16,850 --> 00:31:18,750 Ve sonra, ben gidiyorum alt İstem 771 00:31:18,750 --> 00:31:21,430 Burada ben gidiyorum Bunlardan birini değiştirmek için. 772 00:31:21,430 --> 00:31:22,330 >> Peki bu fark. 773 00:31:22,330 --> 00:31:24,370 Ben bizim eski dostumuz strlen arıyorum. 774 00:31:24,370 --> 00:31:28,960 Ve sadece İngilizce açıklamak Bu hat 34 ne yapıyor? 775 00:31:28,960 --> 00:31:32,480 Ne t desteğini 0 yapar Soldaki temsil eder. 776 00:31:32,480 --> 00:31:32,980 Evet. 777 00:31:32,980 --> 00:31:34,339 >> İZLEYİCİ: t İlk karakter? 778 00:31:34,339 --> 00:31:35,880 DAVID J. MALAN: t İlk karakteri. 779 00:31:35,880 --> 00:31:36,379 Işte bu. 780 00:31:36,379 --> 00:31:40,024 T İlk karakteri, ben istiyorum Büyük versiyonu atamak için 781 00:31:40,024 --> 00:31:41,190 t ilk karakterin. 782 00:31:41,190 --> 00:31:43,200 Yani bu birikiminden ilk harfi. 783 00:31:43,200 --> 00:31:46,340 Ve sonra, en son şey yapmam Bu program ben burada iddia 784 00:31:46,340 --> 00:31:50,340 Orijinal, s, ve burada kopya, t var. 785 00:31:50,340 --> 00:31:54,610 >> Ama hikaye biz sadece dayalı , dizeleri aslında ne anlattı 786 00:31:54,610 --> 00:31:57,520 Gerçekten hattı 28 ne yaptığını ve ne 787 00:31:57,520 --> 00:31:59,405 gidiş Elde hata Ekranda olmak? 788 00:31:59,405 --> 00:32:01,300 789 00:32:01,300 --> 00:32:03,500 >> Yani ilk, ilk soru, 28. 790 00:32:03,500 --> 00:32:09,040 Dize t = s gerçekten ne yapıyor? 791 00:32:09,040 --> 00:32:16,430 Biz sol taraftan varsa Burada yan dize t = s; 792 00:32:16,430 --> 00:32:19,400 Bu bana bir kutu verir Burada ve bir kutu burada. 793 00:32:19,400 --> 00:32:25,530 Ve, bu adres 0x olduğunu varsayalım en keyfi, bu kez, demek 50 let. 794 00:32:25,530 --> 00:32:28,847 Ne dize t = s yapar kaputun altında ne? 795 00:32:28,847 --> 00:32:30,340 >> İZLEYİCİ: [Duyulmaz] 796 00:32:30,340 --> 00:32:34,100 >> DAVID J. MALAN: Bu bellek saklar Orada ele, yani 0x50 oraya gider. 797 00:32:34,100 --> 00:32:37,980 Şimdi eğer öyleyse, ben ilk gitmek t karakteri ve büyük harfe, 798 00:32:37,980 --> 00:32:39,535 Ben etkili bir s ne yapıyorum? 799 00:32:39,535 --> 00:32:41,300 800 00:32:41,300 --> 00:32:43,450 Ben gerçekten doğru, aynı şeyi yapıyorum? 801 00:32:43,450 --> 00:32:47,680 Çünkü eğer Adres 0x50-- ve sadece ben Burada gemide çok oda yok 802 00:32:47,680 --> 00:32:51,750 ancak, bu buraya 0x50 olduğunu varsayalım Benim bilgisayarın belleğinde bir yerde. 803 00:32:51,750 --> 00:32:55,825 >> Ve ben, örneğin, Gabe var Bu gibi burada küçük harf içinde. 804 00:32:55,825 --> 00:32:57,120 805 00:32:57,120 --> 00:33:01,980 Ve ben söyledim t dirsek 0 büyük harfle alır. 806 00:33:01,980 --> 00:33:04,860 Peki, t dirseği 0 t ilk harfi. 807 00:33:04,860 --> 00:33:07,840 Yani küçük g gidiyor olmak büyük G. Ama sorun 808 00:33:07,840 --> 00:33:09,410 ne de işaret s mu edilir? 809 00:33:09,410 --> 00:33:10,300 >> İZLEYİCİ: Aynı şekilde. 810 00:33:10,300 --> 00:33:11,841 >> DAVID J. MALAN: Aynı şey kesin. 811 00:33:11,841 --> 00:33:16,342 Yani belki de basit bir açıklama, sözdizimi biraz garip olsa bile. 812 00:33:16,342 --> 00:33:17,050 O yüzden bu yapalım. 813 00:33:17,050 --> 00:33:20,210 Kopya-0 ve daha sonra ./copy-0 olun. 814 00:33:20,210 --> 00:33:21,820 815 00:33:21,820 --> 00:33:24,110 Bir şey söyle: Gabe. 816 00:33:24,110 --> 00:33:26,760 Ve ne yazık ki, her ikisi de Onları şimdi büyük harfle edilmiştir, 817 00:33:26,760 --> 00:33:29,500 ancak bunun için temel biz sadece konum nedeni 818 00:33:29,500 --> 00:33:32,350 Şimdi adresleri ile ilgili. 819 00:33:32,350 --> 00:33:36,470 >> Peki biz başlarım adresB hayır cinas intended-- 820 00:33:36,470 --> 00:33:39,270 Biz ele başlamak nasıl Bu özel bir sorun? 821 00:33:39,270 --> 00:33:44,400 Peki, copy1.c içinde, işler gidiyor Biraz daha karmaşık olsun. 822 00:33:44,400 --> 00:33:49,310 Ama iddia ediyorum kavramsal olarak basit bir çözüm. 823 00:33:49,310 --> 00:33:50,852 >> İlk bakışta almak çok zor. 824 00:33:50,852 --> 00:33:53,560 İlk kolay olacak değil zaman, belki de, bunu yazın 825 00:33:53,560 --> 00:33:57,440 ama sorun bu ise sadece t = s sadece yapıyor 826 00:33:57,440 --> 00:33:59,694 kopyalar adresi, ne, Tekrar sana seçebilirsiniz eğer, 827 00:33:59,694 --> 00:34:02,110 çözüm olacak aslında bir dize kopyalamak için? 828 00:34:02,110 --> 00:34:04,906 829 00:34:04,906 --> 00:34:06,770 >> İZLEYİCİ: Biz muhtemelen olacak Yine bir döngü kullanmak. 830 00:34:06,770 --> 00:34:06,890 >> DAVID J. MALAN: Evet. 831 00:34:06,890 --> 00:34:08,390 Yani biz tekrar bir döngü ihtiyacımız olacak. 832 00:34:08,390 --> 00:34:11,800 Ve biz kopyalamak istiyorsanız, çünkü Başka bir dizeye bir dize s, 833 00:34:11,800 --> 00:34:14,120 biz muhtemelen bunu yapmak istiyorum karakter karakter. 834 00:34:14,120 --> 00:34:17,199 Ama sorun varsa, bir Bu, ilk olarak s 835 00:34:17,199 --> 00:34:22,159 şimdi açıkça başlamak gerekir t için bellek ayırma. 836 00:34:22,159 --> 00:34:24,320 >> Diğer bir deyişle, diyelim Bu son bir kez yeniden çizmek. 837 00:34:24,320 --> 00:34:28,659 Bu string s = GetString ise. 838 00:34:28,659 --> 00:34:30,956 839 00:34:30,956 --> 00:34:32,455 Ve en de, burada bu kadar koyalım. 840 00:34:32,455 --> 00:34:36,639 841 00:34:36,639 --> 00:34:37,420 Bu GetString olduğunu. 842 00:34:37,420 --> 00:34:39,070 843 00:34:39,070 --> 00:34:43,860 Bir şey için Ve sonra, resim Bu gibi daha önce olacak, 844 00:34:43,860 --> 00:34:44,360 G-A-B-e / 0. 845 00:34:44,360 --> 00:34:47,294 846 00:34:47,294 --> 00:34:48,960 Yani böyle bir şeyler arar. 847 00:34:48,960 --> 00:34:53,650 Ve s nedenle, biz, bu 0x50 çağrı ve bu 51, 52 olacak. 848 00:34:53,650 --> 00:34:54,409 >> Peki bu 0x50 olduğunu. 849 00:34:54,409 --> 00:34:55,679 850 00:34:55,679 --> 00:34:59,690 Ve sonra, ben dize t yapmak. 851 00:34:59,690 --> 00:35:02,450 Anısına, sadece gidiyor Bana böyle bir küçük kare verin. 852 00:35:02,450 --> 00:35:04,080 Yani önemli bir adım şimdi ne? 853 00:35:04,080 --> 00:35:09,870 Ben t içine s kopyalamak istiyorsanız, ne Boş burada doldurmanız gerekiyor? 854 00:35:09,870 --> 00:35:12,050 Ya biz ne gerekiyor yüksek bir düzeyde mi? 855 00:35:12,050 --> 00:35:14,101 856 00:35:14,101 --> 00:35:14,600 Evet? 857 00:35:14,600 --> 00:35:16,200 858 00:35:16,200 --> 00:35:17,020 Birisi? 859 00:35:17,020 --> 00:35:17,690 Evet. 860 00:35:17,690 --> 00:35:19,214 >> İZLEYİCİ: Biz [duyulamaz] gerekir. 861 00:35:19,214 --> 00:35:21,380 DAVID J. MALAN: Evet, biz Bu boş doldurmanız gerekir. 862 00:35:21,380 --> 00:35:24,340 Ben kopyalayıp ve olamaz Gabe adını yararlanmak 863 00:35:24,340 --> 00:35:28,120 Ben işletim sistemi sormak kadar belleğin bir başka parça için 864 00:35:28,120 --> 00:35:30,640 Bu orijinal olarak en azından büyük. 865 00:35:30,640 --> 00:35:32,130 Yani bu bir soru ile bize bırakıyor. 866 00:35:32,130 --> 00:35:36,080 >> Ben işletim sistemi değil sormak nasıl Sadece basit bir küçük işaretçi için 867 00:35:36,080 --> 00:35:38,530 Bu olarak adlandırılan, bir adresi, bir işaretçi değil 868 00:35:38,530 --> 00:35:40,980 basit bir küçük kutu Böyle bir dize denir? 869 00:35:40,980 --> 00:35:44,200 Nasıl işletim soruyorlar belleğin büyük bir yığın sistem? 870 00:35:44,200 --> 00:35:48,430 Bugüne kadar, sadece o geri kazanılmış ettik dolaylı GetString arayarak. 871 00:35:48,430 --> 00:35:50,740 Peki nasıl getString olduğunu onun bellek almak bile? 872 00:35:50,740 --> 00:35:53,430 >> Peki, orada çıkıyor Burada bu diğer işlevi 873 00:35:53,430 --> 00:35:55,160 biz şimdi kullanmaya başlayacağız. 874 00:35:55,160 --> 00:35:59,780 Şimdi, bu şekilde daha şifreli edemememden görünüyor ve ben bu-- görebilirsiniz tek ben 875 00:35:59,780 --> 00:36:03,150 Bu çizgi yolu daha şifreli görünüyor o zaman ilk bakışta gerekir. 876 00:36:03,150 --> 00:36:04,650 Ama bunu dışında kızdırmak edelim. 877 00:36:04,650 --> 00:36:07,950 >> Sol tarafta, ben Char * t var. 878 00:36:07,950 --> 00:36:13,280 İngilizce Yani, formüle başlayalım teknik jargon uygun cümleler. 879 00:36:13,280 --> 00:36:19,757 Yani bu tahsis edilir bir char türünde değişken t denir *. 880 00:36:19,757 --> 00:36:21,090 Şimdi, bu gerçekten ne anlama geliyor? 881 00:36:21,090 --> 00:36:23,881 >> Peki, anlamı, ne gidiyorum t denen bu değişken koymak için? 882 00:36:23,881 --> 00:36:24,780 883 00:36:24,780 --> 00:36:26,402 Bir char bir adres. 884 00:36:26,402 --> 00:36:28,360 Böylece, sadece basit var daha makul bir yol 885 00:36:28,360 --> 00:36:29,930 sol tarafını anlatan. 886 00:36:29,930 --> 00:36:32,890 Yani burada sadece bu kutu oluşturur. 887 00:36:32,890 --> 00:36:34,760 Yani sağ taraf, muhtemelen, gidiyor 888 00:36:34,760 --> 00:36:37,170 büyük olduğunu tahsis etmek bellek nasıl yığın? 889 00:36:37,170 --> 00:36:38,340 Yani bu ayrı kızdırmak verelim. 890 00:36:38,340 --> 00:36:41,131 >> İlk bakışta ezici ediyor, ama içinde burada ne oluyor? 891 00:36:41,131 --> 00:36:43,740 İlk olarak, Malloc, var olan Yeni arkadaş, görünüşte 892 00:36:43,740 --> 00:36:45,450 "Bellek ayrılamadı." 893 00:36:45,450 --> 00:36:49,560 Yani bu geçirilen argümanı içine, bu yüzden oldukça büyük bir tartışma var. 894 00:36:49,560 --> 00:36:50,970 Yani bu ayrı kızdırmak verelim. 895 00:36:50,970 --> 00:36:53,410 >> S strlen, tabii ki, temsil Şeyin 896 00:36:53,410 --> 00:36:54,142 897 00:36:54,142 --> 00:36:55,600 HEDEF KİTLE: karakter sayısı. 898 00:36:55,600 --> 00:36:56,710 DAVID J. MALAN: Sadece s karakter sayısı. 899 00:36:56,710 --> 00:36:59,040 Yani s uzunluğu, orijinal dize. 900 00:36:59,040 --> 00:37:00,350 Dolayısıyla, G-A-B-E. 901 00:37:00,350 --> 00:37:02,320 Yani muhtemelen dört Bu durumda bulunuyor. 902 00:37:02,320 --> 00:37:05,485 Neden sonra 1 yapıyorum s strlen diyorsun? 903 00:37:05,485 --> 00:37:06,360 HEDEF KİTLE: [Duyulmaz] 904 00:37:06,360 --> 00:37:07,590 DAVID J. MALAN: Bunun için özel boş karakter. 905 00:37:07,590 --> 00:37:11,260 Bana sorarsanız uzunluğu ne Gabe adı, ben dört söylemek için gidiyorum. 906 00:37:11,260 --> 00:37:14,480 Kaputun altında olsa da, ben ihtiyacım null karakteri için beşinci bayt. 907 00:37:14,480 --> 00:37:16,100 Ben 1 yapıyorum yüzden bu. 908 00:37:16,100 --> 00:37:21,730 >> Şimdi sadece durumda, bu çalışan başka bir bilgisayarda program, demek 909 00:37:21,730 --> 00:37:24,610 CS50 cihazı, Nerede bir char boyutu 910 00:37:24,610 --> 00:37:26,350 farklı olabilir Kendi computer-- gelen 911 00:37:26,350 --> 00:37:30,590 Ben bu arayabilirsiniz çıkıyor Operatör sizeof, sadece bilgisayarı sormak 912 00:37:30,590 --> 00:37:32,870 Bir boyutu nedir Bu bilgisayarda ateşinde? 913 00:37:32,870 --> 00:37:37,400 >> Ve bu beş çarpılarak Bir karakter boyutu ile örnek olan 914 00:37:37,400 --> 00:37:40,440 çoğu bilgisayarda olacak Sadece bir, malloc olacak 915 00:37:40,440 --> 00:37:44,830 Benim bu büyük tahsis edecek Burada sağ tarafta üzerinde bellek yığın. 916 00:37:44,830 --> 00:37:47,140 Ve return-- gidiyor o yüzden bu bir function-- olduğunu 917 00:37:47,140 --> 00:37:48,265 Ne bana geri gidiyor? 918 00:37:48,265 --> 00:37:50,914 919 00:37:50,914 --> 00:37:51,830 HEDEF KİTLE: adresi? 920 00:37:51,830 --> 00:37:53,709 DAVID J. MALAN: Neyin adresi? 921 00:37:53,709 --> 00:37:55,250 HEDEF KİTLE: bellekte Of tahsis? 922 00:37:55,250 --> 00:37:56,450 DAVID J. MALAN: Of Bellek o ayırdı. 923 00:37:56,450 --> 00:37:59,189 Yani, açıkçası, hiçbir fikrim yok nerede bu sonuna kadar gidiyor. 924 00:37:59,189 --> 00:38:01,480 Bunu teklif edeceğim o 0x88 de sonuna kadar gidiyor. 925 00:38:01,480 --> 00:38:02,770 926 00:38:02,770 --> 00:38:06,009 Tamamen keyfi, ancak 0x50 dışındaki bir yerde, 927 00:38:06,009 --> 00:38:08,800 işletim sistemi, çünkü ne Windows ve Mac OS benim için ne olduğunu 928 00:38:08,800 --> 00:38:11,230 o veriyor emin olun Beni RAM farklı parçaları. 929 00:38:11,230 --> 00:38:14,210 >> Peki bu değer bu bellek yığın sonunda olabilir. 930 00:38:14,210 --> 00:38:16,060 Yani bu 0x88, burada biter budur. 931 00:38:16,060 --> 00:38:17,480 932 00:38:17,480 --> 00:38:21,570 Yani şimdi açıkça, ben anlayabiliyorum bu da aynı değildir, 933 00:38:21,570 --> 00:38:23,960 onlar işaret çünkü belleğin farklı parçaları. 934 00:38:23,960 --> 00:38:29,980 Ben şimdi aslında bu kopyalamak istiyorsanız içinde, senin önerilen çözüm yapalım. 935 00:38:29,980 --> 00:38:36,870 >> Döngü için bir oluşturmak, Sadece gidelim ve t desteğini yapmak i s i dirseğini alır. 936 00:38:36,870 --> 00:38:39,760 Şimdi ben kullanabilir Çünkü Bu dizi gibi notasyonu, 937 00:38:39,760 --> 00:38:43,390 Çünkü olsa bile malloc çok jenerik bana bellek ayırır, 938 00:38:43,390 --> 00:38:45,290 Bellek sadece bitişik bayt. 939 00:38:45,290 --> 00:38:47,240 Byte, bayt, bayt, arka arkaya arkaya. 940 00:38:47,240 --> 00:38:50,030 >> Ben bir programcı olarak kesinlikle can Bir dizi olarak tedavi hangi 941 00:38:50,030 --> 00:38:55,090 Ben bu nihayet tanıdık kullanabilirsiniz anlamına gelir sadece bazı köşeli parantez gösterimi. 942 00:38:55,090 --> 00:38:56,462 943 00:38:56,462 --> 00:39:00,020 >> Bu yüzden bana, çünkü orada duralım Bu bile, tek seferde bir çok şey var 944 00:39:00,020 --> 00:39:03,530 Temel fikir tekrarlamak için olsa Bu dize, bütün bu zaman, 945 00:39:03,530 --> 00:39:05,550 Yeni bir veri türü başına değil. 946 00:39:05,550 --> 00:39:10,150 Bu, sadece bir sözde işaretçinin Bir karakterin bir adres, 947 00:39:10,150 --> 00:39:12,650 hangi sadece anlamına gelir, bir numara insan kongre tarafından 948 00:39:12,650 --> 00:39:15,350 Biz 0x şey olarak yazma eğilimindedir. 949 00:39:15,350 --> 00:39:18,590 >> Ama bu sadece bir sayı var, 33 Oxford Street gibi, 950 00:39:18,590 --> 00:39:20,530 hangi olur CS binanın adresi. 951 00:39:20,530 --> 00:39:22,000 952 00:39:22,000 --> 00:39:23,545 Bu ayrıntılar üzerinde Herhangi bir sorunuz? 953 00:39:23,545 --> 00:39:24,790 954 00:39:24,790 --> 00:39:25,289 Evet? 955 00:39:25,289 --> 00:39:28,530 >> İZLEYİCİ: Neden kontrol yapmak Eşit t için null? 956 00:39:28,530 --> 00:39:30,740 >> DAVID J. MALAN: Neden biz yapmak null eşit t kontrol? 957 00:39:30,740 --> 00:39:33,250 Biz documentation-- okursanız Malloc büyük question--, 958 00:39:33,250 --> 00:39:37,020 o ince baskı söyleyecek bazen malloc, boş dönmek olabilir 959 00:39:37,020 --> 00:39:38,080 Sadece getString gibi. 960 00:39:38,080 --> 00:39:41,820 Ve gerçekten de, GetString null döndürür , sırayla, malloc null döndürür eğer, 961 00:39:41,820 --> 00:39:43,130 GetString malloc kullandığı için. 962 00:39:43,130 --> 00:39:46,400 >> Ve bu işletim durumunda ne olabilir, Mac OS, Windows, ne olursa olsun, basitçe 963 00:39:46,400 --> 00:39:48,130 Sizin için bellek yetersiz. 964 00:39:48,130 --> 00:39:49,820 Yani orada ne var. 965 00:39:49,820 --> 00:39:52,910 >> Ve bana bir başka şey ortaya izin sadece aklınızı başınızdan olabilir 966 00:39:52,910 --> 00:39:55,100 veya tamamen çok uzak hat üzerinde olması. 967 00:39:55,100 --> 00:39:59,770 Ama beni yukarı çekin izin Kopyalama için döngü için aynı, 968 00:39:59,770 --> 00:40:05,480 hangi bir an önce, geri çağırma oldu Bu. t dirsek i s i dirseğini alır. 969 00:40:05,480 --> 00:40:06,740 >> Güzel ve kullanıcı dostu. 970 00:40:06,740 --> 00:40:09,330 Tekrar Hafta İki gibi hissediyor. 971 00:40:09,330 --> 00:40:14,920 Ama bu sürüm aslında olabilir şifreli görünüyor ki bu, olarak yeniden. 972 00:40:14,920 --> 00:40:18,280 Bu bir teknik denilen işaretçi var aritmetik, adres aritmetiği. 973 00:40:18,280 --> 00:40:19,600 Ama neden bu işi yapar? 974 00:40:19,600 --> 00:40:22,220 >> Şimdi rahatsız edici, C yazarları kullanmaya karar verdi 975 00:40:22,220 --> 00:40:25,070 Farklı amaçlar için * sembolü. 976 00:40:25,070 --> 00:40:29,020 Biz, zaten bir kez kullanılan gördüm anlamına karakter *, "Bana bir değişken ver 977 00:40:29,020 --> 00:40:31,210 Bu içeren gidiyor Bir karakter adresi. " 978 00:40:31,210 --> 00:40:33,990 Bu bağlamda Yani karakter * "Bana bir değişken ver" anlamına gelir. 979 00:40:33,990 --> 00:40:40,050 >> Ne yazık ki, * olmadan kullanırsanız önünde bir kelime, karakter gibi, 980 00:40:40,050 --> 00:40:41,905 şimdi denir inceleyebilirsiniz operatörü. 981 00:40:41,905 --> 00:40:43,530 Ve biz çok önce bu daha göreceksiniz. 982 00:40:43,530 --> 00:40:44,930 Ama sadece "oraya gitmek" anlamına gelir. 983 00:40:44,930 --> 00:40:49,070 Birisi bana teslim eğer, demek gibi kağıt parçası üzerinde "33 Oxford Street," 984 00:40:49,070 --> 00:40:53,830 Ben "* 33 Oxford Street," eğer anlamına gelir "CS binaya yolda gitmek." 985 00:40:53,830 --> 00:40:57,220 >> Yani * sadece orada gitmek anlamına gelir Bunun önünde hiçbir kelime yoktur. 986 00:40:57,220 --> 00:40:59,100 Yani açık olmak, t nedir? 987 00:40:59,100 --> 00:41:03,250 t yığın adresi Bana geri verildi bellek. 988 00:41:03,250 --> 00:41:06,650 sn, açık olmak, ne adresi Örneğin biz tartışırken oldum, 989 00:41:06,650 --> 00:41:07,500 küçük gabe mi? 990 00:41:07,500 --> 00:41:08,990 991 00:41:08,990 --> 00:41:10,005 adres olduğunu of-- 992 00:41:10,005 --> 00:41:11,585 993 00:41:11,585 --> 00:41:12,460 HEDEF KİTLE: dize. 994 00:41:12,460 --> 00:41:14,126 DAVID J. MALAN: Gabe orijinal adı Of. 995 00:41:14,126 --> 00:41:16,660 Yani adresi var bellek bu yığın. 996 00:41:16,660 --> 00:41:22,220 Yani diyorum t + ben-- i, haber, Sadece bizim eski dostumuz. 997 00:41:22,220 --> 00:41:24,770 Bu sadece bir dizin değişkeni var Bu yukarı sıfırdan yineleme var 998 00:41:24,770 --> 00:41:26,960 dize s uzunluğuna. 999 00:41:26,960 --> 00:41:30,367 Yani, daha sonra sıfır, bir olacak daha sonra iki, sonra üç, sonra dört. 1000 00:41:30,367 --> 00:41:33,200 Yani bu yeni araya izin Çizilmeye benzeri puzzle parçaları, eğer sen, 1001 00:41:33,200 --> 00:41:36,140 olsa bile, yine, sözdizimi Scratch çok daha gizemli olduğunu. 1002 00:41:36,140 --> 00:41:39,522 Yani t bir adres + olan Ben bana verecek 1003 00:41:39,522 --> 00:41:42,480 bir sayı, aşağıdaki çünkü hepsi onaltılık olarak çizim oldum numaralar. 1004 00:41:42,480 --> 00:41:43,560 Ama onlar sadece sayıları konum. 1005 00:41:43,560 --> 00:41:49,960 >> T adresi dedik Yani oldu 0x88, 0x88 artı sıfır budur. 1006 00:41:49,960 --> 00:41:51,564 1007 00:41:51,564 --> 00:41:53,980 Eğer rahat değilseniz bile Henüz altıgen ile, bir tahmin almak. 1008 00:41:53,980 --> 00:41:54,410 >> İZLEYİCİ: Orijinal. 1009 00:41:54,410 --> 00:41:55,850 >> David J. MALAN: 0x88 Yine. 1010 00:41:55,850 --> 00:41:58,910 Peki * ne anlama 0x88 geliyor? 1011 00:41:58,910 --> 00:42:02,670 Bu demektir "oraya gitmek" anlamına gelir etkin "Burada parmağınızı koyun." 1012 00:42:02,670 --> 00:42:06,930 Ve şimdi sağ tarafta bu ifade, * ve Pars olarak, 1013 00:42:06,930 --> 00:42:11,586 s ı olan, s anlamına gelir + Burada küçük g kadar ele. 1014 00:42:11,586 --> 00:42:16,220 s + 0, tabii ki, ne olursa olsun, s, s. 1015 00:42:16,220 --> 00:42:21,230 >> Peki şimdi, o * s, var olan sadece * 33 gibi Oxford Caddesi adresine gidin demektir 1016 00:42:21,230 --> 00:42:22,010 s. 1017 00:42:22,010 --> 00:42:24,170 Yani burada bu parmak, sağ eli. 1018 00:42:24,170 --> 00:42:26,050 Peki ne ne kopyalamak için gidiyorum? 1019 00:42:26,050 --> 00:42:30,260 sağdaki şey, Gabe, burada içine burada küçük g. 1020 00:42:30,260 --> 00:42:32,750 >> Ve bu öylesine etkisi döngünün ilk yineleme, 1021 00:42:32,750 --> 00:42:36,200 Eğer görünüyor olsa bile, önerildiği gibi her şeyden daha çılgın daha karmaşık 1022 00:42:36,200 --> 00:42:42,110 Daha önce gördüğümüz sadece söyleyerek buraya gidin ve burada bu karakteri kopyalayın. 1023 00:42:42,110 --> 00:42:44,700 Size iki konumda bir harita veriyor. 1024 00:42:44,700 --> 00:42:46,130 >> Ve biz bu çok daha göreceksiniz. 1025 00:42:46,130 --> 00:42:50,600 Ama şimdi, umut sadece etmektir Bu temel fikirlerden bazılarını tanıtmak. 1026 00:42:50,600 --> 00:42:53,550 Ve gerçekten de, en bakalım Burada bir final programı, 1027 00:42:53,550 --> 00:42:57,480 ve daha sonra söz claymation, her şeyin yolunda yapacaktır. 1028 00:42:57,480 --> 00:42:57,980 Tamam. 1029 00:42:57,980 --> 00:43:01,680 Yani beni oraya gitmek up-- açalım. 1030 00:43:01,680 --> 00:43:02,850 1031 00:43:02,850 --> 00:43:05,440 Biz geri geleceğiz bana-- Yani izin uzun zaman önce bu resme. 1032 00:43:05,440 --> 00:43:08,360 Beni burada bu son örneği açalım. 1033 00:43:08,360 --> 00:43:09,440 1034 00:43:09,440 --> 00:43:12,710 >> Yani burada bir süper, süper başarır programı 1035 00:43:12,710 --> 00:43:15,050 şunları yapar hayatında hiçbir şey. 1036 00:43:15,050 --> 00:43:18,740 İlk iki değişken x bildirir ve bu sefer numaraları olmayan y, 1037 00:43:18,740 --> 00:43:19,240 per se olarak. 1038 00:43:19,240 --> 00:43:20,448 Onlar başına, tam sayı değiliz. 1039 00:43:20,448 --> 00:43:22,899 Onlar * görünüşe göre int. 1040 00:43:22,899 --> 00:43:25,690 Yani sadece herkes, bu ne anlama geliyor Veri türü ise, değişken, 1041 00:43:25,690 --> 00:43:26,860 tipi int * yıldızı mı? 1042 00:43:26,860 --> 00:43:30,240 Bu bir int adresi var. 1043 00:43:30,240 --> 00:43:31,990 >> Bu yüzden henüz hiçbir fikrim yok. 1044 00:43:31,990 --> 00:43:35,150 Sadece ", sonunda, koymak anlamına gelir Burada bir int adresi. " 1045 00:43:35,150 --> 00:43:38,340 O olduğu yerde 0x50, 0x88, Bellek, bir adres oluyor. 1046 00:43:38,340 --> 00:43:40,200 Ve bu y ne yanı sıra, olacak. 1047 00:43:40,200 --> 00:43:44,920 >> Ben şimdi derseniz x = malloc (sizeof (int)), Bu söyleyerek bir fantezi yoludur, 1048 00:43:44,920 --> 00:43:49,000 hey işletim sistemi, malloc yoluyla, boyutu için bana yeterli bellek ver 1049 00:43:49,000 --> 00:43:52,370 muhtemelen bir int, bir 32 bit veya dört bayt olacak. 1050 00:43:52,370 --> 00:43:53,680 >> Peki malloc ne dönmek? 1051 00:43:53,680 --> 00:43:55,250 Malloc bir adres verir. 1052 00:43:55,250 --> 00:43:57,020 Peki x saklanan almak için gidiyor? 1053 00:43:57,020 --> 00:44:00,600 bir yığın adresi Bellek, dört bayt, bu Malloc 1054 00:44:00,600 --> 00:44:03,360 Sadece sorarak beni bulundu işletim sistemi. 1055 00:44:03,360 --> 00:44:08,240 >> Şimdi arada, çizgi Burada dört, * x = 42. 1056 00:44:08,240 --> 00:44:09,990 Sadece, açık olmak Orada ne oluyor? 1057 00:44:09,990 --> 00:44:11,530 Sol tarafta, .x. 1058 00:44:11,530 --> 00:44:13,610 Bu * 33 Oxford Street gibi. 1059 00:44:13,610 --> 00:44:15,523 Peki * x ne demek? 1060 00:44:15,523 --> 00:44:16,450 >> İZLEYİCİ: gidin. 1061 00:44:16,450 --> 00:44:17,908 >> DAVID J. MALAN: bu adrese gidin. 1062 00:44:17,908 --> 00:44:20,466 Nerede o öbek Bellek ona gidiyorum. 1063 00:44:20,466 --> 00:44:21,979 Ve tabii ki, orada ne koydu? 1064 00:44:21,979 --> 00:44:22,520 HEDEF KİTLE: 42. 1065 00:44:22,520 --> 00:44:23,580 DAVID J. MALAN: 42. 1066 00:44:23,580 --> 00:44:25,650 Pekala, * y aynı fikir. 1067 00:44:25,650 --> 00:44:26,860 Y adresine gidin. 1068 00:44:26,860 --> 00:44:31,740 Orada numara 13 koyun, ama şu anda y nedir? 1069 00:44:31,740 --> 00:44:33,172 1070 00:44:33,172 --> 00:44:34,630 HEDEF KİTLE: hafıza y vardır. 1071 00:44:34,630 --> 00:44:35,710 DAVID J. MALAN: Orada y için hiçbir bellek. 1072 00:44:35,710 --> 00:44:38,215 Peki muhtemelen y yapar Biz söyleyerek oldum gibi, ihtiva? 1073 00:44:38,215 --> 00:44:38,520 >> İZLEYİCİ: Çöp. 1074 00:44:38,520 --> 00:44:39,480 >> DAVID J. MALAN: Bazı çöp değeri. 1075 00:44:39,480 --> 00:44:41,320 Şimdi, çöp değeri hala bir sayıdır. 1076 00:44:41,320 --> 00:44:43,160 Hala bir adres yanlış olabilir. 1077 00:44:43,160 --> 00:44:45,160 Birisi sanki bulunuyor aşağı bir şey karalanmış 1078 00:44:45,160 --> 00:44:48,002 ve ben anlam olarak yanlış yorumlanabilir Caddede bazı bina. 1079 00:44:48,002 --> 00:44:50,460 Ve sadece gitmek için deneyin sahibi olmayan bazı bina, 1080 00:44:50,460 --> 00:44:53,710 veya hafıza bazı yığın değil var Verilen olmuştur, kötü şeyler olabilir. 1081 00:44:53,710 --> 00:44:57,740 Bilgisayar diğer bazı çökmesine ya da olabilir belirsiz davranış ortaya çıkabilir. 1082 00:44:57,740 --> 00:45:01,310 >> Peki, o zaman, Binky bu intro. 1083 00:45:01,310 --> 00:45:04,290 Hala 20, hatırlıyorum Bazı küsur yıl sonra, 1084 00:45:04,290 --> 00:45:07,200 Ben ne zaman nihayet nerede işaretçiler anladım. 1085 00:45:07,200 --> 00:45:09,520 >> Eğer, demek Hangi Üç dakika içinde burada bırakın 1086 00:45:09,520 --> 00:45:12,170 ve ben böyle düşünüyorum işaretçileri anlamak, fark 1087 00:45:12,170 --> 00:45:14,410 Ben 20 için hatırladım Bazı çılgın bir nedenle yıl 1088 00:45:14,410 --> 00:45:17,140 ne zaman ve neden nihayet battı içinde, benim öğretim oturma 1089 00:45:17,140 --> 00:45:19,501 adam, Nishat Mehta içinde Eliot Dining Hall arka. 1090 00:45:19,501 --> 00:45:21,250 Şimdi, ben hatırladım bu çünkü 1091 00:45:21,250 --> 00:45:23,920 konularda Ben, içinde bir Özellikle, birlikte mücadele etti. 1092 00:45:23,920 --> 00:45:26,470 Ve sonra, nihayet tıklandığında, gibi konularda bir sürü söylemek cesaret 1093 00:45:26,470 --> 00:45:27,460 Sonunda olacak. 1094 00:45:27,460 --> 00:45:32,590 Ve şimdi, tüm hissettirmek için mutlu ve daha inandırıcı, 1095 00:45:32,590 --> 00:45:35,360 en son bir göz atalım bizim Burada Binky son üç dakika, 1096 00:45:35,360 --> 00:45:37,675 Bizim arkadaş, Nick Stanford Parlante. 1097 00:45:37,675 --> 00:45:38,910 1098 00:45:38,910 --> 00:45:41,580 >> [VİDEO OYNATMA] 1099 00:45:41,580 --> 00:45:42,750 >> Hey, Binky. 1100 00:45:42,750 --> 00:45:43,500 Uyanmak! 1101 00:45:43,500 --> 00:45:45,960 Bu işaretçi eğlence zamanı. 1102 00:45:45,960 --> 00:45:47,012 >> Ne o? 1103 00:45:47,012 --> 00:45:48,723 Işaretçiler hakkında bilgi edinin? 1104 00:45:48,723 --> 00:45:50,580 Ah, ne güzel! 1105 00:45:50,580 --> 00:45:53,563 >> -Peki, Başlamak için, biz konum sanırım Birkaç işaretçileri ihtiyacımız olacak. 1106 00:45:53,563 --> 00:45:54,390 >> -Tamam. 1107 00:45:54,390 --> 00:45:57,930 Bu kod, iki işaretçileri ayırır Hangi tamsayılar işaret edebilir. 1108 00:45:57,930 --> 00:45:58,430 -TAMAM MI. 1109 00:45:58,430 --> 00:46:02,140 Eh, ben iki işaretçiler görmek, ama onlar bir şey işaret olmak görünmüyor. 1110 00:46:02,140 --> 00:46:02,980 >> -Doğru. 1111 00:46:02,980 --> 00:46:05,100 Başlangıçta, göstericiler bir şey işaret etmemektedir. 1112 00:46:05,100 --> 00:46:08,030 dedikleri işaret şeyler pointees ve 's onları kurma 1113 00:46:08,030 --> 00:46:09,370 Ayrı bir adım. 1114 00:46:09,370 --> 00:46:10,220 >> Oh, doğru, doğru. 1115 00:46:10,220 --> 00:46:10,950 Ben biliyordum. 1116 00:46:10,950 --> 00:46:12,385 pointees ayrıdır. 1117 00:46:12,385 --> 00:46:14,315 Er, bu yüzden nasıl bir pointee tahsis edebilirim? 1118 00:46:14,315 --> 00:46:15,340 1119 00:46:15,340 --> 00:46:15,960 >> -Tamam. 1120 00:46:15,960 --> 00:46:18,970 Peki, bu kod tahsis Yeni tamsayı pointee, 1121 00:46:18,970 --> 00:46:20,950 ve bu bölüm setleri x buna işaret etmek. 1122 00:46:20,950 --> 00:46:22,050 1123 00:46:22,050 --> 00:46:23,230 >> -Hey, O daha iyi görünüyor. 1124 00:46:23,230 --> 00:46:25,060 Yani bir şey yapın. 1125 00:46:25,060 --> 00:46:25,990 >> -Tamam. 1126 00:46:25,990 --> 00:46:30,455 Ben işaretçi x inceleyebilirsiniz olacak onun pointee içine sayısını 42 saklamak. 1127 00:46:30,455 --> 00:46:32,830 Bu hile için, ben gerekir benim Çözümleyecek Sihirli Değnek. 1128 00:46:32,830 --> 00:46:34,130 1129 00:46:34,130 --> 00:46:36,080 >> Başvurusu kaldırıldığında ve -Senin Sihirli Değnek? 1130 00:46:36,080 --> 00:46:37,357 1131 00:46:37,357 --> 00:46:38,190 Ki- bu harika. 1132 00:46:38,190 --> 00:46:39,340 1133 00:46:39,340 --> 00:46:41,080 >> -Bu Kod neye benzediğini. 1134 00:46:41,080 --> 00:46:44,110 Ben sadece numarayı ve [POP] kurmak edeceğiz 1135 00:46:44,110 --> 00:46:44,700 >> Hey, bak. 1136 00:46:44,700 --> 00:46:46,140 Orada gidiyor. 1137 00:46:46,140 --> 00:46:50,980 >> -Peki X bir dereference aşağıda yapıyor ok onun pointee erişmek için. 1138 00:46:50,980 --> 00:46:53,160 Bu durumda, orada bir mağaza 42. 1139 00:46:53,160 --> 00:46:57,710 Hey numarayı saklamak için kullanmayı deneyin Diğer işaretçi 13 y. 1140 00:46:57,710 --> 00:46:58,760 >> -Tamam. 1141 00:46:58,760 --> 00:47:03,270 Ben sadece y buraya gidersiniz, ve sayı 13 ayar kalkmak. 1142 00:47:03,270 --> 00:47:07,930 Ve sonra, Wand almak Kaldırma ve sadece [BUZZ] 1143 00:47:07,930 --> 00:47:08,960 >> Oh! 1144 00:47:08,960 --> 00:47:09,500 >> Oh, hey! 1145 00:47:09,500 --> 00:47:11,090 Bu işe yaramadı. 1146 00:47:11,090 --> 00:47:15,630 Binky, ben kaldırma sanmıyorum, Say Bildiğiniz çünkü y, iyi bir fikir 1147 00:47:15,630 --> 00:47:17,850 pointee kurma Ayrı bir adımdır. 1148 00:47:17,850 --> 00:47:20,450 Ve biz hiç yaptım sanmıyorum. 1149 00:47:20,450 --> 00:47:21,480 >> -İyi Bir nokta. 1150 00:47:21,480 --> 00:47:21,980 -Evet. 1151 00:47:21,980 --> 00:47:25,680 Biz işaretçi y tahsis, ama biz asla bir pointee işaret olarak ayarlayın. 1152 00:47:25,680 --> 00:47:27,190 1153 00:47:27,190 --> 00:47:28,616 >> -Çok Dikkatli. 1154 00:47:28,616 --> 00:47:30,240 -Hey, Sen, orada Binky iyi arıyoruz. 1155 00:47:30,240 --> 00:47:33,400 O yüzden bunu düzeltmek miyim y noktaları x aynı pointee için? 1156 00:47:33,400 --> 00:47:34,000 >> -Tabii. 1157 00:47:34,000 --> 00:47:36,780 Benim Sihirli Değnek kullanacağız Pointer Atanma. 1158 00:47:36,780 --> 00:47:38,740 >> Olacak ki -Bu önce böyle bir sorun? 1159 00:47:38,740 --> 00:47:39,240 -Hayır. 1160 00:47:39,240 --> 00:47:40,660 Bu pointees dokunmaz. 1161 00:47:40,660 --> 00:47:44,450 Sadece bir işaretçi değiştirir Başka aynı şeyi işaret. 1162 00:47:44,450 --> 00:47:45,450 >> Oh, ben görüyorum. 1163 00:47:45,450 --> 00:47:48,200 X aynı yere Şimdi y noktaları. 1164 00:47:48,200 --> 00:47:48,910 Yani bekle. 1165 00:47:48,910 --> 00:47:49,950 Şimdi, y sabittir. 1166 00:47:49,950 --> 00:47:51,120 Bir pointee sahiptir. 1167 00:47:51,120 --> 00:47:54,510 Yani bir Wand deneyebilirsiniz 13 over göndermek için yeniden dereferencing. 1168 00:47:54,510 --> 00:47:56,510 >> Uh, tamam. 1169 00:47:56,510 --> 00:47:58,160 İşte gidiyor. [POP] 1170 00:47:58,160 --> 00:47:59,340 >> -Hey, Şuna bak. 1171 00:47:59,340 --> 00:48:00,750 Şimdi y işleri kaldırma. 1172 00:48:00,750 --> 00:48:04,991 Ve işaretçiler paylaşımı çünkü bir pointee ki, ikisi de 13 bkz. 1173 00:48:04,991 --> 00:48:05,490 -Evet. 1174 00:48:05,490 --> 00:48:06,870 Paylaşım, ne olursa olsun. 1175 00:48:06,870 --> 00:48:08,820 Yani biz şimdi yerleri geçmek için gidiyoruz? 1176 00:48:08,820 --> 00:48:09,440 >> Ah, bak. 1177 00:48:09,440 --> 00:48:10,830 Biz zaman bitti. 1178 00:48:10,830 --> 00:48:11,570 >> -Ama-- 1179 00:48:11,570 --> 00:48:13,530 >> Üç sayılık kuralları hatırlamak -Sadece. 1180 00:48:13,530 --> 00:48:16,560 Number One, temel yapısı Eğer bir işaretçi olması, 1181 00:48:16,560 --> 00:48:18,680 ve bir pointee üzerinde işaret. 1182 00:48:18,680 --> 00:48:20,640 Ama işaretçi ve pointee ayrıdır 1183 00:48:20,640 --> 00:48:22,610 ve yaygın hata bir işaretçi kurmak için, 1184 00:48:22,610 --> 00:48:25,000 ama bir pointee vermek için unutmak. 1185 00:48:25,000 --> 00:48:28,170 >> Number Two, işaretçiyi kaldırma işaretçi başlar 1186 00:48:28,170 --> 00:48:31,050 ve üzerindeki ok takip onun pointee erişmek için. 1187 00:48:31,050 --> 00:48:33,400 Hepimizin bildiği gibi, bu varsa sadece çalışır 1188 00:48:33,400 --> 00:48:36,270 Bir pointee, hangi tür Number One Kural geri alır. 1189 00:48:36,270 --> 00:48:39,000 >> Sayı Üç, işaretçi atama bir işaretçi alır 1190 00:48:39,000 --> 00:48:42,320 ve işaret onu değiştirir Başka bir işaretçi olarak aynı pointee. 1191 00:48:42,320 --> 00:48:44,160 Atama sonrası Yani, İki işaretçileri 1192 00:48:44,160 --> 00:48:45,910 Aynı pointee işaret edecektir. 1193 00:48:45,910 --> 00:48:47,990 Bazen, bu paylaşım denir. 1194 00:48:47,990 --> 00:48:49,740 Ve gerçekten, ona orada hepsi. 1195 00:48:49,740 --> 00:48:50,277 Güle güle şimdi. 1196 00:48:50,277 --> 00:48:51,110 [SON VİDEO OYNATMA] 1197 00:48:51,110 --> 00:48:52,568 DAVID J. MALAN: Bu CS50 için var. 1198 00:48:52,568 --> 00:48:55,110 Önümüzdeki hafta göreceksiniz. 1199 00:48:55,110 --> 00:48:56,064