Một biến trong C không là gì nhưng là một tên được đưa ra đến bộ nhớ lưu trữ để chương trình có thể thao tác. Mỗi biến trong C có một kiểu xác định, để xác định cỡ và layout cho bộ nhớ biến đó. Phạm vi của giá trị có thể được dự trữ trong bộ nhớ, việc thiết lập các biểu thức có thể được áp dụng với biến.
Tên của biến có thể bao gồm chữ cái, chữ số và dấu gạch dưới (_), nhưng nó phải bắt đầu bằng ký tự chữ cái hoặc dấu gạch dưới. Chữ hoa và chữ thường là hai đối tượng phân biệt bởi vì C là ngôn ngữ phân biệt chữ hoa - chữ thường. Dựa vào những loại cơ bản giải thích ở chương trước, có những loại kiểu của biến cơ bản như sau:
Kiểu | Miêu tả |
---|---|
char | Là biến số nguyên, có kích cỡ 1 byte. |
int | Là kiểu cho số tự nhiên. |
float | Giá trị dấu chấm động độ chính xác đơn. |
double | Giá trị dấu chấm động độ chính xác kép. |
void | Đại diện cho loại không có kiểu. |
Ngôn ngữ lập trình C cho phép định nghĩa các loại kiểu biến khác nhau, có thể xem ở các chương sau như biến liệt kê, biến con trỏ, biến mảng, biến cấu trúc, biến Union, ….
Định nghĩa biến trong ngôn ngữ C
Định nghĩa biến nghĩa là thông báo với trình biên dịch nơi và cách tạo lưu trữ cho biến đó. Một định nghĩa biến xác định một kiểu dữ liệu và chứa danh sách của một hay nhiều biến của kiểu đó như sau:
kieu_du_lieu danh_sach_bien;
Ở đây, kieu_du_lieu là của kiểu dữ liệu của ngôn ngữ C như char, w_char, int, float, double, bool hay bất kỳ kiểu đối tượng được người dùng định nghĩa… danh_sach_bien có thể bao gồm một hoặc nhiều tên định danh ngăn cách nhau bởi dấu phảy. Vài ví dụ khai báo hợp lệ của biến như sau:
int i, j; char ho, ten, c, ch; float f, luong, diemthi; double d;
Dòng int i, j; vừa khai báo và định nghĩa cho biến i, j, k và hướng dẫn trình biên dịch để tạo các biến dưới tên i, j, k với kiểu int.
Biến có thể được khởi tạo (được gán các giá trị ban đầu) trong khai báo của nó. Một phần khởi tạo bao gồm một dấu "=" theo sau bởi một biểu thức hằng số số như sau:
kieu_du_lieu ten_bien = gia_tri;
Vài ví dụ dưới đây:
extern int d = 3, f = 5; // khai bao bien d va f. int d = 3, f = 5; // dinh nghia va khoi tao bien d va f. byte z = 22; // dinh nghia va khoi tao bien z. char x = 'hoclaptrinhc'; // bien x co gia tri la 'hoclaptrinhc'.
Với định nghĩa không có giá trị khởi tạo, biến static có thể lưu trữ với giá trị NULL, (tất cả các byte có giá trị 0), giá trị ban đầu của tất cả các biến của tất cả các kiểu khác có giá trị không xác định.
Khai báo biến trong ngôn ngữ C:
Khai báo biến cung cấp một sự bảo đảm cho trình biên dịch nhận biết rằng không có biến nào với kiểu và tên giống nó được khai báo trước đó, nếu không sẽ xảy ra lỗi ở quá trình biên dịch. Một khai báo biến chỉ có ý nghĩa ở thời gian biên dịch, trình biên dịch cần khai báo biến cụ thể tại thời gian nối với chương trình.
Một khai báo biến rất hữu dụng khi bạn sử dụng đồng thời nhiều file và bạn định nghĩa biến của bạn ở một trong những file đó. Bạn có thể sử dụng từ khóa extern để khai báo biến ở bất kì nơi đâu. Do đó bạn có thể khai báo một biến nhiều lần trong chương trình C nhưng chỉ phải định nghĩa trong một file, một hàm hay một khối code.
Thông thường biến extern được khai báo trong file.h vì khi muốn sử dụng bạn chỉ cần include file .h là có thể sử dụng biến.
Ví dụ
Thử ví dụ dưới đây, nơi biến được khai báo ở trên đầu, nhưng chúng được định nghĩa và khởi tạo trong hàm main:
#include
// phan khai bao bien:
extern int a, b;
extern int c;
extern float f;
int main ()
{
/* phan dinh nghia bien: */
int a, b;
int c;
float f;
/* phan khoi tao gia tri thuc su */
a = 15;
b = 35;
c = a + b;
printf("Gia tri cua c la : %d \n", c);
f = 50.0/3.0;
printf("Gia tri cua f la : %f \n", f);
printf("===========================\n");
printf("Hoclaptrinh chuc cac ban hoc tot! \n");
return 0;
}
Vài khái niệm có thể áp dụng trong khai báo hàm nơi bạn cung cấp tên hàm ở thời điểm nó khai báo và định nghĩa nó ở bất kì nơi đâu. Ví dụ:
// phan khai bao ham int tenham(); int main() { // loi goi ham int i = tenham(); } // phan dinh nghia ham int tenham() { return 0; }
Lvalue và Rvalue trong C:
Có hai kiểu Expression:
- lvalue : Expression mà chỉ tới vị trí bộ nhớ là "lvalue". Một lvalue có thể xuất hiện hoặc bên trái hoặc bên phải của một phép gán.
- rvalue : Liên quan tới giá trị dữ liệu được lưu trữ tại một số địa chỉ trong bộ nhớ. Một rvalue là một expression mà không thể có một giá trị được gán tới nó, nghĩa là một rvalue có thể xuất hiện ở bên phải nhưng không phải bên trái của một phép gán.
Các biến là các lvalue và thường xuất hiện ở cạnh trái của phép gán. Các hằng số là số là rvalue và không thể được gán và không thể xuất hiện bên cạnh trái của phép gán. Dưới đây là một khai báo hợp lệ:
int g = 20;
Nhưng sau đây là một khai báo không hợp lệ và sẽ có thông báo lỗi:
10 = 20;