Ana içeriğe atla

Pointer ve & (ampersant) Konusunu Kavrayalım

 

#include <iostream>

#include <string>

using namespace std;

/*

int main() 

int x = 7;


cout << "x 'in degeri : " << x << endl;

cout << "x 'in RAM deki adresi : " << &x << endl; 

// & ile ramdeki ilk adres değeri  000000D3ED4FFCF4 ni bulduk 

// int 4 byte oldugundan bu adresde dahil 4 byte 'lik yerin tamamını hesaplar

// ama bize  4 byte lik adresin ilk değerini verir.

return 0; 

}

*/

/*

int main()

{

// Pointer  ve & (ampersant) Konusunu Kavrayalım

int x = 7;

int *p = &x; // pointer ile x 'in adres değerini bulma



cout << "x 'in degeri : " << x << endl;

cout << "x 'in & ile RAM deki adresi : " << &x << endl;


//pointer ile gösterimi


cout <<"pointer p ile adres degeri : "<< p << endl;

cout << "*p ile ( *p = &x) x in pointer degeri : " << *p <<" bulduk "<< endl;


// RAM 'deki adresi bulma

// &x in RAM deki değerini & (ampersant ) ile bulduk            000000E4126FF564

// p pointer bize int *p = &x x'in RAM 'in adres değerini verir 000000E4126FF564


// Değişkenin değerlerini bulma

// normalde x in değerini cout<<x<<endl; buluruz         x 'in degeri : 7

// pointer *p ile de x in değerini : *p=&x; ile buluruz  x in pointer degeri : 7 bulduk


return 0;

}

*/

/*

int main() 

{

//String'ler ile Pointer

string food = "pizza";

string *ptr = &food;


//Değişken Değerlerini (pizza) yazdıralım

cout << food << endl; // pizza

cout << *ptr << endl; // pizza

//Değişken RAM adreslerini Bulma

cout << &food << endl; // 0000001DBA6FF718

cout << ptr << endl;   // 0000001DBA6FF718


//Kodumuzun Çıktısı

//  pizza

// pizza

// 0000001DBA6FF718

// 0000001DBA6FF718

cout << endl;

// Pointer ile değişkenin içeriğini değiştirme

cout << "Pointer ile icerik degistirme " << endl;

*ptr = "Hamburger";

cout << food << endl;

cout << *ptr << endl;


// Kodun Çıktısı : 

//  Hamburger

// Hamburger

//**** Pointerlar RAM 'deki adresin içeriğini değiştirir güncelle sil işlemleri yapar

//**** Çıktıya baktığımızda bir önceki RAM adres değerinin aynı ama içeriğinin (Hamburger) değiştini görürüz

// Pointer ile adres sabit kalır içerik değişir.

cout << endl;

cout << "Pointer ile RAM Adresi sabit ve icerik degisti  " << endl;

cout << &food << endl;

cout << ptr << endl;


//// Kodun Çıktısı 

//// Pointer ile RAM Adresi sabit ve icerik degisti

// 00000021466FF5A8

// 00000021466FF5A8


//Tüm Kodumuzun Çıktısı

//Değişkenimizin içeriği

/* pizza

pizza


// Değişkenimizin RAM adresi

000000AEFA54FBE8

000000AEFA54FBE8


Pointer ile icerik degistirme

Hamburger

Hamburger


Pointer ile RAM Adresi sabit ve icerik degisti

000000AEFA54FBE8

000000AEFA54FBE8

*\


return 0;

}

*/


int main() 

// iki adet pointer oluşturup ikisine x 'in adresini atayabiliriz

// double 8 byte 'dir.

double x = 3.14;

double *y = &x;

double *z = &x;


cout << "Adress of x is " << &x << endl;

cout << "Adress of y is " << &y << endl;

cout << "Adress of z is " << &z << endl;

cout << endl;

cout << "Value of x is " << x << endl;

cout << "Value of y is " << y << endl;

cout << "Value of z is " << z << endl;

cout << endl;

// y 'nin içeriğini değiştirme *y x'in adresini tuttuğu yerde ki değer 3.14 değiştir. yani x 'in yeni değeri 70.19 ile

// Neden *y=70.19 dediğimizde x 'in içeriği değişti?

//Pointerlar kendi içlerinde adress tutar ve adres deki değerin içeriğini değiştirir.

// pointer adres değişkenimizin içeriği *y = &x; x 'in değeri 3.14 tür. 

// değiştir *y = 70.19; x 'in artık yeni değeri 70.19 dur.

*y = 70.19;

cout << x << endl;

cout << endl;

cout << "Value of x is " << x << endl;

cout << "Value of y is " << y << endl;

cout << "Value of z is " << z << endl;


// Kodlarımızın Çıktısı 

//  Adress of x is 000000971F0FF508

// Adress of y is 000000971F0FF528

// Adress of z is 000000971F0FF548


// Value of x is 3.14

// Value of y is 000000971F0FF508

// Value of z is 000000971F0FF508


// 70.19


// Value of x is 70.19

// Value of y is 000000971F0FF508

// Value of z is 000000971F0FF508


return 0; 

}

Sonraki Ders : 

Pointerlar ile Fonksiyonların Kullanımı


Bu blogdaki popüler yayınlar

C++ float double string Aritmatik işlemler

  #include <iostream> using namespace std; //void fonk()  //{ // cout << "Merhaba\n"; //} // //int main()  //{ // cout << "Merhaba C++\n"; // // fonk(); // return 0; //} /* int main()  { //Değişkenler rakam ile başlayamaz //Değişken isimlerinde türkçe karakter olmaz //değişken isimleride boşluk olmaz //Değişken isimlerinde nokta vb karakter olmaz //******************************************** //int ram'da 4 byte yer kaplıyor -2147483648 to 2147483647 //char 1 byte  (ASCII tablosu) //bool 1 byte //float 4 byte //double 8 byte //CPU ramdan byte byte okur //Void herhangi bir return etmiyecekse kendi aldığı değerleri kullanır.Bir değer döndürmez. string isim; isim = "Kaan"; int yas; yas = 22; cout << "Bir zamanlar " << isim << " isminde bir genc varmis." << endl << isim << " " << yas << " yasindaymis." ...

C++ try catch, Call by Value, Call by Referans Kullanımı

  #include <iostream> using namespace std; //int main()  //{ // int bolunen, bolen; // cout << "Lutfen bolunen sayiyi giriniz : "; // cin >> bolunen; // cout << "Lutfen bolen sayiyi giriniz : "; // cin >> bolen; // // int sonuc; // // try{ // if (bolen == 0) // throw 99;//Burada throw için herhangi bir tam sayı girilir.örn: negatif sayılar gibi durumlar için çoğaltılabilir // sonuc = bolunen / bolen; // // cout << "Sonuc : " << sonuc; // } // catch(int hataKodu){ // cout << "Bolen sayi sifir olmamali !!" << endl; // } // // cout << endl; // return 0; //} /* try catch Kullanımı :  * try catch kullanıcının beklenmedik bir girdi vermesi sonucu  * programın çökmesini engllemek amacı ile kullanılır * Ayrıca veri tabanı bağlantılarında bağlantının olmaması ve  * işlem sonrasında veri tabanı bağlantısını kapatma veya programın başlangıcında bağlantıyı a...