Bài 5: Các kiểu dữ liệu C
Kiểu dữ liệu trong C dùng để khai báo các biến hoặc các hàm . Kiểu của biến là xác định có bao nhiêu không gian để nó chiếm trong bộ nhớ và mẩu bit đã lưu trữ được thông dịch như thế nào Các kiểu dữ liệu trong C được phân loại như sau: Basic types (kiểu dữ liệu cơ bản) Chúng là các kiểu ...
Kiểu dữ liệu trong C dùng để khai báo các biến hoặc các hàm .
Kiểu của biến là xác định có bao nhiêu không gian để nó chiếm trong bộ nhớ và mẩu bit đã lưu trữ được thông dịch như thế nào
Các kiểu dữ liệu trong C được phân loại như sau:
- Basic types (kiểu dữ liệu cơ bản)
Chúng là các kiểu số học và được phân loại thành kiểu số nguyên (integer) và kiểu số thực (float)
- Enumerated types (kiểu liệt kê)
Cũng là kiểu số nguyên, chúng được sử dụng để xác định các biến mà chỉ có thể gán giá trị nguyên nào đó rời rạc trong suốt chương trình.
enum <ten enum>
{
<tên hằng 1>,
<tên hằng 2>,
……………..
}
EX: khai báo các thứ trong tuần
enum eDayOfWeek
{
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
int main()
{
eDayOfWeek nowDay = eDayOfWeek::MONDAY;
PrintScreen(nowDay); //in ra màn hình thứ MONDAY
return 0;
}
Qua ví dụ trên các bạn thấy chúng đã đã định nghĩa 1 kiểu enum, đây là cách khai báo tập hợp các kiểu rời rạc mà có thể được sử dụng ở nhiều nơi, không tốn công chúng ta phải khai đi báo lại. ·
- The type void (kiểu void)
Kiểu này là kiểu không có giá trị có thể dùng được, hay nói dể hiểu nó là kiểu không có có giá trị trả về.
Ex: như trong giá trị hàm main chúng ta nếu chọn kiểu void main() thì hàm main này ko cần có giá trị trả về.
- Derived types (các kiểu trích dẩn, kiểu xuất phát từ một kiểu nào đó)
Chúng bao gồm kiểu con trỏ (pointer), kiểu mảng (array), kiểu cấu trúc (structure), kiểu kết hợp (union) và kiểu hàm (function)
Kiểu mảng và kiểu cấu trúc tương ứng như một kiểu kết hợp. Kiểu hàm xác định kiểu các giá trị trả về. Chúng ta sẽ xem các kiểu cơ bản trong phần sau, nơi mà các kiểu khác sẽ được đề cập trong các bài học sắp tới.
Integer Types Bảng chi tiết về các kiểu integer chuẩn
Type | Storage size | Value range |
char | 1 byte | -128 to 127 or 0 to 255 |
unsigned char | 1 byte | 0 to 255 |
signed char | 1 byte | -128 to 127 |
int | 2 or 4 bytes | -32,768 to 32,767 or -2,147,483,648 to 2,147,483,647 |
unsigned int | 2 or 4 bytes | 0 to 65,535 or 0 to 4,294,967,295 |
short | 2 bytes | -32,768 to 32,767 |
unsigned short | 2 bytes | 0 to 65,535 |
long | 4 bytes | -2,147,483,648 to 2,147,483,647 |
unsigned long | 4 bytes | 0 to 4,294,967,295 |
Để lấy chính xác kích thước của một kiểu hoặc một biến, bạn có thể sử dụng toán tử sizeof. Biểu thức sizeof(type) cho biết kích thước lưu trữ của đối tượng. Chúng ta xem ví dụ sau:
#include <stdio.h>
#include <limits.h>
int main(){
printf(“Storage size for int : %d ”, sizeof(int));
return 0;
}
Khi biên dịch và thực thi sẽ cho kết quả sau: Storage size for int : 4
Floating-point types (các kiểu số thực)
Bảng chi tiết về kiểu số thực chuẩn
Type | Storage size | Value range | Precision (độ chính xác) |
float | 4 byte | 1.2E-38 to 3.4E+38 | 6 decimal places |
double | 8 byte | 2.3E-308 to 1.7E+308 | 15 decimal places |
long double | 10 byte | 3.4E-4932 to 1.1E+4932 | 19 decimal places |
Để sử dụng số thực chúng ta phải đưa vào tiền xử lý file float.h.
Xét ví dụ sau in ra kích thước cũng như không gian lưu trữ số thực:
#include <stdio.h>
#include <float.h>
int main(){
printf(“Storage size for float : %d ”, sizeof(float));
printf(“Minimum float positive value: %E ”,FLT_MIN);
printf(“Maximum float positive value: %E ”,FLT_MAX);
printf(“Precision value: %d ”, FLT_DIG);
return 0;
}
Khi thực thi đoạn code sẽ cho kết quả sau:
Storage size for float: 4
Minimum float positive value: 1.175494E – 38
Maximum float positive value: 3.402823E + 38
Precision value: 6
The void Type
Đây là kiểu không có giá trị và nó được dùng trong 3 loại tình huống sau:
- Hàm trả về như không có giá trị
Có các hàm trong C mà không trả về bất kỳ giá trị hay bạn có thể nói rằng chúng trả về void.
EX: một hàm không có giá trị trả về, giá trị trả về như là void
void exit(int status); //đây là hàm thoát khỏi chương trình, ta có thể gọi exit(1); hoặc exit(0); và không có kết quả trả về;
Cũng nói thêm về ý nghĩa của hàm exit, nó nằm ngoài chủ đề của bài này, tuy nhiên đã lở dùng thì làm rõ luôn: exit(0) hoặc exit(EXIT_SUCCESS) là để kết thúc quá trình khi không có lổi xãy ra và exit(1) hoặc bất kỳ giá trị nào khác 0 hoặc dùng exit(EXIT_FAILURE) là kết thúc quá trình khi có lổi xãy ra. Cả 2 trạng thái exit đều thông báo cho hệ điều hành biết về trạng thái kết thúc của chương trình, tùy vào hệ điều hành sẽ xử lý trạng thái trả về này. Đôi với hệ thống UNIX có thể sẽ xuất hiện form thông báo thực thi lổi khi exit(EXIT_FAILURE) được gọi, và form thông báo thành công nếu exit(EXIT_SUCCESS) được gọi.
- Đối số hàm như kiểu không giá trị
Có các hàm khác trong C mà không chấp nhận bất kỳ đối số nào. Và một hàm không có đối số có thể chấp nhận một kiểu void. Lấy ví dụ hàm :
EX: int rand(void); À rand(void) ở đây không phải là bạn truyền cái chữ void vào bên trong hàm rand đâu nhé, mà ý nghĩa là nó không cần đối số khi thực thi chúng ta sẽ gọi như sau: ví dụ tôi khai báo biến a nhận kết quả rand như sau: int a = rand();
- Con trỏ void
Con trỏ kiểu là void thì tương ứng nó nắm giữ địa chỉ của một đối tượng, ví dụ như ta có hàm cấp phát vùng nhớ void *malloc(size_t size); nó trả về một con trỏ, trỏ đến giá trị vùng nhớ đó hay nói cách khác con trỏ void là trỏ đến một kiểu dữ liệu chưa xác định và trong quá trình thực thi chương trình con trỏ void không thay đổi giá trị ban đầu.
Tóm lại: Qua bài học này chúng ta biết được trong C bao gồm các kiểu dữ liệu, biết được các giá trị cũng như phạm vi của mổi kiểu dữ liệu, int thì bao chiếm bao nhiêu byte trong vùng nhớ có giá trị từ đâu tới đâu , tương tự float v.v…Làm quen với kiểu giá trị đặc biệt là kiểu void
Các bài học kế tiếp chúng ta sẽ đi sâu vào phân tích và sử dụng các kiểu dữ liệu vừa nêu trên.
Bài kế tiếp : Các biến trong C
Xin tạm biệt , bye bye!