int
, float
, double
, char
, void
. Ngoài ra khi kết hợp với các từ khóa signed
, unsigned
, long
, short
ta còn có thêm các kiểu dẫn xuất. Kiểu cấu trúc struct
trong C cho phép ta định nghĩa các kiểu dữ liệu mới dựa trên các kiểu dữ liệu cơ bản. Kiểu con trỏ là kiểu dữ liệu đặc biệt dùng lưu địa chỉ của biến khác.Kiểu số nguyên
Kiểu số nguyên trong C là
int
, được dùng để lưu trữ số nguyên. Đây là kiểu dữ liệu cơ bản nhất trong các ngôn ngữ lập trình. Giá trị của kiểu int
không cố định mà phụ thuộc vào trình biên dịch, thông thường là 4 bytes.Ví dụ:
int a; int a = 5; int a, b;
Kiểu số thực
Trong C có 2 kiểu số thực là
float
và double
, cho phép lưu trữ cả phần thập phân của một số.Kiểu
float
có giá trị 4 bytes và có độ chính xác tới 6 chữ số thập phân. Kiểu double
có giá trị 8 bytes và chính xác tới 10 chữ số. Tuy nhiên độ chính xác này là tương đối và còn phụ thuộc vào hệ điều hành.Tùy nhu cầu mà người ta sử dụng
float
hay double
, nếu tính toán không yêu cầu độ chính xác cao nên dùng kiểu float
để tiết kiệm bộ nhớ.Lưu ý: tính toán với các kiểu dữ liệu thực luôn có sai số.
Ví dụ:
float a = 5.7; double b = 6; //=> 6.0
Kiểu ký tự
Kiểu
char
dùng để lưu trữ 1 ký tự.Người ta dùng dấu nháy đơn cho ký tự và dấu nháy kép cho chuỗi.
Ví dụ: Ký tự:
'a'
, '@'
, '~'
- Chuỗi: "a"
, "abc"
Chuỗi ký tự thực chất là một mảng ký tự
char
được kết thúc bằng ký tự NULL
(tức ký tự '\0'
).Ký tự trong C thực chất là các số nguyên biểu diễn mã ASCII của ký tự. Bảng mã ASCII đầy đủ có 255 ký tự, vì vậy người ta dùng 8 bit để biểu diễn chúng nên kiểu
char
có giá trị 1 byte.Ví dụ:
char name = 'a'; char[13] = "Hello World\n";
Kiểu void
Đây là một kiểu đặc biệt để báo hiệu cho trình biên dịch biết rằng không có dữ liệu của bất cứ kiểu nào. Các hàm thường phải trả về một kiểu nào đó nhưng khi không muốn trả về bất cứ gì, ta có thể dùng kiểu trả về là
void
.Biến không có kiểu
void
nhưng biến con trỏ có thể được khai báo kiểu void
.Các kiểu dẫn xuất
Các kiểu dữ liệu cơ bản (trừ kiểu
void
) có thể được điều chỉnh cho phù hợp ý muốn người lập trình. Ta có thể thêm các từ khóa: signed
, unsigned
, long
, short
vào trước các kiểu nguyên và kiểu ký tự để có được kiểu dẫn xuất.Khi khai báo một biến kiểu
int
, mặc định đó là số nguyên có dấu. Người ta thêm từ khóa unsigned
vào trước int
để quy định biến này lưu trữ số nguyên không dấu, nghĩa là chỉ có thể lưu trữ giá trị dương.Với kiểu
char
, mặc định là không dấu nên có thể dùng từ khóa signed
nếu muốn lưu trữ số có dấu.Các từ khóa
signed
và unsigned
không làm thay đổi không gian cấp phát cho biến.Ví dụ:
unsigned int a = 6550;Từ khóa
short
được dùng với kiểu int
khi muốn giảm không gian cấp phát. Một biến short
(hay short int
) sẽ có giá trị 2 bytes.Từ khóa
long
có thể được dùng với int
hoặc double
. Nó làm tăng không gian bộ nhớ lên gấp đôi để lưu trữ được những số lớn hơn. Đặc biệt với những trường hợp số quá lớn có thể dùng long long int
.Ví dụ:
short a = 5; long long int b = 6789;
Kiểu cấu trúc struct
Trong C bạn có thể kết hợp các kiểu cơ bản tạo thành kiểu dữ liệu mới nhằm giải quyết vấn đề một cách đơn giản hơn.
Ví dụ: Bạn có thể khai báo cấu trúc phân số gồm 2 thành phần tử và mẫu để tiện cho việc tính toán với phân số.
Khai báo:
Ta có thể khai báo như sau:
struct PS { int tuSo; int mauSo; }PS;Nếu khai báo như thế này mỗi lần khai báo biến kiểu phân số bạn phải thêm từ khóa
struct
đằng trước.struct PS a;Để tiện hơn ta có thể dùng từ khóa
typedef
để định nghĩa lại kiểu này.typedef struct PS PhanSo;Và sau đó khi khai báo biến chỉ cần dùng:
PhanSo a;Ta có thể kết hợp lại cho đỡ rườm rà
typedef struct PS { int tuSo; int mauSo; }PhanSo;
Để gọi các thành phần trong biến cấu trúc có thể dùng toán tử
.
Nếu là con trỏ đến biến cấu trúc dùng toán tử
->
Ví dụ:
PhanSo ps1; ps1.tuSo = 1; ps1.mauSo = 2; PhanSo *ps2 = &ps1; ps2->tuSo = 3; ps2->mauSo = 4;
Kiểu con trỏ
Đây là kiểu dữ liệu đặc biệt trong C. Kiểu con trỏ dùng để lưu địa chỉ của biến khác chứ không phải lưu số hay chữ. Kiểu con trỏ thường dùng để cấp phát động hoặc gián tiếp thay đổi giá trị của một biến.
Có thể xem chi tiết về kiểu con trỏ trong bài viết này: Những kiến thức căn bản về con trỏ
Mình cho rằng kiểu dữ liệu chỉ phụ thuộc vào trình biên dịch chứ không phụ thuộc vào hệ điều hành. Bạn có thể cho dẫn chứng nó phụ thuộc vào hệ điều hành được không?
Trả lờiXóaChào bạn, các trình biên dịch khi thiết kế cho các hệ điều hành khác nhau thì cũng khác nhau theo kiến trúc hệ điều hành đó nên nói như bạn cũng đúng. Cảm ơn bạn đã góp ý!
Xóa