Biến toàn cục và biến cục bộ trong C | Lập Trình Từ Đầu

1.Biến toàn cục và biến cục bộ là gì?

Chúng ta đã khai báo và sử dụng khá nhiều về biến, tuy nhiên việc khai báo và sử dụng đó chỉ nằm trong một phạm vi đó là các hàm ta tự định nghĩa, hay chủ yếu là khai báo trong hàm main(), ta gọi những biến bên trong một hàm hoặc một khối được gọi là các biến cục bộ.

Ngược lại với biến cục bố ta có biến toàn cục chính là biến nằm ngoài phạm vi tất cả các hàm kể cả hàm main()

2.Biến cục bộ

Chúng ta đã quá quen với các biến cục bộ, thực chất người ta gọi là biến cục bộ vì chúng chỉ được khai báo và sử dụng trong một hàm hoặc một khối mã nhất định nào đó và hoàn toàn không thể được sử dụng bên ngoài của chúng.

Ở ví dụ dưới đây, tôi sẽ có một số ví dụ về biến cục bộ nằm trong hàm main()

#include <stdio.h>
int main () {
  // Khai bao bien a,b trong ham main()
  int a = 5;
  int b = 2; 
  // Hien thi gia tri a,b va gia tri a + b
  printf ("Gia tri cua a la: %d, gia tri cua b la: %d, gia tri a + b la: %d", a, b, a + b);
  return 0;
}    

Gia tri cua a la: 5, gia tri cua b la: 2, gia tri a + b la: 7

Giả sử tôi xây dựng một hàm tính tổng 2 biến a + b mà cố tình lấy luôn 2 giá trị của biến a, b trong hàm main() thì sẽ thế nào?

#include <stdio.h>
int sum(){
    return a + b;
}
int main () {

  // Khai bao bien a,b trong ham main()
  int a = 5;
  int b = 2; 
  // Goi ham sum va hien thi ket qua
  printf("Tong la: %d",sum());
  return 0;
} 

In function ‘int sum()’:

[Error] ‘a’ was not declared in this scope

[Error] ‘b’ was not declared in this scope

Như vậy lập tức chương trình đã có lỗi, và để khắc phục lỗi trên ta có hai cách sau:

  1. Khai báo lại hai biến a, b trong hàm sum() và đặt lại giá trị cho chúng
#include <stdio.h>
int sum(){
    // Khai bao lai a, b trong ham sum()
    int a = 5;
    int b = 2;
    // Tra ve ket qua a + b
    return a + b;
}
int main () {

  // Khai bao bien a,b trong ham main()
  int a = 5;
  int b = 2; 
  //Goi ham sum() va kiem tra ket qua
  printf("Tong la: %d",sum());
  return 0;
} 

Tong la: 7

  1. Thêm hai tham số a, b vào hàm sum(int a, int b) và gọi hàm sum(a,b) trong main()
#include <stdio.h>
int sum(int a, int b){
    // Tra ve ket qua a + b
    return a + b;
}
int main () {

  // Khai bao bien a,b trong ham main()
  int a = 5;
  int b = 2; 
  //Goi ham va truyen tham so a,b vao ham sum(a,b) va kiem tra ket qua
  printf("Tong la: %d",sum(a,b));
  return 0;
}  

Tong la: 7

Cách thứ (3) để khắc phục tình trạng trên đó là sử dụng biến toàn cục, chúng ta cùng sang phần tiếp theo để tìm hiểu về biến toàn cục nhé!

3.Biến toàn cục

Các biến toàn cục được định nghĩa bên ngoài một hàm, chúng thường nằm ở đầu chương trình.

Các biến toàn cục có thể được sử dụng vào trong bất kỳ hàm nào của một chương trình. Điều này nghĩa là, một biến toàn cục có sẵn để sử dụng trong toàn bộ chương trình của bạn sau khi khai báo.

Ta quay lại ví dụ trên giả sử ta khai báo một biến toàn cục a, b ở đầu chương trình ta có thể gọi và sử dụng chúng trong cả hàm sum() và hàm main()

#include <stdio.h>
// Khai bao bien toan cuc a,b
int a = 5;
int b = 2;
int sum(){
    //Su dung chinh bien toan cuc a,b o tren de tra ve a + b
    return a + b;
}
int main () {
  // Bien cuc bo a,b trong ham main()   
  int a = 10;
  int b = 10;
  
  //Goi ham sum() va kiem tra ket qua
  printf("Tong la: %d", sum());  
  return 0;
}

Tong la: 7

Nhận xét:

  • Mặc dù trong hàm main() có 2 biến a = 10, b = 10 tuy nhiên 2 biến này là hai biến cục bộ nên chỉ được sử dụng trong phạm vi hàm main() và chúng sẽ không được dùng vào việc tính tổng trong hàm sum()
  • Biến toàn cục a, b ở đầu chương trình được sử dụng để tính tổng trong hàm sum() và ngoài ra còn được sử dụng trong tất cả phạm vi của các hàm khác. Các bạn có thể tự sử dụng các biến cục bộ vào hàm main() hay một hàm nào đó bất kì do các bạn định nghĩa