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

Mục lục:

Anonim

Cấu trúc là gì?

Cấu trúc là một kiểu dữ liệu do người dùng định nghĩa trong ngôn ngữ lập trình C kết hợp các mục dữ liệu có liên quan một cách logic của các kiểu dữ liệu khác nhau với nhau.

Tất cả các phần tử cấu trúc được lưu trữ tại các vị trí bộ nhớ liền kề. Biến kiểu cấu trúc có thể lưu trữ nhiều hơn một mục dữ liệu thuộc các kiểu dữ liệu khác nhau dưới một tên.

Trong hướng dẫn này, bạn sẽ học:

  • Cấu trúc là gì?
  • Union là gì
  • Cú pháp khai báo cấu trúc
  • Ví dụ về cấu trúc trong lập trình C
  • Cú pháp khai báo Union
  • Ví dụ về Union trong lập trình C
  • Cấu trúc Vs. liên hiệp
  • Ưu điểm của cấu trúc
  • Ưu điểm của công đoàn
  • Nhược điểm của cấu trúc
  • Nhược điểm của công đoàn

Union là gì

Union là một kiểu dữ liệu do người dùng định nghĩa, giống như một cấu trúc. Union kết hợp các đối tượng thuộc nhiều loại và kích cỡ khác nhau với nhau. Biến union cấp phát không gian bộ nhớ bằng với không gian chứa biến union lớn nhất. Nó cho phép nhiều loại đối tượng khác nhau chia sẻ cùng một vị trí.

Cú pháp khai báo cấu trúc

struct [name of the structure]{type member1;type member2;type member3;};

Cấu trúc được khai báo bằng cách sử dụng từ khóa "struct" và tên của cấu trúc. Số 1, số 2, số 3 là các thành viên riêng lẻ của cấu trúc. Phần nội dung được kết thúc bằng dấu chấm phẩy (;).

Ví dụ về cấu trúc trong lập trình C

#include struct student {char name[60];int roll_no;float marks;} sdt;int main() {printf("Enter the following information:\n");printf("Enter student name: ");fgets(sdt.name, sizeof(sdt.name), stdin);printf("Enter student roll number: ");scanf("%d", & sdt. roll_no);printf("Enter students marks: ");scanf("%f", & sdt.marks);printf("The information you have entered is: \n");printf("Student name: ");printf("%s", sdt.name);printf("Student roll number: %d\n", sdt. roll_no);printf("Student marks: %.1f\n", sdt.marks);return 0;}

Trong chương trình trên, một cấu trúc gọi là student được tạo. Cấu trúc này có ba thành viên dữ liệu: 1) tên (chuỗi), 2) roll_no (số nguyên) và 3) dấu (float).

Sau đó, một biến cấu trúc sdt được tạo để lưu trữ thông tin học sinh và hiển thị trên màn hình máy tính.

Đầu ra:

Nhập thông tin sau:

Nhập tên sinh viên: James

Nhập số danh sách học sinh: 21

Nhập điểm của học sinh: 67

Thông tin bạn đã nhập là:

Tên sinh viên: John

Số danh sách học sinh: 21

Điểm sinh viên: 67,0

Cú pháp khai báo Union

union [name of union]{type member1;type member2;type member3;};

Union được khai báo bằng cách sử dụng từ khóa "union" và tên của union. Số 1, số 2, số 3 là các thành viên riêng lẻ của công đoàn. Phần nội dung được kết thúc bằng dấu chấm phẩy (;).

Ví dụ về Union trong lập trình C

#include union item{int x;float y;char ch;};int main( ){union item it;it.x = 12;it.y = 20.2;it.ch = 'a';printf("%d\n", it.x);printf("%f\n", it.y);printf("%c\n", it.ch);return 0;}

Đầu ra:

1101109601

20.199892

a

Trong chương trình trên, bạn có thể thấy rằng các giá trị của x và y bị hỏng. Chỉ có biến ch in ra kết quả mong đợi. Đó là bởi vì, trong liên minh, vị trí bộ nhớ được chia sẻ giữa tất cả các kiểu dữ liệu thành viên.

Do đó, thành viên dữ liệu duy nhất có giá trị hiện đang được lưu trữ, sẽ chiếm không gian bộ nhớ. Giá trị của biến ch được lưu sau cùng, vì vậy giá trị của các biến còn lại sẽ bị mất.

Cấu trúc Vs. liên hiệp

Đây là sự khác biệt quan trọng giữa cấu trúc và liên minh:

