Şimdi Ara

C++ Pointerlerle ilgili

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
134
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar heap bölgesinde bir dizi oluşturdum.Bu dizilerin adresleri aynı kalıcak şekilde göstericilerini nasıl değiştirebilirim. Burda tam anlatamadım sanırım o yüzden kodla örnek verim .

    int * sayilar=new int[3];
    sayiar[1]=5;
    sayilar[2]=7;
    sayilar[3]=10;

    bu 5in bulunduğu adres x adresi olsun. Ben artık bu adresi sayilar[3] ün göstermesini istiyorum bu nasıl yapıabilir ?



    _____________________________
  • Öncelikle sayilar[3] zaten bir adrestir. Bu yazdığınız kod parçasında elinizde sadece 1 tane pointer var. O da "sayilar".

    sayilar[0], sayilar[1] vs farklı pointerlar değillerdir. sayilar[0], pointerın tuttuğu adres iken; sayilar[1], (sayilar+1)'inci adresi belirtir.

    Örneğin:

    sayilar = 0xAFB066B0 adresini tutuyorsa

    sayilar[0] = sayilar+1 = 0xAFB066B4 adresini tutar. (4 artımın sebebi her 1 integer'ın 4 byte yer kaplamasından dolayı.)

    Yani aslında elinde sadece 1 adet pointer var. Köşeli parantezle yaptığın işlemler bu pointerın gösterdiği adresin yukarısına aşağısına falan bakmaya yarıyor.



    Soruna gelecek olursak, eğer sayilar[1]'in herhangi başka bir x pointer'ı tarafından tutulmasını istiyorsan şöyle yapabilirsin:

    int* x = &sayilar[1];

    Böylece sayilar[1]'deki adresi (0xAFB066B4) x pointer'ına kopyalamış olursun.
    x'te yapacağın her türlü değişiklik sayilar[1]'i de değiştirir çünkü aynı adresi tutuyor olurlar.
    _____________________________




  • @realexile, indexler 0dan baslar, 3 yok, sen orada buffer overflow yaptin, ve maalesef C/C++ buna derleme zamani hata vermez python, java, vs gibi o nedenle bunlari cok iyi bilmen lazim C/C++ kullanacaksan



    @gdb, terminolojin tamamen yanlis. sayilar[2] adres degildir, o bir int, adres olan tek bir sey var o da sayilar.

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________
  • seyfi84 S kullanıcısına yanıt
    sayilar[2], sayilar adresinin 2 blok sonraki adresine referanstır. Evet [] bu işaretleri koyunca adresteki değeri veriyor orası ayrı. Önemli olan nokta o değildi, amaçsız terminolojik takıntılara gerek yok.
    _____________________________
  • Yapay Zeka’dan İlgili Konular
    C++ Basit Bir Soru
    13 yıl önce açıldı
    Ekol es 66 ile ilgili yardım
    11 yıl önce açıldı
    ALtdvb ile ilgili bir soru...
    17 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.