>> [MÜZİK OYUN]
>> Doug LLOYD: Tamam.
Biz tamsayılar ile çalıştık, Biz karakterler ile çalıştık,
Biz yüzen çalıştık, çiftler, dizeleri ve bool değerlerden oluşan.
Biz hemen tüm tatlı tükettim [duyulamaz] türlerinden olduğunu
birlikte hepimiz için geçerli olmuştur.
Ama şimdi daha çok şey yapmak istiyorum.
Biz nasıl yapacağız?
Nasıl farklı veri türlerini oluşturabilirim?
Biz yapılarını kullanarak bunu yapabilirsiniz.
Yani yapıları bizi birleştirmeye izin farklı değişkenleri
Tek, yeni değişken türü içine hangi biz kendi tip isim atayabilirsiniz.
Bu gerçekten güçlü şey yapmak mümkün
Biz grup şimdi can çünkü Farklı veri türlerinin unsurları
Birlikte mantıksal bir bağlantı var.
Bunu yapmak mümkün oldum tür diziler, değil mi?
Biz can grup değişkenleri Aynı veri türünde
birlikte geniş bir ünitede bellek, bir dizi.
>> Ama biz karıştırmak mümkün olmamıştır Birlikte yukarı farklı veri türleri.
Biz, bir tamsayı çifti, diyemem ve bir karakter ve bir çift tüm
Aynı şey ve tek bir birim olduğunu diyoruz.
Ama olan yapılar, ya da Sık sık, yapılar olarak adlandırılır
biz aslında yapamam.
Yani bir yapı tür süper değişken gibi.
Bu içeren bir değişken Bunun içinde diğer değişkenler.
Yani burada bir örnek çok basit bir yapısı.
Bu sözdizimi bakmak ne Bir araba için bir yapı oluşturmak istiyorum.
Şimdi, burada sözdizimi ile gidelim.
Struct, işte belirten kelime
Burada yeni bir veri türü oluşturma ediyorum.
Özellikle, veri türünün adıdır biz göreceğiz olarak, struct araba olacak.
Ama bu ucun tür derleyici kapalı bu
değişkenlerin bir grup olarak bu oluyor Aynı tip bir parçası olarak kabul edilecek
Bir dakika içinde.
>> Otomobil, yapının sadece adı.
Yine, burada veri türü gidiyor struct araba değil, sadece araba olmak.
Ama different-- varsa Birden yapılar oluşturmak durumunda
Aynı programda, yapmanız gerekenler yapı ve yapı arasındaki farkı.
Yani struct araba, ben de olabilir yapı, öğrenci, örneğin,
Aynı programda.
Kıvırcık parantez içinde bulunan Sözde tüm alanları,
veya yapının üyeleri.
Yani bazı şeyleri nelerdir Bir arabanın doğasında olduğunu?
Eh, genellikle, bir yıl vardır vardır Bir model adı ve plaka,
Genellikle sahip bir kilometre sayacı Üzerinde mil bir sayı,
ve belki de bir motor boyutu.
Gördüğünüz gibi, ben karıştırma ediyorum tamsayılar ve karakterler ve çiftler.
Hepsi olacağız Bu yeni veri türünün bir parçası.
>> Son olarak, son şey yapmam gerekiyor, Bu küçük noktalı virgül unutma
sonunda.
Biz yapısını tanımlayan tamamladıktan sonra, Biz sonunda bir noktalı virgül koymak gerekir.
Bu çok yaygın bir sözdizimsel var: hata, bir işlevle, çünkü
Örneğin, sadece olurdu açık kaşlı ayraç, yakın kaşlı ayraç.
Sen bir noktalı virgül koymayın Bir işlev tanımı sonu.
Bu bir işlev gibi görünüyor tanımı, ama değil,
ve böylece noktalı virgül var Sadece bir hatırlatma olduğunu size
Çünkü, oraya koymak gerekir derleyici değil aksi olacak
onunla ne yapacağını biliyor.
Bu çok yaygın hata var Yanlışlıkla yapmak
ilk ne zaman yapıları tanımlayan ediyoruz.
>> TAMAM.
Yani biz genellikle bizim yapıları tanımlamak Programlarımızın çok üstünde
muhtemelen gidiyoruz çünkü çoklu fonksiyonları tarafından kullanılacak.
Biz tanımlamak istemiyoruz bir işlev içinde yapısına bir,
Sonra Sadece-- çünkü Yapının kapsamı gerçekten
Sadece bu işlevin içinde bulunmaktadır.
Biz muhtemelen bir yapı tanımlamak isterdim bu yüzden birden fazla fonksiyonları kullanabilirsiniz,
ya da belki de katları birbirine bağlı dosyalar
Bizim tek bir program oluşturun.
Bazen de yerine yapıyı tanımlama
Eğer koymak çok üstünde senin , sterlin içerir ve sterlin tanımlar
Örneğin, onları koymak olabilir Ayrı nokta h dosyaları, sonra size hangi
kiloluk Kendini içerir.
>> Bu yüzden yapılara sahip, ama şimdi biz onları içeri almak gerekiyor.
Nasıl içine alabilirim erişmek için bir yapı
Bu alt değişkenler, bu değişkenlerin Bu yapı içinde var?
Peki, biz denilen bir şey var bize izin verir nokta operatörü,
Yapının alanlarını erişebilirsiniz.
Örneğin Yani, ben ilan ettik diyelim Benim yapısı veri yere yazın
Benim programın üst kısmında, ya da belki de Ben Lirası bıraktığım bir nokta h dosyası dahil.
Sonra yeni bir oluşturmak istiyorsanız Bu veri türü değişken, ben söyleyebilirim
struct araba, arabam, noktalı virgül.
Ben int söyleyebiliriz Tıpkı x veya dize adı noktalı virgül.
>> Burada veri türü, struct araba değişkenin adı, benim arabam
ve sonra ben nokta operatörünü kullanabilirsiniz Arabamın çeşitli alanları erişebilirsiniz.
Yani Arabamı diyebilirim dot yıl 2011 eşittir.
Bu mükemmel para cezası.
Hatırlarsanız eğer Yıl, bir olarak tanımlandı Bu yapı otomobilin içinde tamsayı alanı
veri tipi.
Struct araba verilerinin Yani herhangi bir değişken tipi, örneğin benim araba gibi, ben arabamı diyebilirim
nokta yıl eşittir ve sonra atamak bazı tamsayı değeri 2011.
Arabam nokta plakalı CS50 eşittir.
Kartım nokta sayacı 50.505 noktalı virgül eşittir.
Bunların hepsi mükemmel para cezası ve işte
Biz nasıl eriştiğini Yapının alanları.
Yapılar olsa da, gerek yok yığın üzerinde oluşturulacak.
Sadece biz, başka bir değişken gibi dinamik olarak ayırabilirsiniz.
Biz bir program varsa bu olabilir Birçok yapıları getirici,
Biz kaç bilmiyoruz biz ihtiyacımız olacak
o zaman biz dinamik gerek bu yapıların tahsis
Bizim program olarak çalışıyor.
Ve biz erişmek için gidiyoruz eğer öyleyse Bu bağlamda bir yapının alanları,
Biz ilk dereference gereken hatırlama yapıya gösterici,
ve sonra biz bir kez inceleyebilirsiniz pointer, o zaman alanları erişebilirsiniz.
Biz sadece bir varsa yapısına işaretçisi,
biz sadece işaretçi nokta alanını diyemeyiz isim ve biz aradığınızı olsun.
Çözümleyecek fazladan bir adım var.
Yani diyelim yerine previous-- arasında
sadece önceki örnekte olduğu gibi, bunun yerine bildirmek
yığını, struct araba, benim araba, noktalı virgül, ben yapı arabayı demek
Yıldız, bir bir işaretçi struct araba, arabamı denilen
yapı arabayı Malloc boyutu eşittir.
Kaç biz boyutunu anlamaya edeceğiz Yeni veri türü alır bayt.
Sen mutlaka sadece kullanmanız gerekmez genişlik, int, ya da Char, veya herhangi bir boyutu
yerleşik veri türleri.
Derleyici yeterince akıllı Kaç bayt anlamaya
Yeni yapının gereklidir.
Yani kendime bellek birimi malloc struct araba tutmak için yeterince büyük,
ve geri bir gösterici olsun bu bellek bloğu,
ve bu işaretçi arabama atanır.
>> Şimdi, ben erişmek istiyorsanız Arabama alanları,
Ben ilk arabama inceleyebilirsiniz kullanarak dereference operatörü, yıldız
Biz işaretçiler gelen gördüm videolar ve sonra dereference sonra,
Sonra ben nokta operatörünü kullanabilirsiniz Arabamın çeşitli alanları erişebilirsiniz.
Yıl 2011 eşittir nokta arabamı yıldızla.
Bu etkiye sahip olacaktır Bu durumda istiyorum,
Biz dinamik ettik çünkü Arabamı ayırdı.
>> Bu doğru olsa da, tür can sıkıcı değil mi?
Şimdi 2 adımlı bir işlemdir var.
Şimdi dereference-- zorunda Biz bir yıldız operatörü var,
ve biz nokta operatörünü var.
Ve Tahmin edebileceğiniz gibi, çünkü C programcıları kısa yolları seviyorum
şeyler yapmak, bir var kısa yolu bunu yapmak için.
Ok adlandırılan başka operatör var, hangi bu süreç çok daha kolay hale getirir.
Ok çalışır yoludur ilk dereferences
Soldaki işaretçi operatör tarafında,
ve daha sonra, sonrasında indirgenmedikleri olan Soldaki işaretçi,
sağdaki alanı erişir.
Ve böylece daha önce bu tür vardı benim araba, tüm bu şeyleri nokta star
orada gibi oluyor çok oldu.
Ama biz bunun yerine yapabileceğimiz bu-- olduğunu Arabam ok yılı 2011 eşittir.
>> Yine, burada neler oluyor?
Birincisi, ben arabamı dereferencing ediyorum.
Hangi tekrar, burada bir göstericidir.
Daha sonra, yaptıktan sonra Ben arabamı indirgenmedikleri
Sonra alanları erişebilirsiniz yıl, plaka ve kilometre sayacı
Sadece geldiğince ilk bulunmadan önce Arabama inceleyebilirsiniz için kullanılan yıldız,
ve alan erişmek için nokta.
Yani, yapılar olabilir yapılarına işaretçileri olabilir,
ve erişim yolları var Bu yapıların alanları,
Eğer işaretçiler var mı Onları veya değişkenler kendileri.
Nokta veya ok, bağlı Değişken nasıl ilan edildi.
Ben Doug Lloyd değilim, bu CS50 olduğunu.