[Học lập trình C++] Chương 1: 1.4c – Làm quen với phạm vi cục bộ
1.4c – Làm quen với
phạm vi cục bộ
Bạn đã thấy trong bài
học 1.3 rằng khi mà CPU thực thi câu lệnh int x; điều này làm cho biến được tạo
ra.
Một câu hỏi tự nhiên
là, “vậy khi nào thì một biết đã được tạo bị hủy?”
Một phạm vi của một
biến xác định ai có thể nhìn thấy và sử dụng biến trong suốt thời gian nó được
tạo ra. Cả tham số hàm và biến được khai báo bên trong thân hàm có một phạm vi
cục bộ. Đó là, những biến đó chỉ có thể được nhìn thấy và được sử dụng bên
trong hàm khai báo chúng. Biến cục bộ được tạo ra tại phần trên của hàm và bị hủy
khi hàm kết thúc.
Xem xét hàm sau:
#include <iostream>
int add(int x, int y) // x and y are created here
{
// x and y are visible/usable
within this function only
return x + y;
} // x and y are destroyed here
int main() // a and b are created here
{
int a = 5; // a is initialized
here
int b = 6; // b is initialized here
// a and b are usable within
this function only
std::cout << add(a, b) << std::endl; //
calls function add() with x=a and y=b
return 0;
} // a and b are destroyed here
Trong hàm add(), tham
số x và y được tạo ra khi hàm được gọi, chỉ có thể được nhìn/sử dụng trong hàm
add(), và bị hủy khi kết thúc hàm add(). Biến a và b được tạo trong hàm main,
chỉ có thể được nhìn thấy/sử dụng trong hàm main(), và bị hủy khi kết thúc hàm
main().
Để bạn hiểu sâu hơn,
hãy đi theo từng bước chi tiết của chương trình. Những sự kiện xảy ra theo thứ
tự sau:
Main() được thực thi.
Biến a trong hàm main
được tạo ra và được gán giá trị 5
Biến b trong hàm main
được tạo ra và được gán giá trị 6
Hàm add() được gọi với
giá trị 5 và 6 cho tham số
Biến x được tạo ra và
được gán giá trị 5
Biến y được tạo ra và
được gán giá trị 6
Toán tử + cộng 5 và 6
tạo ra giá trị 11
Add trả về giá trị 11
cho trình gọi nó (main)
Biến x và y của add bị
hủy
Main in giá trị 11 ra
màn hình
Main trả về giá trị 0
cho hệ thống
Biến a và biến b của
main bị hủy
Chú ý rằng nếu hàm
add() được gọi 2 lần, tham số x và y sẽ được tạo và hủy hai lần. Trong chương
trình với nhiều hàm, biến được tạo ra và hủy thường xuyên.
Phạm vi cục bộ ngăn
ngừa xung đột tên
Trong ví dụ phía
trên, thật dễ dàng để thấy một biến a và b khác hai biến x và y.
Bây giờ xem xét
chương trình sau:
#include <iostream>
int add(int x, int y) // add's x is created here
{
return x + y;
} // add's x is destroyed here
int main() // main's x is created here
{
int x = 5;
int y = 6;
std::cout << add(x, y) << std::endl; //
the value from main's x is copied into add's x
return 0;
} // main's x is destroyed here
Trong ví dụ này, tất
cả chúng ta thực hiện bởi thay đổi tên của biến a và b trong hàm main() và
add() bây giờ đều là x và y. Tại sao lại không xảy ra xung đột tên? Bởi vì x và
y của hàm main có phạm vi cục bộ, add() không thể nhìn thấy chúng. Cả add() và
main() đều không biết rằng hàm kia có biến trùng tên!
Điều này ngăn ngừa
xung đột tên, bởi vì mỗi hàm không cần phải biết hoặc quan tâm tên biên của hàm
khác. Điều này cũng ngăn ngừa hàm có thể vô tình hoặc cố ý thay đổi giá trị nằm
bên trong hàm khác.
Chúng ta sẽ thảo luận
vì phạm vi cục bộ nhiều hơn ở chương 4.
Nguồn: learncpp.com
Nguồn: learncpp.com
Nhận xét
Đăng nhận xét