2012-10-27 15 views
6

Bu kod ne anlama geliyor?C'deki bir dizi dizinin kısmi başlatılması olduğunda ne olur?

struct foo_t { 
    int a; 
    int b; 
} foo[10] = {{0,0}} 

foo [0] geri kalanı hakkında {0,0}, ama ne? C standardı bunu nasıl ele alıyor?

ADDED. Kapsamlı bir yanıt here kurdu. Sanırım sorumu silinmeli.

+0

olası yinelenen (http://stackoverflow.com/questions/10828294/c-and-c-partial-initialization-of-automatic-structure) –

cevap

8

Dizinin tamamı a ve b için 0 değerine sahip yapılarla başlatılacaktır. Bu temel bir değere sahip, aşağıdaki durum benzer: dizideki her tamsayı 0 ile başlatılır

int foo[10] = {0}; 

.

C99 standart belirten aşağıdadır:

bir başlatmak için kullanılan edebi bir dizede öğeleri veya üyeler bir agreganın veya daha az karakter var daha ayracı kapalı listesinde az ilklendiriciler varsa dizideki elemanlar olduğu bilinen boyutu dizisi, yığının geri kalanı, statik depolama süresi olan nesneler ile örtük olarak aynı şekilde başlatılan olmalıdır.

[C ve C++: Otomatik yapıda kısmen başlatma] arasında
+1

+1. –

2

0 değeri genellikle bir listenin sonu anlamına gelir. Bununla demek istediğim, böyle bir listeyi yinelediğinizde ve bu değerle karşılaştığınızda oyuncak sonuna ulaştığınızı bilir. Sanırım bu reklamı kim yaratsa, aklında böyle bir şey var. Kodda arama yaparsanız, listeye bir değer ekledikten sonra sıfır değeri ayarlayan bir kod parçası bulabilirsiniz.

+0

yazık ingilizcem için. Ama demek istediğim * yapı nasıl başlatılacak *. Dil hakkında ilginçim, yazarın yukarıdaki kodu nasıl kullanmak istediği değil. Sorumu biraz düzenledim. –

+0

Tamam, işte burada. Bunun gibi bir dizi, programın veri alanında bir bellek bloğunu saklı tutar. Derleme zamanında derleyici bu belleği 0s ile başlatır. Yerel bir değişken ise, genel blok onu başlatmak için yığına kopyalanır. Bu yapı dizisinin ardışık bir bellek bloğunu kapladığını unutmayın, böylece tüm baytları 0'a ayarlayarak diziyi gerçekten başlatırsınız. Umarım sana cevap vermeyi başardım. Alıntı yapmak için – Gus

İlgili konular