Trong ngôn ngữ lập trình C, có các kiểu dữ liệu được xác định trước và các kiểu dữ liệu do người dùng xác định. Ví dụ về các kiểu dữ liệu do người dùng xác định là các cấu trúc và hợp nhất trong C.
Trong Structure và Union, người dùng có thể định nghĩa các kiểu dữ liệu và hàm thành viên khác nhau để truy cập tất cả các biến. Mặc dù cả hai đều tuân theo cùng một cú pháp, nhưng có một sự khác biệt rất lớn giữa chúng.
Các nội dung chính
- Cấu trúc trong C cho phép nhóm các biến có kiểu dữ liệu khác nhau dưới một tên duy nhất trong khi vẫn duy trì phân bổ bộ nhớ riêng cho từng thành viên, cho phép lưu trữ đồng thời các giá trị của tất cả các thành viên.
- Hợp nhất trong C cũng cho phép nhóm các biến có kiểu dữ liệu khác nhau dưới một tên duy nhất nhưng chia sẻ một phân bổ bộ nhớ duy nhất cho tất cả các thành viên, nghĩa là chỉ có thể lưu trữ giá trị của một thành viên tại một thời điểm.
- Sự khác biệt chính giữa cấu trúc và liên hợp nằm ở cách phân bổ bộ nhớ và lưu trữ giá trị, trong đó cấu trúc sử dụng bộ nhớ riêng cho từng thành viên và liên hợp chia sẻ bộ nhớ giữa tất cả các thành viên.
Cấu trúc so với Liên hợp trong C
Về mặt cấu trúc, mỗi thành viên dữ liệu đầu vào đều có một vị trí bộ nhớ cụ thể. Do đó, nó có khả năng lưu trữ nhiều giá trị cho mỗi thành viên. Trong khi hợp nhất, một bộ nhớ chia sẻ duy nhất được phân bổ cho tất cả các thành viên dữ liệu đầu vào. Do đó, nó lưu một giá trị duy nhất tại một thời điểm cho tất cả các thành viên.

Ví dụ
Cấu trúc công việc
{
Tiền tệ quốc tế;
Tên nhân vật;
}s1;
Trong đó, kích thước bộ nhớ cho struct được phân bổ sẽ là 2+1 =3 byte kể từ khi kích thước của số nguyên là 1 byte và kích thước của char là 2 byte. Do đó kích thước sẽ là 3 byte.
` Công đoàn Công việc
{
Tiền tệ quốc tế;
Tên nhân vật;
}s1;
Trong phép hợp nhất, kích thước bộ nhớ được phân bổ sẽ là 2 byte vì kích thước tối đa của kiểu dữ liệu trong phép hợp nhất là 2 byte, tức là kiểu dữ liệu ký tự.
Bảng so sánh
Tham số để so sánh | liên hiệp | Structure |
---|---|---|
Định nghĩa từ khóa | Nó sử dụng từ khóa “union”. | Sử dụng từ khóa “struct”. |
Kích thước bộ nhớ | Kích thước bằng với phần tử có kích thước lớn nhất. | Kích thước bằng tổng của tất cả các phần tử trong cấu trúc |
Bộ nhớ dùng chung | Tất cả bộ nhớ của phần tử được chia sẻ với các phần tử khác | Các thành phần cấu trúc không có bộ nhớ chia sẻ. |
Quyền truy cập phần tử | Chỉ có một phần tử duy nhất được truy cập tại một thời điểm duy nhất | Có thể truy cập bất kỳ số lượng phần tử nào tại bất kỳ thời điểm nào |
Ví dụ | Ví dụ về liên minh { Kiểu dữ liệu và thành viên }đối tượng; | ví dụ về cấu trúc { Kiểu dữ liệu và thành viên }đối tượng; |
Cấu trúc trong C là gì?
Cấu trúc là một nhóm dữ liệu do người dùng định nghĩa thu thập nhiều loại dữ liệu khác nhau. Ví dụ sau đây sẽ khá hữu ích. Giả sử một lập trình viên cần lưu trữ dữ liệu như sinh viên, tên, lớp, địa chỉ và nhiều dữ liệu khác.
Vâng, có hai cách để tiếp cận điều này Vấn đề thứ nhất là tạo ra các kiểu dữ liệu khác nhau, còn vấn đề thứ hai là tạo ra một cấu trúc.
Trong trường hợp này, cấu trúc sẽ có lợi vì nếu bạn tạo các biến riêng biệt, bạn cần tạo nhiều biến cho mỗi học sinh và điều này thực sự gây ra sự hỗn loạn. Thay vào đó, một cấu trúc có thể được sử dụng nhiều lần.
Có thể tạo một cấu trúc bằng cách sử dụng từ khóa struct.
Ví dụ
Cấu trúc structure_name{
Kiểu dữ liệu datatype_name;
Kiểu dữ liệu datatype_name;
Kiểu dữ liệu datatype_name;
Kiểu dữ liệu datatype_name;
...
};
Nếu bạn muốn truy cập bất kỳ thành viên dữ liệu nào, bạn cần tạo một đối tượng, như vậy as
Cấu trúc structure_name tên_đối_tượng;
Với cú pháp object_name.datatype_name, bạn sẽ có thể truy cập vào kiểu dữ liệu trong cấu trúc.
Union trong C là gì?
Tương tự như cấu trúc, union là một kiểu dữ liệu do người dùng định nghĩa khác trong ngôn ngữ lập trình C. Một kiểu dữ liệu do người dùng định nghĩa được tạo ra bất cứ khi nào một lập trình viên định nghĩa một union, nhưng không có vị trí bộ nhớ.
Nếu bạn muốn phân bổ bộ nhớ, bạn cần tạo các biến trong union. Union có một thuộc tính không cho phép bất kỳ lập trình viên nào truy cập vào các kiểu dữ liệu nhiều hơn một lần.
Do đó, trong liên hợp, một lập trình viên có thể truy cập một thành viên dữ liệu tại một thời điểm. Chúng ta hãy lấy một ví dụ nhỏ.
Liên minh liên minh_tên
{
Kiểu dữ liệu Tên kiểu dữ liệu;
Kiểu dữ liệu Tên kiểu dữ liệu;
Kiểu dữ liệu Tên kiểu dữ liệu;
Kiểu dữ liệu Tên kiểu dữ liệu;
};
Trong ví dụ trên, cấu trúc cơ bản của một union được hiển thị. Đây là cách một lập trình viên tạo union. Nếu bạn muốn truy cập bất kỳ kiểu dữ liệu nào trong union, bạn cần sử dụng nó. Một toán tử tương tự như structure.
Union union_name obj name; Với câu lệnh trên, bạn có thể tạo đối tượng giúp bạn truy cập bất kỳ thành viên dữ liệu nào trong union bằng cách sử dụng toán tử dot.
Sự khác biệt chính giữa Structure và Union trong C
- Cấu trúc là kiểu dữ liệu do người dùng định nghĩa, lưu trữ các kiểu dữ liệu khác nhau. Ngoài ra, nó được sử dụng để biểu diễn một tập hợp các giá trị của kiểu dữ liệu. Nếu một lập trình viên cần định nghĩa một hợp nhất, thì lập trình viên đó cần sử dụng từ khóa struct. Đồng thời, một hợp nhất cần một từ khóa union để định nghĩa.
- Trong một cấu trúc, tất cả các kiểu dữ liệu được lưu trữ ở các vị trí khác nhau và bạn có thể truy cập nhiều thành viên dữ liệu. Trong khi đó, trong một hợp nhất, tất cả các thành viên dữ liệu chia sẻ cùng một vị trí bộ nhớ chính xác và chỉ có thể truy cập một thành viên dữ liệu duy nhất tại một thời điểm.
- Về cấu trúc, để khởi tạo bất kỳ thành viên nào, có thể khởi tạo nhiều thành viên cùng một lúc, nhưng chỉ có thể khởi tạo thành viên đầu tiên trong trường hợp hợp nhất.
- Tổng kích thước của cấu trúc phụ thuộc vào tổng kích thước của các thành viên dữ liệu, trong khi trong trường hợp hợp nhất, kích thước bằng với thành viên dữ liệu có kích thước lớn nhất trong số tất cả.
- Về mặt cấu trúc, mỗi kiểu dữ liệu có cách phân bổ bộ nhớ khác nhau, trong khi ở dạng hợp nhất, một bộ nhớ duy nhất được phân bổ cho thành viên dữ liệu lớn nhất.
