POINTER SI TABLOURI UNIDIMENSIONALE
In urmatorul exemplu de program se defineste un sit de caractere de dimensiune maxima 8 elemente initializate cu : abc).
Exemplu 5.4.1.
main ( )
La executie se va afisa : abc ) adica elementele sirului pana la caracterul NULL (' \ o ').
In exemplul de mai sus S s-a declarat ca masiv unidimensional (sir) de maxim 8 elemente , dar in program s-au utilizat 5 elemente. Mai mult decat atat S se putea declara ca parametru la o functie ca tablou deschis :
char s[ ] ;
pentru ca in aceasta situatie alocarea spatiului de memorie necesar se face dinamic . Acest lucru este permis deoarece in limbajul C numele S al sirului este automat convertit la un pointer catre primul element al sirului. Acest pointer este constant in sensul ca este ilegal a se modifica ( prin atribuiri) in program, deci nu este o parte stanga.
Inseamna ca declaratiile:
char s[ ] ;
si
char *s ;
sunt echivalente, cu observatia ca in primul caz S este un pointer constant, initializat cu adresa lui S[O], iar in al doilea caz este un pointer obisnuit si neinitializat.
Aceasta echivalenta ne permite sa transmitem ca parametri unei functii siruri, matrici etc. prin pointeri catre primul lor element.
Deci o functie care prelucreaza elementele unui sir poate arata:
void f (char s[ ])
sau In ambele exemple, sfarsitul sirului s va fi determinat de detectarea
void f (char * s) caracterului ' \ o ' .
Al doilea tip de functie foloseste ca argument o adresa si de aceea in acest caz se mai spune ca apelul este prin referinta ( in engleza call by adress).
Totusi, in cazul masivelor multidimensionale care sunt parametrii unei functii numai prin dimensiune poate lipsi.
Ex. int f ( float a [ ] [10])
In acest exemplu parametrul functiei f este un pointer catre primul element a unei matrici cu 10 coloane.
|