Extras din laborator
1. Recapitularea unor elemente ale limbajului C
1.1 Structuri
1.1.1 Definire
Se foloseste cuvantul cheie struct urmat de numele structurii si enumerarea membrilor acesteia:
struct X
{
int i;
char c;
};
1.1.2 Utilizare
Elementele membre ale variabilelor de tip structura pot fi accesate folosind operatorul .:
struct X x1, x2[4];
…
x1.i=4;
x2[2].c=getch();
1.2 Pointeri
1.2.1 Declarare
int *pi; /* pointer la o variabila de tip int */
char *pc; /* pointer la o variabila de tip char */
struct X *px; /* pointer la o variabila de tip struct X */
struct X x1, x2[4];
1.2.2 Utilizare
pi=&x1.i; /* atribuirea adresei unei variabile de */
px=&x2[2]; /* acelasi tip cu al pointerului */
pc=&px->c;
*pi=4; /* referirea zonei de memorie adresate de */
*pc=getch(); /* pointer cu ajutorul operatorului * */
1.3 Alocare dinamica
Exista aplicatii în care necesarul de memorie nu este cunoscut din faza de compilare si rezervarea unor zone de memorie de dimensiuni acoperitoare pentru toate datele ar depasi capacitatea memoriei disponibile. Singura solutie în acest caz o reprezinta alocarea/eliberarea interactiva de zone de memorie chiar în timpul executiei programului - alocarea dinamica de memorie. În acest scop, în programele C se folosesc functii de biblioteca ale caror prototipuri (descrieri ale tipului si argumentelor functiilor) se gasesc în fisierul header alloc.h. Cele mai utilizate functii pentru alocarea de memorie sunt:
void* malloc(unsigned size);
void* calloc(unsigned nelem, unsigned size);
Prima functie primeste ca unic argument numarul de octeti ce trebuie alocati si returneaza adresa de început a zonei de memorie alocate în caz de succes sau NULL (0) în caz de esec. A doua functie se comporta identic, încercând însa alocarea a nelem blocuri succesive de size octeti.
Toate alocarile dinamice se fac într-o zona de memorie destinata special acestui scop, zona numita heap (gramada). În functie de modelul de memorie folosit, dimensiunea heap-ului variaza de la dimensiunea unui segment (64KO) minus dimensiunea programului pâna la dimensiunea întregii memorii disponibile minus aceeasi dimensiune a programului.
Pentru eliberarea unei zone de memorie alocate dinamic se foloseste functia complementara
void free(void* addr);
unde addr reprezinta un pointer ce contine adresa de început a unei zone de memorie alocata dinamic.
int *pi;
struct X *px;
…
/* alocare memorie pentru o variabila de tip int */
pi = (int *)malloc(sizeof(int));
*pi=3;
/* alocare pentru un vector de 4 elemente de tip struct X */
px=(struct X *)calloc(4, sizeof(struct X));
px[2]->i=4;
…
/* eliberare memorie */
free(pi);
free(px);
Preview document
Conținut arhivă zip
- Tehnici Programare
- TPA_L1.DOC
- TPA_L2.DOC
- TPA_L3.DOC
- TPA_L7.DOC
- TPA_L8.DOC