BASIC
CONTROL STATEMENTS
DATA TYPE
FUNCTIONS
FILE I/O
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Kiểu dữ liệu Struct trong C

Trong bài này chúng ta sẽ học về cách khai báo và sử dụng kiểu dữ liệu Struct trong lập trình C, struct sẽ giúp bạn tạo ra những loại dữ liệu phức tạp mà không cần đến lập trình hướng đối tượng.

Trong lập trình C/C++, struct (struct collection) là một tập hợp các biến (có thể có nhiều kiểu khác nhau) dưới một tên duy nhất. Ví dụ kiểu Connguoi thì có các thông tin như: Tên, giới tính, năm sinh.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Cách định nghĩa Struct trong C

Để định nghĩa struct trong C hoặc C++ thì bạn đều sử dụng từ khóa struct, sau đó là thông tin của dữ liệu theo cú pháp như sau:

struct structureName 
{
    dataType member1;
    dataType member2;
    ...
};

Dưới đây là một ví dụ cách định nghĩa struct Person.

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

2. Khai báo biến struct trong C

Ở trên là bạn chỉ mới định nghĩa kiểu dữ liệu mà thôi, và sau khi định nghĩa xong thì bạn có thể khởi tạo nó một cách bình thường như bao kiểu dữ liệu khác.

Hãy xem ví dụ dưới đây, mình đã tạo nhiều biến kiểu Persion khác nhau, thậm chí là một mảng các persion.

struct Person
{
    char name[50];
    int citNo;
    float salary;
};

int main()
{
    struct Person person1, person2, p[20];
    return 0;
}

Bạn có thể định nghĩa struct ở bên trong hay bên ngoài hàm main đều được.

Dưới đây cũng là cách vừa định nghĩa và khai báo vừa khai báo biến struc cùng một lúc.

struct Person
{
    char name[50];
    int citNo;
    float salary;
} person1, person2, p[20];

Mặc dù khai báo nhanh nhưng không khuyến khích sử dụng cách này bởi khi chương trình phình to ra hàng ngàn dòng code thì bạn không thể quản lý nó nổi đâu nhé.

3. Truy cập đến các phần tử của Struct

Mỗi struct sẽ có nhiều thuộc tính con nên ta cần phải học các truy xuất / gán dữ liệu cho thuộc tính đó.

Có hai cách như sau:

  • Sử dụng dấu chấm . cho trường hợp biên thông thường
  • Sử dụng dấu mũi tên -> cho trường hợp biến con trỏ.

Ví dụ: Truy cập vào mức lương của person2.

person2.salary

Quá đơn giản phải không các bạn?

Ví dụ biến struct thông thường

Sau đây là một ví dụ dài hơn.

// Program to add two distances (feet-inch)
#include <stdio.h>
struct Distance
{
    int feet;
    float inch;
} dist1, dist2, sum;

int main()
{
    printf("1st distance\n");
    printf("Enter feet: ");
    scanf("%d", &dist1.feet);

    printf("Enter inch: ");
    scanf("%f", &dist1.inch);
    printf("2nd distance\n");

    printf("Enter feet: ");
    scanf("%d", &dist2.feet);

    printf("Enter inch: ");
    scanf("%f", &dist2.inch);

    // adding feet
    sum.feet = dist1.feet + dist2.feet;
    // adding inches
    sum.inch = dist1.inch + dist2.inch;

    // changing to feet if inch is greater than 12
    while (sum.inch >= 12) 
    {
        ++sum.feet;
        sum.inch = sum.inch - 12;
    }

    printf("Sum of distances = %d'-%.1f\"", sum.feet, sum.inch);
    return 0;
}

Chạy chương trình và nhập dữ liệu vào thì bạn sẽ có kết quả dạng như sau:

1st distance
Enter feet: 12
Enter inch: 7.9
2nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances = 15'-5.7"

Ví dụ biến struct pointer

Với con trỏ thì ta phải sử dụng dấu mũi tên nhé.

#include <stdio.h>
struct person
{
   int age;
   float weight;
};

int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   

    printf("Enter age: ");
    scanf("%d", &personPtr->age);

    printf("Enter weight: ");
    scanf("%f", &personPtr->weight);

    printf("Displaying:\n");
    printf("Age: %d\n", personPtr->age);
    printf("weight: %f", personPtr->weight);

    return 0;
}

4. Tạo tên mới cho struct với từ khóa typedef

Nếu bạn muốn đặt một cái tên khác cho struct ngắn gọn hơn thì có thể sử dụng từ khóa typedef, và ta gọi đây là tên nặc danh.

Ví dụ: Đặt lại tên Distances chữ thường.

