[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

Nhận xét

Bài đăng phổ biến