C các biến tĩnh

Xin chào các bạn lập trình viên mới! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới các biến tĩnh trong C. Là giáo viên khoa học máy tính hàng xóm thân thiện của bạn, tôi sẽ hướng dẫn bạn qua khái niệm này với những giải thích rõ ràng và nhiều ví dụ. Hãy cùng khám phá!

C - Static Variables

什么是静态变量?

Các biến tĩnh là một loại biến đặc biệt trong C có một số thuộc tính độc đáo. Hãy nghĩ về chúng như là "bộ nhớ dài hạn" của chương trình bạn. Khác với các biến thông thường có xuất hiện và biến mất với mỗi lần gọi hàm, các biến tĩnh tồn tại trong suốt cuộc đời của chương trình.

Đặc điểm của các biến tĩnh

Hãy cùng nhìn vào các đặc điểm chính làm cho các biến tĩnh trở nên đặc biệt:

Đặc điểm Mô tả
Đời sống Tồn tại suốt toàn bộ quá trình thực thi chương trình
Phạm vi Giới hạn trong khối mà nó được khai báo
Giá trị mặc định Được khởi tạo值为 zero nếu không được khởi tạo rõ ràng
Lưu trữ Được lưu trữ trong phần dữ liệu, không phải ngăn xếp
Giữ giá trị Giữ giá trị giữa các lần gọi hàm

Cách khai báo một biến tĩnh

Khai báo một biến tĩnh rất đơn giản. Bạn chỉ cần thêm từ khóa static trước khai báo biến. Dưới đây là cú pháp cơ bản:

static data_type variable_name = initial_value;

Ví dụ:

static int count = 0;

Ví dụ về các biến tĩnh trong C

Hãy nhìn vào một số ví dụ để hiểu cách các biến tĩnh hoạt động trong thực tế.

Ví dụ 1: Bộ đếm số lần gọi hàm

#include <stdio.h>

void countCalls() {
static int count = 0;
count++;
printf("This function has been called %d times\n", count);
}

int main() {
for (int i = 0; i < 5; i++) {
countCalls();
}
return 0;
}

Trong ví dụ này, chúng ta đã tạo một hàm countCalls() để theo dõi số lần nó được gọi. Biến static int count giữ giá trị giữa các lần gọi hàm, cho phép chúng ta đếm số lần gọi chính xác.

Khi bạn chạy chương trình này, bạn sẽ thấy:

This function has been called 1 times
This function has been called 2 times
This function has been called 3 times
This function has been called 4 times
This function has been called 5 times

Ví dụ 2: Trình tạo ID duy nhất

#include <stdio.h>

int generateID() {
static int id = 100;
return ++id;
}

int main() {
for (int i = 0; i < 5; i++) {
printf("Generated ID: %d\n", generateID());
}
return 0;
}

Trong ví dụ này, chúng ta đã tạo một trình tạo ID đơn giản sử dụng biến tĩnh. Mỗi lần generateID() được gọi, nó trả về một ID duy nhất bằng cách increment biến id.

Kết quả đầu ra:

Generated ID: 101
Generated ID: 102
Generated ID: 103
Generated ID: 104
Generated ID: 105

Truyền biến tĩnh vào hàm

Bạn có thể tự hỏi, "Chúng ta có thể truyền biến tĩnh vào hàm không?" Câu trả lời là có! Tuy nhiên, điều quan trọng cần nhớ là bạn đang truyền giá trị của biến tĩnh, không phải biến itself.

Dưới đây là một ví dụ:

#include <stdio.h>

void modifyValue(int x) {
x = x + 10;
printf("Inside function: %d\n", x);
}

int main() {
static int num = 5;
printf("Before function call: %d\n", num);
modifyValue(num);
printf("After function call: %d\n", num);
return 0;
}

Kết quả đầu ra:

Before function call: 5
Inside function: 15
After function call: 5

Như bạn có thể thấy, biến tĩnh num vẫn không thay đổi trong main() mặc dù chúng ta đã thay đổi giá trị của nó trong modifyValue(). Điều này là vì chúng ta đã truyền giá trị của num, không phải num itself.

Sự tương tự giữa các biến tĩnh và biến toàn cục

Các biến tĩnh và biến toàn cục có một số điểm tương tự, điều này có thể dẫn đến sự nhầm lẫn. Hãy làm rõ điều này:

Mặt Biến tĩnh Biến toàn cục
Đời sống Toàn bộ quá trình thực thi chương trình Toàn bộ quá trình thực thi chương trình
Giá trị mặc định Được khởi tạo值为 zero Được khởi tạo值为 zero
Lưu trữ Phần dữ liệu Phần dữ liệu
Phạm vi Giới hạn trong khối khai báo Truy cập từ khắp chương trình

Sự khác biệt chính nằm ở phạm vi. Trong khi các biến toàn cục có thể được truy cập từ bất kỳ phần nào của chương trình, các biến tĩnh chỉ giới hạn trong khối mà chúng được khai báo.

Kết luận

Và đây bạn đã có, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới các biến tĩnh trong C. Từ các đặc điểm độc đáo đến các ví dụ thực tế, chúng ta đã bao quát rất nhiều nội dung. Nhớ rằng, các biến tĩnh giống như voi trong thế giới lập trình - chúng có trí nhớ dài hạn và tồn tại suốt cả chương trình!

Trong hành trình lập trình của bạn, bạn sẽ thấy các biến tĩnh vô cùng hữu ích trong nhiều tình huống. Chúng perfect để duy trì trạng thái giữa các lần gọi hàm, tạo bộ đếm, và nhiều hơn nữa.

Tiếp tục thực hành, tiếp tục lập trình, và quan trọng nhất, hãy luôn vui vẻ với C! Đến gặp lại lần sau, chúc các bạn lập trình vui vẻ!

Credits: Image by storyset