#include <iostream>
using namespace std;
/*
int main()
{ //Pointer_New_Delete ile Dinamik bellek yönetimi
// dinamik olarak yer tahsis edilmesi ve tahsis edilen yerin silinmesi
// ram de ayrılmış olan alanın işi bittikten sonra ayrılmış olan yerin ram den silinmesi
// Neyi ifade eder !! pointer ile işlenen veri silinmez ise ayrılmış olan yer ram de yer tutmaya devam eder
// Sonraki gelen yeni verilere yer açılması için delete komutunu kullanmalıyız
// Aksi taktirde yeni gelen veriler ramde yeni yerler tutacağından ramin şişmesine yol açar
// Ram de biriken veriler ramin çökmesine sebep olmasın diye ayrılmış yerin boşaltılması delete ile gerçekleşir.
int *ptr = new int;
*ptr = 5;
cout << *ptr << endl;
delete ptr; // kod bloğunun görevi bittikten sonra kullanılmalı
ptr = NULL; // *ptr değişkenimizin ayrılmış olan alanın artık boş olduğu anlamına gelir
if (ptr != NULL) // ptr değişkenimizin içeriği boş değilse ekrana yazdır
{
// ptr değişkenimin yeniden çalışana kadar
// NULL boş bırakılan alanı ram tekrar kullanıma açar
// aksi takdirde ayrılmış bölge daha önceki tuttuğu veriyi ram de tutmaya çalışır
//
cout << ptr << endl;
}
// ptr değişkenimize yeni veriyi atamak için new int dememiz gerekir ki yeni değeri döndürebilsin
ptr = new int; // ptr değişkenimizin yeni değerini *ptr yani pointera atamış olduk
*ptr = 10;
cout << *ptr << endl;
delete ptr; // boşalltığımız alan ptr değişkeninin içermiş olduğu değer ram den temizlenmiş oldu
return 0;
}
*/
/*
int main()
{
// pointerlar ile daha güvenli çalışmak için NULL değerini en başında belirtmek kodun güvenliğini sağlar
// Yada foksiyon içinde tanımlayıp çağara biliriz
// NULL pointer
int *p;
p = NULL;
if (p != NULL)
{
*p = 5;
}
else
{
p = new int;
*p = 5;
}
cout << *p << endl;
return 0;
}
*/
//Fonksiyonların pointer return edilmesi
/*/
int *fonksiyon()
{
int* p = new int;
*p = 37;
return p;
}
int main()
{
int* ptr;
ptr = fonksiyon();
if (ptr !=NULL)
{
cout << *ptr << endl;
delete ptr;
}
return 0;
}
*/
int main()
{
//Pointer ile Kullanıcıdan veri alınması ve Delete ile belleğin temizlenmesi
int n;
cout << "Kac adet tam sayi girmek istersiniz? : ";
cin >> n;
int *p = new int[n];
for (int i=0;i<n;i++)
{
cin >> p[i];
}
int sum = 0;
for (int i=0;i<n;i++)
{
sum += p[i];
}
cout << "Sum : " << sum << endl;
delete[] p;
return 0;
}