1 00:00:00,000 --> 00:00:06,030 >> [MÜZİK OYUN] 2 00:00:06,030 --> 00:00:08,390 >> Doug LLOYD: Göstericiler, işte buradayız. 3 00:00:08,390 --> 00:00:11,080 Bu muhtemelen gidiyor en zor konu olacak 4 00:00:11,080 --> 00:00:12,840 Biz CS50 hakkında konuşmak. 5 00:00:12,840 --> 00:00:15,060 Ve sen okudum eğer işaretçiler şey hakkında 6 00:00:15,060 --> 00:00:19,080 Eğer biraz olabilir önce korkutucu Bu video girecek. 7 00:00:19,080 --> 00:00:21,260 Bu işaretçileri doğru Size yeteneği izin veririm 8 00:00:21,260 --> 00:00:23,740 belki berbat Oldukça kötü bir şekilde olduğunuzda 9 00:00:23,740 --> 00:00:27,450 değişkenler ve veri ile çalışan, ve program çökmesine neden olur. 10 00:00:27,450 --> 00:00:30,490 Ama aslında gerçekten yararlı konum ve onlar bize gerçekten harika bir yoldur izin 11 00:00:30,490 --> 00:00:33,340 geri veri aktarmak için ve ileri fonksiyonları arasındaki, 12 00:00:33,340 --> 00:00:35,490 biz başka türlü yapmak edemiyoruz. 13 00:00:35,490 --> 00:00:37,750 >> Ve ne yani biz gerçekten Tren burada yapmak istiyorum 14 00:00:37,750 --> 00:00:41,060 Eğer iyi işaretçi disiplinine sahip, öylesine etkili işaretçileri kullanabilirsiniz 15 00:00:41,060 --> 00:00:43,850 Programlarınızı çok daha iyi hale getirmek için. 16 00:00:43,850 --> 00:00:48,220 Dediğim gibi işaretçileri bize farklı bir ver yol fonksiyonları arasında veri aktarmak için. 17 00:00:48,220 --> 00:00:50,270 Şimdi gelen çağırmak durumunda daha önceki bir video ne 18 00:00:50,270 --> 00:00:53,720 konuştuğumuz Değişken kapsamı, bahsettiğim 19 00:00:53,720 --> 00:01:00,610 biz arasında geçmesine tüm veri C fonksiyonları değeriyle geçirilir. 20 00:01:00,610 --> 00:01:03,070 Ve ben bunu kullanmış olabilir terim Orada demek ne 21 00:01:03,070 --> 00:01:07,170 Biz verilerin kopyalarını geçiyoruz oldu. 22 00:01:07,170 --> 00:01:12,252 Biz bir işlev için bir değişken geçirdiğinizde, biz aslında değişken geçirmeden değil 23 00:01:12,252 --> 00:01:13,210 işlevine, değil mi? 24 00:01:13,210 --> 00:01:17,670 Biz bir kopyasını geçiyoruz fonksiyon için bu verileri. 25 00:01:17,670 --> 00:01:20,760 Işlevi ne olacak yapar ve bazı değerini hesaplar, 26 00:01:20,760 --> 00:01:23,180 ve belki de biz bu değeri kullanın onu geri verdiğinde. 27 00:01:23,180 --> 00:01:26,700 >> Bunun tek istisnası için vardı değeriyle geçirmeden bu kural, 28 00:01:26,700 --> 00:01:31,210 ve biz ne anlama come back Bu video daha sonra biraz. 29 00:01:31,210 --> 00:01:34,880 Yerine işaretçileri kullanıyorsanız değişkenleri kullanarak, 30 00:01:34,880 --> 00:01:38,180 veya değişkenleri kullanarak yerine kendileri veya değişkenlerin kopyaları, 31 00:01:38,180 --> 00:01:43,790 Şimdi etrafında değişkenleri iletebilirsiniz Farklı bir şekilde işlevler arasında. 32 00:01:43,790 --> 00:01:46,550 Bu bizim yaparsanız demektir Bir fonksiyonda bir değişiklik, 33 00:01:46,550 --> 00:01:49,827 bu değişiklik aslında alacak Farklı bir fonksiyonu etkisi. 34 00:01:49,827 --> 00:01:52,160 Yine, bu bir şey olduğunu Biz daha önce yapamadık 35 00:01:52,160 --> 00:01:56,979 ve hiç takas denedim eğer bir işlevi iki değişkenin değeri, 36 00:01:56,979 --> 00:01:59,270 Eğer bu sorunu fark ettik sürünen tür, değil mi? 37 00:01:59,270 --> 00:02:04,340 >> Biz X ve Y, ve biz takas istiyorsanız takas olarak adlandırılan bir işleve onları geçmek, 38 00:02:04,340 --> 00:02:08,680 işlev içinde takas değişkenler değişim değerlerini yok. 39 00:02:08,680 --> 00:02:12,600 Bir iki olur, iki olur biri, ama aslında yok 40 00:02:12,600 --> 00:02:16,890 orijinal şeyi değiştirmez işlevi, arayanı. 41 00:02:16,890 --> 00:02:19,550 Çünkü biz değil, biz sadece konum Bunların kopyaları ile çalışıyor. 42 00:02:19,550 --> 00:02:24,760 Olsa işaretçileri ile, biz aslında bir işleve X ve Y geçmektedir. 43 00:02:24,760 --> 00:02:26,960 Bu işlev yapabilir Onlarla bir şey. 44 00:02:26,960 --> 00:02:29,250 Ve bu değişkenler değerler Aslında değişebilir. 45 00:02:29,250 --> 00:02:33,710 Yani bu oldukça değişiklik var verilerle çalışmak için yeteneği. 46 00:02:33,710 --> 00:02:36,100 >> Biz dalmak önce işaretçiler, ben buna değer olduğunu düşünüyorum 47 00:02:36,100 --> 00:02:38,580 Bir kaç dakika alarak Buraya temelleri gidin. 48 00:02:38,580 --> 00:02:41,000 Ve nasıl bir göz var bilgisayar bellek çalışmaları 49 00:02:41,000 --> 00:02:45,340 Bu iki konu gidiyoruz çünkü aslında oldukça birbiriyle olmak. 50 00:02:45,340 --> 00:02:48,480 Muhtemelen bildiğiniz gibi, Bilgisayar sisteminizde 51 00:02:48,480 --> 00:02:51,310 Eğer bir sabit disk ya da belki bir katı hal sürücüsü, 52 00:02:51,310 --> 00:02:54,430 dosya depolama konumu çeşit. 53 00:02:54,430 --> 00:02:57,950 Bu bir yerde, genellikle var 250 gigabayt mahalle 54 00:02:57,950 --> 00:02:59,810 Şimdi terabayt belki bir çift. 55 00:02:59,810 --> 00:03:02,270 Ve bunun nerede hepsi senin Dosyaları sonuçta canlı 56 00:03:02,270 --> 00:03:04,870 Bilgisayarınız kapatmak bile kapalı, sen tekrar açabilirsiniz 57 00:03:04,870 --> 00:03:09,190 ve size dosyaları vardır bulacaksınız tekrar sisteminizi yeniden başlattığınızda. 58 00:03:09,190 --> 00:03:14,820 Ama bir sabit disk sürücüsü gibi disk sürücüleri, Bir HDD ya da bir katı hal sürücüsü, bir SSD, 59 00:03:14,820 --> 00:03:16,050 Sadece depolama alanı bulunmaktadır. 60 00:03:16,050 --> 00:03:20,400 >> Biz aslında bir şey yapamaz Sabit diskte olan veriler, 61 00:03:20,400 --> 00:03:22,080 veya bir katı hal sürücü. 62 00:03:22,080 --> 00:03:24,950 Aslında değiştirmek için veri veya hareket, 63 00:03:24,950 --> 00:03:28,800 Biz bunu taşımak zorunda RAM, rastgele erişimli bellek. 64 00:03:28,800 --> 00:03:31,170 Şimdi RAM, bir sürü var Bilgisayarınızda daha az. 65 00:03:31,170 --> 00:03:34,185 Siz de bir yere sahip olabilir 512 megabayt mahalle 66 00:03:34,185 --> 00:03:38,850 Eğer eski bir bilgisayarınız varsa, belki iki, dört, sekiz, 16, 67 00:03:38,850 --> 00:03:41,820 belki hatta biraz Daha fazla RAM gigabayt. 68 00:03:41,820 --> 00:03:46,390 Yani çok daha küçük, ama işte nerede uçucu tüm verileri var. 69 00:03:46,390 --> 00:03:48,270 Bir şeyleri değiştirmek orasıdır. 70 00:03:48,270 --> 00:03:53,350 Ama bizim bilgisayarı kapatın zaman, RAM içinde tüm verilerin imha edilir. 71 00:03:53,350 --> 00:03:57,150 >> Biz sabit disk olması gerekir İşte bu yüzden bunun daha kalıcı bir yer için, 72 00:03:57,150 --> 00:03:59,720 o exists- böylece olur gerçekten kötü olması halinde her zaman biz 73 00:03:59,720 --> 00:04:03,310 Bizim bilgisayar kapalıyken her Bizim sistemde dosya ortadan kalktı. 74 00:04:03,310 --> 00:04:05,600 Bu yüzden RAM içinde çalışır. 75 00:04:05,600 --> 00:04:09,210 Ve her zaman biz bahsediyoruz Bellek, hemen hemen, CS50 içinde, 76 00:04:09,210 --> 00:04:15,080 Biz RAM, sabit disk değil bahsediyoruz. 77 00:04:15,080 --> 00:04:18,657 >> Bu yüzden belleğe şeyler taşıdığınızda, Uzayda belirli bir miktarda alır. 78 00:04:18,657 --> 00:04:20,740 Veri türleri Tüm bu biz çalışıyoruz 79 00:04:20,740 --> 00:04:23,480 kadar farklı sürebilir RAM uzay miktarları. 80 00:04:23,480 --> 00:04:27,600 Yani her zaman bir tamsayı oluşturmak bellek, değişken, dört bayt 81 00:04:27,600 --> 00:04:30,750 Senin bu yüzden RAM kenara ayarlanır Bu tamsayı ile çalışabilir. 82 00:04:30,750 --> 00:04:34,260 Sen tamsayı bildirebilirsiniz, değiştirmek, atayın 83 00:04:34,260 --> 00:04:36,700 artırılır değeri 10 tek, böylece ve böylece tarafından. 84 00:04:36,700 --> 00:04:39,440 Gerçekleşmesi gerektiğini tüm RAM ve dört bayt olsun 85 00:04:39,440 --> 00:04:42,550 Her için çalışmak Oluşturduğunuz tamsayı. 86 00:04:42,550 --> 00:04:45,410 >> Her karakter size oluşturmak bir bayt alır. 87 00:04:45,410 --> 00:04:48,160 O boşluk ne kadar çok var Bir karakteri saklamak için gerekli. 88 00:04:48,160 --> 00:04:51,310 Her şamandıra, gerçek sayı, dört bayt alır 89 00:04:51,310 --> 00:04:53,390 Bir çift olmadıkça hassasiyetli kayar nokta 90 00:04:53,390 --> 00:04:56,510 yapmanıza olanak sağlar numarası, Daha kesin ya da daha fazla basamak var 91 00:04:56,510 --> 00:04:59,300 ondalık noktadan sonra kesinlik kaybetmeden, 92 00:04:59,300 --> 00:05:01,820 hangi bellek sekiz bayt sürebilir. 93 00:05:01,820 --> 00:05:06,730 Uzun uzun ürünler, gerçekten büyük tamsayılar, Ayrıca bellek sekiz bayt sürebilir. 94 00:05:06,730 --> 00:05:09,000 Kaç bellek bayt dizeleri almak mı? 95 00:05:09,000 --> 00:05:12,990 Peki en bu soru bir iğne koyalım Şimdilik, ama biz geri geleceğiz. 96 00:05:12,990 --> 00:05:17,350 >> Böylece geri bellek bu fikri olarak byte büyüklüğünde hücrelere büyük bir dizi. 97 00:05:17,350 --> 00:05:20,871 Gerçekten öyle, hepsi bu kadar Hücrelerin sadece büyük bir dizidir 98 00:05:20,871 --> 00:05:23,370 tıpkı diğer dizi gibi o Eğer aşina ve görmek, 99 00:05:23,370 --> 00:05:26,430 Her elemanın dışında bir bayt genişliğindedir. 100 00:05:26,430 --> 00:05:30,030 Ve sadece bir dizi gibi, her eleman bir adresi vardır. 101 00:05:30,030 --> 00:05:32,120 Bir dizinin her eleman bir dizin ve biz var 102 00:05:32,120 --> 00:05:36,302 Sözde yapmak için bu dizin kullanabilirsiniz dizide rasgele erişim. 103 00:05:36,302 --> 00:05:38,510 Biz başlamak zorunda değilsiniz Dizinin başında, 104 00:05:38,510 --> 00:05:40,569 Her yinelemenize tek eleman bunların 105 00:05:40,569 --> 00:05:41,860 biz aradığınızı bulmak için. 106 00:05:41,860 --> 00:05:45,790 Biz sadece ben almak istiyorum, söyleyebilirim 15 öğe veya 100 eleman. 107 00:05:45,790 --> 00:05:49,930 Ve sadece bu sayı iletebilirsiniz ve aradığınız değeri olsun. 108 00:05:49,930 --> 00:05:54,460 >> Benzer her yeri bellekteki bir adresi var. 109 00:05:54,460 --> 00:05:57,320 Yani bellek olabilir Bu gibi bir şey. 110 00:05:57,320 --> 00:06:01,420 İşte çok küçük bir yığın var hafıza, bu bellek 20 bayt. 111 00:06:01,420 --> 00:06:04,060 İlk 20 bayt çünkü benim altta orada adresleri 112 00:06:04,060 --> 00:06:08,890 3, 2, 1, 0, ve bu yüzden 19 kadar tüm yol. 113 00:06:08,890 --> 00:06:13,190 Ve ben değişkenleri bildirmek ve ne zaman Ben onlarla çalışmak başladığınızda, 114 00:06:13,190 --> 00:06:15,470 Sistem ayarlamak için gidiyor Benim için bir kenara biraz boşluk 115 00:06:15,470 --> 00:06:17,595 Bu bellek çalışmak Benim değişkenlerle. 116 00:06:17,595 --> 00:06:21,610 Yani Char c sermaye eşittir, diyebilirsiniz H. Ve ne olacak? 117 00:06:21,610 --> 00:06:23,880 Peki sistem gidiyor Bana bir bayt için kenara koyun. 118 00:06:23,880 --> 00:06:27,870 Bu durumda, tercih bayt sayısının Dört, dört adresinde bayt, 119 00:06:27,870 --> 00:06:31,310 ve saklamak için gidiyor Benim için orada mektup sermaye H. 120 00:06:31,310 --> 00:06:34,350 Sonra int hızı derseniz Sınır bu, 65 eşittir 121 00:06:34,350 --> 00:06:36,806 kenara dört set olacak Benim için hafıza bayt. 122 00:06:36,806 --> 00:06:39,180 Ve o tedavi için gidiyor tek bir birim olarak dört bayt 123 00:06:39,180 --> 00:06:41,305 ne çalışıyoruz, çünkü burada bir tamsayıdır. 124 00:06:41,305 --> 00:06:44,350 Ve orada 65 saklamak için gidiyor. 125 00:06:44,350 --> 00:06:47,000 >> Şimdi zaten ben biraz Sana yalan biraz söylüyorum, 126 00:06:47,000 --> 00:06:50,150 Doğru, bunu biliyoruz çünkü Bilgisayarlar ikili çalışma. 127 00:06:50,150 --> 00:06:53,100 Onlar anlamıyorum mutlaka bir sermaye H nedir 128 00:06:53,100 --> 00:06:57,110 ya da 65 onlar sadece, ne İkili, sıfırları ve olanları anlıyorum. 129 00:06:57,110 --> 00:06:59,000 Ve böylece aslında ne biz orada saklıyoruz 130 00:06:59,000 --> 00:07:03,450 H harfi ve sayı 65, değil ama oldukça ikili temsilleri 131 00:07:03,450 --> 00:07:06,980 bunların hangi bakmak Böyle küçük bir şey. 132 00:07:06,980 --> 00:07:10,360 Ve özellikle de tamsayı değişken bağlam, 133 00:07:10,360 --> 00:07:13,559 o, sadece içine tükürmek için gitmiyor o bir dört gibi davranın gitmiyor 134 00:07:13,559 --> 00:07:15,350 bayt yığın mutlaka aslında gidiyor 135 00:07:15,350 --> 00:07:19,570 Dört bir byte parçalar gibi davranın, hangi böyle bir şey görünebilir. 136 00:07:19,570 --> 00:07:22,424 Ve hatta bu değildir tamamen doğru ya, 137 00:07:22,424 --> 00:07:24,840 denilen şey, çünkü değiliz, bir endian, 138 00:07:24,840 --> 00:07:26,965 Şimdi içine almak için gidiyoruz ama Eğer merak iseniz, 139 00:07:26,965 --> 00:07:29,030 küçük kadar okuyabilirsiniz ve büyük endian. 140 00:07:29,030 --> 00:07:31,640 Ama bu tartışmanın uğruna, Bu videonun uğruna, 141 00:07:31,640 --> 00:07:34,860 Sadece ki, olduğunu varsayalım Aslında, nasıl sayı 65 olur 142 00:07:34,860 --> 00:07:36,970 temsil edilebilir Her sistemde bellek, 143 00:07:36,970 --> 00:07:38,850 tamamen doğru olmasa. 144 00:07:38,850 --> 00:07:41,700 >> Ama aslında sadece başlayalım Tamamen bütün ikili kurtulmak, 145 00:07:41,700 --> 00:07:44,460 ve sadece H olarak düşünmek ve 65, bu çok daha kolay 146 00:07:44,460 --> 00:07:47,900 gibi düşünmeye bir insan olarak söyledi. 147 00:07:47,900 --> 00:07:51,420 Pekala, o da görünüyor böylece belki Biraz rasgele olduğunu Ben- benim sistem 148 00:07:51,420 --> 00:07:55,130 bayt 5, 6, 7, bana vermediler, 8 tamsayı saklamak için. 149 00:07:55,130 --> 00:07:58,580 Bunun bir nedeni de var, hangi şu anda içine almak, ama yeterli olmayacaktır 150 00:07:58,580 --> 00:08:00,496 o ne olduğunu söylemek Bilgisayar burada yapıyor 151 00:08:00,496 --> 00:08:02,810 muhtemelen onun parçası iyi bir hamledir. 152 00:08:02,810 --> 00:08:06,020 Bana bu bellek vermek için mutlaka geri geri. 153 00:08:06,020 --> 00:08:10,490 Şimdi bunu yapmak için gidiyor olsa da Başka bir dize almak istiyorsanız, 154 00:08:10,490 --> 00:08:13,080 soyadı denir ve ben istiyorum Orada Lloyd koymak. 155 00:08:13,080 --> 00:08:18,360 Bir tane sığacak gerekir gidiyorum karakteri, bu her mektubu 156 00:08:18,360 --> 00:08:21,330 bir ihtiyaç olacak karakter, belleğin bir bayt. 157 00:08:21,330 --> 00:08:26,230 Ben diziye Lloyd koymak olabilir Yani eğer Bu gibi sağa gitmek için oldukça iyi değil mi? 158 00:08:26,230 --> 00:08:28,870 Ne kayıp? 159 00:08:28,870 --> 00:08:31,840 >> Her dize Çalıştığımız unutmayın C tersbölü sıfır ile biten de birlikte, 160 00:08:31,840 --> 00:08:33,339 ve biz ya, burada geçemeyeceğim. 161 00:08:33,339 --> 00:08:36,090 Biz kenara bir bayt ayarlamanız gerekir bellek yüzden biz tutun 162 00:08:36,090 --> 00:08:39,130 Bizim dize sona erdiğinde biliyorum. 163 00:08:39,130 --> 00:08:41,049 Yani yine bu düzenleme yol şeyler 164 00:08:41,049 --> 00:08:42,799 Hafıza kudreti görünür biraz rastgele 165 00:08:42,799 --> 00:08:44,870 ama aslında nasıl çoğu sistem dizayn edilmiştir. 166 00:08:44,870 --> 00:08:48,330 Katları onları hizaya getirmek dört, nedenlerle daha 167 00:08:48,330 --> 00:08:50,080 biz gerekmez hemen içine almak. 168 00:08:50,080 --> 00:08:53,060 Ama bu, böylece söylemekle yetinelim Bu kod üç satır sonra, 169 00:08:53,060 --> 00:08:54,810 Bu bellek neye benzeyeceğini olduğunu. 170 00:08:54,810 --> 00:08:58,930 Ben bellek konumlarını gerekiyorsa 4, 8, ve 12, benim verileri tutmak için 171 00:08:58,930 --> 00:09:01,100 Bu benim hafıza neye benzeyeceğini olduğunu. 172 00:09:01,100 --> 00:09:04,062 >> Ve sadece özellikle olacak Burada zaman bilgiçlik 173 00:09:04,062 --> 00:09:06,020 biz bellek bahsediyoruz adresleri genellikle biz 174 00:09:06,020 --> 00:09:08,390 yani onaltılık gösterimler kullanılarak yok. 175 00:09:08,390 --> 00:09:12,030 Peki neden tüm bu convert yok onaltılık gösterimde kadar ondalık 176 00:09:12,030 --> 00:09:15,010 sadece genel çünkü nasıl belleğe bakın. 177 00:09:15,010 --> 00:09:17,880 Peki yerine 0 ile olmanın 19, ne var sıfır 178 00:09:17,880 --> 00:09:20,340 Sıfır x1 üç boyunca x sıfır. 179 00:09:20,340 --> 00:09:23,790 Bu bellek 20 byte biz ya da biz bu görüntüde bakıyoruz var 180 00:09:23,790 --> 00:09:25,540 tam burada. 181 00:09:25,540 --> 00:09:29,310 >> Yani bu söyleniyor hepsi edelim Bir saniye bellekten uzaklaşın 182 00:09:29,310 --> 00:09:30,490 ve geri işaretçileri. 183 00:09:30,490 --> 00:09:32,420 İşte en önemli şey hatırlamak 184 00:09:32,420 --> 00:09:34,070 Biz işaretçileri ile çalışmaya başlamak olarak. 185 00:09:34,070 --> 00:09:36,314 Bir gösterici bir şey değildir bir adres daha fazla. 186 00:09:36,314 --> 00:09:38,230 Tekrar çünkü söyleyeceğim o, bu önemli 187 00:09:38,230 --> 00:09:42,730 bir işaretçi başka bir şey değildir bir adres daha fazla. 188 00:09:42,730 --> 00:09:47,760 Göstericiler yerlere adresleri bellekte değişkenler yaşadığı. 189 00:09:47,760 --> 00:09:52,590 Umarım bir hale bilerek kolay biraz onlarla çalışmak için. 190 00:09:52,590 --> 00:09:54,550 Sevdiğim başka bir şey yapmak sıralamak sahip olmaktır 191 00:09:54,550 --> 00:09:58,510 görsel ne temsil diyagramları kod çeşitli hatları ile oluyor. 192 00:09:58,510 --> 00:10:00,660 Ve biz bu bir çift yapacağız işaretçileri kez, 193 00:10:00,660 --> 00:10:03,354 ve biz dinamik hakkında konuşmak bellek ayırma de. 194 00:10:03,354 --> 00:10:06,020 Ben bu diyagramlar düşünüyorum çünkü özellikle yararlı olabilir. 195 00:10:06,020 --> 00:10:09,540 >> Ben mesela söylemek eğer öyleyse, int k benim kod, ne oluyor? 196 00:10:09,540 --> 00:10:12,524 Peki temelde ne olduğunu oluyor Ben, benim için bir kenara bellek alıyorum 197 00:10:12,524 --> 00:10:14,690 ama ben bile sevmiyorum Ben, böyle düşünmek 198 00:10:14,690 --> 00:10:16,300 Bir kutu gibi düşünmek istiyorum. 199 00:10:16,300 --> 00:10:20,090 Bir kutu var ve bu kadar yeşil renkli çünkü ben 200 00:10:20,090 --> 00:10:21,750 Yeşil kutulara tamsayılar koyabilirsiniz. 201 00:10:21,750 --> 00:10:23,666 Bir karakter I olsaydım mavi kutu olabilir. 202 00:10:23,666 --> 00:10:27,290 Ben oluşturma Ama ben her zaman diyorum tamsayıları tutabilir bir kutu 203 00:10:27,290 --> 00:10:28,950 Bu kutu yeşil renklidir. 204 00:10:28,950 --> 00:10:33,020 Ve ben kalıcı bir kalem almak ve bunu tarafında k yazın. 205 00:10:33,020 --> 00:10:37,590 Yani, k adında bir kutu var içine ben tamsayılar koyabilirsiniz. 206 00:10:37,590 --> 00:10:41,070 Ben int k derken Yani, işte Ne kafamın içinde olur. 207 00:10:41,070 --> 00:10:43,140 Ben k beş eşittir derseniz, ben ne yapıyorum? 208 00:10:43,140 --> 00:10:45,110 Eh, ben beş atıyorum kutuda, doğru. 209 00:10:45,110 --> 00:10:48,670 Bu ise, oldukça basittir Ben int k, k denilen bir kutu oluşturmak söylüyorlar. 210 00:10:48,670 --> 00:10:52,040 Eğer ben, k 5 eşittir demek kutunun içine beş koyun. 211 00:10:52,040 --> 00:10:53,865 Umarım bu bir sıçrama çok fazla değil. 212 00:10:53,865 --> 00:10:55,990 Şeyler nereye İşte gerçi ilginç küçük. 213 00:10:55,990 --> 00:11:02,590 Ben int * pk derseniz, iyi bilmiyorum bile bu mutlaka ne demek biliyor, 214 00:11:02,590 --> 00:11:06,150 açıkça bir şey var bir tamsayı ile yapmak. 215 00:11:06,150 --> 00:11:08,211 Yani renk gidiyorum Yeşil-imsi Bu kutu, 216 00:11:08,211 --> 00:11:10,210 Ben bir şey var biliyorum bir tamsayı ile yapmak, 217 00:11:10,210 --> 00:11:13,400 ancak bir tamsayı kendisi değil, bir int yıldızı çünkü. 218 00:11:13,400 --> 00:11:15,390 Bir şey biraz var Bu konuda farklı. 219 00:11:15,390 --> 00:11:17,620 Yani bir tamsayı işin içinde, ama aksi var: 220 00:11:17,620 --> 00:11:19,830 çok farklı değildir ne hakkında konuşuyorduk. 221 00:11:19,830 --> 00:11:24,240 Bu bir kutu, onun, bir etiket var Bir etiket pk giyiyor, 222 00:11:24,240 --> 00:11:27,280 ve holdingin yetenekli Bu ne olursa olsun, int yıldızlı. 223 00:11:27,280 --> 00:11:29,894 Onlar bir şey var tamsayılar ile açıkça. 224 00:11:29,894 --> 00:11:31,060 İşte son satırı olsa var. 225 00:11:31,060 --> 00:11:37,650 Ben dersem pk = & k, dur, Ne sadece doğru, ne oldu? 226 00:11:37,650 --> 00:11:41,820 Yani bu rasgele sayı, rastgele sayı, orada kutunun içine atılan. 227 00:11:41,820 --> 00:11:44,930 Olduğunu Tüm pk olduğunu k adresini alır. 228 00:11:44,930 --> 00:11:52,867 K bellekte yaşadığı Yani yapışmasını ediyorum onun adresini kendi bayt adresi. 229 00:11:52,867 --> 00:11:55,200 Ben yapıyorum Tüm diyorum olduğunu bu değer ben gidiyorum ne 230 00:11:55,200 --> 00:11:59,430 Benim kutu olarak adlandırılan pk içine koymak için. 231 00:11:59,430 --> 00:12:02,080 Ve bunlar, çünkü işaretçiler ve seyir çünkü 232 00:12:02,080 --> 00:12:04,955 Sıfır x gibi bir dizge Sekiz sıfır c yedi dört ila sekiz 233 00:12:04,955 --> 00:12:07,790 İki sıfır muhtemelen çok anlamlı değil. 234 00:12:07,790 --> 00:12:12,390 Biz genellikle işaretçiler görselleştirmek zaman, biz aslında işaretçiler olarak bunu. 235 00:12:12,390 --> 00:12:17,000 Tr bize bilgi verir Biz bellekte k bulmalıyız. 236 00:12:17,000 --> 00:12:19,120 Yani temelde pk içinde bir ok vardır. 237 00:12:19,120 --> 00:12:21,670 Ve biz uzunluğu yürümek O ok, hayal 238 00:12:21,670 --> 00:12:25,280 Eğer üzerinde yürüyebilir şey, biz ise ok uzunluğu boyunca yürümek, 239 00:12:25,280 --> 00:12:29,490 Bu okun çok ucunda, biz bellekte yer bulacaksınız 240 00:12:29,490 --> 00:12:31,390 Nerede k yaşıyor. 241 00:12:31,390 --> 00:12:34,360 Ve bu gerçekten önemli k nerede yaşadığını bildiğimiz çünkü bir kez, 242 00:12:34,360 --> 00:12:37,870 Biz verilerle çalışmak başlayabilirsiniz bellek konumu içinde. 243 00:12:37,870 --> 00:12:40,780 Biz ufacık alıyoruz rağmen Şimdilik öncesinde kendimizi ısırdı. 244 00:12:40,780 --> 00:12:42,240 >> Yani bir işaretçi nedir? 245 00:12:42,240 --> 00:12:45,590 Bir gösterici olan bir veri öğesi olduğunu değer bir bellek adresidir. 246 00:12:45,590 --> 00:12:49,740 That was sıfır x sekiz sıfır şeyler olduğunu oluyor, bu bir bellek adresi oldu. 247 00:12:49,740 --> 00:12:52,060 Bu bellekte bir yer oldu. 248 00:12:52,060 --> 00:12:55,080 Ve bir işaretçi türü tür açıklar 249 00:12:55,080 --> 00:12:56,930 Verilerin en bulacaksınız bellek adresi. 250 00:12:56,930 --> 00:12:58,810 Yani int yıldız kısmı sağ var. 251 00:12:58,810 --> 00:13:03,690 O oku takip ederse, bu kadar bir yerde bana yol gidiyor. 252 00:13:03,690 --> 00:13:06,980 Ve bu konum, ne Benim örnekte orada bulacaksınız, 253 00:13:06,980 --> 00:13:08,240 yeşil renkli kutu. 254 00:13:08,240 --> 00:13:12,650 O ne var, bir tamsayı var ben Ben o adrese giderseniz bulacaksınız. 255 00:13:12,650 --> 00:13:14,830 Bir veri türü pointer ne anlatır 256 00:13:14,830 --> 00:13:17,936 O bellek adresinde bulabilirsiniz. 257 00:13:17,936 --> 00:13:19,560 Yani burada olsa gerçekten harika bir şey. 258 00:13:19,560 --> 00:13:25,090 Göstericiler bizi geçmesine izin fonksiyonlar arasındaki değişkenleri. 259 00:13:25,090 --> 00:13:28,520 Ve aslında değişkenleri geçmesi ve bunların kopyalarını geçemiyor. 260 00:13:28,520 --> 00:13:32,879 Bildiğimiz Çünkü eğer tam olarak nerede bellekte bir değişkeni bulmak için, 261 00:13:32,879 --> 00:13:35,670 Biz bir kopyasını yapmak gerekmez o, biz sadece bu konuma gidebilir 262 00:13:35,670 --> 00:13:37,844 ve bu değişken ile çalışmak. 263 00:13:37,844 --> 00:13:40,260 Özü işaretçileri Yani sıralama Bir bilgisayar ortamı yapmak 264 00:13:40,260 --> 00:13:42,360 çok daha gerçek dünya gibi, doğru. 265 00:13:42,360 --> 00:13:44,640 >> Yani burada bir benzetme var. 266 00:13:44,640 --> 00:13:48,080 Diyelim ki bir defter var diyelim, Doğru ve notlar dolu. 267 00:13:48,080 --> 00:13:50,230 Ve ben bunu güncellemek istiyorum. 268 00:13:50,230 --> 00:13:53,960 Sen bir fonksiyonu olduğunu güncellemeler notlar, doğru. 269 00:13:53,960 --> 00:13:56,390 Bu arada biz oldum Şimdiye kadar çalışan ne 270 00:13:56,390 --> 00:14:02,370 sen benim dizüstü alacak olan olur, Eğer kopya mağazaya gidersiniz 271 00:14:02,370 --> 00:14:06,410 Eğer bir Xerox kopyasını yapacağız Defterin her sayfası. 272 00:14:06,410 --> 00:14:09,790 Sen geri dizüstü bırakacağım masamın üzerinde işiniz bittiğinde, 273 00:14:09,790 --> 00:14:14,600 Gidip bir şeyler dışarı çapraz olacak benim tarih ya da yanlış dışında notebook, 274 00:14:14,600 --> 00:14:19,280 ve sonra geri geçeceğiz Bana Xerox sayfalarının yığını 275 00:14:19,280 --> 00:14:22,850 bu benim dizüstü bir kopyası ile bunu yaptığınız değişiklikler. 276 00:14:22,850 --> 00:14:27,040 Ve bu noktada, bu bana kalmış Çağıran fonksiyon, arayan olarak, 277 00:14:27,040 --> 00:14:30,582 notlarınızı almaya karar ve Benim notebook içine geri entegre. 278 00:14:30,582 --> 00:14:32,540 Yani adımlar bir çok şey var Burada yer alan, doğru. 279 00:14:32,540 --> 00:14:34,850 Gibi daha iyi olmaz Ben sadece derseniz, hey, sen can 280 00:14:34,850 --> 00:14:38,370 benim dizüstü güncelleme Bana, sen benim dizüstü el 281 00:14:38,370 --> 00:14:40,440 ve şeyler almak ve kelimenin tam anlamıyla onları geçmek 282 00:14:40,440 --> 00:14:42,810 ve benim dizüstü benim notları güncelleyin. 283 00:14:42,810 --> 00:14:45,140 Ve sonra bana dizüstü geri ver. 284 00:14:45,140 --> 00:14:47,320 Bu tür ne işaretçileri, yapmamızı sağlayacak 285 00:14:47,320 --> 00:14:51,320 bu ortamda çok yapmak biz gerçekte nasıl işlediği gibi daha fazla. 286 00:14:51,320 --> 00:14:54,640 >> Böylece Pekala ne var Bir gösterici, konuşalım olduğunu 287 00:14:54,640 --> 00:14:58,040 işaretçileri C çalışmak ve nasıl nasıl onlarla çalışmak başlayabilirsiniz. 288 00:14:58,040 --> 00:15:02,550 Yani çok basit bir işaretçi var C null işaretçi çağırdı. 289 00:15:02,550 --> 00:15:04,830 Hiçbir şey boş gösterici noktaları. 290 00:15:04,830 --> 00:15:08,310 Bu gibi bu muhtemelen görünüyor aslında çok yararlı bir şey, 291 00:15:08,310 --> 00:15:10,500 ama biz göreceğimiz gibi Daha sonra küçük, aslında 292 00:15:10,500 --> 00:15:15,410 Bu boş göstericidir varolduğunu aslında gerçekten kullanışlı gelebilir. 293 00:15:15,410 --> 00:15:19,090 Ve bir işaretçi oluşturmak zaman ve Eğer değeri immediately- set yok 294 00:15:19,090 --> 00:15:21,060 ayarları için bir örnek değeri hemen 295 00:15:21,060 --> 00:15:25,401 Geri birkaç slaytlar olacak I, pk ve k eşittir, burada bahsedilen 296 00:15:25,401 --> 00:15:28,740 pk olarak, k adresini alır Biz bunun ne anlama geldiğini görürsünüz 297 00:15:28,740 --> 00:15:32,990 biz kod nasıl göreceksiniz shortly- Biz bir şey onun değerini ayarlayın yoksa 298 00:15:32,990 --> 00:15:35,380 Hemen anlamlı, Her zaman gerekir 299 00:15:35,380 --> 00:15:37,480 null noktasına işaretçinizi ayarlayın. 300 00:15:37,480 --> 00:15:40,260 Sen hiçbir şey işaret etmek ayarlamanız gerekir. 301 00:15:40,260 --> 00:15:43,614 >> Bu çok farklı olduğunu olduğu gibi, sadece değeri bırakarak 302 00:15:43,614 --> 00:15:45,530 ve daha sonra bir ilan işaretçi ve sadece varsayarak 303 00:15:45,530 --> 00:15:48,042 Bu nadiren doğru çünkü boş olduğunu. 304 00:15:48,042 --> 00:15:50,000 Yani hep ayarlamanız gerekir bir işaretçi değeri 305 00:15:50,000 --> 00:15:55,690 onun değerini yoksa null Hemen anlamlı bir şey. 306 00:15:55,690 --> 00:15:59,090 Sen kontrol edebilirsiniz işaretçinin değeri olup olmadığını eşitlik operatörü kullanılarak null 307 00:15:59,090 --> 00:16:05,450 (==), Sadece herhangi bir tamsayı karşılaştırmak gibi değerler veya karakter değerleri kullanarak (==) 308 00:16:05,450 --> 00:16:06,320 de. 309 00:16:06,320 --> 00:16:10,994 Bu sabit özel bir tür olduğunu Eğer test etmek için kullanabileceğiniz bir değer. 310 00:16:10,994 --> 00:16:13,160 Yani çok basit oldu pointer null işaretçi. 311 00:16:13,160 --> 00:16:15,320 Başka bir yol oluşturmak için Bir gösterici ayıklamak için 312 00:16:15,320 --> 00:16:18,240 Bir değişkenin adresi Zaten yarattık, 313 00:16:18,240 --> 00:16:22,330 ve & bu kullanarak bunu Operatör adres çıkarma. 314 00:16:22,330 --> 00:16:26,720 Hangi biz zaten daha önce gördüm İlk diyagram örnekte ben gösterdi. 315 00:16:26,720 --> 00:16:31,450 X biz ettik değişken Yani eğer Zaten tipi tamsayı oluşturulan 316 00:16:31,450 --> 00:16:35,110 Daha sonra ve x bir tamsayı bir göstericidir. 317 00:16:35,110 --> 00:16:39,810 & x iskemik, & ayıklamak için gidiyor hatırlıyorum Sağdaki şey adresi. 318 00:16:39,810 --> 00:16:45,350 Ve bir işaretçi sadece bir adres olduğundan, daha & x bir tamsayı bir göstericidir 319 00:16:45,350 --> 00:16:48,560 kimin değeri nerede hafıza x hayatımızda olduğunu. 320 00:16:48,560 --> 00:16:50,460 Bu x adresi. 321 00:16:50,460 --> 00:16:53,296 Yani & x x adresidir. 322 00:16:53,296 --> 00:16:55,670 Şimdi bu bir adım atalım Daha fazla ve bir şey bağlanın 323 00:16:55,670 --> 00:16:58,380 Ben bir önceki video ima. 324 00:16:58,380 --> 00:17:06,730 Arr çiftler bir dizi daha sonra ise & arr köşeli ayraç i göstericidir 325 00:17:06,730 --> 00:17:08,109 Bir çift için. 326 00:17:08,109 --> 00:17:08,970 TAMAM. 327 00:17:08,970 --> 00:17:12,160 Ben, eğer köşeli ayraç arr arr, çiftler bir dizidir 328 00:17:12,160 --> 00:17:19,069 Daha sonra i köşeli ayraç arr bu dizi i'nci elementi, 329 00:17:19,069 --> 00:17:29,270 ve & köşeli ayraç arr i nerede olduğunu Hafıza arr i-inci elemanı vardır. 330 00:17:29,270 --> 00:17:31,790 >> Yani ima burada ne var? 331 00:17:31,790 --> 00:17:34,570 Bir diziler isim, ima Bütün bu şey, 332 00:17:34,570 --> 00:17:39,290 Bir dizinin adı olduğunu Aslında kendisi bir işaretçi. 333 00:17:39,290 --> 00:17:41,170 Sen çalışıyoruz boyunca işaretçiler 334 00:17:41,170 --> 00:17:45,290 Bir dizi kullandım her zaman. 335 00:17:45,290 --> 00:17:49,090 Örnekten Ol Değişken kapsamı, 336 00:17:49,090 --> 00:17:53,420 Ben sunmak videonun sonuna doğru bir işlevi vardır bir örnek 337 00:17:53,420 --> 00:17:56,890 denilen set int ve fonksiyon seti dizi denir. 338 00:17:56,890 --> 00:18:00,490 Ve meydan belirlemek için olup olmadığını, ya da ne 339 00:18:00,490 --> 00:18:03,220 biz baskılı değerler fonksiyon sonunda, 340 00:18:03,220 --> 00:18:05,960 Ana programın sonunda. 341 00:18:05,960 --> 00:18:08,740 >> O örnekte hatırlayacak olursak veya video izledim eğer, 342 00:18:08,740 --> 00:18:13,080 Eğer çağrısını sen- zaman olduğunu biliyorum set int etkin bir şey yapmaz. 343 00:18:13,080 --> 00:18:16,390 Ama çağrı dizisi yapar ayarlamak için. 344 00:18:16,390 --> 00:18:19,280 Ve ben bir çeşit neden geçiştirilmiştir o zaman böyleydi. 345 00:18:19,280 --> 00:18:22,363 Ben sadece iyi o, bir dizi olduğunu var, dedi Özel, bilirsin, bir sebebi var. 346 00:18:22,363 --> 00:18:25,020 Bunun nedeni bir dizi en olduğunu isim, gerçekten sadece bir işaretçi 347 00:18:25,020 --> 00:18:28,740 ve bu özel var köşeli ayraç sözdizimi o 348 00:18:28,740 --> 00:18:30,510 çalışmak şeyler çok güzel yapmak. 349 00:18:30,510 --> 00:18:34,410 Ve onlar fikrini yapmak çok daha az korkutucu işaretçisi, 350 00:18:34,410 --> 00:18:36,800 onlar sıralama olmamızın sebebi ve işte bu şekilde sundu. 351 00:18:36,800 --> 00:18:38,600 Ama gerçekten diziler sadece değineği vardır. 352 00:18:38,600 --> 00:18:41,580 Ve bu yüzden ne zaman biz , diziye bir değişiklik yaptı 353 00:18:41,580 --> 00:18:44,880 Biz parametre olarak bir dizi geçtiğinde bir işleve veya bir argüman olarak 354 00:18:44,880 --> 00:18:50,110 dizinin bir fonksiyonu, içeriği Aslında her iki Aranan değişti 355 00:18:50,110 --> 00:18:51,160 ve arayanı. 356 00:18:51,160 --> 00:18:55,846 Diğer her türlü için hangi Gördüğümüz değişken durum böyle değildi. 357 00:18:55,846 --> 00:18:58,970 Böylece tutmak için sadece bir şey var Eğer işaretçileri ile çalışırken mind, 358 00:18:58,970 --> 00:19:01,610 olduğu bir ismi Dizi aslında bir işaretçi 359 00:19:01,610 --> 00:19:04,750 Bu dizinin ilk elemana. 360 00:19:04,750 --> 00:19:08,930 >> Tamam şimdi biz bütün bu var gerçekler, haklı, devam edelim. 361 00:19:08,930 --> 00:19:11,370 Neden umurumda mı nerede bir şey yaşıyor. 362 00:19:11,370 --> 00:19:14,120 Dediğim Şey gibi, oldukça var bir şey nerede yaşadığını bilmek yararlıdır 363 00:19:14,120 --> 00:19:17,240 bu yüzden oraya gitmek ve değiştirebilirsiniz. 364 00:19:17,240 --> 00:19:19,390 Onunla çalışmak ve aslında şey var sizi 365 00:19:19,390 --> 00:19:23,710 Bu değişken almak etkisi yapmak istiyorum, ve bunun bazı kopyası üzerinde etkili değildir. 366 00:19:23,710 --> 00:19:26,150 Bu dereferencing olarak adlandırılır. 367 00:19:26,150 --> 00:19:28,690 Biz referans gidip Biz orada değeri değiştirin. 368 00:19:28,690 --> 00:19:32,660 Biz bir işaretçi varsa ve bu yüzden denir pc ve bir karaktere işaret, 369 00:19:32,660 --> 00:19:40,610 o zaman biz * pc ve pc * olduğunu söyleyebiliriz Biz gidersek biz ne bulacaksınız adı 370 00:19:40,610 --> 00:19:42,910 adres pc. 371 00:19:42,910 --> 00:19:47,860 Ne var bulacaksınız bir karakterdir ve * pc biz de verilere bakın nasıl 372 00:19:47,860 --> 00:19:48,880 Konumu. 373 00:19:48,880 --> 00:19:54,150 Yani biz gibi bir şey diyebiliriz * pc = D veya böyle bir şey, 374 00:19:54,150 --> 00:19:59,280 ve o ne demekse bellek adresi pc oldu 375 00:19:59,280 --> 00:20:07,040 ne olursa olsun karakter önce oldu Biz pc = D * söylüyorlar eğer orada, şimdi D. 376 00:20:07,040 --> 00:20:10,090 >> Yani burada biz tekrar gitmek Bazı garip şeyler C, doğru. 377 00:20:10,090 --> 00:20:14,560 Yani biz olarak önceden * gördüm nasılsa veri türünün bir parçası, 378 00:20:14,560 --> 00:20:17,160 ve şimdi kullanılan ediliyor biraz daha farklı bir içerik 379 00:20:17,160 --> 00:20:19,605 bir yerde verilere erişmek için. 380 00:20:19,605 --> 00:20:22,480 Ben biraz kafa karıştırıcı olduğunu biliyorum ve aslında bu bütünün parçası 381 00:20:22,480 --> 00:20:25,740 gibi, neden işaretçiler bu mitoloji var çevrelerindeki çok karmaşık olarak, 382 00:20:25,740 --> 00:20:28,250 dürüst, bir sözdizimi sorunu türüdür. 383 00:20:28,250 --> 00:20:31,810 Ama * Her iki bağlamlarda kullanılır Her iki tip adının bir parçası olarak, 384 00:20:31,810 --> 00:20:34,100 ve biz biraz görürsünüz Çok başka bir şey daha sonra. 385 00:20:34,100 --> 00:20:36,490 Ve şu anda dereference operatörü. 386 00:20:36,490 --> 00:20:38,760 Yani referans gider, bu verilere erişen 387 00:20:38,760 --> 00:20:43,000 işaretçi konumu, at ve irade bunu değiştirmenize olanak verir. 388 00:20:43,000 --> 00:20:45,900 >> Şimdi, bu çok benzer Komşunu ziyaret, doğru. 389 00:20:45,900 --> 00:20:48,710 Eğer biliyorsanız ne Komşu sen, yaşıyor 390 00:20:48,710 --> 00:20:50,730 Komşunuz ile asılı değil. 391 00:20:50,730 --> 00:20:53,510 Sen ne biliyorsun için Yaşadıkları nerede olduğunu biliyor, 392 00:20:53,510 --> 00:20:56,870 ama bu kadar anlamına gelmez Bu bilgiye sahip erdemi 393 00:20:56,870 --> 00:20:59,170 Eğer onlarla etkileşim vardır. 394 00:20:59,170 --> 00:21:01,920 Eğer onlarla etkileşim istiyorsanız, Eğer, evlerine gitmek zorunda 395 00:21:01,920 --> 00:21:03,760 Onların yaşadıkları yere gitmek zorunda. 396 00:21:03,760 --> 00:21:07,440 Ve bunu bir kez, o zaman etkileşime girebilir 397 00:21:07,440 --> 00:21:09,420 Onlarla sadece isterdi gibi. 398 00:21:09,420 --> 00:21:12,730 Ve benzer değişkenlerle, onların adrese gitmek gerekir 399 00:21:12,730 --> 00:21:15,320 Bunları etkileşim istiyorsanız, Sadece adresini bilmiyor olabilir. 400 00:21:15,320 --> 00:21:21,495 Ve adrese gitmek yoludur *, inceleyebilirsiniz operatörünü kullanın. 401 00:21:21,495 --> 00:21:23,620 Sen olur ne düşünüyorsunuz biz denemek ve eğer inceleyebilirsiniz 402 00:21:23,620 --> 00:21:25,260 , değeri bir işaretçi null? 403 00:21:25,260 --> 00:21:28,470 Boş olduğunu hatırlayın işaretçi hiçbir işaret eder. 404 00:21:28,470 --> 00:21:34,110 Denemek ve inceleyebilirsiniz eğer öyleyse hiçbir şey bir adres şey gitmek veya 405 00:21:34,110 --> 00:21:36,800 Eğer olur ne düşünüyorsunuz? 406 00:21:36,800 --> 00:21:39,630 Peki tahmin edersem segmentasyon Fay, haklı olurdunuz. 407 00:21:39,630 --> 00:21:41,390 Eğer denemek ve inceleyebilirsiniz Eğer bir boş gösterici, 408 00:21:41,390 --> 00:21:43,140 Bir segmentasyon acı arıza. Ama bekle, 409 00:21:43,140 --> 00:21:45,820 Ben, sana söylemedim Eğer gidiyoruz değil 410 00:21:45,820 --> 00:21:49,220 sizin değerini ayarlamak için sizin Anlamlı bir şey işaretçisi, 411 00:21:49,220 --> 00:21:51,000 null ayarlamanız gerekir? 412 00:21:51,000 --> 00:21:55,290 Ben yaptım ve aslında segmentasyon Arıza iyi davranış türüdür. 413 00:21:55,290 --> 00:21:58,680 >> Hiç bir değişken ilan ve var Hemen değerini atanmamış? 414 00:21:58,680 --> 00:22:02,680 Yani sadece int x söylüyorlar; Bunu yapmazsanız Aslında bir şey atamak 415 00:22:02,680 --> 00:22:05,340 ve daha sonra da kodunuzu, Eğer, x değerini yazdırmak 416 00:22:05,340 --> 00:22:07,650 hala sahip bir şey onu atadı. 417 00:22:07,650 --> 00:22:10,370 Sık alırsınız sıfır, ama bazen 418 00:22:10,370 --> 00:22:15,000 bazı rasgele numara almak ve belki Eğer gelen hiçbir fikrim yok. 419 00:22:15,000 --> 00:22:16,750 Benzer şeyler yapabilirsiniz işaretçileri ile olur. 420 00:22:16,750 --> 00:22:20,110 Bir işaretçi bildirdiğinizde int * Örneğin pk, 421 00:22:20,110 --> 00:22:23,490 ve sen bir değere atamak yok Eğer bellek için dört bayt olsun. 422 00:22:23,490 --> 00:22:25,950 Ne olursa olsun dört bayt Sistem belleği can 423 00:22:25,950 --> 00:22:28,970 bazı anlamlı değere sahip olduğunu bulmak. 424 00:22:28,970 --> 00:22:31,760 Ve orada olabilirdi zaten orada bir şeyin 425 00:22:31,760 --> 00:22:34,190 Başka gerekli artık bir fonksiyon, sadece var ve bu yüzden 426 00:22:34,190 --> 00:22:35,900 ne veri yoktu. 427 00:22:35,900 --> 00:22:40,570 >> Ne dereference yapmaya çalıştım eğer Sen orada don't- bazı adres 428 00:22:40,570 --> 00:22:43,410 Zaten bayt ve bilgiler Orada, o senin işaretçi artık var. 429 00:22:43,410 --> 00:22:47,470 , Sen çalışırsanız ve bu işaretçi inceleyebilirsiniz Bazı bellek ile karıştırmasını olabilir 430 00:22:47,470 --> 00:22:49,390 Eğer niyetinde olmadığını hepsi ile karışıklık. 431 00:22:49,390 --> 00:22:51,639 Ve aslında sen yapabilirsin Gerçekten yıkıcı bir şey, 432 00:22:51,639 --> 00:22:54,880 gibi başka bir programı kırmak, ya da başka bir işlev kırmak 433 00:22:54,880 --> 00:22:58,289 ya da kötü niyetli bir şey yapmak Eğer hiç yapmak niyetinde değildi. 434 00:22:58,289 --> 00:23:00,080 O yüzden Ve böylece var aslında iyi bir fikir 435 00:23:00,080 --> 00:23:04,030 eğer null olarak sizin işaretçiler ayarlamak için Anlamlı bir şey bunları ayarlamanız gerekmez. 436 00:23:04,030 --> 00:23:06,760 Bu muhtemelen daha iyi Programınızın için günün sonu 437 00:23:06,760 --> 00:23:09,840 bunu yapmak için daha sonra çökmesine şey bu kadar vida 438 00:23:09,840 --> 00:23:12,400 Başka bir program veya başka bir işlev. 439 00:23:12,400 --> 00:23:15,207 Bu davranış, hatta muhtemelen Sadece çökmesini daha az ideal bir. 440 00:23:15,207 --> 00:23:17,040 O yüzden Ve böylece var Aslında iyi bir alışkanlıktır 441 00:23:17,040 --> 00:23:20,920 senin işaretçileri ayarlamak için içine almak için Eğer bunları yapmazsanız null 442 00:23:20,920 --> 00:23:24,540 anlamlı bir değere Bildiğiniz hemen bir değer 443 00:23:24,540 --> 00:23:27,260 ve size inceleyebilirsiniz güvenle yapabilirsiniz. 444 00:23:27,260 --> 00:23:32,240 >> Yani şimdi geri gelmesine izin ve bir göz atın durumun genel sözdizimi de. 445 00:23:32,240 --> 00:23:37,400 Ben int * p diyorsanız ;, ben sadece ne yaptım? 446 00:23:37,400 --> 00:23:38,530 Ne yaptık bu. 447 00:23:38,530 --> 00:23:43,290 Ben p değeri bir adres olduğunu biliyorum tüm işaretçiler sadece çünkü 448 00:23:43,290 --> 00:23:44,660 adresleri. 449 00:23:44,660 --> 00:23:47,750 I can dereference p * operatörü kullanılarak. 450 00:23:47,750 --> 00:23:51,250 Çok burada Bu bağlamda, Üst * Çeşidi parçasıdır hatırlamak. 451 00:23:51,250 --> 00:23:53,510 Int * veri türüdür. 452 00:23:53,510 --> 00:23:56,150 Ama ben inceleyebilirsiniz can * operatörü kullanılarak p 453 00:23:56,150 --> 00:24:01,897 ve ben bunu yaparsanız, o adrese gitmek, Ben bu adreste bulacaksınız olacak? 454 00:24:01,897 --> 00:24:02,855 Ben bir tamsayı bulacaksınız. 455 00:24:02,855 --> 00:24:05,910 Yani int * p temelde diyerek, p bir adres. 456 00:24:05,910 --> 00:24:09,500 I can p inceleyebilirsiniz ve eğer Yapmam, ben bir tamsayı bulabilirsiniz 457 00:24:09,500 --> 00:24:11,920 bellek konumunda. 458 00:24:11,920 --> 00:24:14,260 >> Tamam bu yüzden başka olduğunu söyledi yıldız ile can sıkıcı şey 459 00:24:14,260 --> 00:24:17,060 ve burada orası yıldız ile can sıkıcı bir şeydir. 460 00:24:17,060 --> 00:24:21,640 Hiç beyan denediniz Aynı türden birden çok değişken 461 00:24:21,640 --> 00:24:24,409 kod aynı satırda? 462 00:24:24,409 --> 00:24:27,700 Yani bir saniye, bu hat iddia Aslında yeşil orada var kod 463 00:24:27,700 --> 00:24:29,366 yok ve sadece int x, y, z der ;. 464 00:24:29,366 --> 00:24:31,634 465 00:24:31,634 --> 00:24:34,550 Bu ne yapardı aslında oluşturmak olduğunu sizin için üç tamsayı değişkenler, 466 00:24:34,550 --> 00:24:36,930 biri olarak adlandırılan x tek adlandırılan y ve z adı, bir. 467 00:24:36,930 --> 00:24:41,510 Bu olmadan bunu yapmak için bir yol var üç satır üzerine bölmek zorunda. 468 00:24:41,510 --> 00:24:43,890 >> Yıldız nereden İşte Tekrar olsa can sıkıcı, 469 00:24:43,890 --> 00:24:49,200 * aslında bir parçası olduğu için hem tip adı ve parçanın 470 00:24:49,200 --> 00:24:50,320 değişken adı. 471 00:24:50,320 --> 00:24:56,430 Ve bu yüzden diyorum eğer int * px, py, pz, ne Aslında olsun bir tamsayı bir göstericidir 472 00:24:56,430 --> 00:25:01,650 px ve iki tamsayılar, py ve pz denir. 473 00:25:01,650 --> 00:25:04,950 Ve muhtemelen değil ne var biz bu iyi değil, istiyorum. 474 00:25:04,950 --> 00:25:09,290 >> Birden işaretçiler oluşturmak istiyorsanız Yani Aynı hat üzerinde, aynı tipte, 475 00:25:09,290 --> 00:25:12,140 Aslında ne gerek ve yıldız, yapmak * pb, * pc, int * pa söylüyorlar. 476 00:25:12,140 --> 00:25:17,330 477 00:25:17,330 --> 00:25:20,300 Şimdi sadece söyledikten ve şimdi, sana söylüyorum 478 00:25:20,300 --> 00:25:22,170 muhtemelen bunu asla. 479 00:25:22,170 --> 00:25:25,170 Ve, dürüstçe muhtemelen iyi bir şey var Eğer yanlışlıkla olabilir çünkü 480 00:25:25,170 --> 00:25:26,544 Bir yıldız, böyle bir şey yok sayın. 481 00:25:26,544 --> 00:25:29,290 Belki beyan muhtemelen en iyi Bireysel hatlarda işaretçileri, 482 00:25:29,290 --> 00:25:31,373 ama sadece bir tane var bu can sıkıcı sözdizimi 483 00:25:31,373 --> 00:25:35,310 yapmak yıldızlarla şeyler çalışmak çok zor işaretçileri. 484 00:25:35,310 --> 00:25:39,480 Sadece bu sözdizimsel Çünkü karışıklık Üzerinden çalışmak zorunda. 485 00:25:39,480 --> 00:25:41,600 Uygulama ile öyle Gerçekten ikinci doğa haline gelir. 486 00:25:41,600 --> 00:25:45,410 Hala hala onunla hata yapabilir 10 yıl programlamadan sonra, 487 00:25:45,410 --> 00:25:49,630 bir şey olursa çok üzgün olmayın Size, dürüst oldukça yaygındır. 488 00:25:49,630 --> 00:25:52,850 Bu tür gerçekten sözdizimi bir kusur. 489 00:25:52,850 --> 00:25:54,900 >> Tamam ben tür söz biz tekrar olacağını 490 00:25:54,900 --> 00:25:59,370 ne kadar büyük kavramı bir dizedir. 491 00:25:59,370 --> 00:26:02,750 Peki ben bir söyleseydim Dize, biz tür gerçekten ettik 492 00:26:02,750 --> 00:26:04,140 Size bütün zaman yalan. 493 00:26:04,140 --> 00:26:06,181 Diye bir veri tipi var dizisi, ve aslında 494 00:26:06,181 --> 00:26:09,730 birinde bu sözü bizim veri türleri üzerinde erken videolar, 495 00:26:09,730 --> 00:26:13,820 Bu dize veri türü olduğunu CS50.h. sizin için yaratıldı 496 00:26:13,820 --> 00:26:17,050 Sen #include zorunda Kullanmak amacıyla CS50.h. 497 00:26:17,050 --> 00:26:19,250 >> Peki dize sadece gerçekten bir şey için bir takma ad 498 00:26:19,250 --> 00:26:23,600 char * olarak adlandırılan Bir karaktere işaretçisi. 499 00:26:23,600 --> 00:26:26,010 Peki göstericiler, hatırlama, Sadece adresleri vardır. 500 00:26:26,010 --> 00:26:28,780 Yani boyutu nedir bir dize bayt? 501 00:26:28,780 --> 00:26:29,796 Peki dört veya sekiz. 502 00:26:29,796 --> 00:26:32,170 Ve neden diyorum dört veya Sekiz bunun nedeni aslında 503 00:26:32,170 --> 00:26:36,730 Eğer kullanıyorsanız, sisteme bağlıdır CS50 ide, char * char büyüklüğünde 504 00:26:36,730 --> 00:26:39,340 * Bir 64-bit sistem var, sekiz. 505 00:26:39,340 --> 00:26:43,850 Bellekteki her adres 64 bit uzunluğundadır. 506 00:26:43,850 --> 00:26:48,270 Eğer CS50 cihazı kullanırken ediyorsanız veya herhangi bir 32-bit makine kullanarak, 507 00:26:48,270 --> 00:26:51,640 ve o dönem 32-bit duydum Makine, 32-bit makine nedir? 508 00:26:51,640 --> 00:26:56,090 Peki bu sadece her demektir bellek adres 32 bit uzunluğundadır. 509 00:26:56,090 --> 00:26:59,140 Ve böylece 32 bit dört bayt. 510 00:26:59,140 --> 00:27:02,710 Yani bir char * dört veya sekiz sisteminize bağlı olarak bayt. 511 00:27:02,710 --> 00:27:06,100 Ve gerçekten herhangi bir veri tipleri, ve herhangi bir veri işaretçisi 512 00:27:06,100 --> 00:27:12,030 tüm işaretçiler sadece beri yazın adresleri, dört veya sekiz bayt. 513 00:27:12,030 --> 00:27:14,030 Yani bu dönelim şeması ve en sonuçlandırmak edelim 514 00:27:14,030 --> 00:27:18,130 Burada küçük bir egzersiz ile bu videonun. 515 00:27:18,130 --> 00:27:21,600 Yani burada biz bıraktığımız diyagram Videonun başında. 516 00:27:21,600 --> 00:27:23,110 Ben * pk = 35 derseniz Peki şimdi ne olacak? 517 00:27:23,110 --> 00:27:26,370 518 00:27:26,370 --> 00:27:30,530 Bu yüzden * pk = 35, dediğim zaman ne demek? 519 00:27:30,530 --> 00:27:32,420 Bir saniye sürer. 520 00:27:32,420 --> 00:27:34,990 * pk. 521 00:27:34,990 --> 00:27:39,890 Burada kapsamda, * bir dereference operatörü. 522 00:27:39,890 --> 00:27:42,110 Peki ne zaman inceleyebilirsiniz Operatör, kullanılan 523 00:27:42,110 --> 00:27:48,520 Adres işaret biz gitmek pk tarafından ve biz ne bulmak değiştirin. 524 00:27:48,520 --> 00:27:55,270 Yani * pk = 35 etkin bir resim yapar. 525 00:27:55,270 --> 00:27:58,110 Yani sözdizimsel temelde ve aynı k = 35 söyledikten. 526 00:27:58,110 --> 00:28:00,740 527 00:28:00,740 --> 00:28:01,930 >> Bir tane daha. 528 00:28:01,930 --> 00:28:05,510 Ben int m dersem, ben oluşturmak m adlı yeni bir değişken. 529 00:28:05,510 --> 00:28:08,260 Yeni bir kutu, yeşil bir kutu nedeni var bir tamsayı tutmak için gidiyor, 530 00:28:08,260 --> 00:28:09,840 ve m etiketli oluyor. 531 00:28:09,840 --> 00:28:14,960 Ben m = 4 derseniz, ben bir koyun O kutunun içine tamsayı. 532 00:28:14,960 --> 00:28:20,290 Diyelim ki pk = & m, nasıl yaparsa Bu diyagram değişikliği? 533 00:28:20,290 --> 00:28:28,760 Tr = & m, ne hatırlamak yapmak & Operatör yapar veya denir? 534 00:28:28,760 --> 00:28:34,430 Bu ve bazı değişken adı hatırla bir değişken adı adresidir. 535 00:28:34,430 --> 00:28:38,740 Peki ne söylüyorsun olduğunu pk m adresini alır. 536 00:28:38,740 --> 00:28:42,010 Ve o kadar etkili ne olur şeması bu artık noktaları PK 537 00:28:42,010 --> 00:28:46,420 m, ama puan k. 538 00:28:46,420 --> 00:28:48,470 >> Yine işaretçiler çok vardır çalışmak zor 539 00:28:48,470 --> 00:28:50,620 ve onlar bir sürü almak uygulama, ancak çünkü 540 00:28:50,620 --> 00:28:54,150 için izin vermek için yetenekleri fonksiyonlar arasında veri aktarmak için 541 00:28:54,150 --> 00:28:56,945 ve aslında bu var Değişikliklerin etkili, 542 00:28:56,945 --> 00:28:58,820 etrafında başını almak gerçekten çok önemli. 543 00:28:58,820 --> 00:29:02,590 Muhtemelen en karmaşık Biz CS50 tartışmak konu, 544 00:29:02,590 --> 00:29:05,910 ancak değer olduğunu işaretçiler kullanarak elde 545 00:29:05,910 --> 00:29:09,200 çok komplikasyon outweighs onları öğrenmeye geliyor. 546 00:29:09,200 --> 00:29:12,690 O yüzden sana diliyorum şans işaretçileri hakkında öğrenme. 547 00:29:12,690 --> 00:29:15,760 Ben Doug Lloyd değilim, bu CS50 olduğunu. 548 00:29:15,760 --> 00:29:17,447