Prezentarea se încărcă. Vă rugăm să așteptați

Prezentarea se încărcă. Vă rugăm să așteptați

Curs 10-Operatii cu pointeri -Pointeri la tablouri

Prezentări similare


Prezentarea pe tema: "Curs 10-Operatii cu pointeri -Pointeri la tablouri"— Transcriere de prezentare:

1 Curs 10-Operatii cu pointeri -Pointeri la tablouri

2 Operatii cu pointeri Operatii permise Operatii nepermise Compararea
Initializarea. Atribuirea Adunarea/scaderea a unui numar intreg la/dintr-un pointer Scaderea a doi pointeri Incrementarea/decrementarea Operatii nepermise Adunarea a 2 sau mai multi pointeri Adunarea/scaderea tipului float/double la/din pointeri Inmultirea a 2 sau mai multi pointeri Impartirea a 2 sau mai multi pointeri Aplicarea operatorilor pe bit pointerilor

3 Compararea a 2 pointeri Operatorii relationali permit compararea a 2 pointeri intr-o expresie relationala numai daca acestia pointeaza spre obiecte de acelasi tip. Operatorii de egalitate = = si ! = permit compararea pointerilor cu constanta NULL (definita in <stdio.h> ); in C++ se recomanda utilizarea comparatiei cu 0 : p==0 si p!=0

4 Initializarea. Atribuirea
Format de initializare: tip *nume =const tip=tipul de baza al pointerului, defineste tipul variabilei la care indica acesta nume=numele variabilei de tip pointer const=expresie cu valoare constanta Operatorul de atribuire “=” permite initializarea si atribuirea de valori la pointeri p=NULL; //initializare *p=2; //atribuire p=&nr; //atribuire

5 Adunarea/scaderea unui numar intreg la/dintr-un pointer
Formatul: tip *p1; p1+n reprezinta adunarea la adresa indicata de p a valorii n*sizeof(tip) p1-n reprezinta scaderea din adresa indicata de p a valorii n*sizeof(tip)

6 Scaderea a 2 pointeri Formatul tip *p1,*p2;
p1-p2 esre permis numai pentru elemente de acelasi tip, iar rezultatul reprezinta numarul de obiecte care separa un pointer de celalalt

7 Incrementarea/decrementarea
Formatul: tip *p; p++ si p-- ⇔adunarea /scaderea cu *sizeof(tip). incrementarea/decrementarea nu reprezinta adunarea/scaderea propriuzisa cu 1 (nici a adresei nici a valorii spre care indica pointerul respectiv). ‰ dupa incrementarea/decrementarea unui pointer acesta va indica spre elementul urmator/anterior de acelasi tip cu tipul sau de baza

8 Pointeri la tablouri Accesul la elementele tablourilor se realizeaza in C/C++ in 2 moduri: Prin intermediul indicilor Prin aritmetica pointerilor (accesul la elemente mult mai rapid ⇒creste viteza de executie a programului) Numele tabloului scris fara indice este un pointer constant care este de tipul elementelor tabloului si are ca valoare adresa primului element al tabloului

9 Pointeri la siruri Se considera tabloul unidimensional a[i] i=0…n-1 si pointerul p de acelasi tip cu tabloul p=a Denumire tablou=pointer la tablou=adresa primului element al tabloului(a[0]) Notatii echivalente Adresa tabloului a ⇒ &a ⇒ &a[0] Adresa variabilei a[i] &a[i] ⇒ a+i ⇒ p+i Valoarea variabilei a[i] a[i] ⇒ *(a+i) ⇒ *(p+i) ⇒ p[i]

10 Exemple Ex.2: pointeri la siruri de caractere. Afisarea unui sir de caractere utilizand un pointer cu index. #include <stdio.h> int main() {char sir[]=“Pointeri la siruri"; char *p; int i; p=sir; for (i=0;p[i];i++) printf("%c", p[i]); return 0;} Rezultate afisate: Pointeri la siruri

11

12 Pointeri la matrici Se considera matricea a[i][j], i=0…m-1, j=0…n-1 si pointerul p de acelasi tip cu tipul matricii, p=a Denumirea matricii=adresa primului element al matricii (a[0][0]) Notatii Adresa matricii a ⇒ &a[0][0] ⇒ &a Adresa variabilei a[i][j] &a[i][j] ⇒ a[i]+j ⇒ p+k ⇒ *(a+i)+j unde k=i*n+j Valoarea variabilei a[i][j] a[i][j] ⇒ *(a[i]+j) ⇒ *(p+k) ⇒ *(*(a+i)+j)

13 Exemplu Determinarea max. elementelor unei matrici utilizand pointeri
#include<stdio.h> int main() { int a[3][3],i,j, *p, max; for (i=0;i<3;i++) for (j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); } p=&a[0][0]; max=*p; while (p<&a[0][0]+9) { if(*p>max) p++; printf(“\nmax = %d",max); return 0;} Rezultate afisate: a[0][0]=1 a[0][1]=2 a[0][2]=3 a[1][0]=4 a[1][1]=5 a[1][2]=6 a[2][0]=10 a[2][1]=8 a[2][2]=9 max = 10


Descărcați ppt "Curs 10-Operatii cu pointeri -Pointeri la tablouri"

Prezentări similare


Publicitate de la Google