Sunteți pe pagina 1din 10

Limbaje de programare

inginereti
Tema 7
C++: pointeri, funcii

VARIABILE POINTER
Pointerii sunt variabile care au ca valori adresele altor variabile (obiecte).
Variabila este un nume simbolic utilizat pentru un grup de locaii de
memorie.
Valoarea memorat ntr-o variabil pointer este o adres.
Din punctul de vedere al coninutului zonei de memorie adresate, se disting
urmtoarele categorii de pointeri:
pointeri de date (obiecte) - conin adresa unei variabile din memorie;
pointeri generici (numii i pointeri void) - conin adresa unui obiect
oarecare, de tip neprecizat;
pointeri de funcii - conin adresa codului executabil al unei funcii.

DECLARAREA VARIABILELOR POINTER


Sintaxa declaraiei unui pointer de date este:
tip *identificator_pointer;
Simbolul * precizeaz c identificator_pointer este numele unei variabile
pointer de date, iar tip este tipul obiectelor a cror adres o va conine.
Exemplu:
int u, v, *p, *q;
double a, b, *p1, *q1;

// *p, *q sunt pointeri de date (ctre int)


// *p1, *q1 sunt pointeri ctre date de tip double

Pentru pointerii generici, se folosete declaraia:


void *identificator_pointer;
Exemplu:
void *m;

INIIALIZAEA VARIABILELOR POINTER


Exist doi operatori unari care permit utilizarea variabilelor pointer:
& - operatorul adres (de refereniere) - pentru aflarea adresei din
memorie a unei variabile;
* - operatorul de direcionare (de defereniere) - care furnizeaz valoarea
din zona de memorie spre care pointeaz pointerul operand.
Exemple:
- aplicatie

int x, y, *q; q=&x;


*q=8;
// echivalent cu x=8;
q=&5;
// invalid - constantele nu au adres
*x=9;
// invalid - x nu este variabil pointer
x=&y;
//invalid: x nu este variabil pointer, deci nu poate fi folosit
cu operatorul de defereniere
y=*q + 3;
// echivalent cu y=x+3;
*q = 0;
// seteaz x pe 0
*q += 1;
// echivalent cu (q)++ sau cu x++

POINTERI GENERICI
La declararea pointerilor generici ( void nume; ) nu se specific un tip, deci
unui pointer void i se pot atribui adrese de memorie care pot conine date de
diferite tipuri: int, float, char, etc. Aceti pointeri pot fi folosii cu mai multe
tipuri de date, de aceea este necesar folosirea conversiilor explicite pentru a
preciza tipul datei spre care pointeaz la un moment dat pointerul generic.
void *v1;
int a, *q1, *q2;
q1 = &a;
v1 = q1;
q2 = (int *) v1;

STRUCTURA UNEI FUNCII

Funcia reprezint o aplicaie definit pe o mulime D, cu valori n mulimea


C, care ndeplinete condiia c oricrui element din D i corespunde un unic
element din C.
Sintax
tip_val_return nume_func (lista_declaraiilor_param_
formali)
{
declaraii_variabile_locale
instruciuni
return valoare
}

FUNCII
Execuia programului ncepe cu funcia principal, numit main
Funciile pot fi descrise n cadrul aceluiai fiier, sau n fiiere diferite
O funcie este formata din antet si corp
Dac funcia nu ntoarce nici o valoare, n locul tip_val_return se specific
void
Dac tip_val_return lipsete, se consider, implicit, c acesta este int
Dac funcia ntoarce o valoare, se folosete instruciunea return valoare.
La execuie, la ntlnirea acestei instruciuni, se revine n funcia apelant.
Nu este admis definirea unei funcii n corpul altei funcii.

APELUL I PROTOTIPUL FUNCIILOR

Sintaxa:
nume_funcie (lista_parametrilor_efectivi);
Parametrii efectivi trebuie s corespund cu cei formali ca ordine i tip
Variabilele declarate n interiorul unei funcii, ct i parametrii formali ai
acesteia nu pot fi accesai dect n interiorul acesteia. Aceste variabile sunt
numite variabile locale i nu pot fi accesate din alte funcii

Exerciiu: S se scrie un program care citete dou numere i afieaz cele mai mare
divizor comun al acestora, folosind o funcie care l calculeaz.
#include <iostream.h>
int cmmdc(int x, int y)
{
if (x==0 || y==1 || x==1 || y==0)
if (x<0)
x=-x;
if (y<0)
y=-y;
while (x != 0)
{
if ( y > x )
{int z=x; x=y; y=z; }
x%=y;
}
return y;}

return 1;

void main()
{
int n1,n2; cout<<n1=;cin>>n1; cout<<n2=;cin>>n2;
int diviz=cmmdc(n1,n2);
cout<<Cel mai mare divizor comun al nr-lor:<<n1<< i ;
cout<<n2<< este:<<diviz<<\n;

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