Trong lập trình, bạn sẽ thường xuyên phải xử lý phạm vi của một biến. Phạm vi của một biến xác định xem bạn có thể truy cập và sửa đổi nó bên trong một khối mã cụ thể hay không
Trong hướng dẫn này, bạn sẽ tìm hiểu về phạm vi biến trong ngôn ngữ lập trình C. Bạn sẽ thấy một số ví dụ về mã để giúp bạn hiểu sự khác biệt giữa biến cục bộ và biến toàn cầu
Phạm vi của một biến là gì?
Trước khi tiếp tục tìm hiểu về phạm vi biến cục bộ và biến toàn cục, hãy hiểu ý nghĩa của phạm vi
Nói một cách đơn giản, phạm vi của một biến là thời gian tồn tại của nó trong chương trình
Điều này có nghĩa là phạm vi của một biến là khối mã trong toàn bộ chương trình nơi biến được khai báo, sử dụng và có thể được sửa đổi
Trong phần tiếp theo, bạn sẽ tìm hiểu về phạm vi biến cục bộ
Phạm vi biến cục bộ trong C – Nested Blocks
Trong phần này, bạn sẽ tìm hiểu cách các biến cục bộ hoạt động trong C. Trước tiên, bạn sẽ viết mã một vài ví dụ, sau đó bạn sẽ khái quát hóa nguyên tắc xác định phạm vi
▶ Đây là ví dụ đầu tiên
#include
int main[]
{
int my_num = 7;
{
//add 10 my_num
my_num = my_num +10;
//or my_num +=10 - more succinctly
printf["my_num is %d",my_num];
}
return 0;
}
Hãy hiểu những gì chương trình trên làm
Trong C, bạn phân định một khối mã bằng
//Output
my_num is 17
1. Các dấu ngoặc nhọn mở và đóng lần lượt biểu thị phần đầu và phần cuối của một khối- Hàm
2 có một biến số nguyên//Output my_num is 17
3 được khởi tạo thành 7 ở khối bên ngoài//Output my_num is 17
- Có một khối bên trong cố thêm 10 vào biến
3//Output my_num is 17
Bây giờ, biên dịch và chạy chương trình trên. Đây là đầu ra
//Output
my_num is 17
Bạn có thể thấy như sau
- Khối bên trong có thể truy cập giá trị của
3 được khai báo ở khối bên ngoài và sửa đổi nó bằng cách thêm 7 vào khối đó//Output my_num is 17
- Giá trị của
3 bây giờ là 17, như được chỉ ra trong kết quả//Output my_num is 17
Phạm vi biến cục bộ trong C – Khối lồng nhau Ví dụ 2
▶ Đây là một ví dụ khác có liên quan
________số 8_______- Trong chương trình này, hàm
2 có biến số nguyên//Output my_num is 17
3 ở khối bên ngoài//Output my_num is 17
- Một biến khác
9 được khởi tạo trong khối bên trong. Khối bên trong được lồng bên trong khối bên ngoài//Output my_num is 17
- Chúng tôi đang cố gắng truy cập và in giá trị của khối bên trong
9 ở khối bên ngoài//Output my_num is 17
Nếu bạn thử biên dịch đoạn mã trên, bạn sẽ nhận thấy rằng nó không biên dịch thành công. Và bạn sẽ nhận được thông báo lỗi sau
Line Message
9 error: 'new_num' undeclared [first use in this function]
Điều này là do biến9 được khai báo trong khối bên trong và phạm vi của nó bị giới hạn ở khối bên trong. Nói cách khác, nó là cục bộ của khối bên trong và không thể truy cập được từ khối bên ngoài//Output my_num is 17
Dựa trên các quan sát trên, hãy viết ra nguyên tắc chung sau đây để xác định phạm vi cục bộ của các biến
{
/*OUTER BLOCK*/
{
//contents of the outer block just before the start of this block
//CAN be accessed here
/*INNER BLOCK*/
}
//contents of the inner block are NOT accessible here
}
Phạm vi biến cục bộ trong C – Các khối khác nhau
Trong ví dụ trước, bạn đã học cách không thể truy cập các biến bên trong khối bên trong lồng nhau từ bên ngoài khối
Trong phần này, bạn sẽ hiểu phạm vi cục bộ của các biến được khai báo trong các khối khác nhau
#include
int main[]
{
int my_num = 7;
printf["%d",my_num];
my_func[];
return 0;
}
void my_func[]
{
printf["%d",my_num];
}
Trong ví dụ trên,
- Biến số nguyên
3 được khai báo bên trong hàm//Output my_num is 17
2//Output my_num is 17
- Bên trong hàm
2, giá trị của//Output my_num is 17
3 được in ra//Output my_num is 17
- Có một chức năng khác
6 cố gắng truy cập và in giá trị của#include int main[] { int my_num = 7; { int new_num = 10; } printf["new_num is %d",new_num]; //this is line 9 return 0; }
3//Output my_num is 17
- Khi thực thi chương trình bắt đầu với hàm
2, có một lệnh gọi tới ____8_______6 bên trong hàm//Output my_num is 17
2//Output my_num is 17
▶ Bây giờ biên dịch và chạy chương trình trên. Bạn sẽ nhận được thông báo lỗi sau
Line Message
13 error: 'my_num' undeclared [first use in this function]
Nếu bạn để ý, vào ngày
Line Message
9 error: 'new_num' undeclared [first use in this function]
1, hàm #include
int main[]
{
int my_num = 7;
{
int new_num = 10;
}
printf["new_num is %d",new_num]; //this is line 9
return 0;
}
6 đã thử truy cập biến //Output
my_num is 17
3 được khai báo và khởi tạo bên trong hàm //Output
my_num is 17
2Do đó, phạm vi của biến3 được giới hạn trong hàm//Output my_num is 17
2 và được cho là cục bộ của hàm//Output my_num is 17
2//Output my_num is 17
Chúng ta có thể biểu diễn khái niệm phạm vi cục bộ này một cách tổng quát như sau
{
/*BLOCK 1*/
// contents of BLOCK 2 cannot be accessed here
}
{
/*BLOCK 2*/
// contents of BLOCK 1 cannot be accessed here
}
Phạm vi toàn cầu của các biến trong C
Cho đến giờ, bạn đã học về phạm vi cục bộ của các biến C. Trong phần này, bạn sẽ học cách khai báo biến toàn cục trong C
▶ Hãy bắt đầu với một ví dụ
#include
int my_num = 7;
int main[]
{
printf["my_num can be accessed from main[] and its value is %d\n",my_num];
//call my_func
my_func[];
return 0;
}
void my_func[]
{
printf["my_num can be accessed from my_func[] as well and its value is %d\n",my_num];
}
Trong ví dụ trên,
- Biến
3 được khai báo bên ngoài các hàm//Output my_num is 17
2 và//Output my_num is 17
6#include int main[] { int my_num = 7; { int new_num = 10; } printf["new_num is %d",new_num]; //this is line 9 return 0; }
- Chúng tôi cố gắng truy cập
3 bên trong hàm//Output my_num is 17
2 và in giá trị của nó//Output my_num is 17
- Chúng ta gọi hàm
6 bên trong hàm#include int main[] { int my_num = 7; { int new_num = 10; } printf["new_num is %d",new_num]; //this is line 9 return 0; }
2//Output my_num is 17
- Hàm
6 cũng cố gắng truy cập giá trị của#include int main[] { int my_num = 7; { int new_num = 10; } printf["new_num is %d",new_num]; //this is line 9 return 0; }
3 và in nó ra//Output my_num is 17
Chương trình này biên dịch mà không có bất kỳ lỗi nào và đầu ra được hiển thị bên dưới
//Output
my_num can be accessed from main[] and its value is 7
my_num can be accessed from my_func[] as well and its value is 7
Trong ví dụ này, có hai chức năng –
//Output
my_num is 17
2 và #include
int main[]
{
int my_num = 7;
{
int new_num = 10;
}
printf["new_num is %d",new_num]; //this is line 9
return 0;
}
6Tuy nhiên, biến
//Output
my_num is 17
3 không cục bộ đối với bất kỳ chức năng nào trong chương trình. Một biến như vậy không phải là cục bộ của bất kỳ chức năng nào được cho là có phạm vi toàn cục và được gọi là biến toàn cụcNguyên tắc về phạm vi toàn cầu của các biến có thể được tóm tắt như hình dưới đây
//Output
my_num is 17
0kết thúc
Trong hướng dẫn này, bạn đã học được sự khác biệt giữa phạm vi cục bộ và phạm vi toàn cầu. Đây là hướng dẫn giới thiệu về phạm vi biến trong C
Trong C, có một số công cụ sửa đổi truy cập nhất định để kiểm soát mức độ truy cập mà các biến có. Bạn có thể thay đổi quyền truy cập bằng cách sử dụng các từ khóa tương ứng khi khai báo biến
Hẹn gặp lại tất cả các bạn trong bài hướng dẫn tiếp theo. Cho đến lúc đó, mã hóa hạnh phúc
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Tôi là một nhà phát triển và nhà văn kỹ thuật đến từ Ấn Độ. Tôi viết hướng dẫn về mọi thứ liên quan đến lập trình và máy học
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu