Anda di halaman 1dari 7

Definisi Struct==>>

Struct adalah sekumpulan variabel yang masing masing dapat berbeda tipe, dan dikelompokkan ke
dalam satu nama. Struct ini sering digunakan untuk mendefinisikan suatu rekord data yang disimpan di
dalam file. Struct mirip representasi sebuah object beserta propertiesnya. Contoh: struct MHS
setidaknya punya elemen untuk NPM, Nama, dan Alamat.

Contoh Program:

Source Code

Output

Analisa
Struct pada program di atas digunakan untuk menampilkan data karyawan, dengan cara mengetik
sebuah deklarasi yg akan memanggil field field yg ada di dalam struct,struct tanggal dan struct alamat.
Jadi struct digunakan untuk mendefinisikan suatu rekord data yang disimpan di dalam file.

Definisi Union==>>
Union merupakan tipe data yang dibangkitkan, dimana anggota anggotanya menggunakan secara
bersama sama ruang penyimpanan memori yang sama, berbeda dengan struct yang masing masing
variabel yang menempati lokasi yang berbeda. Jumlah bytes yang digunakan untuk menyimpan union
adalah sedikitnya cukup untuk menyimpan data terbesar yang ditangani. Oleh karena itu tipe union ini
umumnya digunakan untuk menangani satu, dua, atau tiga variabel dengan tipe yang mirip. Sebagai
contoh:

union nilaiUjian {
int uts, uas;
float akhir;
}

Contoh Program:

Source Code
Output

Analisa
Inisialisasi,deklarasi, dan pengolahan terhadap tipe union ini sama dengan struct, dan program diatas
digunakan untuk menjelaskan cara mengakses byte ke-0 atau byte ke-1 dari di, dc[0] atau dc[1] yang
digunakan.Seperti gambar di bawah ini

Daftar Pustaka==>>
Julio Adisantoso :: Departemen Ilmu Komputer IPB, "Bab VIII Struct,Union,Enumerasi,dan
Manipulasi Bit".

2008, http://elearning.upnjatim.ac.id/ (Diakses 05 Maret 2009).

Muh. Zen S. Hadi, ST, "PERTEMUAN IX DATA TINGKAT LANJUT", lecturer.eepis-its.edu.

A structure is a collection of items of different types; and each data item will have its own memory
location. Where as only one item within the union can be used at any time, because the memory
allocated for each item inside the union is in a shared memory location i.e., only one memory location
will be shared by the data items of union.

Size of union will be the size of the biggest variable.

Why do we need Union in the first place?

Sometimes we may not need the data of all the (related) data items of a complex data structure and be
storing/accessing only one data item at a time. Union helps in such scenarios.

e.g.,
typedef union
{
int Wind_Chill;
char Heat_Index;
} Condition;

typedef struct
{
float temp;
Condition feels_like;
} Temperature;

Wind Chill is only calculated when it is cold and heat index is used only when it is hot. There is no
need for both of them at the same time. So when we specify the temp, feels_like will have only one
value - either wind chill or heat index, but not both.

The following simple program illustrate the above explanation:


% cat structunion.c
#include <stdio.h>
#include <stdlib.h>

typedef union
{
int Wind_Chill;
char Heat_Index;
} Condition;

typedef struct
{
float temp;
Condition feels_like;
} Temperature;

void main()
{
Temperature *tmp;

tmp = (Temperature *)malloc(sizeof(Temperature));

printf("\nAddress of Temperature = %u", tmp);


printf("\nAddress of temp = %u, feels_like = %u", &(*tmp).temp,
&(*tmp).feels_like);
printf("\nWind_Chill = %u, Heat_Index= %u\n",
&((*tmp).feels_like).Wind_Chill, &((*tmp).feels_like).Heat_Index);
}
% cc -o structunion structunion.c
% ./structunion
Address of Temperature = 165496
Address of temp = 165496, feels_like = 165500
Wind_Chill = 165500, Heat_Index= 165500

Posted by: Giri Mandalika.    # 5:17 PM


Struct vs Union
By Yohanes Nugroho on | No Comments | No TrackBacks
Posting ini merupakan jawaban saya pada sebuah pertanyaan di milis linux-programming (Juli 2007).
Saya posting di sini karena mungkin akan berguna bagi pemula dalam C.
Struct berguna untuk mengelompokkan data. Contoh: struktur mahasiswa mungkin memiliki NIM,
nama, dst. Rasanya ini mudah dimengerti.
Union: untuk memberi beberapa nama untuk satu lokasi memori. Ini yang biasanya yang sulit
dimengerti oleh yang baru belajar C. Saya berikan beberapa contoh:
#include <stdio.h>
union {
 int a;
 int b;
} a_dan_b;
int main()
{
 a_dan_b.a = 5;
 printf("%d\n", a_dan_b.b);
 return 0;
}

Apa hasil keluaran program itu? Jawabnya adalah 5, karena a dan b menempati lokasi memori yang
sama. Kita bisa menambahkan banyak variabel di union. Jika tipe variabel itu sama, maka nilainya
akan sama. Kita bisa membuat union dari tipe yang berbeda juga, misalnya:
union {
 int a;
 char b;
 long c;
 double d;
} test;

Kompilator akan mengalokasikan memori sesuai dengan tipe yang paling besar (dalam contoh di atas
adalah double, 8 byte. Jika kita akses:
test.a = 5;

Lalu kita akses test.d, maka akan keluar angka yang aneh. Hal ini terjadi karena representasi double
dan int tidak sama di memori. Lalu apa kegunaan fitur semacam ini? biasanya union digabung dengan
struct jika struktur digunakan untuk menyimpan lebih dari satu jenis data, dan pada satu saat kita hanya
akan menggunakan satu jenis data.

Misalnya kita punya struktur bentuk, yang bisa menyimpan lingkaran atau bujursangkar. LIngkaran
punya radius yang tipenya float sedangkan bujursangkar hanya integer (ini hanya contoh saja,
sebenarnya agak mengada-ada supaya contohnya sederhana).Kita definisikan enumerasi seperti ini:
typedef enum {
lingkaran,
bujursangkar
} jenisbentuk;

Dan struktur bentuk adalah seperti ini:


typedef struct {
 jenisbentuk jenis;
 union {
 float radius;
 int sisi;
 } info;
} bentuk;

Kita bisa membuatnya tanpa union seperti ini:


typedef struct {
 jenisbentuk jenis;
 float radius;
 int sisi;
} bentuk;

Tapi ini akan memakan lebih banyak memori (12 byte, sedangkan versi union hanya butuh 8 byte). Kita
bisa menaruh informasi sisi dan radius di memori yang sama karena kita tahu, bahwa pada satu saat,
hanya sisi ATAU radius saja yang dipakai.

Contoh pemakaiannya:
bentuk b;
if (bentuk_baru == lingkaran) {
 b.jenis = lingkaran;
 b.info.radius = r;
} else if (bentuk_baru == bujursangkar) {
 b.jenis = bujursangkar;
 b.info.sisi = s;
} else {
 /*mungkin error*/
}

Untuk mengakses lagi, kita harus tahu apakah tadi kita menyimpan di sisi atau radius:
if (b.jenis==lingkaran) {
 printf("Radius = %f\n", b.info.radius);
}

Teknik semacam ini banyak digunakan di banyak API/system call UNIX (contoh: API untuk socket
yang bisa menangani berbagai jenis socket, baik tcp/ip. unix socket, bluetooth, dll). Banyak juga
dipakai di teknik kompilasi (misal satu node identifier bisa berupa integer, float, atau yang lain).

Anda mungkin juga menyukai