Pointeri
Un pointer este o variabila ce contine adresa unei alte variabile. O variabila de tip pointer se defineste cu instructiunea
tip * nume;
Variabilele tip pointer pot fi initializate doar cu adrese.
Pentru a calcula adresa unei variabile se utilizeaza operatorul &. Daca x este o variabi 535c22f la oarecare, expresia &x este adresa lui x. De exemplu putem scrie
int n;
int * pn; // pn este o variabila de tipul pointer la int
pn = &n; // initializeazǎ pn cu adresa lui n
Variabilele de tip pointer pot fi initializate la declararea lor. Putem scrie de exemplu
int n, *pn = &n;
Pentru a obtine valoarea variabilei indicate de un pointer se utilizeaza operatorul * (numit si operator de adresare indirecta).
Fie de exemplu instructiunile
int k, n= 10;
int * pn, *pk;
Instructiunile
k = n;
si
pn = &n;
k = *pn;
sunt echivalente, k primeste valoarea 10. (Variabila pn a fost initializata in prealabil cu adresa lui n).
Instructiunile
k = n;
si
pk = &k;
*pk = n;
sunt echivalente.
In final, instructiunile
k = n;
si
pk = &k;
pn = &n;
*pk = *pn;
sunt echivalente;
Orice variabila tip pointer trebuie initializata inainte de a fi utilizata. De exemplu, urmatoarea secventa de instructiuni nu este corecta
int *pn;
*pn = 5;
deoarece variabila pn nu a fost initializata. O secventa corecta este
int *pn;
int x;
pn = &x;
*pn = 5;
In acest caz variabila pn a fost initializata cu adresa unei variabile de tip intreg, x.
Probleme rezolvate
Problema Sa se defineasca o functie care sa permute valorile a doua variabile de tip double. Prototipul functiei va fi
void perm(double * a, double * b);
Programul este urmatorul.
# include <iostream.h>
functie ce permuta valorile a doua variabile
void perm(int* a, int* b)
// testarea functiei perm
int main()
Rezultatele executiei programului sunt prezentate in caseta text.
Amintim ca in limbajul C singura modalitate ca un parametru al unei functii sa fie un parametru de iesire este ca el sa fie de tip pointer.
Problema Se considera un vector cu 10 componente intregi. Sa se afiseze adresele corespunzatoare componentelor vectorului
utilizand operatorul & de calcul al adresei
utilizand o variabila tip pointer ce va primi ca valoare initiala adresa elementului x[0].
Programul este cel de mai jos.
#include <iostream.h>
int main()
return 0;}
Rezultatele executiei programului sunt prezentate mai jos.
Problema Sa se scrie un program prin care componentele unui vector x cu 10 componente de tip intreg vor primi valorile x[i] = i * i, prin atribuire directa si utilizand o variabila tip pointer ce va primi ca valoare initiala adresa elementului x[0]. Programul este cel de mai jos.
#include <iostream.h>
int main ()
/*componentele vectorului primesc valori prin intermediul pointerilor */
adr = &x[0];
cout<<'valorile componentelor vectorului atribuite prin pointer'<<endl;
cout<<'ind.comp.'<<' '<<'valoare x'<<endl;
for(i = 0; i < 10; i++)
return 0;}
In caseta text de mai jos sunt prezentate rezultatele executiei programului.
Problema Fie un vector cu 6 componente reale. Sa se listeze componentele pare ale vectorului direct si utilizand o variabila de tip pointer. Programul este prezentat mai jos.
#include <iostream.h>
int main()
int i;
cout<<' componentele pare ale vectorului direct'<<endl;
for(i = 0; i < 6; i = i + 2)
cout << i <<' '<< a[i] << endl;
cout<<' componentele pare utilizand o variabila tip pointer'<<endl;
float * adrz;
adrz = a;
for(i = 0; i < 6; i+=2)
In caseta text sunt prezentate rezultatele executiei programului.
|