Sunteți pe pagina 1din 8

Recapitulare curs

#include <iostream>
using namespace std;

int main()
{
int num = 25;
int* p;
p = &num;
cout << "adresa spre care indica pointerul este =" << p<<endl;
cout << "valoarea de la adresa indicata de p este =" << *p;
return 0;
}

Remarcați diferența între operatorii de adresă și cel de redirectare:

 & este operatorul adresă și se poate citi ca "adresa lui"


 * este operatorul de redirectare și poate fi citit ca "valoarea spre care indică"

Exemplu-un pointer schimba valoarea de la o adresa

1
 
Denumirea unui masiv este de fapt un pointer către primul său element. Daca rulăm urmatorul
cod putem observa urmatoarele:

#include <iostream>
using namespace std;
int main()
{
int v[4] = { 7, 1, 2, 6 };
cout <<"afis primul element "<< *v<<endl; // Afiseaza 7
cout << "afis adresa primului element "<<v; // Afiseaza adresa catre 7
return 0;
}

Exemplu 1/ parcurgerea unui array utilizând pointeri


#include <iostream>
using namespace std;

int main()
{
//un pointer poate lua mai multe valori diferite pe parcursul aceluiași program

int numbers[5];//declar array


int* p;//declar pointer
p = numbers; //aray fara indice este echivalent cu pointerul
*p = 10;//adresei unde pointerul indica i se va atribui valoarea 10
p++; *p = 20;//pointerul este incrementat si la adresa respectiva se atribuie alta valoare
p = &numbers[2]; *p = 30;// pointerul indica adresa celui de-al treilea element al array-ului;
la adresa respectiva se atribuie alta valoare
p = numbers + 3; *p = 40;//a alta varianta cu care pointerul este incrementat;la adresa
respectiva se atribuie alta valoare
p = numbers;
*(p + 4) = 50;//o alta varianta cu care pointerul este incrementat;la adresa respectiva se
atribuie alta valoare
for (int n = 0; n < 5; n++)
cout << numbers[n] << ", ";
system("pause");
return 0;
}

2
Aplicatie curs

Exemplu a: un program care definește un pointer la o structură și alocă memorie folosind


operatorul new. Dezalocarea mememoriei se face folosind operatorul delete.
#include <iostream>
using namespace std;
#include "string"
struct sistem {
string nume;
float disc;
int memorie;
int consum;
void printval()
{
cout << "nume sistem " << nume << endl;
cout << "disc sistem " << disc<<endl;
cout << "memorie sistem " << memorie<<endl;
cout << "consum sistem " << consum<<endl;
}

};
int main()
{
struct sistem* x = new sistem;
x->nume = "lenovo";
x->disc = 850;
x->memorie = 16;
x->consum = 80;
x->printval();
delete x;
//struct sistem* x = new sistem[20]; alocare pt 20 de elemente ale sistemulul
//delete[] x; eliberare memoriei
system("pause");
return 0;
}

Exemplu b: același program care definește o structură și nu alocă memorie dinamic


#include <iostream>
using namespace std;
#include "string"
struct sistem {
string nume;
float disc;
int memorie;
int consum;
void printval()
{
cout << "nume sistem " << nume << endl;
cout << "disc sistem " << disc<<endl;

3
cout << "memorie sistem " << memorie<<endl;
cout << "consum sistem " << consum<<endl;
}

};

int main()
{
struct sistem x ;
x.nume = "lenovo";
x.disc = 850;
x.memorie = 16;
x.consum = 80;
x.printval();
//delete x;
//struct sistem* x = new sistem[20]; alocare pt 20 de elemente ale sistemulul
//delete[] x; eliberare memoriei
system("pause");
return 0;
}

Aplicatie curs

class CDreptunghi {
int latime, inaltime;
public:
void set_values(int, int);
int aria()
{
return latime * inaltime;
}
};

void CDreptunghi::set_values(int a, int b) {


latime = a;
inaltime = b;
}

