Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jenis agregat adalah struktur, gabungan, atau jenis array. Jika jenis agregat berisi anggota jenis agregat, aturan inisialisasi berlaku secara rekursif.
Sintaksis
initializer:
{
initializer-list
} /* Untuk inisialisasi agregat */
{
initializer-list
, }
initializer-list:
initializer
initializer-list
,
initializer
initializer-list adalah daftar penginisialisasi yang dipisahkan oleh koma. Setiap penginisialisasi dalam daftar adalah ekspresi konstanta atau daftar penginisialisasi. Oleh karena itu, daftar penginisialisasi dapat disarangkan. Formulir ini berguna untuk menginisialisasi anggota agregat dari jenis agregat, seperti yang ditunjukkan dalam contoh di bagian ini. Namun, jika penginisialisasi untuk pengidentifikasi otomatis adalah ekspresi tunggal, itu tidak perlu menjadi ekspresi konstan; itu hanya perlu memiliki jenis yang sesuai untuk penugasan ke pengidentifikasi.
Untuk setiap daftar penginisialisasi, nilai ekspresi konstanta ditetapkan, secara berurutan, ke anggota variabel agregat yang sesuai.
Jika initializer-list memiliki lebih sedikit nilai daripada jenis agregat, anggota atau elemen yang tersisa dari jenis agregat diinisialisasi ke 0. Nilai awal pengidentifikasi otomatis yang tidak diinisialisasi secara eksplisit tidak ditentukan. Jika initializer-list memiliki lebih banyak nilai daripada jenis agregat, hasil kesalahan. Aturan ini berlaku untuk setiap daftar penginisialisasi yang disematkan, dan ke agregat secara keseluruhan.
Penginisialisasi struktur adalah ekspresi dengan jenis yang sama, atau daftar penginisialisasi untuk anggotanya yang diapit kurung kurawal ({ }). Anggota bidang bit yang tidak disebutkan namanya tidak diinisialisasi.
Saat penyatuan diinisialisasi, initializer-list harus berupa ekspresi konstanta tunggal. Nilai ekspresi konstanta ditetapkan ke anggota pertama dari serikat.
Jika array memiliki ukuran yang tidak diketahui, jumlah penginisialisasi menentukan ukuran array, dan jenisnya menjadi lengkap. Tidak ada cara untuk menentukan pengulangan penginisialisasi di C, atau untuk menginisialisasi elemen di tengah array tanpa menyediakan semua nilai sebelumnya juga. Jika Anda memerlukan operasi ini dalam program Anda, tulis rutinitas dalam bahasa assembly.
Jumlah penginisialisasi dapat mengatur ukuran array:
int x[ ] = { 0, 1, 2 }
Namun, jika Anda menentukan ukuran dan memberikan jumlah penginisialisasi yang salah, pengkompilasi akan menghasilkan kesalahan.
Khusus untuk Microsoft
Ukuran maksimum untuk array ditentukan oleh size_t.
END Khusus Microsoft
Contoh
Contoh ini menunjukkan penginisialisasi untuk array.
int P[4][3] =
{
{ 1, 1, 1 },
{ 2, 2, 2 },
{ 3, 3, 3,},
{ 4, 4, 4,},
};
Pernyataan ini menyatakan P sebagai array empat demi tiga dan menginisialisasi elemen baris pertamanya menjadi 1, elemen baris kedua menjadi 2, dan sebagainya, melalui baris keempat. Daftar penginisialisasi untuk baris ketiga dan keempat berisi koma setelah ekspresi konstanta terakhir. Daftar penginisialisasi terakhir ({4, 4, 4,},) juga diikuti oleh koma. Koma tambahan ini diizinkan tetapi tidak diperlukan. Hanya koma yang memisahkan ekspresi konstanta satu sama lain, dan koma yang memisahkan satu daftar penginisialisasi dari yang lain, diperlukan.
Jika anggota agregat tidak memiliki daftar inisialisasi yang disematkan, nilai ditetapkan, secara berurutan, ke setiap anggota sub-agregat. Oleh karena itu, inisialisasi dalam contoh sebelumnya setara dengan contoh berikut:
int P[4][3] =
{
1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4
};
Kurung kurawal juga dapat muncul di sekitar penginisialisasi individu dalam daftar dan akan membantu mengklarifikasi contoh.
Saat menginisialisasi variabel agregat, Anda harus berhati-hati untuk menggunakan kurung kurawal dan daftar inisialisasi dengan benar. Contoh berikut mengilustrasikan interpretasi kurung kurawal pengompilasi secara lebih rinci:
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 */
};
Dalam contoh ini, nlist dinyatakan sebagai array struktur 2-by-3, setiap struktur memiliki tiga anggota. Baris 1 dari inisialisasi menetapkan nilai ke baris nlistpertama , sebagai berikut:
Kurung kurawal kiri pertama pada baris 1 menandakan pengompilasi yang menginisialisasi anggota agregat pertama (
nlistyaitu,nlist[0]) dimulai.Kurung kurawal kiri kedua menunjukkan bahwa inisialisasi anggota
nlist[0]agregat pertama (yaitu, struktur dinlist[0][0]) dimulai.Kurung kurawal kanan pertama mengakhiri inisialisasi struktur
nlist[0][0]; kurung kurawal kiri berikutnya memulai inisialisasinlist[0][1].Proses berlanjut hingga akhir baris, di mana kurung kurawal kanan penutup mengakhiri inisialisasi
nlist[0].
Baris 2 menetapkan nilai ke baris kedua dengan nlist cara yang sama. Kumpulan kurung kurawal luar yang mencakup penginisialisasi pada baris 1 dan 2 diperlukan. Konstruksi berikut, yang menghilangkan kurung kurawal luar, akan menyebabkan kesalahan:
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 */
};
Dalam konstruksi ini, kurung kurawal kiri pertama pada baris 1 memulai inisialisasi nlist[0], yang merupakan array dari tiga struktur. Nilai 1, 2, dan 3 ditetapkan ke tiga anggota struktur pertama. Ketika kurung kurawal kanan berikutnya ditemui (setelah nilai 3), inisialisasi nlist[0] selesai, dan dua struktur yang tersisa dalam array tiga struktur secara otomatis diinisialisasi ke 0. Demikian pula, { 4,5,6 } menginisialisasi struktur pertama di baris kedua .nlist Dua struktur nlist[1] yang tersisa diatur ke 0. Ketika pengkompilasi menemukan daftar penginisialisasi berikutnya ( { 7,8,9 } ), pengkompilasi mencoba menginisialisasi nlist[2]. Karena nlist hanya memiliki dua baris, upaya ini menyebabkan kesalahan.
Dalam contoh berikutnya ini, ketiga int anggota x masing-masing diinisialisasi menjadi 1, 2, dan 3.
struct list
{
int i, j, k;
float m[2][3];
} x = {
1,
2,
3,
{4.0, 4.0, 4.0}
};
list Dalam struktur, tiga elemen di baris m pertama diinisialisasi menjadi 4,0; elemen baris m yang tersisa diinisialisasi menjadi 0,0 secara default.
union
{
char x[2][3];
int i, j, k;
} y = { {
{'1'},
{'4'}
}
};
Variabel yunion , dalam contoh ini, diinisialisasi. Elemen pertama dari gabungan adalah array, sehingga inisialisasi adalah inisialisasi agregat. Daftar penginisialisasi {'1'} menetapkan nilai ke baris pertama array. Karena hanya satu nilai yang muncul dalam daftar, elemen di kolom pertama diinisialisasi ke karakter 1, dan dua elemen tersisa dalam baris diinisialisasi ke nilai 0 secara default. Demikian pula, elemen pertama dari baris x kedua diinisialisasi ke karakter 4, dan dua elemen tersisa dalam baris diinisialisasi ke nilai 0.