Một số kỹ thuật lập trình với kiểu dữ liệu cấu trúc (struct) trong C++

Đây là bài 35/43 bài của series môn học Nhập môn lập trình

1. Truy xuất dữ liệu trong kiểu cấu trúc (struct) trong C++

Truy xuất các trường dữ liệu trong kiểu cấu trúc thông qua toán tử thành phần cấu trúc . hay còn gọi là toán tử chấm (dot operation).

Cú pháp

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

Ví dụ:

struct DIEM
{
	int x;
	int y;
};
DIEM d1 = {19, 20};
cout<<"Toa do cua diem d1 la ("<<d1.x<<", "<<d1.y<<")";

2. Gán dữ liệu cho các thành phần trong cấu trúc

Gán biến cấu trúc này cho biến cấu trúc kia (phải cùng kiểu cấu trúc)

Cú pháp: <biến cấu trúc đích> = <biến cấu trúc nguồn>;

Gán thành phần của biến cấu trúc bằng giá trị cụ thể

Cú pháp: <biến cấu trúc đích>.<tên thành phần> = <giá trị>;

Ví dụ:

struct DIEM
{
	int x;
	int y;
};
DIEM d1 = {19, 20};
DIEM d2, d3;
d2 = d1;//gán biến cấu trúc này cho biến cấu trúc kia
d3.x = 99;//gán các thành phần cấu trúc bằng giá trị
d3.y = 101;

3. Cấu trúc phức tạp

Thành phần của cấu trúc là một cấu trúc khác

#include <iostream>
using namespace std;

struct POINT
{
	int x;
	int y;
};
struct TRIANGLE
{
	POINT p1;
	POINT p2;
	POINT p3;
};

int main() {
	POINT d1 = {-1, 0};
	POINT d2 = {0, 2};
	POINT d3 = {2, 0};
	
	TRIANGLE t1;
	t1.p1 = d1;
	t1.p2 = d2;
	t1.p3 = d3;

	cout<<"Coordinates of 3 points in triangle t1:"<<endl;
	cout<<"("<<t1.p1.x<<", "<<t1.p1.y<<")"<<endl;
	cout<<"("<<t1.p2.x<<", "<<t1.p2.y<<")"<<endl;
	cout<<"("<<t1.p3.x<<", "<<t1.p3.y<<")"<<endl;
	system("pause");
}
Kết quả
Coordinates of 3 points in triangle t1:
(-1, 0)
(0, 2)
(2, 0)

Thành phần của cấu trúc là mảng

#include <iostream>
using namespace std;

struct POINT
{
	int x;
	int y;
};
struct TRIANGLE
{
	POINT p_array[3];
};

int main() {
	TRIANGLE t1;
	cout<<"Input 3 points of triangle t1:";
	for(int i=0;i<3;i++){
		cout<<endl<<"Input point "<<i+1<<endl;
		cout<<"x:";
		cin>>t1.p_array[i].x;
		cout<<"y:";
		cin>>t1.p_array[i].y;
	}

	cout<<"Coordinates of 3 points in triangle t1:"<<endl;
	cout<<"("<<t1.p_array[0].x<<", "<<t1.p_array[0].y<<")"<<endl;
	cout<<"("<<t1.p_array[1].x<<", "<<t1.p_array[1].y<<")"<<endl;
	cout<<"("<<t1.p_array[2].x<<", "<<t1.p_array[2].y<<")"<<endl;
	system("pause");
}
Kết quả
Input 3 points of triangle t1:
Input point 1
x:-1
y:0

Input point 2
x:0
y:2

Input point 3
x:2
y:0
Coordinates of 3 points in triangle t1:
(-1, 0)
(0, 2)
(2, 0)

4. Kích thước của struct

Trong bài Các kiểu dữ liệu cơ bản trong C++, các bạn đã biết cách sử dụng hàm sizeof() để xem kích thước của kiểu dữ liệu. Khi một kiểu dữ liệu cấu trúc (struct) được định nghĩa thì nó cũng là một kiểu dữ liệu.

Vậy thì kích thước của kiểu dữ liệu cấu trúc là bao nhiêu? Chúng ta hãy viết một chương trình in kích thước của kiểu dữ liệu cấu trúc để trả lời câu hỏi trên.

#include <iostream>
using namespace std;

struct POINT
{
	int x;
	int y;
};

struct TRIANGLE
{
	POINT p1;
	POINT p2;
	POINT p3;
};

struct STUDENT
{
	string id;
	string name;
	string birthday;
	bool gender;
	float math, physics, chemistry;
};

int main() {
	cout << "Size of POINT is: " << sizeof(POINT) <<" byte"<< endl;
	cout << "Size of TRIANGLE is: " << sizeof(TRIANGLE) <<" byte"<< endl;
	cout << "Size of STUDENT is: " << sizeof(STUDENT) <<" byte"<< endl;
	system("pause");
}
Kết quả trên hệ thống 32 bit
Size of POINT is: 8 byte
Size of TRIANGLE is: 24 byte
Size of STUDENT is: 112 byte

Nhận xét:

Cấu trúc POINT có 2 kiểu int thì kích thước kiểu POINT là 8 byte.

Cấu trúc TRIANGLE có 3 kiểu POINT, mỗi kiểu POINT 8 byte thì kích thước kiểu TRIANGLE là 24 byte.

Cấu trúc STUDENT có 3 kiểu string, mỗi kiểu string 32 byte, có 1 kiểu bool với 1 byte, có 3 kiểu float với 4 byte. Tổng cộng là 109 byte. Nhưng chương trình in ra kiểu STUDENT112 byte. Những byte được thêm vào (3 byte) gọi là byte đệm (padding byte) để giúp các thành phần dữ liệu trong cấu trúc được truy xuất nhanh hơn.

Mời bạn đánh giá bài viết
Bài trước và bài sau trong môn học<< Kiểu dữ liệu cấu trúc (struct) trong C++: định nghĩa và khai báo biếnKỹ thuật lập trình với mảng cấu trúc và truyền cấu trúc cho hàm >>
Chia sẻ trên mạng xã hội:

Tác giả Vinh Lê

Vinh Lê hiện đang là biên tập viên tại Góc Học IT.

Bài viết của Vinh Lê

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.