Laboratoriya №2. Dinamiki massivlər. Funksiyaya massivlərin göstərici kimi ötürülməsi Göstəricilərə məxsus əsas özəlliklərdən biri də onlar vastəsilə dinamik olaraq, yəni proqram icra olunan zaman yaddaşda yer ayırmaq və istifadə etdikdən sonra sonra həmin ayrılmış yeri azad etmək olar. Bunun üçün C++ dilində müvafiq olaraq new və delete əmrlərindən istifadə olunur.
New əmri vastəsilə yaddaşda dinamik yer ayırmaq üçün və həmin yaddaş sahəsini verilmiş göstəriciyə mənimsətmək üçün aşağıdakı sintaksisdən istifadə edirlər:
göstərici = new tip; Bu zaman qeyd olunan tipli dəyişən üçün yaddaşda yer ayrılacaq və göstəriciyə mənimsədiləcək. delete x; -isə x göstəricisi üçün ayrılan yaddaş sahəsini azad edəcək.
Nümunə: #include #include using namespace std;
int main ()
{ int *x;
x = new int;
*x = 21;
cout << "x = " << x << "\n" << "*x = " << *x;
delete x;
getch ();
}
Dinamiki massivlərin yaradılması
Qeyd elədik ki new operatoru ilə yaddaşda yalnız bir dəyişən üçün yox, tələb olunan sayda elementdən ibarət massivüçün də yer ayıra bilərik. Bu zaman elementlərin sayını tip –dən sonra kvadrat mötərizə içində göstərməliyik. göstərici = new tip[say];
Məsələn: A = new float[6]; -Bu təsvir zamanı A massivi həqiqi tipli 6 element üşün yaddaş ayrılacaq. Elementlərin sayını dəyişənlə də ifadə etmək olar. Bu halda dəyişənin qiyməti əvvəlcədən məlim olmalıdır. Məsələn
k=5; St = new char[6]; və ya cin>>n; p=new int[n]; Dinamik massiv üçün ayrılan yeri azad etmək üçün isə aşağıdakı yazılışdan istifadə olunur:
delete[] göstərici; Burada delete əvəzinə delete[] yazmağımız adi dəyişən üçün deyil, massivüçün ayrılan yeri silməli olduğumuzu bildirir.Məsələn delete [] p; Aşağıdakı misalda x dinamiki massivinin 6 tam tipli elementi üçün yaddaş ayrılır. Klaviaturadan həmin elementlərə qiymət daxil edilir və çap edilir.
#include #include using namespace std;
int main (){
int i, *x;
x = new int[6];
for (i=0; i<5; ++i)
cin>>x[i];
for (i=0; i<5; ++i)
cout << "x[" << i << "] = " << x[i] << " " ;
delete[] x;
getch ();
}