C++ Dinamik Bellek

Isaretçi Islemleri ve
Dinamik Bellek

Isaretçilere daha önce görmüs oldugumuz artirma (++), azalatma
(--), çikarma (-), toplama (+) islemlerini uygulayabilirsiniz.
Bunlarin yaninda iliskisel operatörleri de ( <=, =, !=, >= )
kullanmaniz mümkündür. Iliskisel operatörlerin sadece ayni tip
isaretçiler üzerinde uygulanacagini unutmayiniz.



Bir dizinin boyutu degisken olabilir, daha dorusu bir program içinde
degiskenler ve isaretçiler kullanilarak diziler dinamik bellek
yerlesimi ile yapilabilir. C++ da dinamik belles islemleri new ve
delete komutlari ile gerçeklestirilir.



Genel tanimimiz:



new <tür> [<[uzunluk]>]



new int

new char

new double [10]

new float[n]

new char[strlen(s) + 1]

new komutu ile yer tahsis etme islemi yapmaktayiz. new int ->1 int''lik
yer tahsis edilmistir. Simdide tahsis ettigimiz yerin serbest
birakilisini ele alalim. Bu sirada da delete komutu devreye giriyor.
Daha dogrusu delete operatöürü new operatörüyle tahsis edilmis olan
bloklari serbest birakmak için kullanilir.



Genel tanimimiz:



Delete[ ] <isaretçiadi>;

Eger yer ayirma islemi tek parça olarak yapilmissa (köseli parantez
kullanilmadan yapilmissa) silme islemi de köseli parantez
kullanilmadan yapilmalidir. Bir de suna dikkat edelim



Delete x+1; //hatalidir

Delete (x+1); //dogrudur

kullanilacaktir. Simdi bu söylediklerimizi asagidaki örnek üstünde
uygulayalim.



//dinamik.cpp

//dinamik bellek kavrami

#include <iostream.h>



struct tarih { //struck u daha görmedigimiz

int ay; //icin su an buraya egilmeyin.

int gun;

int yil;

};



void main()

{

int i, *is1, *is2; // i bir sabit ve *is1, *is2 isaretcilerimiz



is1 = &i;

*is1 = 77;

is2 = new int;

*is2 = 178;

cout << "Degerler "<<i<<" "<<*is1<<" "<<*is2<<"\n";

is1 = new int;

is2 = is1;

*is1 = 95454;

cout << "Degerler "<<i<<" "<<*is1<<" "<<*is2<<"\n";

delete is1;



float *float_is1, *float_is2 = new float;



float_is1 = new float;

*float_is2 = 3.14159;

*float_is1 = 2.4 * (*float_is2);

delete float_is2;

delete float_is1;



tarih *tarih_is;



tarih_is = new tarih;

tarih_is->ay = 10;

tarih_is->gun = 18;

tarih_is->yil = 1938;

cout<<tarih_is->ay<<"/"<<tarih_is->gun<<"/"<<tarih_is->yil<<"\n";

delete tarih_is;



char *c_is;



c_is = new char[37];

delete [] c_is;

c_is = new char[sizeof(tarih) + 133];

delete [] c_is;

}



Hanci.org sizlere daha iyi hizmet sunmak için çerezleri kullanıyor.
Hanci.org sitesini kullanarak çerez politikamızı kabul etmiş olacaksınız.
Detaylı bilgi almak için Gizlilik ve Çerez Politikası metnimizi inceleyebilirsiniz.