typedef struct Distance{
    int feet;
    float inch;
} distances;

int main() {
    distances d1, d2;
}

5. Bên trong struct chứa một struct khác

Các dữ liệu của struct cũng có thể là một kiểu struct khác. Ví dụ:

struct complex
{
 int imag;
 float real;
};

struct number
{
   struct complex comp;
   int integers;
} num1, num2;

Và khi truy xuất đến các phần tử này thì ta sử dụng hai dấu chấm liên tiếp:

num2.comp.imag = 11;

6. Tại sao nên sử dụng Struct trong C?

Nếu bạn chưa học về lập trình hướng đối tượng thì rõ ràng Struct là kiểu dữ liệu rất quan trọng, nó giúp ta lưu trữ những loại dữ liệu phức tạp chứa nhiều thông tin.

Ví dụ cần lưu trữ thông tin các thành phố tại USA, mỗi thành phố sẽ có có nhiều thông tin như:

  • Tên thành phố
  • Địa chỉ
  • Mã bưu chính
  • ...

Nếu mỗi thành phố ta tạo một biến lưu trữ thì sẽ cần hàng ngàn biến, đó là điều rất tệ hại. Nhưng nếu sử dụng struct thì ta chỉ cần một biến mà thôi, vì bên trong biến đó đã có đầy đủ thông tin.

Trên là những chia sẻ về Struct trong ngôn ngữ C, hy vọng bạn hiểu rõ về struct và áp dụng nó trong quá trình học một cách tốt nhất.

Cùng chuyên mục:

Cách nhân hai số trong ngôn ngữ C

Cách nhân hai số trong ngôn ngữ C

Cách cộng hai số nguyên trong C

Cách cộng hai số nguyên trong C

Tổng hợp hơn 1000 bài tập C / C++ có lời giải

Tổng hợp hơn 1000 bài tập C / C++ có lời giải

Bài này sẽ tổng hợp hơn 1000 bài tập C / C++ có lời giải…

Các hàm trong thư viện ctime C / C++

Các hàm trong thư viện ctime C / C++

Các hàm trong thư viện cstdio C / C++

Các hàm trong thư viện cstdio C / C++

Các hàm trong thư viện cctype C / C++

Các hàm trong thư viện cctype C / C++

Các hàm trong thư viện cstring C / C++

Các hàm trong thư viện cstring C / C++

Các hàm trong thư viện cstdlib C/C++

Các hàm trong thư viện cstdlib C/C++

Các hàm nhập xuất IO (iostream) trong C / C++

Các hàm nhập xuất IO (iostream) trong C / C++

Các hàm toán học (math) trong C / C++

Các hàm toán học (math) trong C / C++

Nếu bạn đang học C++ căn bản thì phải biết công dụng của những hàm…

Bài tập vòng lặp while và do while trong C++

Bài tập vòng lặp while và do while trong C++

Nếu một bài toán được giải bằng vòng lặp while thì bạn hoàn toàn có…

Bài tập vòng lặp for trong C++ có lời giải

Bài tập vòng lặp for trong C++ có lời giải

Vòng lặp for C++ rất quan trọng, nó được sử dụng rất nhiều khi xử…

Bài tập if else trong C++ (có đổi sang switch case)

Bài tập if else trong C++ (có đổi sang switch case)

Để thành thạo hai lệnh rẻ nhánh if else và switch case thì bạn phải…

Tìm hiểu cấu trúc mảng (array) trong C++

Tìm hiểu cấu trúc mảng (array) trong C++

Toán tử ba ngôi trong C++

Toán tử ba ngôi trong C++

Toán tử ba ngôi thực ra là cách rút gọn code của lệnh if else,…

Các toán tử trong C++

Các toán tử trong C++

Toán tử đóng vai trò rất quan trọng trong lập trình, nó giúp chúng ta…

Ngôn ngữ C++ là gì? Dùng làm gì trong công nghệ thông tin?

Ngôn ngữ C++ là gì? Dùng làm gì trong công nghệ thông tin?

C++ là một ngôn ngữ lập trình phổ biến và mạnh mẽ có kiểu dữ…

Đọc ghi file trong C

Đọc ghi file trong C

Đa số sinh viên Việt Nam học lập trình C là để luyện tư duy…

Kiểu Union trong C

Kiểu Union trong C

Union có cách khai báo giống như struct, nhưng kích thước của nó sẽ lấy…

Hàm đệ quy trong ngôn ngữ C

Hàm đệ quy trong ngôn ngữ C

Giải thuật đệ quy nói chung và trong ngôn ngữ C nói riêng thì hàm…

Top