C là một ngôn ngữ lập trình rất mạnh mẽ, được sử dụng để phát triển hệ điều hành, cơ sở dữ liệu và nhiều hơn thế nữa. Đây là một ngôn ngữ tuyệt vời những người quan tâm đến ngành công nghệ thông tin có thể làm quen. Để làm việc với ngôn ngữ lập trình C, bạn sẽ cần phải hiểu rõ về các kiểu dữ liệu C. Bất cứ khi nào muốn xác định một biến trong chương trình C, chúng ta cần chỉ định kiểu dữ liệu. Điều này giúp trình biên dịch biết loại dữ liệu nào muốn thực hiện và những thao tác nào có thể được thực hiện trên nó. Hãy cùng FPT Aptech đi sâu tìm hiểu kỹ hơn về kiểu dữ liệu trong C ngay sau đây.

Các kiểu dữ liệu trong C là gì?

Kiểu dữ liệu (data type) có thể hiểu đơn giản là những kiểu dữ liệu được lưu trữ sẵn trong chương trình C. Chúng thường được sử dụng trong khi xác định một biến hoặc các hàm trong C. Điều quan trọng là trình biên dịch phải hiểu loại dữ liệu được xác định trước mà nó sẽ gặp trong chương trình. Nói chung, kiểu dữ liệu C là một thuộc tính cho máy tính biết cách diễn giải giá trị.

Các kiểu dữ liệu trong C là kiến thức cơ bản mà “dân” lập trình cần biết
Các kiểu dữ liệu trong C là kiến thức cơ bản mà “dân” lập trình cần biết

Ví dụ, nếu biến là một vùng chứa thì kiểu dữ liệu sẽ là kiểu vùng chứa, nó sẽ thông báo cho bạn vật dụng mà nó nên chứa đựng. Tức là bạn sẽ không lưu trữ một giá trị là số nguyên trong một biến kiểu dữ liệu String, cũng giống như bạn sẽ không bỏ một vật hình tròn vào ô vuông được.

Mỗi biến trong C có một kiểu dữ liệu liên quan. Mỗi kiểu dữ liệu trong C bắt buộc phải có số lượng bộ nhớ nhất định và có các hoạt động cụ thể có thể thực hiện trên biến C. Kiểu dữ liệu trong C cũng sẽ chỉ định kiểu dữ liệu mà biến có thể lưu trữ như kiểu số nguyên (integer, char), kiểu số thực (float & double),… Kiểu dữ liệu là tập hợp dữ liệu với các giá trị có giá trị cố định, ý nghĩa cũng như đặc điểm của nó. 

Ví dụ về data type in C

Hãy xem xét một ví dụ về kiểu dữ liệu cơ bản trong C tại một công ty. Nơi đây sẽ lưu trữ nhiều dữ liệu khác nhau của nhân viên của họ như Tên, ID nhân viên, Tuổi, Mức lương, Địa chỉ, Số điện thoại, v.v.

Những dữ liệu này là các giá trị chứa bảng chữ cái, số…., vì vậy, để giúp việc xử lý những dữ liệu khổng lồ này trở nên dễ hiểu, thông tin đã được phân loại thành các loại khác nhau như:

  • Tên: String
  • ID: Số nguyên – Integer
  • Mức lương: Float or Double
  • Số điện thoại: String 

Để có thể hiểu được ví dụ này thì hãy cùng chúng tôi tìm hiểu các kiểu dữ liệu trong C ngay sau đây.

Kích thước các kiểu dữ liệu trong C (Basic Types in C)

Các kiểu dữ liệu cơ bản là dựa trên số nguyên và dựa trên thập phân. Ngôn ngữ C hỗ trợ cả ký tự có dấu và không dấu. Kích thước bộ nhớ của các kiểu dữ liệu cơ bản có thể thay đổi theo hệ điều hành 32 hoặc 64-bit.

Có 4 kiểu dữ liệu cơ bản ở trong C là Int, Float, Double, Char. Kích thước lưu trữ của các kiểu dữ liệu này thường có thể thay đổi tùy thuộc vào hệ điều hành của chương trình (là 32-bit hoặc 64-bit). Dưới đây là các kiểu dữ liệu thường được sử dụng trong lập trình C với kích thước lưu trữ và phạm vi giá trị của chúng, theo kiến ​​trúc 32-bit.

KiểuKích thước lưu trữVùng giá trị
Int (or signed int)2 byte-32,768 đến 32,767
unsigned int2 byte0 đến 65,535
Short int(or signed short int)2 byte-32,768 đến 32,767
Long(or signed short int)4 byte-2.147.483.648 đến 2.147.483.647
unsigned long4 byte0 đến 4,294,967,295
float4 byte1,2E-38 đến 3,4E + 38 (6 chữ số thập phân)
double8 byte2.3E-308 đến 1.7E + 308 (15 chữ số thập phân)
Long double10 byte3,4E-4932 đến 1,1E + 4932 (19 chữ số thập phân)
char(or signed char)1 byte-128 đến 127
unsigned char1 byte0 đến 255

