Struct adalah salah satu tipe data turunan dalam bahasa C. Struct dikatakan tipe data turunan karena struct merupakan User-defined Data Type (UDT) yang mana pengguna bisa membuat tipe data sendiri dengan menggabungkan beberapa variabel.
Meskipun sama seperti array yang menyimpan banyak data, namun array hanya bisa menyimpan satu jenis tipe data sedangkan struct tidak. Misalnya dalam satu data kita harus menyimpan nama, ID, alamat, tempat lahir dan usia. Tentu saja data tersebut tidak bisa disimpan dalam array.
Daftar isi
Deklarasi Struct
Secara umum, pendeklarasian struct adalah sebagai berikut:
struct <nama_struct>{ <tipe_data_1> <nama_variabel_1> <tipe_data_2> <nama_variabel_2> <tipe_data_3> <nama_variabel_3> . . . };
Misalnya dari data sebelumnya, akan kita kelompokkan menjadi variabel “penduduk”. Maka:
struct penduduk{ char nama[50]; char ID[20]; char alamat[50]; char tempat_lahir[20]; int usia; };
Setelah seperti ini, artinya kita mempunyai tipe data baru, yaitu penduduk
. Sekarang waktunya menggunakan tipe data tersebut.
Menggunakan dan Inisialisasi Struct
Cara untuk menggunakan struct sebenarnya mirip dengan tipe data lain, hanya saja tambahkan struct
sebelum nama struct dan nama variabel. Sedangkan untuk mengakses anggota dari struct, cukup beri operator (.
) setelah nama variabel.
#include <stdio.h> #include <string.h> struct penduduk{ char nama[50]; char ID[20]; char alamat[50]; char tempat_lahir[20]; int usia; }; int main(){ struct penduduk pdk1, pdk2; //Menggunakan struct //Mengakses member struct strcpy(pdk1.nama, "Adi"); strcpy(pdk1.ID, "032508"); strcpy(pdk1.alamat, "Jakarta"); strcpy(pdk1.tempat_lahir, "Depok"); pdk1.usia = 20; strcpy(pdk2.nama, "Bayu"); strcpy(pdk2.ID, "054118"); strcpy(pdk2.alamat, "Jakarta"); strcpy(pdk2.tempat_lahir, "Surabaya"); pdk2.usia = 21; }
Kita tidak bisa memberikan nilai pada struct secara langsung dalam struct karena akan menghasilkan eror. Misal:
struct mobil{ char model; unsigned long harga; char warna[20] = hitam; }
Meskipun bermaksud untuk memberikan nilai secara umum untuk semua struct, namun pemberian nilai hanya bisa dilakukan setelah membuat satu variabel struct.
Array dan Struct
Tentu saja struct bisa kita gunakan tak hanya sekali, artinya kita juga bisa menggabungkan struct dan array sehingga bisa menyimpan banyak data. Caranya sama seperti menggunakan array pada umumnya. Misalkan untuk contoh sebelumnya, yaitu penduduk
.
#include <stdio.h> #include <string.h> struct penduduk{ char nama[50]; char ID[20]; char alamat[50]; char tempat_lahir[20]; int usia; }; int main(){ struct penduduk pdk[10]; strcpy(pdk[0].nama, "Adi"); strcpy(pdk[1].nama, "Bayu"); strcpy(pdk[2].nama, "Candra"); strcpy(pdk[3].nama, "Dengklek"); strcpy(pdk[0].ID, "03234"); strcpy(pdk[1].ID, "10145"); strcpy(pdk[2].ID, "15987"); strcpy(pdk[3].ID, "07856"); strcpy(pdk[0].alamat, "Jakarta"); strcpy(pdk[1].alamat, "Bogor"); strcpy(pdk[2].alamat, "Bandung"); strcpy(pdk[3].alamat, "Surabaya"); strcpy(pdk[0].tempat_lahir, "Depok"); strcpy(pdk[1].tempat_lahir, "Bogor"); strcpy(pdk[2].tempat_lahir, "Tanggerang"); strcpy(pdk[3].tempat_lahir, "Malang"); pdk[0].usia = 19; pdk[1].usia = 18; pdk[2].usia = 22; pdk[3].usia = 20; }
Menggunakan Typedef
typedef
adalah kata kunci yang memberikan kebebasan kepada pengguna untuk membuat tipe data sendiri. Sintaks dari typedef
adalah
typedef <tipe_data_yang_sudah_ada> <tipe_data_baru>;
Misalnya:
#include <stdio.h> typedef int bilangan_bulat; int main(){ bilangan_bulat usia = 4; printf("%d", usia); }
Contoh program menggantikan int
dengan tipe data buatan, yaitu bilangan_bulat
. Untuk menggunakan typedef
dalam struct bisa dengan cara berikut:
#include <stdio.h> typedef struct koordinat_t{ //struct double x,y; }koordinat; //nama variabel baru int main(){ koordinat titik[10]; titik[0].x = 0.0; titik[0].y = 0.0; titik[1].x = 5.0; titik[1].y = 6.7; titik[2].x = 7.5; titik[2].y = 6.9; }
Penulisan struct dengan typedef
juga bisa dengan
typedef struct{ double x,y; }koordinat;
Hanya saja compiler akan menganggap struct tersebut sebagai anon_struct
.
Nested Struct
Struct bersarang (nested struct) adalah struct yang berada dalam struct. Misalnya:
typedef struct tanggal_t{ int hari; char bulan[10]; int tahun; }tanggal; typedef struct mapel_t{ char materi[25]; int jumlah_siswa; tanggal tanggal_masuk; }mapel;
Tentu saja dengan menggunakan nested, program akan lebih ringkas karena struct bisa kita gunakan beberapa kali.
Pointer Struct
Seperti halnya pointer yang menunjuk alamat variabel lain, pointer juga bisa menunjuk alamat dari struct. Ada dua cara untuk mengakses member yaitu dengan (.
) atau dengan menggunakan (->
).
#include <stdio.h> typedef struct siswa_t{ char nama[50]; int absen; int usia; }siswa; int main(){ siswa kelas_pemrograman[40]; kelas_pemrograman[0].usia = 18; siswa *pointer = &kelas_pemrograman[0]; printf("%d\n", pointer->usia); printf("%d\n", (*pointer).usia); }
Pada baris ke-14 dan 15 terdapat perbedaan cara untuk mengakses member, namun keduanya adalah cara yang valid.
Struct Sebagai Parameter Fungsi
Struct juga dapat kita gunakan sebagai parameter dari fungsi. Tentu saja kita bisa menggunakan pass by reference maupun pass by value. Untuk mempelajarinya, silahkan pelajari Pointer dan Fungsi dalam C. Contoh berikut adalah struct sebagai parameter dengan menggunakan pass by reference.
#include <stdio.h> #include <string.h> typedef struct siswa_t{ char nama[50]; int absen; int usia; }siswa; void print_elemen(siswa *ssw){ printf("Nama\t: %s\nAbsen\t: %d\nUsia\t: %d\n", ssw->nama, ssw->absen, ssw->usia); } int main(){ siswa kelas_pemrograman; strcpy(kelas_pemrograman.nama,"Dengklek"); kelas_pemrograman.absen = 14; kelas_pemrograman.usia = 18; print_elemen(&kelas_pemrograman); }