C kesatuan
Kesatuan ialah jenis data khas yang membolehkan anda menyimpan jenis data yang berbeza dalam lokasi memori yang sama. Anda boleh menentukan kesatuan dengan berbilang ahli, tetapi hanya seorang ahli boleh mempunyai nilai pada bila-bila masa. Kesatuan menyediakan cara yang cekap untuk menggunakan lokasi memori yang sama.
Tentukan kesatuan
Untuk mentakrifkan kesatuan, anda mesti menggunakan pernyataan kesatuan, dengan cara yang sama seperti mentakrifkan struktur. Pernyataan kesatuan mentakrifkan jenis data baharu dengan berbilang ahli. Format pernyataan kesatuan adalah seperti berikut:
union [union tag]{ member definition; member definition; ... member definition;} [one or more union variables];
tag kesatuan adalah pilihan, dan setiap definisi ahli ialah definisi pembolehubah standard, seperti int i atau float f atau lain-lain; definisi berubah-ubah. Pada penghujung definisi kesatuan, sebelum koma bertitik terakhir, anda boleh menentukan satu atau lebih pembolehubah kesatuan secara pilihan. Jenis kesatuan bernama Data ditakrifkan di bawah, dengan tiga ahli i, f dan str:
union Data{ int i; float f; char str[20];} data;
Kini, pembolehubah jenis Data boleh menyimpan integer, nombor titik terapung atau a rentetan. Ini bermakna satu pembolehubah (lokasi memori yang sama) boleh menyimpan berbilang data berbilang jenis. Anda boleh menggunakan mana-mana jenis data terbina dalam atau yang ditentukan pengguna dalam komuniti mengikut keperluan.
Memori yang diduduki oleh kesatuan sepatutnya cukup untuk menyimpan ahli terbesar dalam kesatuan itu. Sebagai contoh, dalam contoh di atas, Data akan menduduki 20 bait ruang memori kerana rentetan menduduki ruang terbesar di kalangan pelbagai ahli. Contoh berikut akan memaparkan jumlah saiz memori yang diduduki oleh kesatuan di atas:
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; printf( "Memory size occupied by data : %d\n", sizeof(data)); return 0;}
Apabila kod di atas disusun dan dilaksanakan, ia akan menghasilkan keputusan berikut:
Memory size occupied by data : 20
Mengakses Ahli Kesatuan
Untuk mengakses ahli kesatuan, kami menggunakan pengendali akses ahli (.). Pengendali akses ahli ialah tempoh antara nama pembolehubah kesatuan dan ahli kesatuan yang ingin kita akses. Anda boleh menggunakan kata kunci kesatuan untuk mentakrifkan pembolehubah jenis kesatuan. Contoh berikut menunjukkan penggunaan kesatuan:
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; data.f = 220.5; strcpy( data.str, "C Programming"); printf( "data.i : %d\n", data.i); printf( "data.f : %f\n", data.f); printf( "data.str : %s\n", data.str); return 0;}
Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:
data.i : 1917853763data.f : 4122360580327794860452759994368.000000data.str : C Programming
Di sini, kita boleh melihat nilai The values of the i dan f ahli rosak kerana nilai terakhir yang diberikan kepada pembolehubah menduduki lokasi memori, itulah sebabnya ahli str boleh menjadi output utuh. Sekarang mari kita lihat contoh yang sama sekali lagi, kali ini kita hanya menggunakan satu pembolehubah pada satu masa, yang juga menunjukkan tujuan utama menggunakan kesatuan:
#include <stdio.h>#include <string.h> union Data{ int i; float f; char str[20];}; int main( ){ union Data data; data.i = 10; printf( "data.i : %d\n", data.i); data.f = 220.5; printf( "data.f : %f\n", data.f); strcpy( data.str, "C Programming"); printf( "data.str : %s\n", data.str); return 0;}
Apabila kod di atas disusun dan dilaksanakan, ia berikut keputusan akan dihasilkan:
data.i : 10data.f : 220.500000data.str : C Programming
Di sini, semua ahli boleh menjadi output utuh kerana hanya satu ahli digunakan pada masa yang sama.