Lập trình C cơ bản: Biến và kiểu dữ liệu
Trong hành trình chinh phục bất kỳ ngôn ngữ lập trình nào, việc nắm vững các khái niệm nền tảng là điều kiện tiên quyết, và đối với ngôn ngữ C, không có gì quan trọng hơn việc hiểu sâu sắc về Biến và kiểu dữ liệu C. Chúng được xem như những viên gạch cơ bản tạo nên mọi chương trình phức tạp, quyết định cách dữ liệu được lưu trữ, xử lý, và thao tác trong bộ nhớ máy tính.
Nếu bạn là người mới bắt đầu hoặc đang muốn củng cố lại kiến thức cốt lõi, bài viết này sẽ cung cấp cho bạn cái nhìn toàn diện và dễ hiểu nhất về hai khái niệm thiết yếu này.
Giới thiệu về biến và kiểu dữ liệu trong C
Mọi chương trình máy tính về cơ bản đều là quá trình xử lý dữ liệu; dữ liệu cần được lưu trữ ở đâu đó để CPU có thể truy cập và thao tác. Chính vì lẽ đó, Biến và kiểu dữ liệu C đóng vai trò là xương sống trong kiến trúc mã nguồn của bạn. Chúng không chỉ đơn thuần là những thuật ngữ lập trình, mà là cơ chế mà qua đó lập trình viên có thể giao tiếp với bộ nhớ máy tính.
Trong C, “biến” và “kiểu dữ liệu” đóng vai trò như ngữ pháp và từ vựng nếu bạn nắm vững chúng, việc diễn đạt ý tưởng bằng code sẽ trở nên trơn tru và dễ dàng hơn bao giờ hết.
Biến là gì trong ngôn ngữ C?
Trong ngôn ngữ C, biến có thể được hình dung như những "hộp chứa" được đặt tên trong bộ nhớ máy tính, nơi chúng ta có thể lưu trữ dữ liệu. Mỗi biến đại diện cho một vị trí cụ thể trong RAM, và tên biến là một định danh duy nhất giúp chúng ta tham chiếu đến vị trí đó để đọc hoặc thay đổi giá trị.

Điều quan trọng cần nhớ là giá trị của biến có thể thay đổi trong suốt quá trình thực thi chương trình, điều này làm nên tính linh hoạt của nó. Ví dụ, một biến tên là tong_diem có thể bắt đầu bằng 0 và dần dần được cập nhật khi người chơi đạt thêm điểm.
Kiểu dữ liệu là gì và vai trò của nó trong C?
Nếu biến là "hộp chứa", thì kiểu dữ liệu được xem là nhãn dán nhằm xác định kích thước và loại nội dung mà hộp đó có thể chứa. Kiểu dữ liệu sẽ xác định các thông tin như.
- Kích thước (bao nhiêu byte) mà biến sẽ chiếm trong bộ nhớ.
- Phạm vi các giá trị mà biến đó có thể lưu trữ.
- Loại thao tác mà biến đó có thể thực hiện (ví dụ: không thể nhân ký tự với ký tự).
Trong C, một ngôn ngữ có kiểu dữ liệu mạnh, kiểu dữ liệu bắt buộc phải được khai báo trước khi biến có thể được sử dụng. Đây là điểm khác biệt quan trọng so với nhiều ngôn ngữ kịch bản hiện đại, vì nó cho phép trình biên dịch phân bổ bộ nhớ chính xác và kiểm tra lỗi kiểu dữ liệu ngay từ đầu.
Mối quan hệ giữa biến và kiểu dữ liệu trong C
Mối quan hệ giữa biến và kiểu dữ liệu trong C là mối quan hệ bất khả phân ly, bởi vì bạn không thể khai báo một biến mà không chỉ định kiểu dữ liệu của nó. Khi lập trình viên khai báo: int so_luong;, họ đang yêu cầu hệ thống thực hiện hai việc: thứ nhất, dành riêng một vùng bộ nhớ (thường là 4 byte cho int) và thứ hai, gán tên so_luong cho vùng nhớ đó, đồng thời chỉ định rằng vùng nhớ này chỉ được sử dụng để lưu trữ các giá trị số nguyên. Việc làm rõ biến và kiểu dữ liệu C ngay từ đầu giúp tối ưu hóa hiệu suất và tránh lãng phí bộ nhớ.
Khai báo, tên biến và quy tắc sử dụng biến trong C
Trước khi sử dụng, mọi biến trong C đều phải được khai báo — việc này giúp trình biên dịch biết trước loại dữ liệu mà biến sẽ chứa, tránh lỗi khi chạy chương trình.
Cú pháp khai báo biến trong C
Cú pháp cơ bản để khai báo biến là:
<kiểu dữ liệu> <tên biến>;
Ví dụ:
int age;
float salary;
char grade;Bạn cũng có thể khai báo và khởi tạo cùng lúc:
int year = 2025;Điều này giúp chương trình dễ đọc hơn và tránh lỗi “biến chưa khởi tạo”.
Quy tắc đặt tên biến và lưu ý cho người mới
Tên biến trong C cần tuân thủ một số quy tắc cơ bản:
- Bắt đầu bằng chữ cái hoặc dấu gạch dưới (_), không được bắt đầu bằng số.
- Không được trùng với từ khóa của ngôn ngữ C (như int, return, if,…).
- Tên biến phân biệt chữ hoa và chữ thường (Age khác age).
- Nên đặt tên rõ ràng, có ý nghĩa — ví dụ studentScore dễ hiểu hơn s1.
Ví dụ:
int numberOfStudents;
float averageScore;Những quy tắc này giúp code trở nên dễ đọc, dễ bảo trì — đặc biệt khi làm việc nhóm hoặc viết chương trình dài.
Khởi tạo và gán giá trị cho biến
Sự khác biệt giữa khai báo và khởi tạo là ở việc có gán giá trị ban đầu hay chưa.
- Khai báo: chỉ tạo biến, chưa có giá trị.
- Khởi tạo: tạo biến và gán giá trị ban đầu.
Ví dụ:
int x; // Khai báo
x = 10; // Gán giá trị
int y = 20; // Khởi tạoLưu ý: nếu bạn sử dụng biến trước khi gán giá trị, chương trình có thể trả về kết quả không xác định (undefined behavior).
Khai báo, tên biến và quy tắc sử dụng biến trong C
Trước khi sử dụng, mọi biến trong C đều phải được khai báo vì việc này giúp trình biên dịch biết trước loại dữ liệu mà biến sẽ chứa, tránh lỗi khi chạy chương trình.
Cú pháp khai báo biến trong C
Cú pháp cơ bản để khai báo biến là:
<kiểu dữ liệu> <tên biến>;
Ví dụ:
int age;
float salary;
char grade;Bạn cũng có thể khai báo và khởi tạo cùng lúc:
int year = 2025;Điều này giúp chương trình dễ đọc hơn và tránh lỗi “biến chưa khởi tạo”.

