Menguasai Struktur C: Mengorganisir Data Kompleks dengan Efisien
Array memungkinkan untuk mendefinisikan tipe variabel yang dapat menampung beberapa item data dari jenis yang sama. Demikian pula struktur adalah tipe data yang ditentukan pengguna lainnya yang tersedia dalam C yang memungkinkan untuk menggabungkan item data dari jenis yang berbeda.
Struktur digunakan untuk merepresentasikan sebuah catatan. Misalnya Anda ingin melacak buku Anda di perpustakaan. Anda mungkin ingin melacak atribut berikut tentang setiap buku −
- Judul
- Penulis
- Subjek
- ID Buku
Mendefinisikan Struktur
Untuk mendefinisikan struktur, Anda harus menggunakan pernyataan struct. Pernyataan struct mendefinisikan tipe data baru, dengan lebih dari satu anggota. Format pernyataan struct adalah sebagai berikut −
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables]; structure tag bersifat opsional dan setiap definisi anggota adalah definisi variabel normal, seperti int i; atau float f; atau definisi variabel valid lainnya. Pada akhir definisi struktur, sebelum titik koma akhir, Anda dapat menentukan satu atau lebih variabel struktur tetapi ini bersifat opsional. Berikut adalah cara Anda mendeklarasikan struktur Buku −
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book; Mengakses Anggota Struktur
Untuk mengakses anggota apa pun dari struktur, kita menggunakan member access operator (.). Operator akses anggota dikodekan sebagai titik di antara nama variabel struktur dan anggota struktur yang ingin kita akses. Anda akan menggunakan kata kunci struct untuk mendefinisikan variabel dengan tipe struktur. Contoh berikut menunjukkan cara menggunakan struktur dalam program −
Live Demo
#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info */ printf( "Book 1 title : %s\n", Book1.title); printf( "Book 1 author : %s\n", Book1.author); printf( "Book 1 subject : %s\n", Book1.subject); printf( "Book 1 book_id : %d\n", Book1.book_id); /* print Book2 info */ printf( "Book 2 title : %s\n", Book2.title); printf( "Book 2 author : %s\n", Book2.author); printf( "Book 2 subject : %s\n", Book2.subject); printf( "Book 2 book_id : %d\n", Book2.book_id); return 0; } Saat kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Book 1 title : C Programming Book 1 author : Nuha Ali Book 1 subject : C Programming Tutorial Book 1 book_id : 6495407 Book 2 title : Telecom Billing Book 2 author : Zara Ali Book 2 subject : Telecom Billing Tutorial Book 2 book_id : 6495700
Struktur sebagai Argumen Fungsi
Anda dapat melewatkan struktur sebagai argumen fungsi dengan cara yang sama seperti Anda melewatkan variabel atau pointer lainnya.
Live Demo
#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; /* function declaration */ void printBook( struct Books book ); int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info */ printBook( Book1 ); /* Print Book2 info */ printBook( Book2 ); return 0; } void printBook( struct Books book ) { printf( "Book title : %s\n", book.title); printf( "Book author : %s\n", book.author); printf( "Book subject : %s\n", book.subject); printf( "Book book_id : %d\n", book.book_id); } Saat kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
Pointer ke Struktur
Anda dapat mendefinisikan pointer ke struktur dengan cara yang sama seperti Anda mendefinisikan pointer ke variabel lainnya −
struct Books *struct_pointer;
Sekarang, Anda dapat menyimpan alamat variabel struktur di variabel pointer yang didefinisikan di atas. Untuk menemukan alamat variabel struktur, tempatkan operator '&' sebelum nama struktur sebagai berikut −
struct_pointer = &Book1;
Untuk mengakses anggota dari struktur menggunakan pointer ke struktur tersebut, Anda harus menggunakan operator → sebagai berikut −
struct_pointer->title;
Mari kita tulis ulang contoh di atas menggunakan pointer struktur.
Live Demo
#include <stdio.h> #include <string.h> struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; /* function declaration */ void printBook( struct Books *book ); int main( ) { struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info by passing address of Book1 */ printBook( &Book1 ); /* print Book2 info by passing address of Book2 */ printBook( &Book2 ); return 0; } void printBook( struct Books *book ) { printf( "Book title : %s\n", book->title); printf( "Book author : %s\n", book->author); printf( "Book subject : %s\n", book->subject); printf( "Book book_id : %d\n", book->book_id); } Saat kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −
Book title : C Programming Book author : Nuha Ali Book subject : C Programming Tutorial Book book_id : 6495407 Book title : Telecom Billing Book author : Zara Ali Book subject : Telecom Billing Tutorial Book book_id : 6495700
Bit Fields
Bit Fields memungkinkan pengemasan data dalam struktur. Ini sangat berguna ketika memori atau penyimpanan data terbatas. Contohnya termasuk −
Mengemas beberapa objek ke dalam kata mesin. misalnya, 1 bit flag dapat dikompres.
Membaca format file eksternal -- format file non-standar dapat dibaca, misalnya, integer 9-bit.
C memungkinkan kita untuk melakukan ini dalam definisi struktur dengan menempatkan :bit length setelah variabel. Misalnya −
struct packed_struct { unsigned int f1:1; unsigned int f2:1; unsigned int f3:1; unsigned int f4:1; unsigned int type:4; unsigned int my_int:9; } pack; Di sini, packed_struct berisi 6 anggota: Empat flag 1 bit f1..f3, sebuah tipe 4-bit dan sebuah my_int 9-bit.
C secara otomatis mempack bit field di atas secuma mungkin, asalkan panjang maksimum dari field kurang dari atau sama dengan panjang kata integer dari komputer. Jika ini bukan kasusnya, maka beberapa compiler mungkin mengizinkan overlap memori untuk field sementara yang lain akan menyimpan field berikutnya di kata berikutnya.