Sunteți pe pagina 1din 11

.

Fundamentele programrii
Curs 7

ef lucr.dr.ing. GENGE Bla


Universitatea Petru Maior, Departamentul de Informatic
Trgu Mure, Romnia
bela.genge@ing.upm.ro

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Pointeri

Sunt variabile care conin adresele altor variabile sau funcii


Sintaxa de declarare:
tip * numeptr;
Operatori:
operatorul *: accesarea coninutului variabilei adresate
operatorul &: aarea adresei variabilei

Valoare iniial: NULL

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Exemple de utilizare
.
Exemplu1
.
int var = 1, *p = NULL;
p = &var;
*p = 10;
*++p
= 20;
.
.
Exemplu2
.
int var[20], *p = var;
// Determinarea adresei unui element cutat
while(*p != -1 && *p != 20) ++p; //-1 este ultimul element
din vector
.while(*p != -1 && *p++ != 20); //???
..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. ntrebri

Fie declaraia: int v, *ptr = &v;.


Ce se va aa pentru: cout << ptr; cout << &ptr;

Fie declaraia: char v, char* ptr;.


Ce se va aa pentru: cout << sizeof(v); cout << sizeof(ptr);

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Legtura ntre tablouri i pointeri

Indexarea: []
Tablouri: a[i]
Pointeri: *(a + i)
a - adresa de baz, i - index, * - accesare coninut

Secvene echivalente: a, &a[0], &*a


Compunerea &* i anuleaz semnicaia

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Exemple
.
Exemplu
.
int a[50];
for ( int i = 0 ; i < n ; ++i ) {
scanf("%d", a + i); //&a[i]
// sau
scanf("%d", &*(a + i)); //&a[i]
// sau
cin >> *(a+i);
}
.
.
Exemplu
.
int a[50], *p = a;
while ( n-- > 0 ) {
cin >> *p++;
. // Atenie: a++ eroare (ptr constant) }
..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Exemplu

.
Exemplu
.
int a[50], *p = a;
++p;
cout
<< p - a;
.

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Pointeri constani

const int* p = a; ++p; *p=10; // ok (incr); eroare (atrib)


int const* p = a; ++p; *p=10; // ok (incr); eroare (atrib)
int * const p = a; ++p; *p=10; // eroare (incr); ok (atrib)
const int * const p = a; ++p; *p=10; // eroare (incr); eroare
(atrib)

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. S se determine adresa unui element cutat

.
Exemplu2
.
int var[20]; const int *p = var;
// Determinarea adresei unui element cutat
while(*p != -1 && *p != 20) ++p; //-1 este ultimul element
.din vector

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Problem

Fie numrul: unsigned int z = 2345678987;


S se aeze valorile celor 4 octei ai lui z

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

. Problem

Se citesc n numere (octei) de la tastatur (multiplu de 4)


S se aeze valorile ntregi rezultate prin alipirea a cte 4 octei

..

ef lucr.dr.ing. GENGE Bla

Fundamentele programrii

.
..

.
..

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

S-ar putea să vă placă și