int main() {
CDreptunghi x;//decl obiect cu un constr implicit------fara param
CDreptunghi* p;//pointer catre clasa
p = new CDreptunghi;
x.set_values(1, 2);//accesare membru prin obiectul x
p->set_values(3, 4);//accesare membru prin pointer

cout << "x area: " << x.aria() << endl;


cout << "*p area: " << p->aria() << endl;

return 0;
}

4
Utilizarea lui new
Enunț 1
Se citesc cele n elemente întregi ale unui array (n dat de asemenea de la tastatură), se
calculează suma lor și se afișează pe un ecran curat atât elementele array-ului cât și suma
lor.
a) cu declararea array-ului ca având un număr maxim de 100 de elemente.
#include <iostream>
#include <conio.h>
using namespace std;

int main(){
int A[100];
int n, S=0;
cout<<"Dati numarul de elemente ale array-ului:"; cin>>n;
for (int i=0; i<n;i++)
{cout<<"Dati elementul A["<<i<<"]="; cin>>A[i];
S+=A[i];}
system("cls");
cout<<"Elementele array-ului sunt:\n";
for (int i=0; i<n;i++)
cout<<A[i]<<endl;
cout<<"Suma elementelor este:"<<S<<endl;
_getch();
return 0;}

b) cu alocarea dinamică a memoriei pentru array după citirea numărului de elemente din
array

5
Enunț 2
Afișarea elementelor a două array-uri utilizând o funcție void cu parametri
a) cele două array-uri sunt inițializate printr-o listă de elemente la declarare
#include <iostream>
#include <conio.h>
using namespace std;

void afiseaza(int A[], int lung)


{for (int i=0;i<lung;i++)
cout<<A[i]<<' ';
cout<<endl;
}
int main(){
int A1[]={5,10,15};
int A2[]={2,4,6,8,10};
afiseaza(A1,3);
afiseaza(A2,4);
_getch();
return 0;}

b) se alocă dinamic memoria pentru fiecare din cele două array-uri după citirea numărului
de elemente pentru fiecare array

6
 Pointers are variables which store the address of other variables in C++.
 More than one variable can be modified and returned by function using
pointers.
 Memory can be dynamically allocated and de-allocated using pointers.
 Pointers help in simplifying the complexity of the program.
 The execution speed of a program improves by using pointers.

Enunț 3
Declararea unui array de dimensiune constanta pentru care se aloca memoria la compilare

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{const int nMaxArr=5;
int Arr[nMaxArr];//se declara un array cu 5 elemente pentru care se aloca memoria la
compilare
//vom umple array-ul cu valorile 42, 43, 44, 45 si 46
for(int i=0;i<nMaxArr;i++)
Arr[i]=42+i;
// afisam valorile din array
for(int i=0;i<nMaxArr;i++)

7
cout<<"Arr["<<i<<"]="<<Arr[i]<<endl;
_getch();
return 0;
}

Enunț 4
Declararea unui array de dimensiune constanta pentru care se aloca memoria la executie
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{const int nMaxArr=5;
int *Arr=new int[nMaxArr];//se declara un array cu 5 elemente pentru care se aloca
memoria la exec.
//vom umple array-ul cu valorile 42, 43, 44, 45 si 46
for(int i=0;i<nMaxArr;i++)
Arr[i]=42+i;
// afisam valorile din array
for(int i=0;i<nMaxArr;i++)
cout<<"Arr["<<i<<"]="<<Arr[i]<<endl;
delete[] Arr; // se elibereaza memoria ocupata de array
_getch();
return 0;}

Enunț 5
Declararea unui array de dimensiune variabila (care va fi cunoscuta doar la executie)

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{int n;
cout<<"Dati numarul de elemente al array-ului:";cin>>n;
int *Arr=new int[n];//se declara un array cu n elemente pentru care se aloca memoria la
executie
//vom umple array-ul cu valorile 42, 43, 44, 45 si 46
for(int i=0;i<n;i++)
Arr[i]=42+i;
// afisam valorile din array
for(int i=0;i<n; i++)
cout<<"Arr["<<i<<"]="<<Arr[i]<<endl;
delete[] Arr; // se elibereaza memoria ocupata de array
_getch();
return 0;
}

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