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
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ả
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é