Thứ Ba, 28 tháng 9, 2021

4: 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ỂUCỠ LƯU TRỮDÃY GIÁ TRỊ
char1 byte-128 tới 127 hoặc 0 tới 255
unsigned char1 byte0 tới 255
signed char1 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ỂUCỠ LƯU TRỮDÃY GIÁ TRỊ
int2 hoặc 4 bytes-32,768 tới 32,767 hoặc -2,147,483,648 tới 2,147,483,647
unsigned int2 hoặc 4 bytes0 tới 65,535 hoặc 0 tới 4,294,967,295
short2 bytes-32,768 tới 32,767
unsigned short2 bytes0 tới 65,535
long4 bytes-2,147,483,648 tới 2,147,483,647
unsigned long4 bytes0 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ỂUCỠ LƯU TRỮDÃY GIÁ TRỊĐỘ CHÍNH XÁC
float4 byte1.2E-38 tới 3.4E+386 vị trí thập phân
double8 byte2.3E-308 tới 1.7E+30815 vị trí thập phân
long double10 byte3.4E-4932 tới 1.1E+493219 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
  • Kiểu danh sách enum 
  • Kiểu tự định nghĩa 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:
  • 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

Ngoài lề, để kiểm tra bộ nhớ đệm các kiểu trên có thể dùng hàm sizeof


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);
}

0 bình luận:

Đăng nhận xét