Struct là gì ?

Struct là một kiểu tài liệu gồm có nhiều thành phần có thể thuộc nhiều kiểu tài liệu khác nhau. Các thành phần được truy nhập thông qua một tên.

Khái niệm cấu trúc

Một cấu trúc gồm có các mẫu tài liệu (không nhất thiết cùng kiểu) được nhóm lại với nhau.

Việc khái niệm cấu trúc sẽ tạo ra kiểu tài liệu mới được cho phép người dùng sử dụng chúng để khai báo các biến kiểu cấu trúc.

Các biến trong cấu trúc được gọi là các thành phần của cấu trúc hay thành phần của cấu trúc

Khai báo biến cấu trúc

Khởi tạo cấu trúc

  • Như những biến khác và mảng, các biến kiểu cấu trúc có thể được khởi tạo tại thời khắc khai báo
  • Các biến emp1 và emp2 có kiểu employee có thể được khai báo và khởi tạo như sau:

struct employee emp1 = {346, “Abraham”}; struct employee emp2 = {347, “John”};

Truy cập thành phần của cấu trúc

  • Các thành phần của cấu trúc được truy cập thông qua việc sử dụng toán tử chấm (.), toán tử này còn được gọi là toán tử thành viên – membership.
  • Cú pháp:

structure_name.element_name

  • Ví dụ:

scanf(“%s”, books1.bk_name);

Gán sử dụng cấu trúc

  • Có thể sử dụng câu lệnh gán đơn giản để gán giá trị của một biến cấu trúc cho một biến khác có cùng kiểu
  • Chẳng hạn, nếu books1 và books2 là các biến cấu trúc có cùng kiểu, thì câu lệnh sau là hợp thức

books2 = books1;

Sao chép cấu trúc

  • Do kiểu tài liệu cấu trúc là phức tạp nên trong một số trường hợp không thể dùng câu lệnh gán trực tiếp, thì có thể sử dụng hàm memcpy(), đây là hàm có sẵn trong thư viện lập trình
  • Cú pháp:

memcpy (char * destn, char &source, int nbytes);

  • Ví dụ:

memcpy (&books2, &books1, sizeof(struct cat));

Cấu trúc lồng nhau

  • Một cấu trúc có thể lồng trong một cấu trúc khác. Tuy nhiên, một cấu trúc không thể lồng trong chính nó.

struct issue

{

char borrower [20]; char dt_of_issue[8]; struct cat books;

}issl;

  • Việc truy cập vào các thành phần của cấu trúc này tương tự như với cấu trúc thường ngày khác,
  • Để truy cập vào thành phần của cấu trúc cat là một phần của cấu trúc issl

Mảng cấu trúc

  • Một kiểu cấu trúc phải được khái niệm trước, sau đó một biến mảng có kiểu cấu trúc tương ứng mới được khai báo
  • Để truy cập vào thành phần author của thành phần thứ tư của mảng books ta làm như sau:

books[4].author

Khởi tạo các mảng cấu trúc

  • Mảng cấu trúc được khởi tạo bằng phương pháp liệt kê list các giá trị thành phần của nó dưới dạng liệt kê
  • Ví dụ:

Con trỏ đến cấu trúc

  • Con trỏ cấu trúc được khai báo bằng phương pháp đặt dấu * trước tên của biến cấu trúc.
  • Toán tử -> được dùng làm truy cập vào các thành phần của một cấu trúc sử dụng một con trỏ
  • Con trỏ cấu trúc được truyền vào hàm, được cho phép hàm thay đổi trực tiếp các thành phần của cấu trúc.

Từ khóa typedef

  • Một kiểu tài liệu có thể được khái niệm bằng phương pháp sử dụng từ khóa typedef
  • Nó không tạo ra một kiểu tài liệu mới, mà khái niệm một tên mới cho một kiểu đã có.
  • Cú pháp: typedef type name;
    • Ví dụ: typedef float deci;
  • typedef không thể sử dụng với storage classes

Các phương pháp Khai báo struct

Cách 1:

Ví dụ:

Cách 2:

Ví dụ:

Bài tập được đặt theo hướng dẫn

Bài1: Khai báo cấu trúc HinhChuNhat cấp thiết lưu trữ thông tin hình chữ nhật, sau đó thực hiện các chức năng: (Lưu ý: Viết Khóa học dạng hàm).Yêu cầu:

Hướng dẫn:Bước 1: Tạo project mới (có thể xem lại nội dung bài viết Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012 Hoặc Hướng dẫn Dev-C++ cơ bản)Bước 2: Khai báo thêm các thư viện cơ bản cho Khóa học.

#include <conio.hvàgt; #include <stdio.hvàgt;

Bước 3: Khai báo struct HinhChuNhat cho Khóa học.

struct HinhChuNhat { int Dai; int Rong; };

Bước 4: Viết các khai báo nguyên mẫu hàm cho Khóa học như sau:

void NhapThongTinHCN(HinhChuNhat &pHcn); void XuatThongTinHCN(HinhChuNhat pHcn); void TinhChuViHcn(HinhChuNhat pHcn); void TinhDienTichHcn(HinhChuNhat pHcn);

Bước 5: Viết hàm main để thực thi Khóa học.

void main() { HinhChuNhat hinhchunhat; NhapThongTinHCN(hinhchunhat); XuatThongTinHCN(hinhchunhat); TinhChuViHcn(hinhchunhat); TinhDienTichHcn(hinhchunhat); getch(); }

Bước 6: Viết các khái niệm hàm cấp thiết cho Khóa học như sau:

void NhapThongTinHCN(HinhChuNhat &pHcn) { printf(“Moi ban nhap chieu dai hcn=”); scanf_s(“%d”,&pHcn.Dai); printf(“Moi ban nhap chieu rong hcn=”); scanf_s(“%d”,&pHcn.Rong); } //================================ void XuatThongTinHCN(HinhChuNhat pHcn) { printf(“Chieu dai hcn la=%d”,pHcn.Dai); printf(“nChieu rong hcn la=%d”,pHcn.Rong); } //=============================== void TinhChuViHcn(HinhChuNhat pHcn) { printf(“nChu vi hcn la=%d”,(pHcn.Dai+pHcn.Rong)*2); } //================================ void TinhDienTichHcn(HinhChuNhat pHcn) { printf(“nDien tich hcn la=%d”,pHcn.Dai*pHcn.Rong); }

Bài tập tương tự 1. Khai báo cấu trúc PhanSo cấp thiết lưu trữ thông tin phân số, sau đó thực hiện các chức năng:

2. Khai báo cấu trúc NhanVien lưu trữ thông tin:

Sau đó thực hiện các chức năng:

Tính tiền phụ cấp chức vụ:

3. Hãy khai báo một cấu trúc mô tả một điểm trên tọa độ xOy. Sau đó viết hàm thực hiện các chức năng sau:

4. Cho thông tin điểm các môn học sau: NNLT, Tin học, Toán A1. Hãy khai báo một cấu trúc mô tả điểm các môn học của một sinh viên. Sau đó viết hàm thực hiện các chức năng sau:

Xem thêm: Mảng Struct và ví dụ ứng dụng

You May Also Like

About the Author: v1000