Şimdi Ara

C++ değeri belirtilmeyen değişkenin değeri?

Bu Konudaki Kullanıcılar:
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
537
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Lise yeni bitti, üniversite sınavı da geçti. Şimdi programlama zamanı dedim ve dakika bir gol bir: Değişken tanımlamada yamuldum:D

    C++ ile değişken tanımlarken sorun yok aslında. Sorun oluşturduğum halde değer atamadığım değişkenin sapık değerler alması.

    Aşağıda bir örnek var mesela:

    #include <iostream>
    using namespace std;


    int main(){

    //Bakalım değişkenler tanımlanırken ne oluyor.

    int deg1, deg2, deg3, deg4, deg5, deg6, deg7,deg8,deg9 = 20;

    cout <<"deg1:"<<deg1
    <<"deg2:"<<deg2
    <<"deg3:"<<deg3
    <<"deg4:"<<deg4
    <<"deg5:"<<deg5
    <<"deg6:"<<deg6
    <<"deg7:"<<deg7
    <<"deg8:"<<deg8
    <<"deg9:"<<deg9
    <<endl;

    return 0;
    }


    Bu programı bilgisayarımda (DEV C++) çalıştırdığımda
    deg1:1
    deg2:0
    deg3:76
    deg4:0
    deg5:76
    deg6:0
    deg7:0
    deg8:0
    deg9:20
    çıktısını alırken,

    repl.it 'te (gcc) çalıştırdığımda
    deg1:0
    deg2:32765
    deg3:-602901264
    deg4:0
    deg5:4196080
    deg6:0
    deg7:4196688
    deg8:0
    deg9:20
    çıktısını alıyorum.

    Şimdilik tek anladığım adı son sırada olan deg9 değişkeninin 20 olduğu.

    Ancak diğerleri neye göre değer alıyor, anlayabilmiş değilim. Ben tüm değişkenler 20 olacak sanmıştım:)

    Yardım edeceklere şimdiden teşekkürler.



    < Bu mesaj bu kişi tarafından değiştirildi ardunyocu -- 20 Haziran 2017; 19:59:44 >



  • Nasıl hepsinin 20 olmasını beklersin anlamadım, değişkenlerin arasına , yerine = koyarsan hepsinin 20 olması daha mantıklı değil mi? :)
    Değerlerin nereden geldiği konusu ise derleyiciden derleyiciye değişiyor, standartlarda yer alan bir konu değil.



    < Bu mesaj bu kişi tarafından değiştirildi yoktur -- 20 Haziran 2017; 20:21:07 >
    < Bu ileti tablet sürüm kullanılarak atıldı >
  • Değişken global yada static olursa varsayılan değeri 0 olur. main içindeki normal değişkenlerin değeri ise rastgele olur.

    Hepsinin 20 olmasını istiyorsanız şöyle yazabilirsiniz.

    int deg1, deg2, deg3, deg4, deg5, deg6, deg7,deg8,deg9;
    deg1=deg2=deg3=deg4=deg5=deg6=deg7=deg8=deg9=20;
  • Sayın yoktur ve hyrgul ilgilendiğiniz için çok teşekkür ederim. Sorumun daha detaylı bir cevabını c++ forumunda buldum. Benzer sorun yaşayanlara da kolaylık olsun diye paylaşıyorum. C++ değeri belirtilmeyen değişkenin değeri?
    Yaklaşık olarak Türkçesi:
    quote:


    Sanırım başlatma/ilklendirme (initialization) kavramının anlamı konusunda bir karışıklık var.

    Eğer [ int a; ] yazarsanız, geçerli ve muhtemelen 4 bayt genişliğinde bir bölüm elde edersiniz. Bu durumda başlatma/ilklendirme (initialization) yalnızca [ a = bilmem ne ] biçiminde değer atamadır; aksi durumda hafızada ayrılan bölümde önceden bulunan çöp değerler okunur. Bir örnekle açıklayayım:

    Hafızadan 6 baytlık bir blok hayal edin:
    [0x00|0x00|0x00|0x00|0x00|0x00]
    (ÇN: Burada 0x ile başlaması 16 tabanını simgeliyor. 0x01 = 1 ve 0x10 = 16 gibi.)

    Diyelim herhangi bir yerde '0' karakterine ihtiyacınız var ve bu karakter bizim baktığımız blokta bulunuyor:
    [0x00|0x30|0x00|0x00|0x00|0x00]
    (ÇN: ikinci karakter 0x30 yani onluk tabanda 48. ASCII sisteminde 48 '0' karakterine karşılıktır. Bilgisayarınızda Alt tuşuna basılı tutarken 48 yazarsanız metin düzeleyici program '0' karakteri yazacaktır.)

    Şimdi o karakter ile işimiz bitiyor ama bu kez de bir tamsayı (integer) istiyorsunuz. Bir değer de atamıyorsunuz ve tesadüfen seçilen 4 baytlık bölüm bizim bloğa denk geliyor:
    [0x00|0x30|0x00|0x00|0x00|0x00]
    (ÇN: 0x leri görmeden 16 tabanında sayımız şöyle oluşur: 00 30 00 00)

    Böylece başlatılmamış/ilklendirilmemiş (uninitialized) tamsayı (integer) değişkenimiz 3145728 değerini aldı, ki böyle olmasını beklemeniz gerekmez(sahiden de uğraşması kolay değil). İşte hepsi bu, gerçekten.


  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.