Các kiểu dữ liệu trong C mà bạn cần biết

Về cơ bản, trong ngôn ngữ C, sẽ tồn tại bốn kiểu dữ liệu khác nhau có thể được sử dụng để phân biệt và lưu trữ nhiều kiểu dữ liệu khác nhau, bao gồm:

  • Các kiểu dữ liệu cơ bản (Basic Types) là các kiểu số học và được phân loại thành kiểu số nguyên (int, char) và kiểu thập phân hoặc có thể gọi là dấu phẩy động (float & double).
  • Các kiểu dữ liệu có nguồn gốc (Derived types) gồm Con trỏ (pointer), Kiểu mảng (array), Kiểu cấu trúc (structure), Kiểu union, Kiểu hàm (function).
  • Kiểu dữ liệu liệt kê (Enumerated types): Cũng là kiểu số học và chúng được sử dụng để định nghĩa các biến chỉ có thể gán các giá trị nguyên rời rạc nhất định trong toàn bộ chương trình.
  • Kiểu dữ liệu trống (The type void): Void xác định kiểu chỉ ra rằng không có giá trị nào.

Kiểu dữ liệu cơ bản – Basic Type

Kiểu dữ liệu số nguyên – Int

Một biến kiểu số nguyên có thể lưu trữ các giá trị 0, dương và âm mà không có bất kỳ số thập phân nào. Kiểu dữ liệu trong C số nguyên được hiển thị bằng từ khóa ‘int’ và nó có thể có dấu hoặc không dấu. Theo mặc định, giá trị được gán cho một biến số nguyên được coi là dương nếu nó không có dấu.

Kiểu dữ liệu số nguyên được chia thành các kiểu dữ liệu short, int và long. Kiểu dữ liệu ngắn (short) chiếm 2 byte không gian lưu trữ. Int thường là chiếm 2 hoặc 4 byte, và long chiếm 8 byte trong hệ điều hành 64 bit và 4 byte trong hệ điều hành 32 bit.

Vì vậy, nếu bạn cố gắng gán giá trị thập phân cho biến số nguyên, giá trị sau số thập phân sẽ bị cắt bớt và chỉ toàn bộ số được gán cho biến. Đây là một ví dụ sẽ giúp bạn hiểu thêm về khái niệm này:

Ví dụ về kiểu dữ liệu số nguyên bạn có thể tham khảo
Ví dụ về kiểu dữ liệu số nguyên bạn có thể tham khảo

Trong khi thực hiện một phép toán học, nếu kết quả trả về là giá trị thập phân, thì biến sẽ chỉ chấp nhận số nguyên và loại bỏ các số sau dấu thập phân. Đối với int ngắn, giá trị không chính xác sẽ được hiển thị nếu số lớn hơn 10000.

Float data type

Kiểu dữ liệu dấu phẩy động cho phép người dùng lưu trữ các giá trị thập phân trong một biến. Nó có hai loại: Float và Double

Biến float lưu trữ các giá trị thập phân với tối đa 6 chữ số sau vị trí thập phân. Kích thước lưu trữ của biến float là 4 byte, nhưng kích thước có thể khác nhau đối với các bộ xử lý khác nhau, giống như kiểu dữ liệu ‘int’. Ví dụ:

#include 

