C++'ta pointer, referans, dereferans

narutomanga899

Katılımcı Üye
21 Nis 2013
384
0
City of Code
Temel taşlardan referans, pointer ile ilgili bir örnek üzerinden çözelim;
Biraz bunlar hakkında temel bilgileriniz olmalı
------------------------------------------------------------

int* x = 10; gibi ise pointer diyoruz,
int x = 10; ise normal integer değeri,
&x ise x'in adresi demek değişik bir sayı yazar,
*x ise dereferans demek, &'ın tersi gibi,

Soru, Eğer biraz bilginiz varsa önce çözmeye çalışın, output nedir?
Kod:
#include <iostream>
using namespace std;

int main()
{
    int x = 10;
    int y = 20; 
    int *a = &y;
    int *b = a;
    *b = 30; 
    b = &x; 

    cout << "x= " << x <<endl;

    *b = 50;

    cout << "x= " << x <<endl;
    cout << "y= " << y <<endl; 
    cout << "a= " << a <<endl; 
    cout << "*a= " << *a <<endl; 
    cout << "b = " << b << endl;
    cout << "*b= " << *b <<endl; 
    cout << "&*a= " << &*a <<endl; 
    cout << "**&b= " << **&b <<endl; 

    return 0;

}


cevap ve çözüm;

Kod:
#include <iostream>
using namespace std;

int main()
{
    int x = 10;
    int y = 20; //x ve y'nin ilk değerleri
    int *a = &y;
    int *b = a;

    //pointer a y nin adresini gösteriyor yani a değiştiğinde
    //y adresindeki değer değişecek
    //b pointer'ı a yı gösteriyor, yani a'nın gösterdiği y'i

    *b = 30; //b pointer 30 demek, a'yı gösterecek
    // oda y'yi değiştiricek (y=30)

    b = &x; //b artık x'in adresini gösterdiği için x'i değiştircek

    cout << "x= " << x <<endl;  //x = 10

    *b = 50; //b, x i 50 yapacak

    cout << "x= " << x <<endl; //x = 50
    cout << "y= " << y <<endl; //y = 30

    //a ve b pointerları normal yazılırsa gösterdikleri x ve y'nin
    //adreslerini, * ile gösterilirse değerlerini gösterecek
    cout << "a= " << a <<endl; //y nin adresini gösterecek(değişik bir sayı)
    cout << "*a= " << *a <<endl; //y nin değeri 30

    cout << "b = " << b; //x nin adresini gösterecek(değişik bir sayı)
    cout << "*b= " << *b <<endl; //x in değeri 50

    cout << "&*a= " << &*a <<endl; //&(referans) ve *(dereferans)
    //birbirini eleyecek ve direk a demek yani y in adresi

    cout << "**&b= " << **&b <<endl; //*b ye eşit, oda x in değeri 50

    return 0;

}
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Bunlar temel şeyler, bunları anlattıktan sonra bir de şunu verirseniz işte o zaman daha yararlı olur. Mesela pointer to pointers ;

int a = 5;
int *p = &a;
int **pp = &p;
int ***ppp = &pp;
int ****b = &ppp;

buna göre **b çıktısı neyi verir gibi.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.