Kihagyás

6. előadás

Előadás felvétele ~~ki lesz~~ KI VAN rakva a honlapra

Deklaráció

Változó létezésének kinyilvánítása. Általában definícióval is jár, tehát a változó értékét is megadjuk, de nem mindig.

A tárolási osztály a deklaráció jelentését befolyásolja: auto, register, static, extern, typedef

int i;             // int változó definiálása
int *i;            // intre mutató pointer definiálása
int t[10];         // 10 egészt tartalmazó tömb definiálása
int func1(void){;} // Paraméter nélküli, int-el visszatérő függvény
int func2(int i, double d){;}
int **pi;       // intre mutató pointerre mutató pointer
int tt[10][20]; //10 darab 20 elemű inteket tároló tömböt tároló tömb (mátrix)
int *func3(void){} //int pointerrel visszatérő fgv.
int* ptr1, ptr2; // ptr1: int pointer, de ptr2 az CSAK INT

extern

extern int i;           // int deklaráció, amely valahol máshol van DEFINIÁLVA
extern int *i;
extern int t[10];
extern int t[10][20];
extern int t[][20]; // Legbaloldalibb szám elhagyható
extern int func1(void); // paraméter nélküli fgv. deklarációja
int func1(void);        //fgv.deklaráció esetén az `extern` elhagyható
int func2(); // CSAK DEKLARÁCIÓKOR! Nem tudunk semmit a paraméterekről.

Láthatóság

shadowing - eltakarás

TODO

Élettartam

char buffer[80];   // statikus élettartam, kezdőértéke csupa 0
int k = 42;        // statikus élettartam
static double j;   // statikus élettartam, nem látható másik fordítási egységből
int count(void){
    static int cnt = 0; // lokális, DE statikus

    ++cnt;

    return cnt; //Minden meghíváskor egyel nagyobb számot ad vissza
}

Automatikus élettartam

Ha egy lokális változó nem static, akkor annak az élettartama automatikus

A függvénykilépéskor a változó felszámolódik.

Stack

Dinamikus élettartam

malloc

char * buffer = (char *) malloc(1024); //1024 bájtos puffer definiálása
if (NULL != buffer){ //HA sikeres volt a legfoglalás
    *buffer = 'x'; //Felhasználjuk a területet
    free(buffer); //Felszabadítjuk a memóriát
}