Quy tắc đặt tên biến và lưu ý cho người mới
Tên biến trong C cần tuân thủ một số quy tắc cơ bản:
- Bắt đầu bằng chữ cái hoặc dấu gạch dưới (_), không được bắt đầu bằng số.
- Không được trùng với từ khóa của ngôn ngữ C (như int, return, if,…).
- Tên biến phân biệt chữ hoa và chữ thường (Age khác age).
- Nên đặt tên rõ ràng, có ý nghĩa — ví dụ studentScore dễ hiểu hơn s1.
Ví dụ:
int numberOfStudents;
float averageScore;Những quy tắc này giúp code trở nên dễ đọc, dễ bảo trì, đặc biệt khi làm việc nhóm hoặc viết chương trình dài.
Khởi tạo và gán giá trị cho biến
Sự khác biệt giữa khai báo và khởi tạo là ở việc có gán giá trị ban đầu hay chưa.
- Khai báo: chỉ tạo biến, chưa có giá trị.
- Khởi tạo: tạo biến và gán giá trị ban đầu.
Ví dụ:
int x; // Khai báo
x = 10; // Gán giá trị
int y = 20; // Khởi tạoLưu ý: nếu bạn sử dụng biến trước khi gán giá trị, chương trình có thể trả về kết quả không xác định (undefined behavior).
Phân loại kiểu dữ liệu trong ngôn ngữ C
Các kiểu dữ liệu trong C được phân chia thành ba nhóm chính, mỗi nhóm phục vụ cho các mục đích và nhu cầu lưu trữ khác nhau.
Kiểu Dữ Liệu Cơ Bản (Primitive Data Types)
Đây là các kiểu dữ liệu tích hợp sẵn (built-in) và cơ bản nhất của C, được sử dụng để lưu trữ các giá trị đơn lẻ. Việc hiểu rõ kích thước và phạm vi của chúng là cực kỳ quan trọng đối với lập trình cấp thấp trong C:
- Số Nguyên (int, short, long, long long): Dùng để lưu trữ số nguyên không có phần thập phân. Các biến thể như short (thường 2 bytes) và long (thường 4 hoặc 8 bytes) giúp kiểm soát chính xác lượng bộ nhớ cần dùng. Bạn cũng có thể thêm từ khóa unsigned để lưu trữ số không âm, nhân đôi phạm vi giá trị dương.
- Số Thực (float, double): Dùng để lưu trữ số có phần thập phân. float (thường 4 bytes) cung cấp độ chính xác đơn, trong khi double (thường 8 bytes) cung cấp độ chính xác kép, thường được ưu tiên cho các tính toán khoa học hoặc tài chính.
- Ký tự (char): Thường 1 byte, dùng để lưu trữ một ký tự đơn (letter, digit, symbol). Trong C, ký tự được lưu trữ dưới dạng mã số nguyên tương ứng (ASCII hoặc Unicode).
Kiểu Dữ Liệu Dẫn Xuất (Derived Data Types)
Các kiểu dữ liệu này không tồn tại độc lập mà được xây dựng trên nền tảng của các kiểu dữ liệu cơ bản, giúp tổ chức dữ liệu một cách phức tạp hơn:
- Mảng (array): Là tập hợp có thứ tự của các phần tử cùng kiểu dữ liệu, được truy cập thông qua chỉ mục. Ví dụ: int diem[10]; khai báo một mảng 10 phần tử số nguyên.
- Con Trỏ (pointer): Đây là linh hồn của C. Con trỏ là một biến đặc biệt dùng để lưu trữ địa chỉ bộ nhớ của một biến khác. Ví dụ: int *ptr; khai báo ptr là con trỏ trỏ đến một vị trí lưu trữ số nguyên.
- Hàm (function): Mặc dù hàm không trực tiếp là kiểu dữ liệu để lưu trữ giá trị, nhưng kiểu trả về và tham số của hàm được coi là các thành phần kiểu dữ liệu trong lập trình có cấu trúc của C.
Kiểu Dữ Liệu Do Người Dùng Định Nghĩa (User-Defined Data Types)
Đây là cách C cho phép lập trình viên tự tạo ra các kiểu dữ liệu phức tạp, phù hợp với yêu cầu mô hình hóa thế giới thực trong chương trình:
- Cấu trúc (struct): Cho phép nhóm các biến có kiểu dữ liệu khác nhau thành một đơn vị duy nhất. Ví dụ, bạn có thể định nghĩa một struct SinhVien bao gồm char ten[50], int tuoi, và float diemTB.
- Kiểu liệt kê (enum): Dùng để gán tên cho các hằng số nguyên. Điều này giúp mã nguồn dễ đọc hơn bằng cách thay thế các giá trị số bằng các tên có ý nghĩa (ví dụ: enum Ngay {THU_HAI, THU_BA};).
- Union: Tương tự như struct, nhưng tất cả các thành viên của union chia sẻ cùng một vị trí bộ nhớ, giúp tiết kiệm bộ nhớ cho các ứng dụng cấp thấp.
Bài tập và ví dụ mẫu cho biến và kiểu dữ liệu C
Lý thuyết chỉ thực sự có ý nghĩa khi bạn biến nó thành hành động. Dưới đây là một vài bài tập nhỏ để bạn rèn luyện kỹ năng.
Viết chương trình khai báo và in biến nhiều kiểu khác nhau
Ví dụ:
#include <stdio.h>
int main() {
int age = 20;
float height = 1.75;
char grade = 'A';
printf("Tuoi: %d\n", age);
printf("Chieu cao: %.2f\n", height);
printf("Diem: %c\n", grade);
return 0;
}Chương trình này giúp bạn làm quen với việc in giá trị ra màn hình bằng printf() và hiểu cách biểu diễn từng kiểu dữ liệu.
Thực hành chuyển đổi kiểu và quan sát kết quả
#include <stdio.h>
int main() {
int a = 5;
float b = 2;
float c = a / b;
printf("Ket qua: %.2f", c);
return 0;
}Hãy thử thay float c = a / b; bằng float c = (float)a / b; và quan sát sự khác biệt — đây chính là ví dụ điển hình về ép kiểu (type casting) trong C.
Bài tập kiểm tra kích thước và vùng lưu trữ của biến
#include <stdio.h>
int main() {
printf("Kich thuoc int: %lu byte\n", sizeof(int));
printf("Kich thuoc float: %lu byte\n", sizeof(float));
printf("Kich thuoc char: %lu byte\n", sizeof(char));
return 0;
}Bài tập này giúp bạn hiểu rõ cách ngôn ngữ C quản lý bộ nhớ và kích thước từng kiểu dữ liệu trên hệ thống khác nhau.
Kết luận
Hiểu rõ biến và kiểu dữ liệu trong C chính là bước đầu giúp bạn nắm bắt cách máy tính tư duy và xử lý thông tin. Dù ngôn ngữ C có thể không còn là lựa chọn phổ biến nhất trong lập trình hiện đại, nhưng những kiến thức nền tảng từ nó vẫn là “chìa khóa” giúp bạn học các ngôn ngữ khác như Python, C++, hay JavaScript một cách dễ dàng hơn.
Nếu bạn đang tìm kiếm một hướng đi thực tế và phù hợp với xu thế công nghệ hiện nay, hãy ghé thăm Onschool Bootcamp. Tại đây, bạn có thể khám phá những chương trình đào tạo chuyên sâu về lập trình web, phân tích dữ liệu và nhiều kỹ năng nghề nghiệp khác.
Bạn đã sẵn sàng đổi thay sự nghiệp chưa?
Onschool Bootcamp tự hào chỉ trong 120 ngày, đào tạo thế hệ lập trình viên kiến tạo thế giới số - bắt đầu từ con số 0
Đừng quên chia sẻ bài viết này!
