[Basic] Struct trong C++

Định nghĩa struct

Struct là kiểu dữ liệu người dùng định nghĩa.

Ta có thể định nghĩa 1 struct thông qua từ khóa struct.

Cú pháp:

struct struct_name
{
[access_modifier] :
   kieu_du_lieu ten_bien;
   kieu_du_lieu ten_bien;

   function_member()
};

Chú ý:

  • Trong struct nếu ta không khai báo [access_modifier] thì mặc định là public.

Vi dụ:

struct Person
{
   std::string name;
   
   std::string address;
 
   int age;
};

Ví dụ trên sẽ nói với trình biên dịch rằng ta khai báo 1 struct có tên là Person, có chứa 3 biến trong struct đó : biến name có kiểu string, biến address có kiểu string, biến age có kiểu int;

Các biến trong struct được gọi là members hoặc fields (các trường) của struct

Khi định nghĩa 1 struct giống như ta khai báo 1 kiểu dữ liệu mới, trình biên dịch chưa cấp phát bộ nhớ. Khi ta định nghĩa biến có kiểu dữ liệu là struct đó trình biên dịch mới cấp phát bộ nhớ cho biến.

Khai báo biến struct

Cú pháp:

struct_name variable_name;

Ví dụ

Person nam; //Định nghĩa biến struct tên là nam

Person frank; //Định nghĩa biến struct tên là frank

Chú ý :

  • Đừng quên dấu chấm phảy ‘;’ khi kết thúc định nghĩa struct
  • Trong C++ khi khai báo biến của struct không cần từ khóa struct ở trước như C
struct Person frank; // Trong C

Person frank; // Trong C++
  • Có thể dùng typedef để tạo định danh mới cho struct
typedef Person Person_t;

Person_t frank;

Truy cập các thành phần của struct

Để truy cập thành phần của biến struct ta dùng toán tử ‘.’

Ví dụ:

Person frank;

frank.name = "Frank";

frank.address = "Ha Noi City";

frank.age = 30;

Với các biến struct là con trỏ ta dùng toán tử ‘->’

Person frank;

Person *ptr = &frank;

ptr->name = "Frank";

ptr->address = "Ha Noi City";

ptr->age = 30;

Khởi tạo giá trị biến struct

Khi khai báo biến struct ta có thể khởi tạo giá trị ban đầu cho các trường của struct đó

struct Person
{
   std::string name;
   
   std::string address;
   
   int age;
};

Person p = {"Frank", "Ha Noi", 23}; //p.name = Frank, p,address = Ha Noi, p.age = 23;

Chú ý :

  • Với C++ 11 ta có thể khởi tạo.
Person p {"Frank", "Ha Noi", 23};
  • Với c++11/14 ta có thể gán giá trị trực tiếp cho các trường (không phải là static) khi định nghĩa struct
struct Person
{
   std::string name = "Frank";
   
   std::string address = "Ha Noi";
   
   int age = 23;
};

Person p; //p.name = Frank, p,address = Ha Noi, p.age = 23;

Kích thước của struct

Kích thước của struct có bẳng tổng kích thước của các trưởng trong struct ?

Ta xét hai ví dụ sau:

#include <iostream>

#include <string>

using namespace std;

struct Test

{
   
   char val1;
   
   char val2;
   
   int val3;

};

int main()

{
   
   cout << sizeof(Test);
   
   return 0;

}
Kết quả : 8

Giờ ta đổi lại vị trí các trường trong struct

#include <iostream>

#include <string>

using namespace std;

struct Test

{
   
   char val1;
   
   int val3;
   
   char val2;

};

int main()

{
   
   cout << sizeof(Test);
   
   return 0;

}
Kết quả : 12

Ta thấy với cùng 1 struct với các kiểu dữ liệu như nhau, chỉ khác nhau ở cách sắp xếp các trường kích thước của struct đó khác nhau.

=> Kích thước của struct không phải lúc nào cũng bằng kích thước các trường trong struct

Để xem kích thước của struct ta sử dụng toán tử sizeof.

Was this article helpful?

Leave A Comment?