Sự khác nhau giữa biến toàn cục và biến cục bộ trong C/C++ là gì?

Trong C/C++, biến toàn cục là biến được khai báo ngoài phạm vi hàm và được dùng chung cho tất cả các hàm bao gồm hàm main, biến cục bộ là biến được sử dụng trong phạm vi hàm.

Sự khác nhau cơ bản giữa hai biến này đó là:

Biến cục bộ

  • Được khai báo trong phạm vi một hàm.
  • Giá trị của biến chỉ được sử dụng trong phạm vi hàm đó, không thể sử dụng bởi hàm khác.
  • Biến sẽ bị hủy sau khi hàm thực hiện xong công việc của mình.
  • Biến được khởi tạo có giá trị rác, bạn phải tự mình khởi tạo giá trị cho biến.

Ví dụ đoạn chương trình sau,

#include <iostream>
using namespace std;

int tinhTong(int n1, int n2){
    int tong = n1 + n2; // tong được xem là biến cục bộ
                        // nó chỉ được sử dụng trong phạm vi
                        // hàm tinhTong này thôi.
    return tong;
}


int main(){
    int b = 4;
    int c = 5;

    int d = tinhTong(b, c);
    cout << d << endl; // d = 9 
}

Biến toàn cục

  • Được khai báo ngoài hàm, có thể được khai báo trong hàm main() nhưng sử dụng chung cho tất cả các hàm có trong hàm main().
  • Giá trị của biến được sử dụng chung cho tất cả các hàm, nếu bạn truyền biến vào hàm bằng cách truyền tham chiếu thì giá trị của biến sẽ thay đổi.
  • Biến không bị hủy sau khi hàm kết thúc, biến chỉ bị hủy khi chương trình đã dừng.
  • Biến được khởi tạo có giá trị mặc định do hệ thống tự động tạo ra.

Ví dụ đoạn chương trình sau,

#include <iostream>
using namespace std;

int a; // a là biến toàn cục được
       // hệ thống khởi tạo giá trị mặc định bằng 0

int main(){
    int b = 4;

    int c = a + b; // Không gặp lỗi vì a (biến toàn cục) đã được
                   // hệ thống khởi tạo giá trị rồi
    cout << c << endl; //c = 4
}