Documente Academic
Documente Profesional
Documente Cultură
Un pointer este o variabilă care are ca valori adrese. Pentru modificarea unui parametru
în cadrul unei funcţii este necesar ca programul să transmită funcţiei adresa respectivului
parametru (un pointer). Funcţia, la rândul ei, utilizează apoi o variabilă pointer pentru a
accesa locaţia de memorie corespunzătoare.
• Pentru simplitate (pentru reducerea codului), multe programe tratează un şir de
caractere ca un pointer şi manipulează conţinutul şirului cu ajutorul operaţiilor cu
pointeri.
• La incrementarea unei variabile pointer, C++ incrementează automat adresa cu o
valoare adecvată (1 octet pentru char, 2 octeţi pentru int, patru octeţi pentru
float,etc.), astfel încât pointerul să indice următoarea valoare pe care o are tipul
pointerului.
• Programele pot utiliza pointeri pentru a lucra cu vectori întregi sau în virgulă mobilă.
Fie de exemplu:
int x,y;
atunci, dacă p are ca valoare adresa lui x, atribuirea
y=x+100
este identică cu:
y=*p+100
În mod analog, atribuirea:
*p=3
este identică cu:
x=3.
Atunci când programele transmit vectori (un şir de caractere, de pildă) către funcţii,
C++ transmite ca parametru adresa primului element al vectorului. Prin urmare este uzual
ca funcţiile să folosească pointeri la şiruri de caractere
#include <iostream.h>
#include <stdlib.h>
void afiseaza_sir(char *string)
{
while (*string != '\0')
{
cout << *string<<endl;
string++;
}
}
system ("pause");
}
După cum s-a văzut, funcţiile pot parcurge caracterele unui şir prin intermediul
unui pointer până la întîlnirea caracterului NULL. Programul următor utilizează în funcţia
lungime_sir un pointer la un şir de caractere pentru a determina numărul de caractere din
şir :
#include <iostream.h>
#include <stdlib.h>
int lungime_sir (char *sir)
{
int lungime =0;
while (*sir != '\0')
{
lungime++;
sir++;
}
return(lungime);
}
system ("pause");
}
Deşi pointerii sînt cel mai uzual utilizaţi în cazul şirurilor de caractere, aceştia pot fi
folosiţi şi pentru alte tipuri de vectori. Spre exemplu, programul care urmează, foloseşte un
pointer la un vector de tip float pentru a afişa valorile în virgulă mobilă conţinute :
#include <iostream.h>
#include <stdlib.h>
system ("pause");
}
Un alias este un alt nume dat unei variabile. În C, programele pot crea un alias
utilizând pointerii. C++ simplifică crearea de aliasuri utilizând referinţele. Pentru a crea o
referinţă, se utilizează operatorul de referenţiere (&):
int variabilă;
int& alias_variabilă;
Operatorul de referenţiere urmează imediat unui tip. Fiecare alias poate corespunde
numai unei singure variabile de-a lungul existenţei sale. Următorul program creează două
aliasuri şi le utilizează pentru a afişa adresele variabilelor specificate:
#include <iostream.h>
#include <stdlib.h>
void main(void)
{
int a=1001;
int& a_alias=a;
float pret=39.35;
float& pret_alias=pret;
cout<<"Valoarea lui a: "<<a<<'\n'<<"aliasul:"<<a_alias<<'\n';
cout<<"Pretul : "<<pret<<'\n'<<"aliasul: "<<pret_alias<<'\n';
a_alias++;
pret_alias++;
cout<<"Valoarea lui a : "<<a<<'\n'<<"aliasul :"<<a_alias<<'\n';
cout<<"Pretul : "<<pret<<'\n'<<"aliasul: "<<pret_alias<<'\n'<<endl;
system ("pause");
}
#include <iostream.h>
#include <stdlib.h>
system ("pause");
}
În C, programele pot transmite parametri către funcţii utilizând apelarea prin valoare
şi apelarea prin pointer de referinţă. În C++, programele pot utiliza o a treia tehnică,
apelarea prin referinţă. Următorul program ilustrează modul în care se utilizează toate cele
trei tehnici:
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
void main(void)
{
int a=1,b=2,c=3;
int& a_alias=a;
int& b_alias=b;
int& c_alias=c;
apel_prin_valoare(a,b,c);
cout<<"Prin valoare: "<<a<<b<<c<<endl;
apel_prin_pointer_referinta(&a,&b,&c);
cout<<"Prin pointer: "<<a<<b<<c<<endl;
apel_prin_referinta(a_alias,b_alias,c_alias);
cout<<"Prin referinta: "<<a<<b<<c<<endl;
system ("pause");
}
Modul de lucru
1) c=(a+b)/2
2) Dacă f(c)=0, atunci c este soluţia căutată şi se întrerupe procesul de calcul.
3) Dacă f(a)*f(c)<0, atunci se pune b=c, altfel a=c
4) Dacă b-a<EPS, atunci procesul de calcul se întrerupe şi rădăcina se ia media
dintre a şi b.
Altfel algoritmul se reia de la pasul 1).
Se va aplica programul de mai sus la calculul rădăcinii ecuaţiei:
x-sin(x+1)=0
în intervalul [0.5 , 1], cu o eroare mai mică de 1e-8.
6. Să se realizeze un program ce creează o listă simplă înlănţuită ale cărei noduri sunt
structuri ce au următoarele câmpuri:
cheie, nume, prenume, vârstă, salariu.
Se va ordona lista crescător după nume şi după vârstă.
7. Să se realizeze un program pentru calculul rădăcinilor ecuaţiei de gradul II folosind o
funcţie ai carei parametrii (coeficienţii ecuaţiei) vor fi apelaţi prin pointer şi prin referinţă.