Phạm vi toàn cục (Global Scope)
Biến khai báo ngoài khối, nhìn thấy đến hết chương trình.
#include <stdio.h>
int c = 30; // global
int main() {
int a = 10;
printf("a=%d, c=%d\n", a, c);
fun();
return 0;
}
void fun() {
printf("c=%d\n", c);
}
Kết quả
a=10, c=30 c=30
Phạm vi cục bộ (Local Scope)
Biến trong khối/hàm chỉ truy cập trong khối đó, không tồn tại bên ngoài.
#include <stdio.h>
int main() {
int i = 1; // local main
printf("%d ", i);
{
int j = 2; // local block
printf("%d ", j);
}
// j không truy cập được ở đây
return 0;
}
Kết quả
1 2
Trùng tên biến trong khối lồng nhau
Khai báo lại cùng tên trong khối con → che khuất biến ngoài.
int main() {
{ int i = 1; printf("%d ", i); }
{ int i = 2; printf("%d ", i); }
}
Kết quả
1 2
Che khuất (Shadowing)
int main() {
int i = 1;
{ int i = 2; printf("%d", i); } // in 2
}
Kết quả
2
Biến ngoài truy cập được trong khối con (nếu không khai báo lại)
int main() {
int i = 1;
{ int j = 2; printf("%d %d", j, i); } // in 2 1
}
Kết quả
2 1