Bagikan melalui


Deklarasi Struktur

"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

Lihat juga

Deklarasi dan Deklarasi Variabel