Kết cấu liên hiệp
Bạn có thể sử dụng từ khóa struct để xác định cấu trúc. Bạn có thể sử dụng từ khóa union để định nghĩa union.
Mọi thành viên trong cấu trúc được gán một vị trí bộ nhớ duy nhất. Trong liên minh, một vị trí bộ nhớ được chia sẻ bởi tất cả các thành viên dữ liệu.
Việc thay đổi giá trị của một thành viên dữ liệu sẽ không ảnh hưởng đến các thành viên dữ liệu khác trong cấu trúc. Thay đổi giá trị của một thành viên dữ liệu sẽ thay đổi giá trị của các thành viên dữ liệu khác trong liên minh.
Nó cho phép bạn khởi tạo nhiều thành viên cùng một lúc. Nó cho phép bạn chỉ khởi tạo thành viên đầu tiên của union.
Tổng kích thước của cấu trúc là tổng kích thước của mọi thành viên dữ liệu. Tổng kích thước của liên hợp là kích thước của thành viên dữ liệu lớn nhất.
Nó chủ yếu được sử dụng để lưu trữ các loại dữ liệu khác nhau. Nó chủ yếu được sử dụng để lưu trữ một trong nhiều kiểu dữ liệu có sẵn.
Nó chiếm không gian cho mỗi và mọi thành viên được viết bằng các tham số bên trong. Nó chiếm không gian cho một thành viên có kích thước cao nhất được ghi trong các tham số bên trong.
Bạn có thể lấy bất kỳ thành viên nào tại một thời điểm. Bạn có thể truy cập một thành viên tại một thời điểm trong liên minh.
Nó hỗ trợ mảng linh hoạt. Nó không hỗ trợ một mảng linh hoạt.

Ưu điểm của cấu trúc

Dưới đây là ưu / lợi ích của việc sử dụng cấu trúc:

  • Cấu trúc tập hợp nhiều hơn một phần dữ liệu về cùng một chủ đề với nhau ở cùng một nơi.
  • Sẽ rất hữu ích khi bạn muốn thu thập dữ liệu của các kiểu dữ liệu và tham số tương tự như tên, họ, v.v.
  • Nó rất dễ duy trì vì chúng ta có thể đại diện cho toàn bộ bản ghi bằng cách sử dụng một tên duy nhất.
  • Trong cấu trúc, chúng ta có thể chuyển tập hợp các bản ghi hoàn chỉnh cho bất kỳ hàm nào bằng cách sử dụng một tham số duy nhất.
  • Bạn có thể sử dụng một mảng cấu trúc để lưu trữ nhiều bản ghi hơn với các kiểu tương tự.

Ưu điểm của công đoàn

Dưới đây là những ưu / lợi ích khi sử dụng union:

  • Nó chiếm ít bộ nhớ hơn so với cấu trúc.
  • Khi bạn sử dụng union, chỉ có thể truy cập trực tiếp biến cuối cùng.
  • Union được sử dụng khi bạn phải sử dụng cùng một vị trí bộ nhớ cho hai hoặc nhiều thành viên dữ liệu.
  • Nó cho phép bạn giữ dữ liệu của một thành viên dữ liệu duy nhất.
  • Không gian được cấp phát của nó bằng với kích thước tối đa của thành viên dữ liệu.

Nhược điểm của cấu trúc

Dưới đây là nhược điểm / hạn chế của việc sử dụng cấu trúc:

  • Nếu mức độ phức tạp của dự án CNTT vượt quá giới hạn, nó sẽ trở nên khó quản lý.
  • Thay đổi một cấu trúc dữ liệu trong một mã đòi hỏi phải thay đổi ở nhiều nơi khác. Do đó, những thay đổi trở nên khó theo dõi.
  • Cấu trúc chậm hơn vì nó yêu cầu không gian lưu trữ cho tất cả dữ liệu.
  • Bạn có thể truy xuất bất kỳ thành viên nào tại một thời điểm trong cấu trúc trong khi bạn có thể truy cập một thành viên tại một thời điểm trong liên minh.
  • Cấu trúc chiếm không gian cho mỗi và mọi thành viên được viết bằng tham số bên trong trong khi liên hiệp chiếm không gian cho thành viên có kích thước cao nhất được viết trong tham số bên trong.
  • Cấu trúc hỗ trợ mảng linh hoạt. Union không hỗ trợ một mảng linh hoạt.

Nhược điểm của công đoàn

Dưới đây là nhược điểm / hạn chế khi sử dụng union:

  • Bạn chỉ có thể sử dụng một thành viên công đoàn tại một thời điểm.
  • Tất cả các biến liên hợp không thể được khởi tạo hoặc sử dụng với các giá trị khác nhau tại một thời điểm.
  • Union chỉ định một không gian lưu trữ chung cho tất cả các thành viên của mình.

SỰ KHÁC BIỆT CHÍNH:

  • Mọi thành viên trong cấu trúc được gán một vị trí bộ nhớ duy nhất trong khi trong liên hợp, một vị trí bộ nhớ được chia sẻ bởi tất cả các thành viên dữ liệu.
  • Thay đổi giá trị của một thành viên dữ liệu sẽ không ảnh hưởng đến các thành viên dữ liệu khác trong cấu trúc trong khi thay đổi giá trị của một thành viên dữ liệu sẽ thay đổi giá trị của các thành viên dữ liệu khác trong liên minh.
  • Cấu trúc chủ yếu được sử dụng để lưu trữ các kiểu dữ liệu khác nhau trong khi union chủ yếu được sử dụng để lưu trữ một trong nhiều kiểu dữ liệu.
  • Về cấu trúc, bạn có thể truy xuất bất kỳ thành viên nào tại một thời điểm, mặt khác trong liên minh, bạn có thể truy cập một thành viên tại một thời điểm.
  • Cấu trúc hỗ trợ mảng linh hoạt trong khi union không hỗ trợ mảng linh hoạt.