Quy tắc phạm vi trong C
Một phạm vi trong bất kỳ chương trình nào là một khu vực trong chương trình nơi một biến được định nghĩa tồn tại và bên ngoài phạm vi đó thì biến không thể được truy cập. Có 3 nơi mà biến có thể được khai báo trong Ngôn ngữ C:
Bên trong một hàm hoặc một khối code được gọi là biến cục bộ.
Bên ngoài tất cả các hàm và được gọi là biến toàn cục.
Trong định nghĩa các hàm, các tham số được gọi là các tham số chính thức – formal.
Bây giờ chúng ta cùng tìm hiểu các biến cục bộ và biến toàn cục và các tham số chính thức là gì.
Biến cục bộ trong C
Biến cục bộ được khai báo bên trong một hàm hoặc khai báo bên trong một khối code. Chúng được sử dụng bởi các lệnh trong hàm hoặc khối code đó. Biến cục bộ không được sử dụng bên ngoài của hàm. Dưới đây là ví dụ về việc sử dụng biến cục bộ. Tại đây biến a,b và c được sử dụng trong hàm main():
#include <stdio.h>
int main ()
{
/* Khai bao bien cuc bo */
int a, b;
int c;
/* khoi tao thuc su */
a = 10;
b = 20;
c = a + b;
printf (“Gia tri cua a = %d, b = %d va c = %d\n”, a, b, c);
return 0;
}
Biến toàn cục trong C
Biến toàn cục được định nghĩa bên ngoài một hàm, thường là phần đầu của chương trình. Biến toàn cục có thể chứa các giá trị trong thời gian chương trình chạy và có thể được truy cập bởi bất kì hàm nào định nghĩa trong chương trình.
Một biến toàn cục có thể được truy cập bởi bất kì hàm nào. Điều đó nghĩa là biến toàn cục được sử dụng suốt chương trình sau khi nó khai báo. Dưới đây là ví dụ minh họa cho biến cục bộ và toàn cục:
#include <stdio.h>
/* Khai bao bien toan cuc */
int g;
int main ()
{
/* Khai bao bien cuc bo */
int a, b;
/* khoi tao bien thuc su */
a = 10;
b = 20;
g = a + b;
printf (“Gia tri cua a = %d, b = %d va g = %d\n”, a, b, g);
return 0;
}
Một chương trình có thể có biến toàn cục và cục bộ trùng tên. Trong trường hợp đó biến cục bộ bên trong hàm sẽ được ưu tiên sử dụng. Dưới đây là ví dụ:
#include <stdio.h>
/* Khai bao bien toan cuc */
int g = 20;
int main ()
{
/* khai bao bien cuc bo */
int g = 10;
printf (“Gia tri cua g = %d\n”, g);
printf(“\n===========================\n”);
printf(“chuc cac ban hoc tot! \n”);
return 0;
}
Khi chương trình C trên được biên dịch và chạy, kết quả sau sẽ in ra:
Tham số chính thức trong C
Tham số hàm, tham số chính thức được coi như biến local bên trong hàm đó và thường có giá trị ưu tiên hơn biến toàn cục. Dưới đây là ví dụ:
#include <stdio.h>
/* khai bao bien toan cuc */
int a = 20;
/* khai bao ham */
int hamtinhtong(int a, int b);
int main ()
{
/* khai bao bien cuc bo trong ham main */
int a = 15;
int b = 25;
int c = 0;
printf (“Gia tri cua a trong ham main() = %d\n”, a);
c = hamtinhtong( a, b);
printf (“Gia tri cua c trong ham main() = %d\n”, c);
printf(“\n===========================\n”);
printf(“chuc cac ban hoc tot! \n”);
return 0;
}
/* ham de cong hai so nguyen */
int hamtinhtong(int a, int b)
{
printf (“Gia tri cua a trong ham hamtinhtong() = %d\n”, a);
printf (“Gia tri cua b trong ham hamtinhtong() = %d\n”, b);
return a + b;
}
Khi chương trình C trên được biên dịch và chạy, kết quả sau sẽ in ra:
Khởi tạo biến toàn cục và biến cục bộ
Khi biến toàn cục và biến cục bộ được định nghĩa, nó không được khởi tạo bởi chương trình, nó phải khởi tạo bởi chính bản thân bạn. Biến toàn cục thường khởi tạo tự động bởi chương trình khi bạn định nghĩa chúng như dưới đây:
Kiểu dữ liệu | Giá trị khởi tạo mặc định |
int | 0 |
char | ‘\0’ |
float | 0 |
double | 0 |
pointer | NULL |
Thường trong thực tế lập trình bạn nên khởi tạo các giá trị biến một cách chính xác, nếu không chương trình của bạn có thể gây ra những kết quả không mong muốn .