İçindekiler:
- Güvensizliğe karşı tip tahmini
- typedef anahtarıyla bir sürü sorun yaşayabilirsiniz.Normal C kelimelerini ve operatörlerini, tutarlı canlarından, her türlü yaramazlığa atabilir. YARIMLARI> TYPEDEF
Video: C Programlama 9 Struct ve Stringler (Dizgiler) 2024
C programlamasında, kodunuzdaki değişkeni başka bir türe dönüştürerek, tamamen yeni bir ad vererek veya onun üzerine bir büyü yaparak karışabilir İhtiyaçlarınızı karşılamak için değişken, yardımsever veya hayırsever.
Güvensizliğe karşı tip tahmini
Ne zaman bir float değişkeni float değil mi? Elbette bir int içine tipecast edildiğinde. Bu hüner, tipik gösterimi kullanarak C'de mümkün kılınmıştır. Örneğin:
(int) borç
Önceki satırda, float değişkeni borç , bir int değerine tipecastedilir. Parantez içindeki int derleyiciye borcun değerini bir tam sayı olarak işleme koymaya yönlendirir.
Neden bunu kimse istiyor?
Bazen bir işlev belirli bir değişken türü gerektirir ve bu tür kullanılamaz. Tek bir programda birkaç değişken türünde dönüştürme ve bunlarla uğraşmak yerine, istediğiniz türe bir değişken yazabilirsiniz. Bu ortak bir hile değil, fakat çoğu zaman, Doğru Olan Değil'de gösterildiği gibi gereklidir.
DOĞRU DEĞİL
#include int main () {int a, b; float c; printf ("İlk değeri giriniz:"); scanf ("% d", & a); printf ("İkinci değeri girin:"); scanf ("% d", & b); c = a / b; printf ("% d /% d =%. 2fn", a, b, c); Egzersiz
1: Kaynak Kodunu, That's Not Right yazan editörüne yazın. Kurun ve çalıştırın. 3
İkinci değeri girin:
2 3/2 => 1. 00 Açıkçası, 3 ÷ 2'nin bir şekilde 1'e düşeceği yanlıştır. Bilgisayar 1.00 derse, bilgisayar doğru olmalıdır. Ya da kaynak kodun Satır 12'sinde iki int değeri bölünür ve sonuç bir float olarak atandığından bilgisayar muhtemelen kafası karışır. Bununla birlikte, bir tamsayıyı C'de bir tamsayıya bölmek sonuç olarak bir tam sayı ürettiği için oldukça işe yaramaz.
1 değeri 1'e en yakın tamsayı değerdir. 50. Dolayısıyla bilgisayar yanlış olsa da, yapması gereken söyleneni tam olarak yapıyor.
Egzersiz2:
Satır 12'yi c = (float) a / (float) b olarak değiştirerek kaynak kodunuzu değiştirin; Değişikliği kaydedin. Gösterilenlerle aynı değerleri kullanarak kurun ve çalıştırın. İşte yeni çıktı:
İlk değeri girin: 3 İkinci değeri girin: 2 3/2 = 1. 50
Daha iyi. Bunun nedeni, denklemde
a
ve b değişkenlerini tipik olarak yazdığınızda geçici olarak derleyiciye bunları kayan nokta sayıları olarak görmesine izin vermenizdir. Bu nedenle sonuç ne olması gerektiği. ile yeni şeyler nasıl oluşturulur typedef
typedef anahtarıyla bir sürü sorun yaşayabilirsiniz.Normal C kelimelerini ve operatörlerini, tutarlı canlarından, her türlü yaramazlığa atabilir. YARIMLARI> TYPEDEF
#include typedef int stinky; kokmuş ana () {kokuşmuş a = 2; printf ("Herkes bilir"); printf ("% d +% d =% dn", a, a, a + a);
typedef
'un Tehlikeleri içinde, Satır 3'deki typedef deyimi, stinky kelimesini int anahtar sözcüğü ile aynı tanımlar. Kodda int kullanabildiğiniz her yerde, Hat 5 ve 7'de gösterildiği gibi bunun yerine kokmuş sözcük kullanabilirsiniz.
Egzersiz 3: The
Perils of kaynak kodunu kullanın typedef < kokuşmuş bir değişken türünün bir int ile aynı olduğunu gösteren yeni bir program oluşturmak. Kurun ve çalıştırın. Verildiği gibi,
Bir Yapı Oluşturma Geleneksel Yol, yapıların bir bilgisi göz önüne alındığinde, iç içe geçmiş yapı operasyonunun nasıl çalıştığını gösterir: BİR YAPININ YARATILIŞTIRILMASI YOLU yapı kimliği {char ilk [20]; char son [20];}; yapı tarihi {int ay; int gün; int yıl;}; yapı insan {struct id name; yapı tarihi doğum günü;};
Bir Yapıyı Tanımlamak İçin
t
ypedef
'ı kullanmak, yapıları typedefleştirmek isterseniz bildirimlerin nasıl gerçekleştiğini gösterir: USING TYPEDEF A YAPININ TANIMLANMASI > typedef yapı id {char ilk [20]; char son [20];} kişisel; typedef yapı tarihi {int ay; int gün; yıl;} takvim; yapı insan {kişisel adı; takvim doğum günü;};
Bu Listelemede, yapısı kimliği typedef'd adıyla kişisel. Bu değişken adı değil; Bu bir typedef. "Yapı ID'sine yapılan tüm referanslar artık kişisel ismiyle aynı. " Benzer şekilde yapı tarihi takvimde typedef'd'dir. Son olarak, insan yapısının bildiriminde, daha karmaşık yapı tanımları yerine typedef adları kullanılır. YERLEŞİM YAPISI
#include #include int main () {struct tarih {int ay; int gün; int yıl;}; yapı insan {char name [45]; yapı tarihi doğum günü;}; insan başkanı yap; strcpy (başkan adı, "George Washington"); Devlet Başkanı. doğum günü. ay = 2; Devlet Başkanı. doğum günü. gün = 22; Devlet Başkanı. doğum günü. yıl = 1732; printf ("% s% d /% d /% dn" tarihinde doğdu, başkan adı, başkan, doğum günü, ay, cumhurbaşkanı, doğum günü, cumhurbaşkanı, doğum günü); Alıştırma 4
:
İç içe geçmiş bir yapıya sahip İç içe geçmiş bir yapıdaki insan yapısındaki
ad
üyesini değiştirin. Bu yapı kimliğini ve bir kişinin adını ve soyadını depolamak için ilk ve sonuncusu olmak üzere iki üye, karakter dizisi içermesine dikkat edin.
Eğer her şeyi doğru yaparsanız, başkanın adına yapılan atıf, başkan değişkenleri olacaktır. ad. İlk ve başkan. ad. Geçen . Kodunuzda bu değişkenlere değer atadığınızdan ve sonuçları görüntülediğinizden emin olun.
Alıştırma 5 : Bir Yapıyı Tanımlamak için t ypedef
Kullanılmasında gösterildiği gibi, typedef'i kullanmak için Alıştırma 4'te oluşturduğunuz projeden kaynak kodunu değiştirin. Kurun ve çalıştırın. typedef'in kullanılması, kodunuzu, yalnızca iyi değişken adları ve iyi biçimlendirilmiş metni kullandıklarından daha açık bir hale getirmez. Örneğin, typedef'i yalnızca tanımladığınızı hatırlamak zorunda kalmak istemediğiniz için kullanamazsınız. Ancak typedef'i kullanan diğer kodlarla karşılaşırsınız. Seni korkutmasına izin verme. typedef'i bir yapı ile kullanmanın asıl avantajı, sizi muhtemelen struct sözcüğünü çok fazla yazmaya zorlamamanızdır.