union
Deklarasi
"Deklarasi serikat pekerja" menentukan satu set nilai variabel dan, opsional, tag yang menamai gabungan. Nilai variabel disebut "anggota" dari gabungan dan dapat memiliki tipe yang berbeda. Gabungan mirip dengan "catatan varian" dalam bahasa lain.
Sintaks
struct-or-union-specifier
:
struct-or-union
identifier
Memilih {
struct-declaration-list
}
struct-or-union
identifier
struct-or-union
:
struct
union
struct-declaration-list
:
struct-declaration
struct-declaration-list
struct-declaration
Konten serikat didefinisikan sebagai
struct-declaration
:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list
:
type-specifier
specifier-qualifier-list
Memilih
type-qualifier
specifier-qualifier-list
Memilih
struct-declarator-list
:
struct-declarator
struct-declarator-list
,
struct-declarator
Variabel dengan tipe union
menyimpan salah satu nilai yang ditentukan oleh tipe tersebut. Aturan yang sama mengatur struktur dan deklarasi gabungan. Gabungan juga dapat memiliki bidang bit.
Anggota serikat tidak boleh memiliki jenis, jenis void
, atau jenis fungsi yang tidak lengkap. Oleh karena itu anggota tidak dapat menjadi instans serikat tetapi dapat menjadi penunjuk ke jenis serikat pekerja yang dideklarasikan.
Deklarasi tipe gabungan adalah templat saja. Memori tidak dicadangkan sampai variabel dideklarasikan.
Catatan
Jika gabungan dua tipe dideklarasikan dan satu nilai disimpan, tetapi gabungan diakses dengan tipe lain, hasilnya tidak dapat diandalkan. Misalnya, gabungan dari float
dan int
dideklarasikan. Nilai float
disimpan, tetapi program selanjutnya akan mengakses nilai sebagai int
. Dalam situasi seperti ini, nilainya akan bergantung pada penyimpanan internal dari nilai float
. Nilai bilangan bulat tersebut tidak akan dapat diandalkan.
Contoh
Berikut adalah contoh gabungan:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Contoh ini mendefinisikan variabel gabungan dengan tipe sign
dan mendeklarasikan variabel bernama number
yang memiliki dua anggota: svar
, bilangan bulat yang ditandatangani, dan uvar
, bilangan bulat yang tidak ditandatangani. Deklarasi ini memungkinkan nilai number
saat ini disimpan sebagai nilai yang ditandatangani atau yang tidak ditandatangani. Tag yang terkait dengan tipe gabungan ini adalah sign
.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Array screen
berisi 2.000 elemen. Setiap elemen array adalah gabungan individu dengan dua anggota: window1
dan screenval
. Anggota window1
adalah struktur dengan dua anggota bidang bit, icon
dan color
. Anggotanya screenval
adalah int
. Pada waktu tertentu, setiap elemen gabungan memegang int
yang diwakili oleh screenval
atau struktur yang diwakili oleh window1
.
Khusus Microsoft
Serikat berlapis dapat dinyatakan secara anonim saat mereka menjadi anggota struktur atau serikat kerja lain. Berikut adalah contoh serikat tanpa nama:
struct str
{
int a, b;
union /* Unnamed union */
{
char c[4];
long l;
float f;
};
char c_array[10];
} my_str;
.
.
.
my_str.l == 0L; /* A reference to a field in the my_str union */
Gabungan sering ditumpuk dalam struktur yang mencakup bidang yang memberikan tipe data yang terkandung dalam gabungan pada waktu tertentu. Berikut adalah contoh deklarasi untuk serikat seperti itu:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Lihat Anggota Struktur dan Gabungan untuk informasi tentang referensi gabungan.
END Khusus Microsoft
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk