Docly

Giải đáp câu hỏi biến toàn cục là gì? [Update 2023]

Lời giải chuẩn nhất cho câu hỏi: “Biến toàn cục là gì?” và phần kiến thức mở rộng thú vị về Biến toàn cục do Trang Tài Liệu biên soạn là tài liệu hay dành cho các bạn học sinh và các thầy cô giáo tham khảo. Hy vọng khái niệm này sẽ giúp các bạn hiểu hơn bài học và nắm chắc kiến thức.

Biến toàn cục là gì?

Biến toàn cục là các biến số mà có ảnh hưởng và áp dụng cho toàn bộ phạm vi hoặc hệ thống mà nó thuộc về. Điều này đồng nghĩa với việc các biến toàn cục có thể được truy cập và sử dụng từ bất kỳ địa điểm hoặc phạm vi nào trong hệ thống. Chúng không bị giới hạn bởi phạm vi hoặc phạm vi cục bộ và có thể thay đổi giá trị và tác động lên toàn bộ hệ thống. Ví dụ về biến toàn cục có thể là các hằng số, các cấu trúc dữ liệu hoặc các thông số được chia sẻ và sử dụng chung trong một chương trình hoặc hệ thống. Các biến toàn cục có thể được gán giá trị và truy cập từ bất kỳ đoạn mã hoặc phần của chương trình nào.

Phân loại biến toàn cục

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 forBiế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.

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() và hàm test().

Quá trình khởi tạo và sử dụng biến toàn cục

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.

Kiến thức mở rộng về biến toàn cục

Biến toàn cục

– Trong lập trình máy tính, biến toàn cục (tiếng Anh: global variable) là một biến có tầm vực toàn cục, nghĩa là nó có thể nhìn thấy (và do vậy truy xuất được) trong toàn bộ chương trình, trừ khi bị che (variable shadowing). Tập hợp tất cả các biến toàn cục được gọi là môi trường toàn cục (global environment) hay trạng thái toàn cục (global state). Trong các ngôn ngữ biên dịch, biến toàn cục nói chung là biến tĩnh (static variable), có phạm vi (thời gian sống) là toàn bộ thời gian chạy của chương trình, mặc dù trong các ngôn ngữ thông dịch (bao gồm bộ thông dịch dòng lệnh (command-line interpreter)), biến toàn cục thường được cấp phát động khi định nghĩa, vì chúng không được biết trước thời hạn.

– Trong một số ngôn ngữ, tất cả các biến đều là toàn cục, hay mặc định là toàn cục, trong khi ở hầu hết các ngôn ngữ hiện đại, các biến có tầm vực giới hạn, thường là tầm vực từ vựng (lexical scope), mặc dù biến toàn cục thường có sẵn bằng cách định nghĩa một biến ở cấp cao nhất của chương trình. Tuy nhiên trong các ngôn ngữ khác, biến toàn cục không tồn tại; đây thường là các ngôn ngữ lập trình mô đun vốn thực thi cấu trúc mô đun, hay ngôn ngữ lập trình hướng đối tượng dựa trên lớp vốn thực thi cấu trúc lớp.

Phạm vi

– 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 viết như sau

#include<iostream>

using namespace std;

float a, b; //Khai báo 2 biến tổng thể a và b

//Sau khi hàm này được gọi xong a và b sẽ nhận các giá trị nhập vào từ bàn phím

void nhapHeSo () {

cout<<“Nhap he so a: “;

cin>>a;

cout<<“Nhap he so b: “;

cin>>b;

}

void xacDinhNghiem() {

if (a==0) {

if (b==0) {

cout<<“Phuong trinh co vo so nghiem!”;

}else{

cout<<“Phuong trinh vo nghiem!”;

}

}else{

cout<<“Phuong trinh co nghiem x = “<<-b/a;

}

main () {

nhapHeSo ();

xacDinhNghiem();

return 0;

}

Câu hỏi trắc nghiệm

Câu 1: Nói về biến toàn cục, phát biểu nào sau đây là đúng:

  A. Biến toàn cục chỉ có tác dụng trong chương trình chính.

 B. Biển toàn cục chỉ có tác dụng trong chương trình con.

  C. Biển toàn cục có tác dụng trong toàn bộ chương trình.

  D. Tên biến toàn cục phải khác tên biến cục bộ.

Đáp án đúng: C. Biển toàn cục có tác dụng trong toàn bộ chương trình.

Câu 2: Phạm vi của biến toàn cục là:

  A. Trong chương trình chính

  B. Trong chương trình chính và tất cả chương trình con

  C. Trong tất cả chương trình con

  D. Chỉ một số chương trình con được sử dụng

Đáp án đúng: A. Trong chương trình chính

Câu 3: Phát biểu nào dưới đây về biến là sai?

A. Biến toàn cục có thể được sử dụng ở trong một thủ tục;

B. Biến cục bộ phải có tên khác với tên của biến toàn cục;  

C. Biến cục bộ có thể có kiểu khác với kiểu của biến toàn cục có cùng tên;

D. Một hàm có thể có nhiều tham số biến;

Đáp án đúng: B. Biến cục bộ phải có tên khác với tên của biến toàn cục;        

Câu 4: Cho chương trình sau:

Program Chuong_Trinh;

Var a, b, S : byte;

Procedure TD(Var x : byte ; y : byte);

Var i : byte;

Begin

i := 5;

writeln(x,‘  ’, y);

x := x + i ;

y := y + i ;

S := x + y ;

Writeln(x,‘  ’, y);

End;

Begin

Write(‘nhập a và b : ’);

Readln(a, b);

TD(a,b);

Writeln(a,‘  ’, b, ‘  ’, S);

Readln;

End.

Trong chương trình trên có các biến toàn cục là:

A. x và y.

B. i

C. a và b.

D. a, b, S.

Đáp án đúng: D. a, b, S.

Câu 5: Mô tả nào dưới đây về chương trình có cấu trúc là phù hợp nhất?

A. Chương trình có sử dụng cấu trúc mảng và bản ghi;

B. Sử dụng các hàm và thủ tục thư viện chuẩn;

C. Được chia thành nhiều chương trình con.

D. Cả A và B

Đáp án đúng: C. Được chia thành nhiều chương trình con.