Trong bài học này chúng ta sẽ tìm hiểu phạm vi của biến trong lập trình c++ cũng như thời gian tồn tại của biến. Như chúng ta đã biết khai báo biến máy tính sẽ cấp phát một vùng nhớ có độ lớn bằng kiểu dữ dữ liệu để lưu trữ thông tin. Vấn đề là không phải chỉ có một mình chương trình mà các bạn đang viết sử dụng các vùng nhớ trên RAM, mà còn nhiều chương trình khác đang chạy ngầm nữa.
Phạm vi của biến trong lập trình c++
Trong khi đó, bộ nhớ RAM của chúng ta chỉ có giới hạn. Vì thế, một khi biến (variable) không còn giá trị sử dụng nữa. Chúng phải được tiêu hủy để trả lại vùng nhớ mà nó đang giữ. Để cấp phát cho những ứng dụng khác cần sử dụng bộ nhớ.
Đối với các bạn học lập trình c++ kiểm soát được việc lúc nào cần khai báo biến. Khi nào cần tiêu hủy biến sẽ giúp bạn quản lý tài nguyên máy tính tốt hơn. Điều này cần kĩ năng tổ chức và thiết kế chương trình, một kĩ năng quan trọng cần có thời gian để rèn luyện. Trong bài học này, chúng ta sẽ tìm hiểu hai khái niệm luôn luôn gắn liền với biến (variable):
- Phạm vi của biến
- Thời gian tồn tại của biến
Sau đây chúng ta sẽ tìm hiểu rõ về 2 khái niệm này qua những ví dụ minh họa để các bạn học lập trình c++ có thể hiểu và sử dụng chúng hiệu quả.
Phạm vi của biến
Phạm vi của biến xác định nơi chúng ta có thể truy cập vào biến.
- Biến được khai báo bên trong khối lệnh (block) như trong cấu trúc if else, vòng lặp, hàm được gọi là biến cục bộ (local variable).
Chương trình bên dưới minh họa cho việc khai báo biến cục bộ, truy cập và truy xuất giá trị của biến cục bộ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
int main() { //Khai báo biến cục bộ int soLuongCay = 1000; cout <<"So luong cay la: "<<soLuongCay<<endl; soLuongCay = soLuongCay + 10; cout <<"So luong cay moi la: "<<soLuongCay<<endl; system("pause"); return 0; } |
Trong đoạn code trên biến soLuongCay có thể gọi và truy xuất trong hàm main. Biến soLuongCay này được gọi là biến cục bộ được khai báo và sử dụng trong hàm main. Chúng ta sẽ xét một ví dụ khác như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Tính thương của hai số float a = 0, b = 0; cout <<"Nhap so a = "; cin>>a; cout <<"Nhap so b = "; cin>>b; if(b!= 0) { float thuong = a/b; } cout <<"Thuong cua hai so la: "<<thuong<<endl; |
Đoạn code trên thực hiện tính thương của a và b nhưng biến thương được khai báo trong if. Khi bạn chạy đoạn code này sẽ thấy biến thuong ở câu lệnh in thông tin bị lỗi. Nguyên nhân là vì thuong chỉ được khai báo trong khối lệnh if. Do vậy trong từng khối lệnh chúng ta có thể đặt những tên biến trùng tên nhau nếu muốn.
- Biến toàn cục (global variable) là biến được đặt ngoài khối lệnh code và có thể gọi ở nhiều khối lệnh, hàm khác nhau trong chương trình.
Để hiểu rõ hơn về loại biến này chúng ta xem ví dụ sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream> using namespace std; //Khai báo một hằng số pi const float PI = 3.14; int main() { float banKinh = 0, dienTich = 0; cout <<"Nhap vao ban kinh cua hinh tron = "; cin >>banKinh; //Thực hiện tính diện tích dienTich = ::PI * banKinh * banKinh; cout <<"Dien tich cua hinh tron: "<<dienTich<<endl; system("pause"); return 0; } |
Để sử dụng một biến toàn cục ngoài hàm main trong ví dụ trên. Chúng ta có thể sử dụng dấu :: hoặc không thì trong Visual Studio vẫn hiểu được. Nếu có biến PI toàn cục được khai báo. Biến này có thể được sử dụng ở nhiều khối code khác nữa nếu muốn. Kết quả hiển thị khi chạy đoạn code lập trình c++ trên:
Thời gian tồn tại của biến
Đối với những biến cục bộ (local variable) có kiểu dữ liệu thông thường như các bạn đã học trong những bài trước, vùng nhớ của biến sẽ tự động giải phóng khi ra khỏi khối lệnh chứa nó.
Việc cố gắng truy cập đến một biến đã bị hủy sẽ gây nên lỗi. Thời gian tồn tại của biến cục bộ phụ thuộc vào của khối lệnh chứa nó.
Đối với biến toàn cục (được khai báo bên ngoài khối lệnh của hàm main), nó sẽ tồn tại cho đến khi chương trình kết thúc hoặc bị kết thúc bởi người dùng.
Vì thế, các bạn học lập trình c++ chỉ nên sử dụng biến toàn cục khi cần thiết. Để tránh việc vùng nhớ của biến toàn cục được cấp phát nhưng bị chiếm giữ quá lâu làm ảnh hưởng đến việc cấp phát bộ nhớ cho các chương trình khác.
Tóm lại trong bài học này các bạn cần ghi nhớ 2 vấn đề như sau:
- Biến cục bộ (local variable) là biến chỉ tồn tại và gọi được trong khối lệnh code. Nó được giải phóng sau khi khối lệnh đó thực hiện xong
- Biến toàn cục (global variable) là biến được khai báo ngoài khối lệnh code, tồn tại trong suốt quá trình chạy ứng dụng. Nó chỉ được giải phóng khi kết thúc chương trình
Hy vọng qua bài học này sẽ giúp các bạn học lập trình c++ hiểu, sử dụng biến cho phù hợp với bài toán của mình. Bên cạnh đó các bạn có thể tham gia khóa học lập trình c++ miễn phí cho người mới do chuyên gia Stanford biên tập: tại đây