Phạm vi cục bộ (Local Scope)
Biến khai báo trong khối (block) chỉ nhìn thấy trong khối đó, vô hình bên ngoài.
Phạm vi toàn cục (Global Scope)
Biến khai báo ngoài mọi hàm, nhìn thấy đến cuối chương trình.
Ví dụ biến toàn cục
#include <stdio.h>
int r = 50; // global
int main() {
int p = 30; // local main
printf("p=%d, r=%d\n", p, r);
fun();
return 0;
}
void fun() {
printf("r=%d\n", r); // truy cập global r
}
Kết quả
p=30, r=50 r=50
Quy tắc phạm vi liên quan đến hàm
- Biến trong thân hàm = biến cục bộ, chỉ tồn tại trong hàm đó.
- Kết thúc hàm → biến cục bộ hủy.
- Biến ngoài hàm = biến toàn cục, mọi hàm truy cập được.
Ví dụ: Hoán đổi thất bại (truyền giá trị)
#include <stdio.h>
void swap(int a, int b) {
int c = a; a = b; b = c; // chỉ đổi bản sao
}
int main() {
int a=10, b=20;
printf("Truoc: a=%d, b=%d\n", a, b);
swap(a, b);
printf("Sau: a=%d, b=%d\n", a, b); // không đổi
return 0;
}
Kết quả
Truoc: a=10, b=20 Sau: a=10, b=20
Ví dụ: Hoán đổi thành công (biến toàn cục)
#include <stdio.h>
int a=10, b=20; // global
void swap() {
int c = a; a = b; b = c; // sửa trực tiếp global
}
int main() {
printf("Truoc: a=%d, b=%d\n", a, b);
swap();
printf("Sau: a=%d, b=%d\n", a, b);
return 0;
}
Kết quả
Truoc: a=10, b=20 Sau: a=20, b=10