Capitolul 5.10. Comparatie pointeri. Tablouri multi-dimensionale

Vezi subiectul anterior Vezi subiectul urmator In jos

Capitolul 5.10. Comparatie pointeri. Tablouri multi-dimensionale

Mesaj  zooky la data de Mier Mar 18, 2009 1:50 pm

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.
avatar
zooky
Moderator
Moderator

Numarul mesajelor : 147
Data de inscriere : 15/03/2009
Varsta : 24
Localizare : Cernatesti City

Vezi profilul utilizatorului http://e-learning.forumhit.ro

Sus In jos

Vezi subiectul anterior Vezi subiectul urmator Sus


 
Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum