Sự khác biệt giữa cấu trúc và liên minh

Cả cấu trúc và liên kết đều là các kiểu dữ liệu do người dùng định nghĩa trong Ngôn ngữ C và về mặt khái niệm là giống nhau, tuy nhiên, chúng vẫn khác nhau theo một số cách như cách phân bổ bộ nhớ cho các thành viên của chúng. Chúng được khai báo tương tự nhưng chúng hoạt động khác nhau. Chúng cho phép người dùng kết hợp các loại dữ liệu khác nhau dưới một tên duy nhất. Trong khi vị trí bộ nhớ riêng biệt được sử dụng cho mỗi thành viên khi khai báo các biến cấu trúc, các thành viên khác nhau của biến kết hợp có chung vị trí bộ nhớ. Hãy nghiên cứu sự khác biệt giữa cấu trúc và liên kết là chi tiết.

Cấu trúc là gì?

Cấu trúc chỉ là một kiểu dữ liệu do người dùng định nghĩa trong C cho phép người dùng kết hợp các loại dữ liệu khác nhau thành một loại duy nhất trong một khối bộ nhớ. Một cấu trúc có thể chứa cả các loại dữ liệu đơn giản và phức tạp liên quan đến nhau, nếu không, sẽ không có ý nghĩa. Mỗi thành viên trong một cấu trúc có vị trí bộ nhớ riêng để có thể truy cập và truy xuất nó bất cứ lúc nào.

Một cấu trúc được sử dụng khi nhiều dữ liệu cần nhóm như một thư mục lưu trữ thông tin về nhiều thành viên trong một cuốn sách hoặc một sổ địa chỉ lưu trữ tất cả thông tin về một liên hệ duy nhất - tên, địa chỉ, số liên lạc, v.v. Địa chỉ của mỗi thành viên sẽ theo thứ tự tăng dần, có nghĩa là bộ nhớ của mỗi thành viên sẽ bắt đầu ở các giá trị bù khác nhau. Thay đổi giá trị của một thành viên sẽ không có bất kỳ ảnh hưởng nào đến các thành viên khác.

Từ khóa 'struct' được sử dụng để xác định cấu trúc của các loại dữ liệu khác nhau dưới một tên duy nhất. Ví dụ: nếu bạn muốn tạo cơ sở dữ liệu nhân viên, bạn sẽ cần lưu trữ tên, tuổi, điện thoại và chi tiết lương của nhân viên dưới một thực thể duy nhất. Điều này được thực hiện bởi từ khóa 'struct', sau đó cho trình biên dịch biết rằng một cấu trúc đã được khai báo.

nhân viên cấu trúc

tên chuỗi;

tuổi chuỗi;

chuỗi điện thoại;

chuỗi lương;

emp1, emp2;

Ở đây, 'staff' là tên của cấu trúc và hai biến 'emp1' và 'emp2' được tạo ra thuộc loại 'staff'. Các dấu ngoặc nhọn phải được theo sau bởi dấu chấm phẩy (;).

Thành viên của một cấu trúc có thể được truy cập bởi hai loại toán tử:

  1. Thành viên điều hành
  2. Toán tử con trỏ cấu trúc

Liên minh là gì?

Đây là loại dữ liệu đặc biệt được sử dụng trong C cho phép người dùng lưu trữ các loại dữ liệu thuộc các loại khác nhau trong cùng một vị trí bộ nhớ. Liên minh khá giống với cấu trúc và nó có thể được xác định bằng cách thay thế từ khóa 'struct' bằng từ khóa 'union'. Các thành viên phủ lên bộ nhớ của nhau trong một liên minh và nó đủ lớn để phù hợp với tất cả các thành viên của nó.

Khi một biến được liên kết với union, trình biên dịch sẽ phân bổ bộ nhớ bằng cách xem xét kích thước của bộ nhớ lớn nhất, do đó kích thước của liên kết bằng với kích thước của thành viên dữ liệu lớn nhất. Một liên minh có thể được định nghĩa với nhiều thành viên, nhưng chỉ một thành viên chứa giá trị tại bất kỳ thời điểm cụ thể nào.

Địa chỉ giống nhau cho tất cả các thành viên của liên minh, có nghĩa là mọi thành viên bắt đầu ở cùng một giá trị bù. Và thay đổi giá trị của một thành viên sẽ ảnh hưởng đến giá trị của các thành viên khác. Liên kết có thể được sử dụng khi bạn muốn lưu trữ thứ gì đó là một trong một số loại dữ liệu.

nhân viên công đoàn

tên char [32];

tuổi int;

lương nổi;

;

Ở đây từ khóa 'union' định nghĩa liên minh khá giống với khai báo cấu trúc. Biến có thể lưu trữ một giá trị chuỗi là 'tên của nhân viên', một giá trị nguyên là 'tuổi của nhân viên' hoặc một số float đại diện cho 'mức lương của nhân viên'.

Sự khác biệt giữa cấu trúc và liên minh

1. Từ khóa

Từ khóa 'struct' được sử dụng để xác định cấu trúc trong khi từ khóa 'union' được sử dụng để xác định liên kết.

2. Phân bổ bộ nhớ

Không gian bộ nhớ riêng được phân bổ cho các thành viên trong một cấu trúc và các thành viên có địa chỉ khác nhau không chia sẻ bộ nhớ. Mặt khác, một liên minh chia sẻ cùng một không gian bộ nhớ cho tất cả các thành viên của nó để vị trí bộ nhớ chia sẻ được phân bổ.

3. Truy cập thành viên

Một liên minh lưu trữ một giá trị tại một thời điểm cho tất cả các thành viên của mình tạo khả năng truy cập cho chỉ một thành viên tại một thời điểm. Mặc dù nhiều giá trị có thể được lưu trữ trong một cấu trúc để mọi giá trị thành viên có thể được truy cập và truy xuất bất cứ lúc nào.

4. Kích thước

Kích thước của một cấu trúc bằng tổng kích thước của tất cả các thành viên trở lên, trong khi kích thước của một liên kết bằng với kích thước của thành viên kích thước lớn nhất.

5. Khởi tạo

Trong một cấu trúc, một số thành viên có thể được khởi tạo cùng một lúc, trong khi trong một liên minh, chỉ thành viên đầu tiên có thể được khởi tạo với giá trị của loại.

5. Giá trị

Một cấu trúc có thể lưu trữ các giá trị khác nhau của tất cả các thành viên và thay đổi giá trị của một thành viên sẽ không có bất kỳ ảnh hưởng nào đến các giá trị của các thành viên khác. Trong khi một liên minh lưu trữ cùng một giá trị cho tất cả các thành viên của nó và thay đổi giá trị của một thành viên sẽ ảnh hưởng đến giá trị của một thành viên khác.

Cơ cấu so với Liên minh

Kết cấu liên hiệp
Từ khóa Struct được sử dụng để xác định cấu trúc. Từ khóa liên minh được sử dụng để xác định một liên minh.
Thành viên không chia sẻ bộ nhớ trong một cấu trúc. Các thành viên chia sẻ không gian bộ nhớ trong một liên minh.
Bất kỳ thành viên có thể được lấy bất cứ lúc nào trong một cấu trúc. Mỗi lần chỉ có một thành viên có thể được truy cập.
Một số thành viên của cấu trúc có thể được khởi tạo cùng một lúc. Chỉ thành viên đầu tiên có thể được khởi tạo.
Kích thước của cấu trúc bằng tổng kích thước của mỗi thành viên. Quy mô của công đoàn bằng với quy mô của thành viên lớn nhất.
Thay đổi giá trị của một thành viên sẽ không ảnh hưởng đến giá trị của một thành viên khác. Thay đổi giá trị của một thành viên sẽ ảnh hưởng đến các giá trị thành viên khác.
Lưu trữ các giá trị khác nhau cho tất cả các thành viên. Lưu trữ cùng một giá trị cho tất cả các thành viên.

Tóm lược

  • Cả cấu trúc và liên kết đều là các kiểu dữ liệu do người dùng định nghĩa trong C giống nhau về mặt chức năng và khái niệm nhưng lại khá khác nhau theo một số cách.
  •  Cả hai đều chứa các biến có kiểu dữ liệu khác nhau nhưng chúng sử dụng cùng một cú pháp để khai báo biến và truy cập thành viên. Trong khi cấu trúc được xác định bởi từ khóa 'struct', liên kết được xác định bởi từ khóa 'union'.
  • Mỗi thành viên có vị trí bộ nhớ riêng trong một cấu trúc, trong khi trong một liên kết, tổng không gian bộ nhớ tương đương với thành viên có kích thước lớn nhất. Tất cả các thành viên chia sẻ cùng một không gian bộ nhớ trong một liên minh.
  • Bất kỳ thành viên nào trong bất kỳ chuỗi nào cũng có thể được truy cập trong một cấu trúc, trong khi trong một liên minh, chỉ có thể truy cập biến đó có thể được truy cập giá trị được lưu trữ gần đây.