C - Struktur
Array memungkinkan untuk menentukan jenis variabel yang dapat menampung beberapa item data dari jenis yang sama. Demikian pula struktur adalah tipe data yang ditentukan pengguna lain yang tersedia di C yang memungkinkan untuk menggabungkan item data dari berbagai jenis.
Struktur digunakan untuk merepresentasikan record. Misalkan Anda ingin melacak buku-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 struct penyataan. 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];
tag struktur adalah opsional dan setiap definisi anggota adalah definisi variabel normal, seperti int i; atau mengambang f; atau definisi variabel valid lainnya. Di akhir definisi struktur, sebelum titik koma terakhir, Anda dapat menentukan satu atau lebih variabel struktur tetapi ini opsional. Inilah 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 setiap anggota struktur, kami menggunakan operator akses anggota (.) . Operator akses anggota dikodekan sebagai titik antara nama variabel struktur dan anggota struktur yang ingin kita akses. Anda akan menggunakan kata kunci struct untuk mendefinisikan variabel tipe struktur. Contoh berikut menunjukkan cara menggunakan struktur dalam program −
Demo Langsung
#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;
}
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil 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 meneruskan struktur sebagai argumen fungsi dengan cara yang sama seperti Anda melewatkan variabel atau pointer lainnya.
Demo Langsung
#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);
}
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil 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
Penunjuk ke Struktur
Anda dapat mendefinisikan pointer ke struktur dengan cara yang sama seperti Anda mendefinisikan pointer ke variabel lain
struct Books *struct_pointer;
Sekarang, Anda dapat menyimpan alamat variabel struktur dalam variabel penunjuk yang ditentukan di atas. Untuk menemukan alamat variabel struktur, tempatkan '&'; operator sebelum nama struktur sebagai berikut −
struct_pointer = &Book1;
Untuk mengakses anggota struktur menggunakan pointer ke struktur itu, Anda harus menggunakan operator → sebagai berikut −
struct_pointer->title;
Mari kita tulis ulang contoh di atas menggunakan penunjuk struktur.
Demo Langsung
#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);
}
Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil 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
Bidang Bit
Bit Fields memungkinkan pengepakan data dalam suatu struktur. Ini sangat berguna ketika memori atau penyimpanan data sangat mahal. Contoh umum termasuk −
-
Mengemas beberapa objek ke dalam kata mesin. misalnya Bendera 1 bit dapat dipadatkan.
-
Membaca format file eksternal -- format file non-standar dapat dibaca, misalnya, bilangan bulat 9-bit.
C memungkinkan kita melakukan ini dalam definisi struktur dengan meletakkan :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, tipe 4-bit, dan my_int 9-bit.
C secara otomatis mengemas bidang bit di atas sekompak mungkin, asalkan panjang maksimum bidang kurang dari atau sama dengan panjang kata bilangan bulat komputer. Jika hal ini tidak terjadi, maka beberapa kompiler memungkinkan memori tumpang tindih untuk bidang sementara yang lain akan menyimpan bidang berikutnya di kata berikutnya.