folder Tahribat.com Forumları
linefolder C - C++
linefolder C++ Pointer Ve Reference



C++ Pointer Ve Reference

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    #include
    using namespace std;
    int main(){
      int a=4;
      int* pa=&a;  //pointer tanımlaması
      int& ra=a;     //referans tanımlaması
      cout<<a<<endl<<pa<<endl<<ra<<endl;
      a=*pa+3;     //pointer ile direk bellek üzerinden işlem
      cout<<a<<endl;
      a=ra+3;        //referans üzerinden işlem
      cout<<a<<endl;
      system("PAUSE");
    return 0;
    }

    pointerlar direk bellek alanını işaret ediyor,referanslar ise direk değeri veriyor. İkisi arasında anladığım kadarıyla bi yazım farklılığı var(referanslar daha sade,daha iyi), bir de pointer bellek adreslerini tutmaya yönelik değişken tipiyken referanslar değişken tipi değiller.

    Bildiğim kadarıyla kullanım sebepleri;

    -Belleğe direk erişim ihtiyacı.(Sisteme yönelik uygulamalar)

    -Sistem gereksinimini azaltarak belleği verimli kullanma.(dolayısıyla performansı arttırma)

    eğerki bir değişkeni işaret etmeyeceksek,amacımız sadece heap bölgesinde veri tutmak ise;

    int* pointer_adi = new int;

    şeklinde bir tanımlama yapıp, daha sonra aldığımız bellek alanına *pointer_adi = 64654 gibi bir atama yapabiliriz.

    *Başlangıç için yazdım. Eksik gedik illaki var, detaylı bilgi için google.com


    :)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Bosluk
    Bosluk's avatar
    Kayıt Tarihi: 11/Kasım/2007
    Erkek

    Hocam zaten okullarda ve turkce kaynaklardada hep bunları gösterıyorlar ilerisi yok bu pointerler cok onemlı denıyor ama bu kadar onemlı yapan bı ornek yokmu merak edıyorum nerde nasıl kullanılıyor


    ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Tam net bir bilgi veremiycem ama googleda araştırınca ceviz.netten falan Tr biraz bilgi geliyor. Yabancı kaynak için de "Pointers on C - Kenneth Reek" var.

    Hani elimdeki en somut örneği şu; oyunlarda bazı hileler için memory hacking denen bir yöntem kullanılıyor. Mesela oyun içinde otomatik pot basma işlemi gerçekleştireceksin, bunun için can değerini saklayan değişkeni alırsan oyunu kapattıktan sonra yazdığın uygulama işe yaramaz çünkü değişken adı değişiyor(tam bilmiyorum fazla araştırmadım ama böyle birşey aşağı yukarı), bu işlem için o değişkenin bellekte hangi depolama alanını işaret ettiğini bulup ordan o değeri bir pointer aracılığı ile alman gerekiyor. Gerisi zaten tuş vuruşu göndermek :)


    :)
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tarikat Şeyhi
    HolyOne
    HolyOne's avatar
    Kayıt Tarihi: 01/Haziran/2002
    Erkek

    İlk bakışta karışık gelmesine rağmen pointer işlemleri oldukça kolaydır.

    Ben şöyle alıştırmıştım kendimi mesela, * görünce pointer diye oku, & gördüğünde addressof diye oku. ikisi birbirinin tersi işte.

    pointer dediğimiz ramdaki kaçıncı byteda olduğunu gösteren sayı.

    Kullanım amacını ise kodun assemblye nasıl dönüştüğünü anlayınca anlarsınız.

    hafızadaki bir bölgeyi tek tek bir değişkenin gösterdiği adrese kopyalayıp değişkenden okuyup bunu başka bir alana yazıp oradan okuyup hedef alana yazıp hedef alan adresini gösteren değişkeni yeni yazılacak bölgeye atamak var,  bir diğer yöntem olarak da sadece iki tarafın pointer adreslerini kaydırıp birbirlerine yazmak var. Burada pointerlar doğru kullanıldığında acaip bir performans farkı oluşuyor.

    Pointerların bir başka kullanımı da winapiler, dlller arasında değişken boyutlu variablelar göndermek. Herhangi bişeyin adresini birbirini anlamayan iki platform arasında alıp verebilirsiniz. Boyutunu da yanında gönderince karşı tarafın bunu okumasında problem olmaz


    Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı kötektir!
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Waze
    Waze's avatar
    Kayıt Tarihi: 01/Ekim/2012
    Erkek

    Memory içindeki bir adresi bu şekilde değiştirebilir miyiz? Yani, ReadProcessMemory vs. gibi winapiler olmadan?

    Waze tarafından 07/Eki/12 12:09 tarihinde düzenlenmiştir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SpArK
    SpArK's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek

    http://cslibrary.stanford.edu/104/

     

    şurdaki videoyu tavsiye ederim ^_^

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wasd
    wasd's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    Waze bunu yazdı

    Memory içindeki bir adresi bu şekilde değiştirebilir miyiz? Yani, ReadProcessMemory vs. gibi winapiler olmadan?

    detaylı bakmadım rpm fonksiyonuna ama bi tutorial inceledim, pointerlarda olduğu gibi hexadecimal bellek adresini gösterip değer alıyorsun, sanırım aynı şeyi yapabiliyorsun.

    @spark: okuduğumu anlıyorumda,bilmediğim kelimeler yüzünden listeningde sıkıntım var :D


    :)
Toplam Hit: 1963 Toplam Mesaj: 7