Trong bài này họ sẽ học phương pháp sử dụng cấu tạo dữ liệu Struct và định nghĩa lại tài liệu với Typedef trong lập trình C.

Bạn đang xem: Cấu trúc struct c++

Bài 14 trong serie học lập trình C từ bỏ A cho tới Z


Cấu trúc dữ liệu là gì

Trong quá trình xây dựng ứng dụng, ngoài các kiểu dữ liệu do ngôn ngữ lập trình C hỗ trợ, thì C còn có thể chấp nhận được các xây dựng viên rất có thể tự định nghĩa những kiểu tài liệu riêng của mình. Các kiểu dữ liệu này được call là kiểu dữ liệu do người dùng định nghĩa “Kiểu dữ liệu người dùng” xuất xắc kiểu dữ liệu hướng người dùng.

Cấu trúc dữ liệu là một trong những nhóm các thành phần dữ liệu được team lại cùng với nhau vào một tên. Các bộ phận dữ liệu này có cách gọi khác là các thành viên, rất có thể là những kiểu dữ liệu khác biệt và độ nhiều năm khác nhau.

Ví dụ như SinhVien là 1 trong tập dữ liệu bao gồm : Tên, ngày sinh, giới tính với số năng lượng điện thoại, trọng lượng … Các thành phần này hoàn toàn có thể khác nhau về phương diện dữ liệu, vậy cho nên không thể áp dụng 1 kiểu dữ liệu đơn thuần để lưu được.

Khai báo dữ liệu cấu trúc Struct

*

Cú pháp khai báo

struct phan dinh nghia thanh vien; phan dinh nghia thanh vien; ... Phan dinh nghia thanh vien; ;Ví dụ, khai báo kiểu tài liệu sinh viên, dẫu vậy ko tạo ra biến nào.

struct SinhVien int maSV; char ho<20>; char ten<20>; bool gioiTinh; char queQuan<100>;;Để tạo thành 2 biến sinh viên 1 ta làm cho như sau:

struct SinhVien sv1, sv2;

Hoặc rất có thể khai báo luôn luôn 2 biến đổi đó, khi khai báo kiểu dữ liệu Struct

struct SinhVien int maSV; char ho<20>; char ten<20>; bool gioiTinh; char queQuan<100>;sv1,sv2;

Khởi tạo nên giá trị ban sơ cho biến Struct

Struct rất có thể được khởi chế tác qua rất nhiều cách thức khác nhau, điều này bao hàm cả vấn đề như gán những hằng số giá bán trị cho các thành phần. Bên cạnh đó nếu không khởi chế tạo ra giá trị thì các biến tất cả kiểu struct cũng trở thành khởi tạo theo phong cách không tường minh.

Ví dụ với các thành phần tất cả kiểu integer và float vẫn tự tùy chỉnh cấu hình giá trị là 0, với char và string sẽ là ‘’.

Cấu trúc:

struct ; ; = constant1,constant2, . .;Ví dụ:

struct SinhVien int maSV; char ho<20>; char ten<20>; bool gioiTinh; char queQuan<100>; float chieucao;sv1 = 1, "Nguyen", "Khue", "Nam", "ABCXYZ", 1,78;Như vào ví dụ, trình biên dịch sẽ ngầm định cực hiếm phần thong dong trên xuống dưới tương xứng với cực hiếm từ trái thanh lịch phải. Tức thị maSV = 1, bọn họ = “Nguyen” …..

Ngoài ra chúng ta cũng có thể khởi tạo ra một bí quyết tường minh hơn sẽ là gán giá trị mang lại từng phần tử trong struct.

VD:

struct SinhVien int maSV; char ho<20>; char ten<20>; bool gioiTinh; char queQuan<100>; float chieucao; sv1 = maSV = 1, ho = "Nguyen", ten = "Khue", gioitinh = "Nam", queQuan = "ABCXYZ", chieucao = 1.78;

Truy cập tới từng thành viên của Struct

Truy vấn từng member trong biến bởi toán tử ” . “

Cú pháp:

. ;

VD:

