C++ : union - nblognlife

C++ : union

C++ : Contoh Program union

union
     Bentuk penulisan dan cara pengaksesannya hampir sama dengan struct. Namun, union digunakan untuk menyatakan suatu memori dengan nama lebih dari satu. Artinya, variabel-variabel yang ada di dalam union menempati alamat memori yang sama.

Lihat contoh pendeklarasian union berikut ini :
union MyUnion
{
      unsigned int x;
      unsigned char y[2];
};
Pada contoh pendeklarasian di atas, variabel x dan y menempati alamat memori yang sama.

Inisialisasi Union
Sama dengan struktur, kita juga dapat melakukan inisialisasi pada variabel union.
union MyUnion init = { 0x1441 } -> dengan ini maka nilai dari variabel x adalah 0x1441

Berikut ini program C++ union :
/*
      N.N. Blog
      Compiler :  Microsoft Visual Studio 2012
*/

#include <iostream>
using namespace std;
#include <conio.h>
#include <iomanip> //setiosflags

union MyUnion
{
      //unsigned (tak bertanda) -> hanya bilangan positif saja
      unsigned int x;
      unsigned char y[2];
};

int main()
{
      union MyUnion init = { 0x1441 };

      cout<<"Berbagi memori dengan union"<<endl;
      cout<<"---------------------------"<<endl;
      //ios::showbase -> menunjukkan basis bilangannnya
      //hex -> basis 16 (heksadesimal)
      cout<<setiosflags(ios::showbase);
      cout<<hex<<"x    : "<<init.x<<endl;
      cout<<hex<<"y[0] : "<<(int)init.y[0]<<endl;
      cout<<hex<<"y[1] : "<<(int)init.y[1]<<endl;

      _getche();
      return EXIT_SUCCESS;
}

Output
Berbagi memori dengan union
---------------------------
x    : 0x1441
y[0] : 0x41
y[1] : 0x14


Lanjut biar lebih jelas lagi..
union MyUnion
{
      int x;
      double y;
};

struct MyStruct
{
      int x;
      double y;
};

Sekilas kedua bentuk diatas hampir sama. Namun keduanya jelas berbeda, jika pada struct, variabel x dan y menempati alamat memori yang berbeda, sehingga perubahan nilai varibel x tidak akan mempengaruhi nilai variabel y, dan sebaliknya. Sedangkan jika menggunakan union, variabel x dan y menempati alamat memori yang sama, sehingga perubahan pada variabel a akan merubah variabel b juga, dan sebaliknya.

Lalu bagaimana dengan ukuran union-nya?
Ukuran dari suatu union akan ditentukan dari ukuran terbesar dari anggotanya. Karena pada union diatas terdapat anggota double dimana double berukuran 8 byte, maka ukuran dari union diatas adalah 8 byte.

Berikut ini program C++ yang menunjukkan bahwa anggota pada union menempati memori yang sama :
/*
      N.N. Blog
      Compiler : Microsoft Visual Studio 2012 
*/

#include <iostream>
#include <conio.h>
using namespace std;

union MyUnion
{
      int x;
      int y;
};

int main()
{
      //memberi nilai 10 pada variabel x
      MyUnion data;
      data.x  = 10;

      cout<<"Nilai varibel dengan Union "<<endl;
      cout<<"-------------------------- "<<endl;
      cout<<"Nilai x = "<<data.x<<endl;
      cout<<"Nilai y = "<<data.y<<endl;
      //y bernilai sama dengan x

      _getche();
      return EXIT_SUCCESS;
}

Output :
Nilai varibel dengan Union
--------------------------
Nilai x = 10
Nilai y = 10

Penjelasan :
Variabel y memiliki nilai yang sama dengan variabel x meskipun tidak ada pernyataan yang menyatakan bahwa nilai y telah diinisialisasi. Dan juga tidak terdapat penugasan antar varibel (y = x). Hal inilah yang menunjukkan bahwa memori yang ditempati kedua variabel adalah sama (Berbagi memori).


[RS]

Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?

Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).

Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.

Terima kasih