CATEGORII DOCUMENTE |
Comaparatie 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 decla-
rarea se aloca 10 pointeri; fiecare trebuie facut sa pointeze un
tablou de intregi. Presupunind ca fiecare pointeaza cite 10 ele-
mente din tablou, atunci vom obtine 100 celule de memorie rezerva-
te, 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 con-
strins 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.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1130
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved