C Unions (Có Ví dụ)

Trong hướng dẫn này, bạn sẽ tìm hiểu về các hợp nhất trong lập trình C. Cụ thể hơn, làm thế nào để tạo ra công đoàn, tiếp cận các thành viên của nó và tìm hiểu sự khác biệt giữa các công đoàn và cấu trúc.

Union là một kiểu do người dùng định nghĩa tương tự như cấu trúc trong C ngoại trừ một điểm khác biệt chính. Các cấu trúc phân bổ đủ không gian để lưu trữ tất cả các thành viên của nó khi các công đoàn phân bổ không gian chỉ để lưu trữ thành viên lớn nhất.

Làm thế nào để xác định một công đoàn?

Chúng tôi sử dụng uniontừ khóa để xác định công đoàn. Đây là một ví dụ:

 union car ( char name(50); int price; ); 

Đoạn mã trên xác định một kiểu dẫn xuất union car.

Tạo biến liên hợp

Khi một liên minh được định nghĩa, nó sẽ tạo ra một kiểu do người dùng xác định. Tuy nhiên, không có bộ nhớ nào được cấp phát. Để cấp phát bộ nhớ cho một kiểu liên hợp nhất định và làm việc với nó, chúng ta cần tạo các biến.

Đây là cách chúng tôi tạo các biến liên hợp.

 union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; ) 

Một cách khác để tạo các biến liên hợp là:

 union car ( char name(50); int price; ) car1, car2, *car3; 

Trong cả hai trường hợp, các biến liên hợp car1, car2 và một con trỏ liên hợp car3 union carloại được tạo.

Tiếp cận các thành viên của một công đoàn

Chúng tôi sử dụng .nhà điều hành để truy cập các thành viên của một công đoàn. Để truy cập các biến con trỏ, chúng tôi cũng sử dụng ->toán tử.

Trong ví dụ trên,

  • Để truy cập giá cho car1, car1.priceđược sử dụng.
  • Để truy cập giá bằng cách sử dụng car3, hoặc (*car3).pricehoặc car3->pricecó thể được sử dụng.

Sự khác biệt giữa công đoàn và cấu trúc

Hãy lấy một ví dụ để chứng minh sự khác biệt giữa công đoàn và cấu trúc:

 #include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; ) 

Đầu ra

 kích thước của công đoàn = 32 kích thước của cấu trúc = 40 

Tại sao lại có sự khác biệt về kích thước của biến liên hợp và biến cấu trúc?

Ở đây, kích thước của sJob là 40 byte vì

  • kích thước của name(32)là 32 byte
  • kích thước của salarylà 4 byte
  • kích thước của workerNolà 4 byte

Tuy nhiên, kích thước của uJob là 32 byte. Đó là vì kích thước của biến liên hợp sẽ luôn là kích thước của phần tử lớn nhất của nó. Trong ví dụ trên, kích thước của phần tử lớn nhất của nó, ( name(32)), là 32 byte.

Với một đoàn thể, tất cả các thành viên đều có chung một kỷ niệm .

Ví dụ: Tiếp cận Thành viên Liên minh

 #include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )

Đầu ra

 Lương = 0,0 Số công nhân = 100 

Để tìm hiểu nơi sử dụng các nghiệp đoàn, hãy truy cập Tại sao chúng ta cần C Unions?

thú vị bài viết...