int main () { 

float sum = 9664.35; 

float num = 67; 

float trung bình = (sum / num); 

printf (“Trung bình là% f \ n”, trung bình); 

printf (“Giá trị của num là% f \ n”, num); 

printf (“Giá trị của num được trình bày dưới dạng số nguyên% d \ n”, num);

Kết quả sẽ cho ra giá trị trung bình là 144,244019; Giá trị của num là 67,000000; Giá trị của num được trình bày dưới dạng số nguyên 0.  

Nếu bạn cố gắng in các giá trị float với ‘% d’, thì kết quả đầu ra sẽ không phải là 67. Thay vào đó, bạn sẽ thấy một giá trị rác trên màn hình đầu ra. Do đó, đối với kiểu dữ liệu trong C, các giá trị float được hiển thị bằng mã định dạng ‘% f’. Một biến chứa giá trị số nguyên cũng sẽ được in theo kiểu động với các số 0 dư thừa. Nếu bạn gán một giá trị nguyên cho một biến float, kết quả sẽ luôn là một giá trị float với các số 0 sau vị trí thập phân. 

Kiểu dữ liệu double tương tự như float, nhưng ở đây, bạn có thể có tối đa 10 chữ số sau vị trí thập phân. Nó được đại diện bởi từ khóa ‘double’ và chủ yếu được sử dụng trong các chương trình khoa học đòi hỏi độ chính xác cao.

Char – Ký tự

Char được sử dụng để lưu trữ các giá trị ký tự đơn, bao gồm cả giá trị số. Nếu bạn tạo một mảng kiểu dữ liệu ký tự, nó sẽ trở thành một chuỗi có thể lưu trữ các giá trị như tên, chủ đề, v.v.

Hiểu được các kiểu dữ liệu trong C không phải là điều đơn giản
Hiểu được các kiểu dữ liệu trong C không phải là điều đơn giản

Các kiểu dữ liệu có nguồn gốc

Các kiểu dữ liệu nguyên thủy (primitive data type) hoặc cơ bản được sử dụng để lưu trữ các giá trị đơn lẻ của các dạng khác nhau, nhưng nếu bạn cần lưu trữ thêm các giá trị của cùng một kiểu dữ liệu thì sao? Ở đây, các kiểu dữ liệu dẫn xuất cho phép bạn kết hợp các kiểu dữ liệu cơ bản và lưu trữ nhiều giá trị trong một biến duy nhất.

Các kiểu dữ liệu trong C có nguồn gốc do chính người dùng xác định, có nghĩa là bạn có thể tổng hợp nhiều phần tử của các kiểu dữ liệu tương tự theo yêu cầu. Có bốn loại kiểu dữ liệu dẫn xuất: Hàm (function), con trỏ (pointer), mảng (array), Union.

Mảng (array) là một tập hợp các phần tử kiểu dữ liệu tương tự được lưu trữ trong một vị trí bộ nhớ liền kề. Ví dụ: bạn có thể lưu trữ các giá trị float như dấu của sinh viên, giá trị số nguyên như số cuộn, v.v.

Con trỏ (pointer) là một biến dùng để lưu địa chỉ của một biến khác. Để lưu trữ địa chỉ của một biến, biến con trỏ phải có cùng kiểu dữ liệu. Point cho phép người dùng thực hiện cấp phát bộ nhớ động bằng ngôn ngữ C và cũng truyền các biến bằng cách tham chiếu, có nghĩa là người dùng có thể chuyển con trỏ có địa chỉ của biến.

Trong ngôn ngữ C, cấu trúc là một kiểu dữ liệu do người dùng định nghĩa, là một nhóm các mục được sử dụng để lưu trữ các giá trị của các kiểu dữ liệu giống nhau hoặc khác nhau. Ví dụ, các cấu trúc có thể được sử dụng để lưu trữ thông tin về một học sinh, bao gồm tên, số cuộn, điểm, v.v. Bản ghi của mỗi sinh viên sẽ được đại diện bởi một đối tượng của cấu trúc.

Union cũng là một tập hợp các phần tử có kiểu dữ liệu giống nhau hoặc khác nhau, nhưng vị trí bộ nhớ là như nhau cho tất cả các phần tử. Nó là một kiểu dữ liệu đặc biệt trong ngôn ngữ C, nơi bạn có thể khai báo nhiều biến, nhưng chỉ một biến có thể lưu giá trị tại một thời điểm nhất định. Union là kiểu dữ liệu trong C được hiển thị bằng ‘union’.

Enumeration Data Type – Kiểu dữ liệu liệt kê

Liệt kê là một kiểu dữ liệu do người dùng định nghĩa được sử dụng để gán tên cho các hằng số tích phân và nâng cao khả năng đọc của chương trình C. Từ khóa được sử dụng để liệt kê là ‘enum’ với cú pháp tương tự như cấu trúc: enum flag {const1, const2, const3 …… …};

Có hai lý do chính tại sao liệt kê tốt hơn ‘#define’: là hằng số enum nhận giá trị mặc định bởi trình biên dịch và chúng có thể được khai báo trong phạm vi cục bộ.

Kiểu dữ liệu trống (The type void)

Void là một kiểu dữ liệu trong C không tham chiếu đến bất kỳ giá trị nào của bất kỳ kiểu nào. Nó chủ yếu được sử dụng làm kiểu trả về trong các hàm. Bạn có thể khai báo các con trỏ void để lấy địa chỉ của các biến từ bất kỳ kiểu dữ liệu nào. Những con trỏ này thường được gọi là ‘con trỏ chung’ (generic pointers).

Ví dụ:

Ví dụ về kiểu dữ liệu trong C ở type void
Ví dụ về kiểu dữ liệu trong C ở type void

Kết quả trả về trong chương trình ở ví dụ trên: 

Tổng của x và y là 30 

Giá trị được lưu trữ trong con trỏ (ptr) sau khi tham chiếu 10

Trong ví dụ này, hàm có tên ‘add’ có kiểu trả về là void, có nghĩa là nó sẽ không trả về bất kỳ giá trị nào cho phương thức chính. Vì vậy, người dùng phải in thông báo bên trong thân hàm hoặc viết một kiểu trả về khác.

Trong bài viết trên đây của FPT Aptech, hy vọng bạn đã phần nào hiểu được các kiểu dữ liệu trong C và cách chúng được chia thành các danh mục con. Ngoài ra, các chương trình C được cung cấp cho mỗi kiểu dữ liệu hiển thị cách bạn có thể triển khai chúng đúng cách và kết quả sẽ như thế nào nếu bạn thay đổi các thuộc tính của bất kỳ kiểu dữ liệu nào. Vì vậy, sẽ còn rất nhiều thông tin liên quan nữa bạn cần tìm hiểu, chúng được cập nhật đầy đủ và liên tục trên trang website của chúng tôi. Đừng bỏ qua nhé!

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96