Biến toàn cục và biến cục bộ trong chương trình

Đây là bài 26/43 bài của series môn học Nhập môn lập trình

1. Biến cục bộ (local variable)

Một biến được khai báo trong hàm (bên trong thân hàm giữa cặp dấu ngoặc nhọn { }) được gọi là biến cục bộ.

Phạm vi của biến cục bộ chỉ giới hạn trong hàm mà biến được định nghĩa. Tức là biến cục bộ chỉ tồn tại và chỉ có thể được truy cập bên trong hàm. Biến cục bộ sẽ bị hủy khi hàm kết thúc.

Chương trình C++ minh họa biến cục bộ

#include <iostream>
using namespace std;

void test()
{
	// local variable to test()
	int var1;
	var1 = 6;

	// illegal: var not declared inside test()
	cout << var;
}

int main() 
{
	// local variable to main()
	int var = 5;

	test();
    
	// illegal: var1 not declared inside main()
	var1 = 9;
}

Trong ví dụ trên, biến var không thể sử dụng trong hàm test() and biến var1 không thể sử dụng trong hàm main().

Lưu ý: Một biến được khai báo trong một khối lệnh trong cặp dấu ngoặc nhọn { }. Biến này cũng chỉ được sử dụng trong khối lệnh đó cũng được xem là biến cục bộ. Xem ví dụ bên dưới.

for(int i=0;i<5;i++){
	cout<<i<<endl;
}

Biến int i thuộc về câu lệnh for. Biến i chỉ được sử dụng trong câu lệnh for, khi thực thi xong câu lệnh for thì biến i cũng bị hủy.

2. Biến toàn cục (global variable)

Nếu một biến được định nghĩa ở bên ngoài của tất cả các hàm thì chúng được gọi là biến toàn cục.

Phạm vi của biến toàn cục là trong toàn bộ chương trình. Tức là, biến toàn cục có thể được sử dụng và bị thay đổi giá trị trong bất cứ đâu trong chương trình sau khi được khai báo. Biến toàn cục chỉ bị hủy khi chương trình kết thúc.

Chương trình C++ minh họa biến toàn cục

#include <iostream>
using namespace std;

// Global variable declaration
int c = 12;

void test()
{
	++c;

	// Outputs 14
	cout << c;
}

int main()
{
	++c;

	// Outputs 13
	cout << c <<endl;
	test();

    system("pause");
}

Kết quả
13
14

Trong chương trình trên, “c” là biến toàn cục. Biến “c” có thể được sử dụng ở bất cứ đâu trong chương trình, trong cả hàm main()hàm test().

3. Phạm vi của biến (variable scope)

Với những khái niệm về biến toàn cục và biến cục bộ, chúng ta có khái niệm phạm vi của biến (variable scope). Lưu ý về variable scope để tránh bị lỗi logic về dữ liệu của biến trong chương trình.

Phạm vi của biến

4. Quá trình khởi tạo và sử dụng các biến khi gọi hàm

Phần này sẽ trình bày cơ chế khởi tạo, sử dụng biến và hủy biến khi gọi hàm qua các ví dụ.

Khi truyền tham trị

Ví dụ, ta có một hàm add và lời gọi hàm add như bên dưới.

int add(int x, int y)
{
	return x + y;
}
int main(){
	cout<<add(4,5);
	system("pause");
}

với lời gọi hàm add(4,5) thì giá trị 4 sẽ truyền vào cho biến x của tham số đầu tiên, giá trị 5 sẽ được gán cho biến y của tham số thứ hai.

Biến x và y được khai báo làm tham số của hàm add. Hai biến này đóng vai trò như là biến cục bộ hoạt động bên trong hàm add. Vì thế, tại thời điểm kết thúc phiên làm việc của hàm, các biến tham số này sẽ bị hủy và những giá trị được truyền vào không còn tồn tại.

Khi truyền tham chiếu

Ví dụ, ta có một hàm increase và lời gọi hàm increase như bên dưới.

void increase(int &a)
{
	a++;
}
int main(){
	int x=0;
	increase(x);
	cout<<x;
	system("pause");
}

với lời gọi hàm increase(x), thì không có biến cục bộ nào được khởi tạo trong hàm increase() mà giá trị tính toán trong hàm increase() sẽ gán trực tiếp cho biến x được truyền tham chiếu vào hàm.

5/5 - (2 bình chọn)
Bài trước và bài sau trong môn học<< Nạp chồng hàm (function overloading) là gì?Hàm đệ quy trong lập trình và minh họa với C++ >>
Chia sẻ trên mạng xã hội:

Tác giả Vinh Lê

Vinh Lê hiện đang là biên tập viên tại Góc Học IT.

Bài viết của Vinh Lê

2 bình luận về bài viết “Biến toàn cục và biến cục bộ trong chương trình

  1. Câu 1:(1 điem) Cho chuơng trình sau:
    Var m.n,T: integer,
    Procedure TD (Var C: integer;, x: byte);
    Var i: Byte;
    Begin
    i:-3; Writeln(C, x);
    X:=x – i;
    C:=C+iB
    Writeln(C, x):
    Hãy cho biết?
    +Biến toàn cục là:
    + Biển cục bộ là:
    +Tham số hinh thức.
    +Tham số thực sự:
    +Khi chạy chương trinh, nhập m-7, n-5 thi kết quuả.
    End;
    Begin
    Write(‘nhập m và n:’); Readln(m,n);
    TD(m,n); T:-mtn3;
    Writeln(m,” T,’ n);
    End.
    Có thể giúp em bài này được ko ạ 😢

    1. Chào bạn,
      Chương trình trên của bạn là một chương trình viết bằng Pascal. Chương trình trên có 1 thủ tục (procedure) là TD. Vậy thì những biến khai báo ngoài procedure này là biến toàn cục, trong procedure này là biến cục bộ.
      Tham số hình thức là những tham số được xác định khi khai báo và định nghĩa procedure (Var C: integer;, x: byte). Tham số thật sự là giá trị truyền vào procedure khi gọi procedure. Mỗi lần gọi procedure thì có thể truyền tham số thật sự khác nhau.

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.