Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Pointeri la caracter si functii

c


Pointeri la caracter si functii

O constanta sir, de exemplu:

Buna dimineata

este un masiv de caractere, care in reprezentarea interna este terminat cu caracterul , astfel incit programul poate depista sfirsi 959e42j tul lui. Lungimea acestui sir in memorie este astfel cu 1 mai mare decit numarul de caractere ce apar efectiv intre ghilimelele de inceput si sfirsit de sir.



Cea mai frecventa aparitie a unei constante sir este ca argument la functii, caz in care accesul la ea se realizeaza prin intermediul unui pointer.

In exemplul:

printf('Buna dimineatan');

functia printf primeste de fapt un pointer la masivul de caractere.

In prelucrarea unui sir de caractere sint implicati numai pointeri, limbajul C neoferind nici un operator care sa trateze sirul de caractere ca o unitate de informatie.

Vom prezenta citeva aspecte legate de pointeri si masive analizind doua exemple. Sa consideram pentru inceput functia strcpy(s,t) care copiaza sirul t peste sirul s. O prima versiune a programului ar fi urmatoarea:

strcpy(char s[], char t[])

O a doua versiune cu ajutorul pointerilor este urmatoarea:

strcpy(char *s, char *t)

Aceasta versiune cu pointeri modifica prin incrementare pe s si t in partea de test. Valoarea lui *t++ este caracterul indicat de pointerul t, inainte de incrementare. Notatia postfix asigura ca t va fi modificat dupa depunerea continutului indicat de el, la vechea pozitie a lui s, dupa care si s se incrementeaza. Efectul este ca se copiaza caracterele sirului t in sirul s pina la caracterul terminal inclusiv.

Am mai putea face o observatie legata de redundanta compararii cu caracterul , redundanta care rezulta din structura instructiunii while

Si atunci forma cea mai prescurtata a functiei strcpy(s,t) este:

strcpy(char *s, char *t)

Sa consideram, ca al doilea exemplu, functia strcmp(s,t) care compara caracterele sirurilor s si t si returneaza o valoare negativa, zero sau pozitiva, dupa cum sirul s este lexicografic mai mic, egal sau mai mare ca sirul t. Valoarea returnata se obtine prin scaderea caracterelor primei pozitii in care s si t difera.

O prima versiune a functiei strcmp(s,t) este urmatoarea:

strcmp(char s, char t)

Versiunea cu pointeri a aceleiasi functii este:

strcmp(char *s, char *t)

In final prezentam functia strsav care copiaza un sir dat prin argumentul ei intr-o zona obtinuta printr-un apel la functia alloc. Ea returneaza un pointer la sirul copiat sau NULL, daca nu mai exista suficient spatiu pentru memorarea sirului.

char *strsav(char *s)



Document Info


Accesari: 430
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )