Documente Academic
Documente Profesional
Documente Cultură
Cuprins
Tipul pointer
Tipul char
Șiruri de caractere
Funcții cu șiruri de caractere
Bibliografie selectivă
Tipul pointer
Să ne amintim:
Orice variabilă are o adresă, la care se memorează valoarea ei.
Operatorul prefix & dă adresa operandului: &x e adresa variabilei x.
În cazul tablourilor, numele unui tablou este chiar adresa sa.
Tipul pointer
Rezultatul unei operații adresă are un tip, ca și orice expresie.
Pentru o variabilă declarată:
tip x;
Tipul adresei sale (&x) este pointer la tip (tip *), adică adresa unde se află un
obiect de acel tip.
Numele unui tablou are tipul pointer la tipul elementului
int a[4]; a are tipul int *
char s[8]; s are tipul char *
Tipul pointer
Diferența între
int a[4]; int *a;
char s[8]; char *s;
este că în varianta cu tip nume[nr_el] se face și o alocare statică de spațiu de
memorie având dimensiunea nr_el x dimensiunea tipului.
Cele două antete de mai jos sunt echivalente
void func(tip a[]) void func(tip *a)
(de aceea dimensiunea tabloului în cazul următoarei declarații:
void func(tip a[6]) nu contează).
Tipul pointer
Observații:
◦ Valoarea NULL indică o adresă invalidă.
◦ void * este o adresă de tip neprecizat.
Tipul char
Să ne amintim:
Tipul char:
◦ este un tip întreg
◦ cuprinde valori între 0 si 255
◦ poate fi cu semn sau fără (unsigned char)
Pe de altă parte tipul char reprezintă și o mulțime finită și ordonată de caractere din setul ASCII
(American Standard Code for Information Interchange) => fiecărui cod (numeric) îi corespunde
un caracter în tabela ASCII
HTTPS://ASCII.CL/
Tipul char
Sintaxa declarației:
char c;
Atribuire:
c = ‘A’; c= 65;
Cele două instrucțiuni sunt echivalente.
Pe lângă litere și cifre există și câteva caractere speciale:
ex: ‘\0’ (cod ASCII 0) , ‘\n’ (cod ASCII 13)
Șiruri de caractere
Sintaxa declarației:
char cuvant[20]; //tablou de caractere declarant static și neinițializat
char cuvant[3]={‘Ε’,’Τ’,’C’};
În limbajul C, termenul șir de caractere înseamnă un tablou de caractere încheiat în memorie cu
caracterul ‘\0’ (codul ASCII 0).
char msg[] = "test"; // 5 octeti, terminat cu ’\0’
char msg[] = {’t’,’e’,’s’,’t’,’\0’}; // acelasi sir, scris altfel
char sir[20] = "test"; // restul pana la 20 sunt ’\0’
Șiruri de caractere
Constantele șir
Ex. "salut\n"
se termină tot cu ’\0’
terminatorul ’\0’ (caraterul nul) nu se citește / tipărește
La șiruri inițializate, dar fără dimensiune dată (ex. char msg[] = "test";) se alocă dimensiunea
inițializatorului + 1 pentru caracterul ’\0’
Toate funcțiile standard au nevoie de șiruri terminate cu ’\0’
Șiruri de caractere
În C, un șir de caractere este reprezentat prin adresa lui.
Inclusiv constantele șir (”sirul”)
Această adresă (și deci șirul) are tipul char *
ATENȚIE! ‘a’ este un char, dar “a” este un sir
Deoarece orice șir (constant sau nu) se termină cu caracterul nul ’\0’ funcțiile care lucrează cu
șirul pot ști astfel unde se termină (NU mai au nevoie de parametru lungime).
ATENȚIE! NU comparăm șiruri cu == , == compară adrese (UNDE se află șirurile), NU conținutul
lor!
ATENȚIE! o constantă șir "test" NU poate fi modificată (nu dați ca parametru la o funcție care
modifică șirul primit)
Funcții #include <stdio.h>
#include <string.h>