Các biến được phân loại thành biến 'cục bộ' và 'toàn cầu', đây là chủ đề chính của cuộc thảo luận của chúng tôi. Ở đây, điểm khác biệt chính giữa biến cục bộ và biến toàn cục là ở chỗ, biến cục bộ được khai báo bên trong khối chức năng, trong đó biến toàn cục được khai báo bên ngoài các hàm trong chương trình.
Chúng ta hãy nghiên cứu thêm một số khác biệt giữa một biến cục bộ và biến toàn cục cùng với biểu đồ so sánh.
Biểu đồ so sánh:
Cơ sở để so sánh | Biến cục bộ | Biến toàn cầu |
---|---|---|
Tờ khai | Các biến được khai báo bên trong một hàm. | Các biến được khai báo bên ngoài bất kỳ hàm nào. |
Phạm vi | Trong một chức năng, bên trong chúng được khai báo. | Xuyên suốt chương trình. |
Truy cập | Chỉ được truy cập bởi các câu lệnh, bên trong một hàm mà chúng được khai báo. | Truy cập bởi bất kỳ tuyên bố trong toàn bộ chương trình. |
Đời sống | Được tạo khi khối chức năng được nhập và hủy khi thoát. | Vẫn tồn tại trong toàn bộ thời gian chương trình của bạn đang thực thi. |
Lưu trữ | Biến cục bộ được lưu trữ trên ngăn xếp, trừ khi được chỉ định. | Được lưu trữ trên một vị trí cố định được quyết định bởi một trình biên dịch. |
Định nghĩa biến cục bộ
Một biến cục bộ luôn được khai báo bên trong một khối chức năng. Trong C, một biến cục bộ được khai báo khi bắt đầu một khối mã. Trong C ++, chúng có thể được khai báo ở bất cứ đâu trong khối mã trước khi sử dụng. Các biến cục bộ chỉ có thể được truy cập bởi các câu lệnh được viết bên trong một hàm trong đó biến cục bộ được khai báo. Chúng được bảo mật theo một nghĩa nào đó, chúng không thể được truy cập bởi bất kỳ chức năng nào khác của cùng một chương trình.
Biến cục bộ tồn tại cho đến khi khối của hàm được thực thi và do đó bị hủy sau khi thực thi thoát khỏi khối. Các biến cục bộ mất nội dung ngay khi thực thi rời khỏi khối mà chúng được khai báo.
Lý do đằng sau nó là các biến cục bộ được lưu trữ trên ngăn xếp trừ khi lưu trữ đặc biệt của chúng được chỉ định. Ngăn xếp có tính chất động và sự thay đổi vị trí bộ nhớ dẫn đến lý do tại sao biến cục bộ không giữ giá trị của chúng ngay khi khối của hàm tồn tại.
Chú thích:
Tuy nhiên, có một cách để giữ lại giá trị của biến cục bộ, bằng cách sử dụng công cụ sửa đổi 'tĩnh'.
Định nghĩa biến toàn cầu
Một biến toàn cục được khai báo bên ngoài tất cả các hàm có trong một chương trình. Không giống như các biến cục bộ, biến toàn cục có thể được truy cập bởi bất kỳ hàm nào có trong một chương trình. Các biến toàn cục không đáng tin cậy lắm vì giá trị của chúng có thể được thay đổi bởi bất kỳ chức năng nào có trong chương trình.
Các biến toàn cục vẫn tồn tại cho đến khi toàn bộ chương trình được thực thi hoàn toàn. Các biến toàn cục giữ lại các giá trị của chúng cho đến khi chương trình được thực thi. Lý do là chúng được lưu trữ trên một vùng bộ nhớ cố định, do trình biên dịch quyết định.
Biến toàn cầu rất hữu ích trong các tình huống có nhiều hàm đang truy cập vào cùng một dữ liệu. Sử dụng một số lượng lớn các biến toàn cục có thể có vấn đề, vì có thể có những thay đổi không mong muốn đối với giá trị của biến toàn cục.
Sự khác biệt chính giữa biến địa phương và toàn cầu.
- Các biến cục bộ được gọi là 'cục bộ' vì chúng chỉ được biết đến với các câu lệnh được viết trong một hàm bên trong mà chúng được khai báo và không được biết đến với bất kỳ hàm nào khác có bên ngoài khối hàm đó. Trong trường hợp biến toàn cục, chúng được biết đến với mọi chức năng có trong một chương trình; do đó, chúng được gọi là "toàn cầu".
- Các biến toàn cục giữ giá trị của chúng cho đến khi chương trình đang trong giai đoạn thực thi, vì chúng được lưu trữ tại một vị trí cố định do trình biên dịch quyết định. Biến cục bộ được lưu trữ trên ngăn xếp; do đó, về bản chất, chúng không giữ lại giá trị của chúng vì 'stack' là động, nhưng trình biên dịch có thể được định hướng để giữ giá trị của chúng, bằng cách sử dụng công cụ sửa đổi 'tĩnh'.
- Nếu một biến toàn cục và biến cục bộ được khai báo có cùng tên thì tất cả các câu lệnh của khối mã trong đó biến cục bộ được khai báo sẽ chỉ tham chiếu đến biến cục bộ và sẽ không ảnh hưởng đến biến toàn cục.
- Một biến cục bộ bị hủy khi điều khiển chương trình thoát ra khỏi khối trong đó biến cục bộ được khai báo. Tuy nhiên, một biến toàn cục bị hủy khi toàn bộ chương trình bị chấm dứt.
Phần kết luận:
Các biến cục bộ và toàn cầu đều được yêu cầu như nhau trong khi viết chương trình. Nhưng, việc khai báo một số lượng lớn các biến toàn cục có thể là vấn đề trong một chương trình lớn, vì nó có thể gây ra những thay đổi không mong muốn đối với biến toàn cục; và thật khó để xác định phần nào của chương trình đã tạo ra sự thay đổi đó. Do đó, người ta nên tránh khai báo các biến toàn cầu không cần thiết.