Kiểu dữ liệu cấu trúc trong ngôn ngữ C

Trong lập trình, việc lưu trữ các giá trị gồm nhiều thành phần dữ liệu giống nhau ta có kiểu mảng. Thực tế rất nhiều dữ liệu là tập các kiểu dữ liệu khác nhau tập hợp lại, để quản lý dữ liệu kiểu này ngôn ngữ C/C++ đưa ra kiểu dữ liệu cấu trúc. Chúng ta hay cùng nhau tìm hiểu các khái niệm cơ bản của Kiểu dữ liệu cấu trúc trong ngôn ngữ C.

1.Định nghĩa:

Kiểu 1:

struct <tên cấu trúc>

{

<tên kiểu dữ liệu> <tên thành phần 1>;

<tên kiểu dữ liệu> <tên thành phần 2>;

};

Ví dụ: Một ngày được mô tả bằng 4 thành phần thông tin:  ngày (day), tháng (month), năm (year) và thứ của ngày trong tuần (chuỗi ngày).

struct date  // mô tả ngày tháng năm 

{

int day;

int month;

int year;

char weekdays [4];//Mon, Tue, Wed

};

Kiểu 2:

typedef struct <tên cấu trúc>

{

<tên kiểu dữ liệu> <tên thành phần 1>;

<tên kiểu dữ liệu> <tên thành phần 2>;

 }<tên cấu trúc mới>;

Ví dụ: Kiểu nhân viên có thể được khai báo như sau :

typedef  struct Tenhanvien 

{   

int maso;

char ten[30];

float luong;

}TENNV;

 Sau câu lệnh trên chúng ta có kiểu dữ liệu Nhân viên có 2 tên gọi là TenhanvienTENV.

2.Khai báo:

Khai báo một cấu trúc chỉ là khai báo thêm một kiểu dữ liệu mới cho chương trình thay vì dùng các kiểu dữ liệu có sẵn như  int, float… Để có được một biến cấu trúc ta phải khai báo biến với kiểu là cấu trúc đó. 

Cú pháp :  <Tên cấu trúc> <tên biến>;

Ví dụ:

TENNV x; //Khai báo biến x kiểu Nhân viên

TENNV dsNhanvien[100];  //khai báo mảng 1 chiều dsNhanvien chứa 100 nhân viên.

3.Truy xuất các thành phần của một biến cấu trúc:

Để truy xuất một thành phần của biến cấu trúc, ngôn ngữ C có các phép toán lấy thành phần như sau:

– Nếu biến cấu trúc là biến thông thường (không phải là con trỏ) thì truy xuất thành cấu trúc bằng dấu chấm “.”

<Tên biến cấu trúc> . <Tên thành phần>

– Nếu biến cấu trúc là biến con trỏ thì truy xuất thành phần bằng dấu mũi tên “ ->” (dấu trừ và dấu lớn).

<Tên biến con trỏ cấu trúc> -> <Tên thành phần>

Ví dụ:

struct date  // mô tả ngày tháng năm 

{

int day;

int month;

int year;

char weekdays [4];//Mon, Tue, Wed

}ngay;

ngay.day = 2;  //gán  giá trị  2 cho  thành phần  day của  biến

date *d; //dùng con trỏ

d->day = 2; //gán giá trị 2 cho thành phần day của biến con trỏ d

struct Tênhanvien

{  

int maso;

char ten[30];

 float luong;  

} nv1;

nv1.maso; // để truy xuất  maso của nhân viên

nv1.ten;  // để truy xuất ten của nhân viên

nv1.luong;  // để truy xuất lương của nhân viên

 

Chúc các bạn thành công !!!