char cxff celobrojna vrednost je 1 unsigned char
Основни типови char c=‘xff’; // celobrojna vrednost je -1 unsigned char uc=‘xff’; // celobrojna vrednost je 255 signed char uc=‘xff’; // celobrojna vrednost je -1 4
Основни типови • Целобројни типови су int, short int и long int, као и signed int и unsigned int i=0; short int si 1=127; short si 2 = -1; long int li 1=12345; long li 2=0 xff; 6
Основни типови int i=-1; unsigned ui 1=0; ui += i; // ui dobija vrednost 65535 // pretpostavka je da je int // predstavljen sa dva bajta 7
Изведени типови void f(int n[][2][7]) { // … n[1][2][3]++; } void main() { int a[4][2][7]; // … f(a); } // prva dimenzija izostavljena // trodimenzionalni niz 4 x 2 x 7 16
Изведени типови void f(neki_tip a[], int n) { neki_tip *p=&a[0]; for (int i=0; i<n; i++) { // … radi nesto sa *p p++; // u poslednjoj iteraciji p prelazi granicu } // ovde bi *p bilo nedefinisano } 21
Изведени типови int f(int); // f je funkcija koja ima jedan argument // tipa int i vraca rezultat tipa int g(); // g je funkcija koja nema argumente i // vraca rezultat tipa int; void h(int); // h je funkcija koja ima jedan argument // tipa int i ne vraca rezultat int (*pf) (int); // pf je pokazivac na funkciju koja ima jedan // argument tipa int i vraca rezultat tipa int pf = &f; // pf ukazuje na funkciju f pf = &g; // greska! pf = &h; // greska! 24
Изведени типови int f(int); // f, g i h su funkcije koja ima jedan argument int g(int); // tipa int i vracaju rezultat tipa int h(int); int (*pf) (int); // pf je pokazivac na takvu funkciju pf = &f; // pf ukazuje na funkciju f int i=(*pf)(7); // poziva se funkcija na koju ukazuje pf sa // argumentom 7 i rezultat smesta u i pf = &g; // pf sada ukazuje na funkciju g i=(*pf)(3); // poziva se funkcija na koju ukazuje pf sa // argumentom 3 pf = &h; // pf sada ukazuje na funkciju h *pf=f; // greska: *pf nije promenljiva lvrednost 26
Изведени типови int a[10], b[10]; a=b; // greska, niz nije promenljiva lvrednost int a[10]; int i=0; a[i]=5; (a+1)[i]=3 int *pi=a; pi[i+2]=1; (i+3)[a]=0; // isto i: *(a+i)=5; // isto i: *((a+1)+i)=3, pa a[i+1] postaje 3 // a se konvertuje u pokazivac na int pa // pi ukazuje na a[0] // isto i: *(pi+(i+2))=1, pa a[i+2] postaje 1 // moze i ovako! Isto je sto i: *((i+3)+a)=0 pa // a[i+3] postaje 0 28
Изведени типови const float pi=3. 14; const char plus=‘+’; pi=5; // greska! const n=100; // n je const int a int moze da se izostavi int a[n], b[2*n]; // n je konstanta! 32
Изведени типови const char *pk="asdfgh"; pk[3]='a'; pk="qwerty"; // pokazivac na konstantu // greska! // ispravno char *const kp="asdfgh"; kp[3]='a'; kp="qwerty"; // konstantni pokazivac // ispravno // pogrešno const char *const kpk="asdfgh"; // konst. pokazivac na konst. kpk[3]='a'; // pogrešno kpk="qwerty"; // pogrešno 34
Изведени типови struct S { int is; int js; S(int, int); }; // deklaracija strukture S // svi clanovi su javni // konstruktor S: : S(int i, int j) {is = i; js = j}// konstruktor void main () { S x(1, 1), y(2, 1), z(3, 1); // … x. is=4; } // objekti tipa S // ispravno, is je javni clan 36
Изведени типови union U { int i; // svi ovi clanovi pocinju od iste adrese char c; float f; }; void main () { U u; u. i=1; // sada postoji u. i int j=u. i+1; // u redu je jer u. i postoji u. c=‘a’; // od sada postoji u. c j+=u. i; // rezultat je nedefinisan, jer u. i nije validno! } 38
Изведени типови • Целобројни податак (бит поље) може да има специфицирану величину у битовима. struct S { int p 1 : 12; int p 2 : 8; int p 3 : 4; }; // polje sirine 12 bitova // polje sirine 8 bitova // polje sirine 4 bita void set(S *ps, int mode) { ps->p 1=4; ps->p 2=2*mode+1; } // pristup clanu p 1 objekta *ps // pristup clanu p 2 objekta *ps 40
- Slides: 47