struct myStruct int a; int b; int c; s1, s2;Để truy nã vấn bọn chúng là sử dụng : s1.a; s1.b

Xét theo kía cạnh tàng trữ trên cha nhớ (Giả sử int tàng trữ 2 bytes “thực tế rất có thể 4 bytes” và a, b, c được tàng trữ tại các ô nhớ thường xuyên “a, b, c không tuyệt nhất thiết phải lưu trữ tại những ô nhớ liên tiếp” khi ấy hình hình ảnh thể hiện tại như sau:

*
Truy cập vào từng bộ phận trong Struct

Có thể tùy chỉnh các giá trị cho những thành phần của struct.

s1.b = 12;

Để in giá chỉ trị các thành phần thì tùy thuộc vào mẫu mã dữ liệu của những thành ví dụ họ muốn in tin tức của nguyên tố b thì bọn họ sử dụng câu lệnh :

printf(“%d”, s1.b);

Các thành phần tất cả kiểu string, vẻ bên ngoài mảng thì bọn họ xử lý tương tự như như họ đã làm.

Con trỏ Struct

Một bé trỏ trỏ đến cấu tạo hay biến nhỏ trỏ gồm kiểu kết cấu (struct) chỉ đơn thuần là bé trỏ đó trỏ đến add của cấu tạo đó. Lưu ý con trỏ có kiểu struct bắt buộc tự thay đổi biến bé trỏ đó thành struct được.

Cú pháp:

struct /* Khai báo cấu trúc */ ; ; . . ; *ptr;Để truy tìm vấn đến các thành phần của cấu trúc. Chúng ta sử dụng cú pháp sau :

Cú pháp

(*ptr).member_name;

Hoặc

ptr-> member_name;

Copy và so sánh Struct

Một phát triển thành được khai báo có kiểu struct có thể gán mang đến một phát triển thành khác bao gồm cùng kiểu struct.

Ví dụ:

struct employee char grade; int basic; float allowance;;struct employee nam=‘b’, 6500, 812.5;

struct employee hung;

hung = nam; // tiến hành phép gán trở nên hung = nam

Thực chất khi thực hiện phép gán hung = phái nam đó đó là quá trình sao chép dữ liệu những thành phần tương xứng của nam mang lại hung.

Phép so sánh cũng tương tự

Từ khóa typedef

Từ khóa typedef chất nhận được lập trình viên quan niệm kiểu tài liệu mới tự kiểu dữ liệu đã bao gồm trong chương trình.

Cú pháp

typedef ;

Trong đó

existing data type : Kiểu dữ liệu đã mãi mãi trong chương trình

new data type : Kiểu dữ liệu mới

VD:

typedef struct int maSV; char ho<20>; char ten<20>; bool gioiTinh; char queQuan<100>;SinhVien;Khi khai báo, bọn họ sẽ sử dụng.

SinhVien Sv1;

SinhVien Sv2;

Trong lập trình, thỉnh thoảng các các bạn sẽ thấy fan ta sử dụng kiểu dữ liệu uint8_t, uint16_t, uint32_1, …. Chính là kiểu dữ liệu được định nghĩa là tự unsigned int, unsigned long, ….

Xem thêm: Từ Điển Anh Việt " Pupils Là Gì, Nghĩa Của Từ Pupil, Pupils Tiếng Anh Là Gì

Bài tập về cấu tạo dữ liệu Struct

Chương trình cùng trừ nhân phân tách phân số trong C

#include #include #include int UCLN(int a, int b) a = abs(a); b = abs(b); while (a * b != 0) if (a > b) a %= b; else b %= a; return a + b; int BSCNN(int a, int b) return a * b / UCLN(a, b); typedef struct PhanSo int tuso, mauso; PS; PS rutGon(PS a) PS c; c.tuso = a.tuso / UCLN(a.tuso, a.mauso); c.mauso = a.mauso / UCLN(a.tuso, a.mauso); return c; PS cong(PS a, PS b) PS c; c.tuso = a.tuso * b.mauso + a.mauso * b.tuso; c.mauso = a.mauso * b.mauso; c = rutGon(c); return c; PS tru(PS a, PS b) PS c; c.tuso = a.tuso * b.mauso - a.mauso * b.tuso; c.mauso = a.mauso * b.mauso; c = rutGon(c); return c; PS nhan(PS a, PS b) PS c; c.tuso = a.tuso * b.tuso; c.mauso = a.mauso * b.mauso; c = rutGon(c); return c; PS chia(PS a, PS b) PS c; c.tuso = a.tuso * b.mauso; c.mauso = a.mauso * b.tuso; c = rutGon(c); return c;void print(PS a) printf("%d/%d", a.tuso, a.mauso);int main() PS a, b, c; printf(" Nhap phan so a : "); scanf("%d%d", &a.tuso, &a.mauso); printf(" Nhap phan so b : "); scanf("%d%d", &b.tuso, &b.mauso); printf(" Toi gian a ta duoc : "); a = rutGon(a); print(a); printf(" Toi gian b ta duoc : "); b = rutGon(b); print(b); printf(" Tong cua nhì phan so = "); c = cong(a, b); print(c); printf(" Hieu cua nhì phan so = "); c = tru(a, b); print(c); printf(" Tich cua nhị phan so = "); c = nhan(a, b); print(c); printf(" Thuong cua nhị phan so = "); c = chia(a, b); print(c);Kết quả

*

Quản lý sách

#include #include struct Books char title<50>; char author<50>; char subject<100>; int book_id;; int main( ) struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info */ printf( "Book 1 title : %s ", Book1.title); printf( "Book 1 tác giả : %s ", Book1.author); printf( "Book 1 subject : %s ", Book1.subject); printf( "Book 1 book_id : %d ", Book1.book_id); /* print Book2 info */ printf( "Book 2 title : %s ", Book2.title); printf( "Book 2 tác giả : %s ", Book2.author); printf( "Book 2 subject : %s ", Book2.subject); printf( "Book 2 book_id : %d ", Book2.book_id); return 0;Kết quả

Book 1 title : C ProgrammingBook 1 tác giả : Nuha AliBook 1 subject : C Programming TutorialBook 1 book_id : 6495407Book 2 title : Telecom BillingBook 2 author : Zara AliBook 2 subject : Telecom Billing TutorialBook 2 book_id : 6495700

Quản lý sách bằng con trỏ

#include #include struct Books char title<50>; char author<50>; char subject<100>; int book_id;;/* function declaration */void printBook( struct Books *book );int main( ) struct Books Book1; /* Declare Book1 of type Book */ struct Books Book2; /* Declare Book2 of type Book */ /* book 1 specification */ strcpy( Book1.title, "C Programming"); strcpy( Book1.author, "Nuha Ali"); strcpy( Book1.subject, "C Programming Tutorial"); Book1.book_id = 6495407; /* book 2 specification */ strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Zara Ali"); strcpy( Book2.subject, "Telecom Billing Tutorial"); Book2.book_id = 6495700; /* print Book1 info by passing address of Book1 */ printBook( &Book1 ); /* print Book2 info by passing address of Book2 */ printBook( &Book2 ); return 0;void printBook( struct Books *book ) printf( "Book title : %s ", book->title); printf( "Book tác giả : %s ", book->author); printf( "Book subject : %s ", book->subject); printf( "Book book_id : %d ", book->book_id);Kết quả

Book title : C ProgrammingBook tác giả : Nuha AliBook subject : C Programming TutorialBook book_id : 6495407Book title : Telecom BillingBook tác giả : Zara AliBook subject : Telecom Billing TutorialBook book_id : 6495700

Kết

Cấu trúc dữ liệu Struct được sử dụng tương đối nhiều trong thiết kế C. Cùng với Struct chúng ta có thể quản lý thông tin một cách đơn giản dễ dàng hơn khôn xiết nhiều.

Nếu thấy có lợi hãy phân chia sẻ bài viết và tham gia nhóm Nghiện Lập Trình để gặp mặt và học hỏi và chia sẻ nhé