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.
"Deklarasi struktur" menamai jenis dan menentukan urutan nilai variabel (disebut "anggota" atau "bidang" struktur) yang dapat memiliki jenis yang berbeda. Pengidentifikasi opsional, yang disebut "tag", memberikan nama jenis struktur dan dapat digunakan dalam referensi berikutnya ke jenis struktur. Variabel jenis struktur tersebut menyimpan seluruh urutan yang ditentukan oleh jenis tersebut. Struktur di C mirip dengan jenis yang dikenal sebagai "rekaman" dalam bahasa lain.
Sintaksis
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
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
struct-declarator:
declarator
type-specifier
declarator
Memilih:constant-expression
Deklarasi jenis struktur tidak menyisihkan ruang untuk struktur. Ini hanya templat untuk deklarasi variabel struktur nanti.
(tag) yang ditentukan identifier sebelumnya dapat digunakan untuk merujuk ke jenis struktur yang ditentukan di tempat lain. Dalam hal ini, struct-declaration-list tidak dapat diulang selama definisi terlihat. Deklarasi penunjuk ke struktur dan typedefs untuk jenis struktur dapat menggunakan tag struktur sebelum jenis struktur ditentukan. Namun, definisi struktur harus ditemui sebelum penggunaan aktual dari ukuran bidang. Penggunaan ini adalah definisi yang tidak lengkap dari jenis dan tag jenis. Agar definisi ini selesai, definisi jenis harus muncul nanti dalam cakupan yang sama.
struct-declaration-list menentukan jenis dan nama anggota struktur. Argumen struct-declaration-list berisi satu atau beberapa deklarasi variabel atau bit-field.
Setiap variabel yang dideklarasikan di struct-declaration-list didefinisikan sebagai anggota jenis struktur. Deklarasi variabel dalam struct-declaration-list memiliki bentuk yang sama dengan deklarasi variabel lain yang dibahas di bagian ini, kecuali bahwa deklarasi tidak dapat berisi penentu atau inisialisasi kelas penyimpanan. Anggota struktur dapat memiliki jenis variabel apa pun kecuali jenis void, jenis yang tidak lengkap, atau jenis fungsi.
Anggota tidak dapat dinyatakan memiliki jenis struktur tempat anggota muncul. Namun, anggota dapat dinyatakan sebagai penunjuk ke jenis struktur di mana ia muncul selama jenis struktur memiliki tag. Ini memungkinkan Anda membuat daftar struktur yang ditautkan.
Struktur mengikuti cakupan yang sama dengan pengidentifikasi lain. Pengidentifikasi struktur harus berbeda dari tag struktur, serikat, dan enumerasi lainnya dengan visibilitas yang sama.
Masing-masing struct-declaration dalam struct-declaration-list harus unik dalam daftar. Namun, nama pengidentifikasi dalam struct-declaration-list tidak harus berbeda dari nama variabel biasa atau dari pengidentifikasi dalam daftar deklarasi struktur lainnya.
Struktur berlapis juga dapat diakses seolah-olah dinyatakan pada tingkat cakupan file. Misalnya, mengingat deklarasi ini:
struct a
{
int x;
struct b
{
int y;
} var2;
} var1;
deklarasi ini keduanya legal:
struct a var3;
struct b var4;
Contoh
Contoh-contoh ini menggambarkan deklarasi struktur:
struct employee /* Defines a structure variable named temp */
{
char name[20];
int id;
long class;
} temp;
Struktur employee memiliki tiga anggota: name, id, dan class. Anggota name adalah array 20 elemen, dan id dan class merupakan anggota sederhana dengan int dan long jenis, masing-masing. Pengidentifikasi employee adalah pengidentifikasi struktur.
struct employee student, faculty, staff;
Contoh ini mendefinisikan tiga variabel struktur: student, , facultydan staff. Setiap struktur memiliki daftar tiga anggota yang sama. Anggota dinyatakan memiliki jenis employeestruktur , yang ditentukan dalam contoh sebelumnya.
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
Struktur complex memiliki dua anggota dengan float jenis, x dan y. Jenis struktur tidak memiliki tag dan karena itu tidak disebutkan namanya atau anonim.
struct sample /* Defines a structure named x */
{
char c;
float *pf;
struct sample *next;
} x;
Dua anggota pertama struktur adalah char variabel dan penunjuk ke float nilai. Anggota ketiga, next, dinyatakan sebagai penunjuk ke jenis struktur yang didefinisikan (sample).
Struktur anonim dapat berguna ketika nama tag tidak diperlukan, seperti ketika satu deklarasi menentukan semua instans struktur. Contohnya:
struct
{
int x;
int y;
} mystruct;
Struktur yang disematkan sering bersifat anonim.
struct somestruct
{
struct /* Anonymous structure */
{
int x, y;
} point;
int type;
} w;
Khusus untuk Microsoft
Pengkompilasi memungkinkan array berukuran tidak berukuran atau nol sebagai anggota terakhir dari struktur. Ini berguna jika ukuran array konstanta berbeda ketika digunakan dalam berbagai situasi. Deklarasi struktur seperti itu terlihat seperti ini:
struct
identifier
{
set-of-declarations
type
array-name
[]; };
Array yang tidak berukuran hanya dapat muncul sebagai anggota terakhir dari struktur. Struktur yang berisi deklarasi array yang tidak berukuran dapat disarangkan dalam struktur lain selama tidak ada anggota lebih lanjut yang dideklarasikan dalam struktur penutup apa pun. Array struktur tersebut tidak diperbolehkan. Operator sizeof , ketika diterapkan ke variabel jenis ini atau ke jenis itu sendiri, mengasumsikan 0 untuk ukuran array.
Deklarasi struktur juga dapat ditentukan tanpa deklarator ketika mereka adalah anggota struktur atau serikat kerja lain. Nama bidang dipromosikan ke dalam struktur penutup. Misalnya, struktur tanpa nama terlihat seperti ini:
struct s
{
float y;
struct
{
int a, b, c;
};
char str[10];
} *p_s;
.
.
.
p_s->b = 100; /* A reference to a field in the s structure */
Untuk informasi selengkapnya tentang referensi struktur, lihat Anggota Struktur dan Union.
END Khusus Microsoft