Sự khác biệt giữa cấu trúc và liên kết trong C
Cấu trúc là gì?
Cấu trúc là 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 logic của các loại dữ liệu khác nhau lại 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 mục dữ liệu thuộc các kiểu dữ liệu khác nhau dưới một tên.
Liên minh là gì
Union là kiểu dữ liệu do người dùng xác định, giống như một cấu trúc. Union kết hợp các đối tượng thuộc loại và kích cỡ khác nhau lại với nhau. Biến kết hợp phân bổ không gian bộ nhớ bằng khoảng trống để chứa biến kết hợp lớn nhất. Nó cho phép các 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 từ khóa “struct” và tên của cấu trúc. Số 1, số 2, số 3 là các thành phần riêng lẻ của cấu trúc. Phần thân đượ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 <stdio.h> 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 có tên là sinh viên được tạo ra. 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 đó, 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 mã số học sinh: 21
Nhập điểm học sinh: 67
Thông tin bạn đã nhập là:
Tên sinh viên: John
Mã số học sinh: 21
Điểm học sinh: 67.0
Cú pháp khai báo Union
union [name of union] { type member1; type member2; type member3; };
Liên minh được tuyên bố bằng cách sử dụng từ khóa “union” và tên của liên minh. Số 1, số 2, số 3 là cá nhân đoàn viên. Phần thân được kết thúc bằng dấu chấm phẩy (;).
Ví dụ về Union trong lập trình C
#include <stdio.h> 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 giá trị của x và y bị sai. Chỉ có biến ch mới in ra kết quả mong đợi. Đó là bởi vì, khi kết hợp lại, vị trí bộ nhớ được chia sẻ giữa tất cả các loại dữ liệu thành viên.
Do đó, thành viên dữ liệu duy nhất có giá trị hiện được lưu trữ sẽ chiếm dung lượng bộ nhớ. Giá trị của biến ch cuối cùng đã được lưu trữ, do đó giá trị của phần còn lại của biến 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:
Structure | 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 để xác định một 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 sự hợp nhất, 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 liên minh. |
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 minh 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 loại dữ liệu có sẵn. |
Nó chiếm không gian cho 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 thành viên có kích thước cao nhất được ghi bằng tham số bên trong. |
Bạn có thể truy xuất 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 về kết cấu
Dưới đây là những ưu/lợi ích khi sử dụng cấu trúc:
- Các cấu trúc thu thập nhiều hơn một phần dữ liệu về cùng một chủ đề ở cùng một nơi.
- Nó rất hữu ích khi bạn muốn thu thập dữ liệu của các loại dữ liệu và tham số tương tự như tên, họ, v.v.
- Nó rất dễ bảo trì vì chúng ta có thể biểu diễn 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 bộ 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 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 công đoàn:
- Nó chiếm ít bộ nhớ hơn so với cấu trúc.
- Khi bạn sử dụng kết hợp, chỉ có thể truy cập trực tiếp biến cuối cùng.
- Liên minh đượ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 chỉ một thành viên dữ liệu.
- Không gian được phân bổ của nó bằng kích thước tối đa của thành viên dữ liệu.
Nhược điểm về kết cấu
Dưới đây là những nhược điểm/nhược điểm khi sử dụng cấu trúc:
- Nếu độ phức tạp của dự án CNTT vượt quá giới hạn, việc quản lý sẽ trở nên khó khăn.
- Việc thay đổi một cấu trúc dữ liệu trong mã đòi hỏi phải thay đổi ở nhiều nơi khác. Vì vậy, 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 từng thành viên một trong liên minh.
- Cấu trúc chiếm không gian cho mỗi thành viên được viết bằng tham số bên trong trong khi liên minh chiếm không gian cho thành viên có kích thước cao nhất được viết bằng tham số bên trong.
- Cấu trúc hỗ trợ mảng linh hoạt. Union không hỗ trợ mảng linh hoạt.
Nhược điểm của công đoàn
Dưới đây là những nhược điểm/nhược điểm khi sử dụng công đoàn:
- 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 hợp nhất 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 chỉ định một vị trí bộ nhớ duy nhất trong khi ở dạng hợp nhấ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 trong khi việ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 kết.
- Cấu trúc chủ yếu được sử dụng để lưu trữ các loại dữ liệu khác nhau trong khi kết hợp chủ yếu được sử dụng để lưu trữ một trong nhiều loại 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 từng thành viên một.
- Cấu trúc hỗ trợ mảng linh hoạt trong khi liên kết không hỗ trợ mảng linh hoạt.
Đồng thời kiểm tra Hướng dẫn C dành cho người mới bắt đầu của chúng tôi: - Bấm vào đây