Curs 9-Pointeri la variabile -Pointeri la siruri de caractere
Variabile si adrese Declararea variabilelor standard int i=10,k[5]; float x=2.0,z[20],y=5. Aceste variabile ocupa un spatiu de memorie dupa cum se poate observa in tabelul de mai jos:
Definirea pointerilor Pointer=o variabila care are ca si valoare o adresa de memorie Variabilele de tip pointer se pot clasifica in: Pointer la date=contine adresa unei variabile sau a unei constante Pointer la functii=contine adresa codului executabil al unei functii Pointer la obiecte=contine adresa unui obiect din memorie
Formatul de declarare al unui pointer: tip * nume; Tip=tipul de baza al pointerului , defineste tipul variabilei la care indica aceasta; poate fi orice tip de variabila Nume=numele variabilei pointer
Operatorii specifici pentru pointeri Operatorul de adresare(referentiere)=& (“adresa lui”) Operator unar care asociat unei variabile sau obiect, returneaza adresa de memorie a acelei variabile sau obiect !!!Dupa declarare pointerul trebuie initializat cu adresa unei variabile, altfel acesta nu poate fi utilizat
Operatorii specifici pentru pointeri Operatorul de indirectare(dereferentiere)=* (“de la adresa” ) Este un operator unar, complementar lui &, care returneaza valoarea inregistrata la adresa de memorie specificata
Operatorii specifici pentru pointeri Operatorul * nu trebuie confundat cu operatorul aritmetic de inmultire Operatorul & nu trebuie confundat cu operatorul & (AND) pentru biti Operatorii & si * au prioritate fata de toti operatorii aritmetici Intotdeauna tipul variabilei si tipul pointerului care indica catre adresa acelei variabile sunt aceleasi
Initializarea variabilelor pointer Dupa declararea pointerului trebuie specificat catre ce anume indica acesta, deoarece implicit nu indica nimic
Ex. Expresii de atribuire cu pointeri: #include <stdio Ex. Expresii de atribuire cu pointeri: #include <stdio.h> int main() {int x=1525, *p1,*p2; p1=&x; p2=p1; printf("p1= %p p2= %p\n",p1,p2);//afiseaza adresa lui x, nu valoarea sa! printf("x=%d\n",x); //afiseaza valoarea lui x printf(“x=%d”, *p1); //afiseaza valoarea lui x, echivalent printf(“x=%d”,*p2); return 0;} Efect: atat p1 cat si p2 indica spre x, specificatorul de format %p face ca printf() sa afiseze o adresa in formatul utilizat de calculator Rezultate afisate p1=0012FF78 p2=0012FF78 x=1525
Ex.2 Pointeri la caractere Ex.1 Pointeri la intregi #include <stdio.h> int main(){ int i1, i2, *p1, *p2; i1 = 5; p1 = &i1; i2 = *p1 / 2 + 10; p2 = p1; printf("i1 = %d, i2 = %d, *p1 = %d, *p2 = %d\n", i1, i2, *p1, *p2); return 0;} Ex.2 Pointeri la caractere int main() { char c = 'Q'; char *pc = &c; printf("%c %c\n", c, *pc); c = '/'; printf("%c %c\n", c, *pc); *pc = '('; printf("%c %c\n", c, *pc); Rezultate afisate i1 = 5, i2 = 12, *p1 = 5, *p2 = 5 Rezultate afisate Q Q / / ( (