Capitolul 5.10. Comparatie pointeri. Tablouri multi-dimensionale
:: Programare :: C & C++ :: Capitolul 5
Pagina 1 din 1
Capitolul 5.10. Comparatie pointeri. Tablouri multi-dimensionale
Nou venitii in C sint uneori confuzi in legatura cu deosebirea dintre un tablou bidimensional si un tablou de pointeri cum ar fi name din exemplul de mai sus. Fiind date declaratiile
int a[10][10];
int *b[10];
utilizarile lui a si b pot fi similare, in sensul ca a[5][5] si b[5][5] sint ambele referinte legale ale aceluiasi int. Dar a este un tablou in toata regula: toate cele 100 celule de memorie trebuie alocate iar pentru gasirea fiecarui element se face calculul obisnuit al indicelui. Pentru b, oricum prin declararea se aloca 10 pointeri; fiecare trebuie facut sa pointeze un tablou de intregi. Presupunind ca fiecare pointeaza cite 10 elemente din tablou, atunci vom obtine 100 celule de memorie rezervate, plus cele 10 celule pt pointeri. Astfel tabloul de pointeri
utilizeaza sensibil mai mult spatiu si poate cere un pro explicit de initializare. Dar, exista doua avantaje: accesarea unui element se face indirect prin intermediul unui pointer, in loc sa se faca prin inmultire si adunare iar liniile tabloului pot fi de lungimi diferite. Aceasta insemna ca nu orice element al lui b este constrins sa pointeze pe un vector de 10 elemente, unii pot pointa pe cite 2 elemente, altii pe cite 20 si altii pe niciunul.
Desi am mai discutat acest lucru la intregi, de departe, cea mai frecventa utilizare a tabloului de pointeri este cea ilustrata prin mounth-name: sa stocheze lanturi de caractere de lungimi diferite.
Exercitiul 5.6. Rescrieti rutinele day_of_year si mounth-day cu pointeri in loc de indexare.
int a[10][10];
int *b[10];
utilizarile lui a si b pot fi similare, in sensul ca a[5][5] si b[5][5] sint ambele referinte legale ale aceluiasi int. Dar a este un tablou in toata regula: toate cele 100 celule de memorie trebuie alocate iar pentru gasirea fiecarui element se face calculul obisnuit al indicelui. Pentru b, oricum prin declararea se aloca 10 pointeri; fiecare trebuie facut sa pointeze un tablou de intregi. Presupunind ca fiecare pointeaza cite 10 elemente din tablou, atunci vom obtine 100 celule de memorie rezervate, plus cele 10 celule pt pointeri. Astfel tabloul de pointeri
utilizeaza sensibil mai mult spatiu si poate cere un pro explicit de initializare. Dar, exista doua avantaje: accesarea unui element se face indirect prin intermediul unui pointer, in loc sa se faca prin inmultire si adunare iar liniile tabloului pot fi de lungimi diferite. Aceasta insemna ca nu orice element al lui b este constrins sa pointeze pe un vector de 10 elemente, unii pot pointa pe cite 2 elemente, altii pe cite 20 si altii pe niciunul.
Desi am mai discutat acest lucru la intregi, de departe, cea mai frecventa utilizare a tabloului de pointeri este cea ilustrata prin mounth-name: sa stocheze lanturi de caractere de lungimi diferite.
Exercitiul 5.6. Rescrieti rutinele day_of_year si mounth-day cu pointeri in loc de indexare.
Subiecte similare
» Capitolul 5.7. Tablouri multi-dimensionale
» Capitolul 5.8. Tablouri de pointeri, pointeri pe pointeri
» Capitolul 5. POINTERI SI TABLOURI
» Capitolul 5.3. Pointeri si tablouri
» Capitolul 5.12. Pointeri pe functii
» Capitolul 5.8. Tablouri de pointeri, pointeri pe pointeri
» Capitolul 5. POINTERI SI TABLOURI
» Capitolul 5.3. Pointeri si tablouri
» Capitolul 5.12. Pointeri pe functii
:: Programare :: C & C++ :: Capitolul 5
Pagina 1 din 1
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum