Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Toplama türü bir yapı, birleşim veya dizi türüdür. Toplama türü toplama türlerinin üyelerini içeriyorsa, başlatma kuralları özyinelemeli olarak uygulanır.
Sözdizimi
initializer:
{
initializer-list
} /* Toplu başlatma */ için
{
initializer-list
, }
initializer-list:
initializer
initializer-list
,
initializer
initializer-list, virgülle ayrılmış başlatıcıların listesidir. Listedeki her başlatıcı bir sabit ifade veya başlatıcı listesidir. Bu nedenle başlatıcı listeleri iç içe yerleştirilebilir. Bu form, bu bölümdeki örneklerde gösterildiği gibi bir toplama türünün toplama üyelerini başlatmak için kullanışlıdır. Ancak, otomatik tanımlayıcının başlatıcısı tek bir ifadeyse, sabit bir ifade olması gerekmez; yalnızca tanımlayıcıya atama için uygun türe sahip olması gerekir.
Her başlatıcı listesi için sabit ifadelerin değerleri, toplama değişkeninin ilgili üyelerine sırayla atanır.
Toplama türünden daha az değer varsa initializer-list , toplama türünün kalan üyeleri veya öğeleri 0 olarak başlatılır. Otomatik tanımlayıcının açıkça başlatılmayan ilk değeri tanımlanmamıştır. Toplama türünden daha fazla değer varsa initializer-list , hata sonucu verir. Bu kurallar her eklenmiş başlatıcı listesine ve bir bütün olarak toplamaya uygulanır.
Bir yapının başlatıcısı, aynı türde bir ifade veya küme ayracı ({ } ) içine alınmış üyeleri için başlatıcıların listesidir. Adsız bit alanı üyeleri başlatılmaz.
Birleşim başlatıldığında tek initializer-list bir sabit ifade olmalıdır. Sabit ifadenin değeri birleşimin ilk üyesine atanır.
Bir dizinin boyutu bilinmiyorsa, başlatıcı sayısı dizinin boyutunu belirler ve türü tamamlanır. C'de başlatıcının tekrarını belirtmenin veya önceki tüm değerleri sağlamadan dizinin ortasında bir öğe başlatmanın hiçbir yolu yoktur. Programınızda bu işleme ihtiyacınız varsa, yordamı derleme dilinde yazın.
Başlatıcı sayısı dizinin boyutunu ayarlayabilir:
int x[ ] = { 0, 1, 2 }
Ancak boyutu belirtir ve yanlış sayıda başlatıcı verirseniz, derleyici bir hata oluşturur.
Microsoft'a Özgü
Bir dizinin en büyük boyutu tarafından size_ttanımlanır.
END Microsoft'a Özel
Örnekler
Bu örnekte bir dizi için başlatıcılar gösterilmektedir.
int P[4][3] =
{
{ 1, 1, 1 },
{ 2, 2, 2 },
{ 3, 3, 3,},
{ 4, 4, 4,},
};
Bu deyim dörte üç dizi olarak bildirir P ve ilk satırının öğelerini 1'e, ikinci satırının öğelerini 2'ye vb. dördüncü satıra kadar başlatır. Üçüncü ve dördüncü satırların başlatıcı listesi, son sabit ifadeden sonra virgül içerir. Son başlatıcı listesinin ({4, 4, 4,},) ardından virgül de eklenir. Bu ek virgüllere izin verilir ancak gerekli değildir. Yalnızca sabit ifadeleri birbirinden ayıran virgüller ve bir başlatıcı listesini diğerinden ayıran virgüller gereklidir.
Bir toplama üyesinin katıştırılmış başlatıcı listesi yoksa, subaggregate'in her üyesine sırasıyla değerler atanır. Bu nedenle, önceki örnekteki başlatma aşağıdaki örne eşdeğerdir:
int P[4][3] =
{
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4
};
Ayraçlar listedeki tek tek başlatıcıların çevresinde de görünebilir ve örneği netleştirmeye yardımcı olabilir.
Bir toplama değişkeni başlatırken, küme ayraçlarını ve başlatıcı listelerini düzgün kullanmaya dikkat etmeniz gerekir. Aşağıdaki örnekte, derleyicinin küme ayraçlarını yorumlaması daha ayrıntılı olarak gösterilmiştir:
typedef struct
{
int n1, n2, n3;
} triplet;
triplet nlist[2][3] =
{
{ { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }, /* Row 1 */
{ { 10,11,12 }, { 13,14,15 }, { 16,17,18 } } /* Row 2 */
};
Bu örnekte, nlist her yapının üç üyesi olan 2'ye 3 yapı dizisi olarak bildirilir. Başlatmanın 1. satırı, ilk satırına nlistaşağıdaki gibi değerler atar:
1. satırdaki ilk sol küme ayracı, derleyiciye ilk toplama üyesinin
nlist(yaninlist[0]) başlatıldığını bildirir.İkinci sol küme ayracı, ilk toplama üyesinin
nlist[0](yani konumundakinlist[0][0]yapının) başlatılmasının başladığını gösterir.İlk sağ küme ayracı, yapının
nlist[0][0]başlatılmasını sonlandırır; sonraki sol küme ayracı başlatmayınlist[0][1]başlatır.İşlem, sağ köşeli ayracın başlatılmasının sona erdiği satırın
nlist[0]sonuna kadar devam eder.
2. satır, ikinci satırına nlist benzer şekilde değerler atar. Başlatıcıları 1. ve 2. satırlara kapsayan dış küme ayraçları gereklidir. Dış küme ayraçlarını atlayan aşağıdaki yapı hataya neden olabilir:
triplet nlist[2][3] = /* THIS CAUSES AN ERROR */
{
{ 1, 2, 3 },{ 4, 5, 6 },{ 7, 8, 9 }, /* Line 1 */
{ 10,11,12 },{ 13,14,15 },{ 16,17,18 } /* Line 2 */
};
Bu yapıda, 1. satırdaki ilk sol ayraç, üç yapıdan oluşan bir dizi olan öğesinin başlatılmasını nlist[0]başlatır. 1, 2 ve 3 değerleri ilk yapının üç üyesine atanır. Bir sonraki sağ küme ayracıyla karşılaşıldığında (3 değerinden sonra), başlatma nlist[0] işlemi tamamlanır ve üç yapılı dizideki kalan iki yapı otomatik olarak 0 olarak başlatılır. Benzer şekilde, { 4,5,6 } ikinci satırındaki ilk yapıyı nlistbaşlatır. öğesinin nlist[1] kalan iki yapısı 0 olarak ayarlanır. Derleyici bir sonraki başlatıcı listesiyle ( { 7,8,9 } ) karşılaştığında başlatmayı nlist[2]dener. Yalnızca iki satır olduğundan nlist , bu deneme bir hataya neden olur.
Bu sonraki örnekte, üç int üyesi x sırasıyla 1, 2 ve 3 olarak başlatılır.
struct list
{
int i, j, k;
float m[2][3];
} x = {
1,
2,
3,
{4.0, 4.0, 4.0}
};
Yapısında list , ilk satırındaki m üç öğe 4,0 olarak başlatılır; kalan satırının m öğeleri varsayılan olarak 0,0 olarak başlatılır.
union
{
char x[2][3];
int i, j, k;
} y = { {
{'1'},
{'4'}
}
};
Bu örnekte birleşim değişkeni ybaşlatılır. Birleşimin ilk öğesi bir dizidir, bu nedenle başlatıcı bir toplama başlatıcıdır. Başlatıcı listesi {'1'} , değerleri dizinin ilk satırına atar. Listede yalnızca bir değer göründüğünden, ilk sütundaki öğe karakteriyle 1başlatılır ve satırdaki kalan iki öğe varsayılan olarak 0 değerine başlatılır. Benzer şekilde, ikinci satırının x ilk öğesi karakterine 4başlatılır ve satırdaki kalan iki öğe 0 değerine başlatılır.