1 00:00:00,000 --> 00:00:02,395 >> [MÜZİK OYUN] 2 00:00:02,395 --> 00:00:05,750 3 00:00:05,750 --> 00:00:06,506 >> Doug LLOYD: Tamam. 4 00:00:06,506 --> 00:00:08,880 Biz tamsayılar ile çalıştık, Biz karakterler ile çalıştık, 5 00:00:08,880 --> 00:00:11,930 Biz yüzen çalıştık, çiftler, dizeleri ve bool değerlerden oluşan. 6 00:00:11,930 --> 00:00:14,870 Biz hemen tüm tatlı tükettim [duyulamaz] türlerinden olduğunu 7 00:00:14,870 --> 00:00:17,100 birlikte hepimiz için geçerli olmuştur. 8 00:00:17,100 --> 00:00:19,430 Ama şimdi daha çok şey yapmak istiyorum. 9 00:00:19,430 --> 00:00:20,210 Biz nasıl yapacağız? 10 00:00:20,210 --> 00:00:22,560 Nasıl farklı veri türlerini oluşturabilirim? 11 00:00:22,560 --> 00:00:26,130 Biz yapılarını kullanarak bunu yapabilirsiniz. 12 00:00:26,130 --> 00:00:30,180 Yani yapıları bizi birleştirmeye izin farklı değişkenleri 13 00:00:30,180 --> 00:00:34,810 Tek, yeni değişken türü içine hangi biz kendi tip isim atayabilirsiniz. 14 00:00:34,810 --> 00:00:37,570 Bu gerçekten güçlü şey yapmak mümkün 15 00:00:37,570 --> 00:00:40,900 Biz grup şimdi can çünkü Farklı veri türlerinin unsurları 16 00:00:40,900 --> 00:00:43,910 Birlikte mantıksal bir bağlantı var. 17 00:00:43,910 --> 00:00:46,440 Bunu yapmak mümkün oldum tür diziler, değil mi? 18 00:00:46,440 --> 00:00:49,540 Biz can grup değişkenleri Aynı veri türünde 19 00:00:49,540 --> 00:00:53,410 birlikte geniş bir ünitede bellek, bir dizi. 20 00:00:53,410 --> 00:00:56,660 >> Ama biz karıştırmak mümkün olmamıştır Birlikte yukarı farklı veri türleri. 21 00:00:56,660 --> 00:01:02,610 Biz, bir tamsayı çifti, diyemem ve bir karakter ve bir çift tüm 22 00:01:02,610 --> 00:01:05,330 Aynı şey ve tek bir birim olduğunu diyoruz. 23 00:01:05,330 --> 00:01:08,830 Ama olan yapılar, ya da Sık sık, yapılar olarak adlandırılır 24 00:01:08,830 --> 00:01:09,585 biz aslında yapamam. 25 00:01:09,585 --> 00:01:12,370 Yani bir yapı tür süper değişken gibi. 26 00:01:12,370 --> 00:01:16,530 Bu içeren bir değişken Bunun içinde diğer değişkenler. 27 00:01:16,530 --> 00:01:19,650 Yani burada bir örnek çok basit bir yapısı. 28 00:01:19,650 --> 00:01:23,380 Bu sözdizimi bakmak ne Bir araba için bir yapı oluşturmak istiyorum. 29 00:01:23,380 --> 00:01:25,250 Şimdi, burada sözdizimi ile gidelim. 30 00:01:25,250 --> 00:01:27,400 Struct, işte belirten kelime 31 00:01:27,400 --> 00:01:30,270 Burada yeni bir veri türü oluşturma ediyorum. 32 00:01:30,270 --> 00:01:33,860 Özellikle, veri türünün adıdır biz göreceğiz olarak, struct araba olacak. 33 00:01:33,860 --> 00:01:36,640 Ama bu ucun tür derleyici kapalı bu 34 00:01:36,640 --> 00:01:42,440 değişkenlerin bir grup olarak bu oluyor Aynı tip bir parçası olarak kabul edilecek 35 00:01:42,440 --> 00:01:44,010 Bir dakika içinde. 36 00:01:44,010 --> 00:01:46,340 >> Otomobil, yapının sadece adı. 37 00:01:46,340 --> 00:01:50,590 Yine, burada veri türü gidiyor struct araba değil, sadece araba olmak. 38 00:01:50,590 --> 00:01:53,060 Ama different-- varsa Birden yapılar oluşturmak durumunda 39 00:01:53,060 --> 00:01:56,950 Aynı programda, yapmanız gerekenler yapı ve yapı arasındaki farkı. 40 00:01:56,950 --> 00:02:00,140 Yani struct araba, ben de olabilir yapı, öğrenci, örneğin, 41 00:02:00,140 --> 00:02:01,790 Aynı programda. 42 00:02:01,790 --> 00:02:05,980 Kıvırcık parantez içinde bulunan Sözde tüm alanları, 43 00:02:05,980 --> 00:02:07,954 veya yapının üyeleri. 44 00:02:07,954 --> 00:02:10,370 Yani bazı şeyleri nelerdir Bir arabanın doğasında olduğunu? 45 00:02:10,370 --> 00:02:15,270 Eh, genellikle, bir yıl vardır vardır Bir model adı ve plaka, 46 00:02:15,270 --> 00:02:18,000 Genellikle sahip bir kilometre sayacı Üzerinde mil bir sayı, 47 00:02:18,000 --> 00:02:19,225 ve belki de bir motor boyutu. 48 00:02:19,225 --> 00:02:23,570 Gördüğünüz gibi, ben karıştırma ediyorum tamsayılar ve karakterler ve çiftler. 49 00:02:23,570 --> 00:02:26,420 Hepsi olacağız Bu yeni veri türünün bir parçası. 50 00:02:26,420 --> 00:02:29,750 >> Son olarak, son şey yapmam gerekiyor, Bu küçük noktalı virgül unutma 51 00:02:29,750 --> 00:02:30,290 sonunda. 52 00:02:30,290 --> 00:02:34,380 Biz yapısını tanımlayan tamamladıktan sonra, Biz sonunda bir noktalı virgül koymak gerekir. 53 00:02:34,380 --> 00:02:37,325 Bu çok yaygın bir sözdizimsel var: hata, bir işlevle, çünkü 54 00:02:37,325 --> 00:02:40,200 Örneğin, sadece olurdu açık kaşlı ayraç, yakın kaşlı ayraç. 55 00:02:40,200 --> 00:02:42,950 Sen bir noktalı virgül koymayın Bir işlev tanımı sonu. 56 00:02:42,950 --> 00:02:46,430 Bu bir işlev gibi görünüyor tanımı, ama değil, 57 00:02:46,430 --> 00:02:49,653 ve böylece noktalı virgül var Sadece bir hatırlatma olduğunu size 58 00:02:49,653 --> 00:02:52,440 Çünkü, oraya koymak gerekir derleyici değil aksi olacak 59 00:02:52,440 --> 00:02:53,510 onunla ne yapacağını biliyor. 60 00:02:53,510 --> 00:02:56,160 Bu çok yaygın hata var Yanlışlıkla yapmak 61 00:02:56,160 --> 00:02:58,570 ilk ne zaman yapıları tanımlayan ediyoruz. 62 00:02:58,570 --> 00:02:59,500 >> TAMAM. 63 00:02:59,500 --> 00:03:02,824 Yani biz genellikle bizim yapıları tanımlamak Programlarımızın çok üstünde 64 00:03:02,824 --> 00:03:05,490 muhtemelen gidiyoruz çünkü çoklu fonksiyonları tarafından kullanılacak. 65 00:03:05,490 --> 00:03:08,850 Biz tanımlamak istemiyoruz bir işlev içinde yapısına bir, 66 00:03:08,850 --> 00:03:12,110 Sonra Sadece-- çünkü Yapının kapsamı gerçekten 67 00:03:12,110 --> 00:03:13,790 Sadece bu işlevin içinde bulunmaktadır. 68 00:03:13,790 --> 00:03:17,450 Biz muhtemelen bir yapı tanımlamak isterdim bu yüzden birden fazla fonksiyonları kullanabilirsiniz, 69 00:03:17,450 --> 00:03:20,670 ya da belki de katları birbirine bağlı dosyalar 70 00:03:20,670 --> 00:03:22,920 Bizim tek bir program oluşturun. 71 00:03:22,920 --> 00:03:24,920 Bazen de yerine yapıyı tanımlama 72 00:03:24,920 --> 00:03:27,961 Eğer koymak çok üstünde senin , sterlin içerir ve sterlin tanımlar 73 00:03:27,961 --> 00:03:32,080 Örneğin, onları koymak olabilir Ayrı nokta h dosyaları, sonra size hangi 74 00:03:32,080 --> 00:03:35,020 kiloluk Kendini içerir. 75 00:03:35,020 --> 00:03:37,620 >> Bu yüzden yapılara sahip, ama şimdi biz onları içeri almak gerekiyor. 76 00:03:37,620 --> 00:03:39,800 Nasıl içine alabilirim erişmek için bir yapı 77 00:03:39,800 --> 00:03:43,530 Bu alt değişkenler, bu değişkenlerin Bu yapı içinde var? 78 00:03:43,530 --> 00:03:46,810 Peki, biz denilen bir şey var bize izin verir nokta operatörü, 79 00:03:46,810 --> 00:03:50,990 Yapının alanlarını erişebilirsiniz. 80 00:03:50,990 --> 00:03:55,490 Örneğin Yani, ben ilan ettik diyelim Benim yapısı veri yere yazın 81 00:03:55,490 --> 00:03:59,020 Benim programın üst kısmında, ya da belki de Ben Lirası bıraktığım bir nokta h dosyası dahil. 82 00:03:59,020 --> 00:04:03,360 Sonra yeni bir oluşturmak istiyorsanız Bu veri türü değişken, ben söyleyebilirim 83 00:04:03,360 --> 00:04:06,260 struct araba, arabam, noktalı virgül. 84 00:04:06,260 --> 00:04:11,580 Ben int söyleyebiliriz Tıpkı x veya dize adı noktalı virgül. 85 00:04:11,580 --> 00:04:18,100 >> Burada veri türü, struct araba değişkenin adı, benim arabam 86 00:04:18,100 --> 00:04:23,770 ve sonra ben nokta operatörünü kullanabilirsiniz Arabamın çeşitli alanları erişebilirsiniz. 87 00:04:23,770 --> 00:04:27,494 Yani Arabamı diyebilirim dot yıl 2011 eşittir. 88 00:04:27,494 --> 00:04:28,410 Bu mükemmel para cezası. 89 00:04:28,410 --> 00:04:34,210 Hatırlarsanız eğer Yıl, bir olarak tanımlandı Bu yapı otomobilin içinde tamsayı alanı 90 00:04:34,210 --> 00:04:35,200 veri tipi. 91 00:04:35,200 --> 00:04:39,966 Struct araba verilerinin Yani herhangi bir değişken tipi, örneğin benim araba gibi, ben arabamı diyebilirim 92 00:04:39,966 --> 00:04:44,030 nokta yıl eşittir ve sonra atamak bazı tamsayı değeri 2011. 93 00:04:44,030 --> 00:04:47,290 Arabam nokta plakalı CS50 eşittir. 94 00:04:47,290 --> 00:04:51,180 Kartım nokta sayacı 50.505 noktalı virgül eşittir. 95 00:04:51,180 --> 00:04:53,270 Bunların hepsi mükemmel para cezası ve işte 96 00:04:53,270 --> 00:04:57,802 Biz nasıl eriştiğini Yapının alanları. 97 00:04:57,802 --> 00:05:00,260 Yapılar olsa da, gerek yok yığın üzerinde oluşturulacak. 98 00:05:00,260 --> 00:05:02,950 Sadece biz, başka bir değişken gibi dinamik olarak ayırabilirsiniz. 99 00:05:02,950 --> 00:05:06,309 Biz bir program varsa bu olabilir Birçok yapıları getirici, 100 00:05:06,309 --> 00:05:08,100 Biz kaç bilmiyoruz biz ihtiyacımız olacak 101 00:05:08,100 --> 00:05:10,800 o zaman biz dinamik gerek bu yapıların tahsis 102 00:05:10,800 --> 00:05:12,960 Bizim program olarak çalışıyor. 103 00:05:12,960 --> 00:05:16,600 Ve biz erişmek için gidiyoruz eğer öyleyse Bu bağlamda bir yapının alanları, 104 00:05:16,600 --> 00:05:20,660 Biz ilk dereference gereken hatırlama yapıya gösterici, 105 00:05:20,660 --> 00:05:24,810 ve sonra biz bir kez inceleyebilirsiniz pointer, o zaman alanları erişebilirsiniz. 106 00:05:24,810 --> 00:05:26,830 Biz sadece bir varsa yapısına işaretçisi, 107 00:05:26,830 --> 00:05:32,120 biz sadece işaretçi nokta alanını diyemeyiz isim ve biz aradığınızı olsun. 108 00:05:32,120 --> 00:05:34,259 Çözümleyecek fazladan bir adım var. 109 00:05:34,259 --> 00:05:36,050 Yani diyelim yerine previous-- arasında 110 00:05:36,050 --> 00:05:38,770 sadece önceki örnekte olduğu gibi, bunun yerine bildirmek 111 00:05:38,770 --> 00:05:43,680 yığını, struct araba, benim araba, noktalı virgül, ben yapı arabayı demek 112 00:05:43,680 --> 00:05:48,020 Yıldız, bir bir işaretçi struct araba, arabamı denilen 113 00:05:48,020 --> 00:05:51,250 yapı arabayı Malloc boyutu eşittir. 114 00:05:51,250 --> 00:05:54,950 Kaç biz boyutunu anlamaya edeceğiz Yeni veri türü alır bayt. 115 00:05:54,950 --> 00:05:58,570 Sen mutlaka sadece kullanmanız gerekmez genişlik, int, ya da Char, veya herhangi bir boyutu 116 00:05:58,570 --> 00:05:59,715 yerleşik veri türleri. 117 00:05:59,715 --> 00:06:02,090 Derleyici yeterince akıllı Kaç bayt anlamaya 118 00:06:02,090 --> 00:06:04,170 Yeni yapının gereklidir. 119 00:06:04,170 --> 00:06:09,610 Yani kendime bellek birimi malloc struct araba tutmak için yeterince büyük, 120 00:06:09,610 --> 00:06:12,410 ve geri bir gösterici olsun bu bellek bloğu, 121 00:06:12,410 --> 00:06:16,090 ve bu işaretçi arabama atanır. 122 00:06:16,090 --> 00:06:18,050 >> Şimdi, ben erişmek istiyorsanız Arabama alanları, 123 00:06:18,050 --> 00:06:22,615 Ben ilk arabama inceleyebilirsiniz kullanarak dereference operatörü, yıldız 124 00:06:22,615 --> 00:06:26,620 Biz işaretçiler gelen gördüm videolar ve sonra dereference sonra, 125 00:06:26,620 --> 00:06:32,200 Sonra ben nokta operatörünü kullanabilirsiniz Arabamın çeşitli alanları erişebilirsiniz. 126 00:06:32,200 --> 00:06:35,490 Yıl 2011 eşittir nokta arabamı yıldızla. 127 00:06:35,490 --> 00:06:38,480 Bu etkiye sahip olacaktır Bu durumda istiyorum, 128 00:06:38,480 --> 00:06:41,960 Biz dinamik ettik çünkü Arabamı ayırdı. 129 00:06:41,960 --> 00:06:43,610 >> Bu doğru olsa da, tür can sıkıcı değil mi? 130 00:06:43,610 --> 00:06:44,818 Şimdi 2 adımlı bir işlemdir var. 131 00:06:44,818 --> 00:06:47,460 Şimdi dereference-- zorunda Biz bir yıldız operatörü var, 132 00:06:47,460 --> 00:06:48,910 ve biz nokta operatörünü var. 133 00:06:48,910 --> 00:06:51,660 Ve Tahmin edebileceğiniz gibi, çünkü C programcıları kısa yolları seviyorum 134 00:06:51,660 --> 00:06:53,740 şeyler yapmak, bir var kısa yolu bunu yapmak için. 135 00:06:53,740 --> 00:06:57,790 Ok adlandırılan başka operatör var, hangi bu süreç çok daha kolay hale getirir. 136 00:06:57,790 --> 00:07:00,750 Ok çalışır yoludur ilk dereferences 137 00:07:00,750 --> 00:07:03,560 Soldaki işaretçi operatör tarafında, 138 00:07:03,560 --> 00:07:06,620 ve daha sonra, sonrasında indirgenmedikleri olan Soldaki işaretçi, 139 00:07:06,620 --> 00:07:09,620 sağdaki alanı erişir. 140 00:07:09,620 --> 00:07:14,170 Ve böylece daha önce bu tür vardı benim araba, tüm bu şeyleri nokta star 141 00:07:14,170 --> 00:07:15,880 orada gibi oluyor çok oldu. 142 00:07:15,880 --> 00:07:22,040 Ama biz bunun yerine yapabileceğimiz bu-- olduğunu Arabam ok yılı 2011 eşittir. 143 00:07:22,040 --> 00:07:23,580 >> Yine, burada neler oluyor? 144 00:07:23,580 --> 00:07:25,720 Birincisi, ben arabamı dereferencing ediyorum. 145 00:07:25,720 --> 00:07:27,810 Hangi tekrar, burada bir göstericidir. 146 00:07:27,810 --> 00:07:31,270 Daha sonra, yaptıktan sonra Ben arabamı indirgenmedikleri 147 00:07:31,270 --> 00:07:35,130 Sonra alanları erişebilirsiniz yıl, plaka ve kilometre sayacı 148 00:07:35,130 --> 00:07:40,020 Sadece geldiğince ilk bulunmadan önce Arabama inceleyebilirsiniz için kullanılan yıldız, 149 00:07:40,020 --> 00:07:42,020 ve alan erişmek için nokta. 150 00:07:42,020 --> 00:07:45,290 Yani, yapılar olabilir yapılarına işaretçileri olabilir, 151 00:07:45,290 --> 00:07:48,360 ve erişim yolları var Bu yapıların alanları, 152 00:07:48,360 --> 00:07:52,600 Eğer işaretçiler var mı Onları veya değişkenler kendileri. 153 00:07:52,600 --> 00:07:57,640 Nokta veya ok, bağlı Değişken nasıl ilan edildi. 154 00:07:57,640 --> 00:08:00,510 Ben Doug Lloyd değilim, bu CS50 olduğunu. 155 00:08:00,510 --> 00:08:01,975