Bài 4: Các kiểu dữ liệu trong lập trình C

Các kiểu dữ liệu trong lập trình C

Trong bài này chúng ta sẽ học các kiểu dữ liệu trong lập trình C, đây là một kiến thức rất quan trọng khi bạn muốn tối ưu code, tối ưu RAM và ROM. Và chọn kiểu dữ liệu phù hợp cho các biến hoặc hằng trong khi lập trình

Các kiểu dữ liệu trong lập trình C

Có 3 nhóm kiểu dữ liệu chính:

  • Primary: Kiểu dữ liệu cơ bản của ngôn ngữ C
  • user defined: Kiểu dữ liệu người lập trình tự định nghĩa
  • Derived: Kiểu dữ liệu nâng cấp từ dữ liệu cơ bản, phục vụ cho các mục đích khác nhau

Data types in C

Nhóm kiểu dữ liệu cơ bản

Kiểu kí tự Char

Kiểu kí tự char có 1 kiểu đặc biệt là String, bao gồm chuỗi nhiều char liên tiếp.

Kiểu char thường được sử dụng để lưu giữ các kí tự, các chữ và số. Theo bảng kí tự ASCII

Kiểu Cỡ lưu trữ Dãy giá trị
char 1 byte -128 tới 127 hoặc 0 tới 255
unsigned char 1 byte 0 tới 255
signed char 1 byte -128 tới 127

Kiểu số nguyên (kiểu int) trong C

Kiểu dữ liệu số nguyên chia thành 2 kiểu có dấu (signal) và không âm (unsigned).

Dựa vào giá trị cực đại (giới hạn) của kiểu giá trị sẽ chia thành các kiểu nhỏ như sau:

Kiểu Cỡ lưu trữ Dãy giá trị
int 2 hoặc 4 bytes -32,768 tới 32,767 hoặc -2,147,483,648 tới 2,147,483,647
unsigned int 2 hoặc 4 bytes 0 tới 65,535 hoặc 0 tới 4,294,967,295
short 2 bytes -32,768 tới 32,767
unsigned short 2 bytes 0 tới 65,535
long 4 bytes -2,147,483,648 tới 2,147,483,647
unsigned long 4 bytes 0 tới 4,294,967,295

Kiểu số thực dấu chấm động (Floating-Point) trong C

Bảng dưới đây đưa cho bạn những hiểu biết cụ thể về các kiểu số thực dấu chấm động tiêu chuẩn với cỡ lưu trữ và dải giá trị cũng như độ chính xác:

Kiểu Cỡ lưu trữ Dãy giá trị Độ chính xác
float 4 byte 1.2E-38 tới 3.4E+38 6 vị trí thập phân
double 8 byte 2.3E-308 tới 1.7E+308 15 vị trí thập phân
long double 10 byte 3.4E-4932 tới 1.1E+4932 19 vị trí thập phân

Kiểu void

Kiểu void xác định không có giá trị nào. Nó được sử dụng trong 4 trường hợp sau đây:

  • Hàm trả về không có giá trị. VD: void Turn_on_led(led1);
  • Hàm không có tham số truyền vào. VD: int Turn_off_all(void);
  • Hàm không có giá trị và không có tham số truyền vào. VD: void Ham(void);
  • Con trỏ kiểu void* . VD: void *malloc (size_t size); sẽ học trong các bài con trỏ.

Nhóm dữ liệu người dùng định nghĩa

Đây là các từ khóa để người lập trình tự định nghĩa kiểu dữ liệu mình sử dụng. Chúng vẫn phải sử dụng các kiểu dữ liệu cơ bản để tạo ra kiểu dữ liệu mới

Chúng ta sẽ học trong các bài enum và typerdef

Nhóm kiểu dữ liệu nâng cấp (đặc biệt)

Đây là các kiểu dữ liệu có chức năng đặc biệt, tạo ra bởi các kiểu dữ liệu cơ bản, để sử dụng trong các trường hợp đặc biệt:

Ví dụ:

  • Array:mảng, là chuỗi các kiểu dữ liệu
  • Pointer: con trỏ, là địa chỉ của ô nhớ
  • Struct: tạo ra cấu trúc dữ liệu riêng
  • Union: Tập hợp, là hợp của nhiều kiểu dữ liệu với nhau

Những kiểu này sẽ được học trong các phần sau.

Hàm sizeof

Hàm sizeof(tham số truyền vào) để kiểm tra xem biến, hoặc kiểu dữ liệu đó chiếm bao nhiêu byte trong bộ nhớ.

Để kiểm tra kích thước các kiểu dữ liệu cơ bản và phạm vi của nó, chúng ta có thể làm như sau:

#include <stdio.h>
#include<limits.h> // for int,char macros 
#include<float.h> // for float,double macros 
 
 
int main(){
    char c;
    short s;
    int i;
    unsigned int ui;
    float f;
    double d;
    long long ll;
 
 
    // sizeof
    printf("Size of char is %d\n", sizeof c); // Ctrl C, Ctrl V
    printf("Size of short is %d\n", sizeof s);
    printf("Size of int is %d\n", sizeof i);
    printf("Size of unsigned int is %d\n", sizeof ui);
    printf("Size of float is %d\n", sizeof f);
    printf("Size of double is %d\n", sizeof d);
    printf("Size of long long is %d\n", sizeof ll);
 
    // Get min_val and max_val of data_type
    printf("char ranges from : %d to %d\n", CHAR_MIN, CHAR_MAX);
    printf("int ranges from : %d to %d\n", INT_MIN, INT_MAX);
    printf("unsigned int ranges from : 0 to %lli\n", UINT_MAX);
}

Kết quả

datatype

Kết

Khi học kiểu dữ liệu trong C, các bạn nên focus vào các kiểu dữ liệu cơ bản, các kiểu dữ liệu khác đều được phát triển dựa trên những kiểu dữ liệu cơ bản đó. Mỗi kiểu dữ liệu sẽ phù hợp trong các trường hợp khác nhau. Và hãy chọn kiểu dữ liệu phù hợp để tối ưu bộ nhớ chương trình nhé

Tiếp tục chuyển ngay qua bài tiếp theo trong Serie Học lập trình C từ A tới Z.

Đừng quên gia nhập Hội Anh Em Nghiện Lập trình để giao lưu và học hỏi nhé

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *