Adattípusok C-ben
Az adatok C-ben történő tárolásának többféle módja van, és mindegyikük egyedi. Azok a típusú adatok, amelyeket az információ tárolhat, az úgynevezett adattípusok. A C sokkal kevésbé elnéző az adattípusokkal szemben, mint más nyelvek. Ennek eredményeként fontos megbizonyosodni arról, hogy megérti a meglévő adattípusokat, képességeiket és korlátaikat.
A C adattípusainak egyik furcsa oka, hogy teljes mértékben attól a hardvertől függenek, amelyen a kódot futtatja. Az int
Ön laptopja kisebb lesz, mint int
egy szuperszámítógépen, ezért fontos, hogy ismerje a hardver korlátait. Ezért is definiálják az adattípusokat minimálisnak - egy int
érték, amint megtudhatja, minimum -32767 és 32767 között van: bizonyos gépeken még több értéket képes tárolni, amit ez.
Két kategóriára oszthatjuk fel ezt: egész számokra és lebegőpontos számokra. Az egész szám egész szám. Pozitív, negatív vagy nulla lehet. Az olyan számok, mint a -321, 497, 19345 és -976812, teljesen érvényesek egész számok, de a 4.5 nem azért, mert a 4.5 nem egész szám.
A lebegőpontos számok tizedesjegyű számok. Az egész számokhoz hasonlóan a -321, 497, 19345 és -976812 is érvényesek, de most már 4,5, 0,0004, -324,984 és egyéb nem egész számok is érvényesek.
A C lehetővé teszi számunkra, hogy adattípusainkkal többféle lehetőség közül választhassunk, mivel mindegyiket különböző módon tárolják a számítógépen. Ennek eredményeként fontos, hogy tisztában legyünk az egyes adattípusok képességeivel és korlátaival a legmegfelelőbb kiválasztásához.
Egész adatok típusai
Karakterek: char
char
betűket, írásjeleket és szóközöket tartalmaz. A számítógépen a karakterek számként vannak tárolva, így char
a karaktereket reprezentáló egész értékeket tartalmazzák. A tényleges fordítást az ASCII szabvány írja le. Itt van egy praktikus asztal ennek felkutatásához.
A tényleges méret, hasonlóan a C összes többi adattípusához, attól a hardvertől függ, amelyen dolgozik. Minimálisan legalább 8 bit, tehát legalább 0 és 127 között lesz. Alternatív megoldásként használhatja signed char
legalább -128 és 127 közötti értékeket is.
Normál egész számok: int
Az egyetlen memória mennyisége int
a hardvertől függ. Arra azonban számíthat, int
hogy legalább 16 bit méretű legyen. Ez azt jelenti, hogy a hardvertől függően -32 768 és 32 767 vagy ennél nagyobb értékeket képes tárolni.
Az összes többi adattípushoz hasonlóan létezik egy unsigned
változat is. A unsigned int
pozitív és nulla lehet, de nem negatív, így 0 és 65 535 közötti értékeket, vagy a hardvertől függően többet is tárolhat.
Rövid egész számok: short
Ez nem szokott gyakran, de jó tudni, hogy létezik. Az int-hez hasonlóan ez is képes -32768 és 32767 közötti tárolásra. Az int-től eltérően azonban ez a képességének mértéke. Bárhol használhatja short
, használhatja int
.
Hosszabb egész számok: long
Az long
adattípus a like egész számokat tárolja int
, de szélesebb értéktartományt ad, több memória igénybevételének árán. A hosszú tárol legalább 32 bitet, így a tartomány 2 147 483 648 és 2 147 483 647. Alternatív megoldásként használjon unsigned long
0 és 4 294 967 295 közötti tartományokat.
Még hosszabb egész számok: long long
Az long long
adattípus túl sok minden alkalmazásnál, de a C így is lehetővé teszi a használatát. Legalább −9,223,372,036,854,775,807–9,223,372,036,854,775,807 tárolására képes. Alternatív megoldásként szerezzen még nagyobb túlterhelést unsigned long long
, ami legalább 0-tól 18,446,744,073,709,551,615-ig ad.
Lebegőpontos adattípusok
Alapvető lebegőpontos számok: float
float
Legalább 32 bitet kell tárolni, de 6 tizedesjegyet adunk az 1.2E-38-tól a 3.4E + 38-ig.
Páros: double
double
az úszó memória dupláját veszi fel (tehát legalább 64 bit). Cserébe a kettős 15 tizedesjegyet adhat meg a 2.3E-308 és 1.7E + 308 között.
A párosok szélesebb skálájának megszerzése: long double
long double
legalább 80 bitet vesz igénybe. Ennek eredményeként 19 tizedesjegyet kaphatunk a 3.4E-4932-től az 1.1E + 4932-ig.
A megfelelő adattípus kiválasztása
A C kiválasztja az adattípust, és nagyon konkrét és szándékossá tesz minket ennek módjával kapcsolatban. Ez nagy hatalmat ad a kód felett, de fontos a megfelelő kiválasztása.
Általában ki kell választania a feladat minimumát. Ha tudod, hogy 1-től 10-ig számolsz, akkor nem kell hosszú és nincs szükség duplára. Ha tudja, hogy soha nem lesznek negatív értékei, vizsgálja unsigned
meg az adattípusok változatainak használatát . Ennek a funkciónak az automatikus biztosítása helyett a C nagyon könnyű és hatékony kódot képes előállítani. A programozón múlik azonban, hogy megértse-e a képességeket és a korlátozásokat, és ennek megfelelően válasszon.
Használhatjuk a sizeof () operátort egy változó méretének ellenőrzésére. A különféle adattípusok használatát lásd az alábbi C programban:
#include int main() { int a = 1; char b ='G'; double c = 3.14; printf("Hello World!\n"); //printing the variables defined above along with their sizes printf("Hello! I am a character. My value is %c and " "my size is %lu byte.\n", b,sizeof(char)); //can use sizeof(b) above as well printf("Hello! I am an integer. My value is %d and " "my size is %lu bytes.\n", a,sizeof(int)); //can use sizeof(a) above as well printf("Hello! I am a double floating point variable." " My value is %lf and my size is %lu bytes.\n",c,sizeof(double)); //can use sizeof(c) above as well printf("Bye! See you soon. :)\n"); return 0; }
Kimenet:
Hello World!Hello! I am a character. My value is G and my size is 1 byte. Hello! I am an integer. My value is 1 and my size is 4 bytes. Hello! I am a double floating point variable. My value is 3.140000 and my size is 8 bytes. Bye! See you soon. :)
Az Üresség típus
A void típus megadja, hogy nem érhető el érték. Háromféle helyzetben használják:
1. A függvény érvénytelenül tér vissza
Különböző függvények vannak a C-ben, amelyek nem adnak vissza értéket, vagy mondhatjuk, hogy érvénytelenek. A visszatérési érték nélküli függvény visszatérési típusa érvénytelen. Például,void exit (int status);
2. A funkció argumentumai érvénytelenek
Különböző funkciók vannak a C-ben, amelyek nem fogadnak el egyetlen paramétert sem. Paraméter nélküli funkció elfogadhat egy ürességet. Például,int rand(void);
3. Az érvénytelenítésre mutató mutatók
A void * típusú mutató az objektum címét jelöli, a típusát azonban nem. Például egy memória-allokációs függvény void *malloc( size_t size);
visszaállítja a mutató érvényét, amelyet bármilyen adattípusra át lehet önteni.