1.Phạm Vi Global và Local
Phạm vi toàn cục - Global : Biến được khai báo bên ngoài hàm main và có thể được truy cập tại bất cứ đâu trong chương trình C
Phạm vi địa phương - Local : Biến được khai báo trong main hoặc trong các hàm con, biến này chỉ có thể truy cập bên trong hàm mà nó được khai báo
Ví dụ 1 : Biến toàn cục
#include "stdio.h" int n = 28; // global void printNumber(){ printf("Gia tri cua n : %d\n", n); } int main(){ printf("Gia tri cua n : %d\n", n); printNumber(); return 0; }
Output :
Gia tri cua n : 28 Gia tri cua n : 28
Ví dụ 2 : Biến địa phương
#include "stdio.h" void printNumber(){ int n = 1000; printf("%d\n", n); } int main(){ printNumber(); printf("%d\n", n); return 0; }
Output :
error: 'n' was not declared in this scope
Giải thích : Biến n được khai báo bên trong hàm printNumber() nên nó chỉ có thể sử dụng bên trong hàm này.
Ví dụ 3 : Biến toàn cục và biến địa phương cùng tên
Nếu trong hàm của bạn có biến cùng tên với biến toàn cục thì khi bạn sử dụng biến cùng tên này chương trình sẽ ưu tiên sử dụng biến cục bộ.
#include "stdio.h" int n = 28; //global void printNumber(){ int n = 1000; // local printf("Gia tri cua n trong ham : %d\n", n); } int main(){ printNumber(); int n = 2000; // local printf("Gia tri cua n trong ham main : %d\n", n); return 0; }
Output :
Gia tri cua n trong ham : 1000 Gia tri cua n trong ham main : 2000
2.Phạm Vi Đóng Mở Ngoặc Nhọn
Khi bạn khai báo biến bên trong đóng mở ngoặc nhọn (enclosing scope) của for, if, else, while... thì chương trình sẽ tạo ra 1 biến mới và biến này chỉ có thể sử dụng trong phạm vi mà nó được khai báo.
Khi phạm vi kết thúc thì biến sẽ bị hủy và không thể sử dụng được nữa.
Khi bạn có 3 biến cùng tên trong 3 phạm vi : Toàn cục, địa phương và mở ngoặc nhọn thì khi truy cập biến trong phạm vị đóng mở ngoặc nhọn thì thứ tự sẽ là mở ngoặc nhọn rồi tới địa phương và cuối cùng là phạm vi toàn cục. Mặc dù 3 biến này cùng tên nhưng do phạm vi khai báo khác nhau nên đây là 3 biến khác nhau.
Ví dụ 1 :
#include "stdio.h" int main(){ { int n = 28; printf("%d\n", n); // 28 } printf("%d\n", n); // error return 0; }
Output :
error: 'n' was not declared in this scope
Giải thích : Biến n được khai báo trong 1 đóng mở ngoặc nhọn nên khi phạm vi đóng mở ngoặc nhọn này kết thúc thì bạn không thể truy cập vào n được nữa.
Ví dụ 2 :
#include "stdio.h" int main(){ int n = 100; printf("%d\n", n); // 100 { int n = 28; printf("%d\n", n); // 28 } return 0; }
Output :
100 28
Ví dụ 3 :
#include "stdio.h" int n = 100; void printNum(){ printf("%d\n", n); // global } int main(){ printNum(); int n = 200; printf("%d\n", n); // local { int n = 300; printf("%d\n", n); // enclosing scope } return 0; }
Output :
100 200 300