2010-08-30 11 views

cevap

9

Bu, dizinin başlatılmasının C++ uygulamasında işleyiş şeklidir. Açıkça her öğe için bir değer, (yanlış burada ya,) o eleman sıfıra varsayılan

bool FcpNumberIsOk[MAX_FCPS]; 

yanlış veya tüm değerleri ayarlamak Will o

bool FcpNumberIsOk[MAX_FCPS]={true, true, true, true /* etc */ }; 

Not vermezsek Tanımlandığı yere bağlı olarak onları rastgele ayarla.

+0

İkinci versiyonun ne zaman başlatıldı? İçerilen sınıf/yapıyı açıkça varsayılan olarak başlatırsanız düşündüm. –

+2

@jdv, değişkeni statik depolama süresi (yerel/sınıf istatistikleri, ad alanı kapsamı değişkenleri) olarak tanımlarsanız, başka herhangi bir şey gerçekleşmeden önce program başlangıcında sıfırdır. Bkz. [Ana dönüş nedir?] (Http://stackoverflow.com/questions/3309042/what-does-main-return). –

-1

Yalnızca dizinin yalnızca ilk elemanını başlattığınız için, yalnızca ilk öğe başlatılır ve kalanlar sıfırlanmaz.

+1

kalan * * 0 bir varsayılan başlatılır o int 'kullanmak güvenli olmasının nedeni budur i [10] = {0}; 'bir diziyi 0 başlatır. – meagar

+0

Aslında tüm öğeler başlatılıyor. Standart, kalan tüm öğelerin 0'a ayarlandığını belirtir. –

+0

@meagar nasıl "int i [10] = {0}" ifadesinin ilk öğede 0'dan başka bir şey yapamadığını nasıl söylersiniz. –

2

Bu beklenen bir davranıştır. senin en değer ve diğer olsun varsayılan bir [yanlış ile sadece (ilk elemanını başlatılıyor bu sözdizimini kullanarak

int c[5] = {1}; 

// 1 0 0 0 0 
for(int i = 0; i < 5; ++i) 
    std::cout << c[i] << ' '; 
-1

: Belirtilen değeri ve geri kalan için başlatılır birinci eleman 0 varsayılan erine ]), ancak diğerleri değil. Tüm öğeleri başlatmak için int dizisini ve memset'i veya döngü için kullanmalısınız.

+0

Aslında tüm öğeler başlatılıyor. Standart, kalan tüm öğelerin 0'a ayarlandığını belirtir –

+0

iyi demek istedim. tamam benim hatam – f0b0s

+1

'memset çoğu zaman işe yarayacak, ancak taşınabilir değil. ':: std :: fill' çok daha iyi ve bir 'bool' dizisi üzerinde çalışacak ve iyi bir derleyicide aynı derecede verimli olacak. – Omnifarious

10

Yanlış anlaşıldınız. Görünüşe göre, herhangi bir önceden tanımlanmamış elemanlar, son açıkça başlatılan değerle aynı değere getirilir. Bahsettiğiniz son değer true idi, bu nedenle tüm diğer öğeler de true olarak başlatılacaktı. Bir zamanlar aynı inanca sahiptim, ama çabucak öğrenirdim.

Bu şekilde çalışmıyor. Birleştirilmemiş öğelerin tümü varsayılan olarak başlatılır, bool için false anlamına gelir.

std::fill_n gibi bir şey denemek, true tüm unsurları ayarlamak için:

std::fill_n(FcpNumberIsOk, MAX_FCPS, true); 
İlgili konular