Mengenal Tipe Data Struct dalam Bahasa C

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);
}

Share Now:

5 2 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Langganan

Subscribe To Our Newsletter

0
Would love your thoughts, please comment.x
()
x