Biến toàn cục lưu ở đâu
Show
NộI Dung:Như chúng ta đã thảo luận trước đó, một biến là một tên, được đặt cho một vị trí bộ nhớ và nó phải được khai báo trước khi sử dụng. Trong C, tất cả các biến được khai báo khi bắt đầu chương trình. Trong C ++, các biến có thể được khai báo, tại bất kỳ thời điểm nào, trước khi chúng được sử dụng trong các lệnh.Các biến được phân loại thành biến "cục bộ" và "toàn cục", đây là chủ đề chính của cuộc thảo luận của chúng tôi. Ở đây, sự khác biệt chính giữa biến cục bộ và biến toàn cục là một biến cục bộ được khai báo bên trong một khối hàm. Ngược lại, 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 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
Định nghĩa về biến cục bộA 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 ở đầu khối mã. Trong C ++, chúng có thể được khai báo ở bất kỳ đâ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ằng các câu lệnh được viết bên trong một hàm trong đó các biến cục bộ được khai báo. Chúng được bảo mật theo nghĩa rằng, chúng không thể bị 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 đang được thực thi, và do đó bị hủy sau khi việc thực thi thoát khỏi khối. Các biến cục bộ mất nội dung của chúng ngay sau khi việc thực thi rời khỏi khối mà chúng được khai báo. Lý do đằng sau đó là các biến cục bộ được lưu trữ trên ngăn xếp trừ khi bộ lưu trữ đặc biệt của chúng được chỉ định. Ngăn xếp có bản chất là độ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 một hàm tồn tại. Ghi chú: Định nghĩa về biến toàn cụcA 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 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ể bị thay đổi bởi bất kỳ hàm nào có trong chương trình. Chúng 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ữ nguyên 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 nhớ cố định, do trình biên dịch quyết định. Biến toàn cục rất hữu ích trong các tình huống mà nhiều hàm đang truy cập cùng một dữ liệu. Việc 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 một biến toàn cục. Ưu điểmBiến cục bộ
Biến toàn cầu
Nhược điểmBiến cục bộ
Biến toàn cầu
Phần kết luậnCả hai biến cục bộ và toàn cục đều cần thiết và được yêu cầu như nhau trong khi viết chương trình. Tuy nhiên, việc khai báo một số lượng lớn các biến toàn cục có thể là một 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 một biến toàn cục; và sẽ trở nên khó xác định rằng phần nào của chương trình đã thực hiện thay đổi đó. Do đó, nên tránh khai báo các biến toàn cục không cần thiết.
Ở bài trước, chúng ta đã cùng tìm hiểu về kiểu dữ liệu, cách khai báo và sử dụng hằng, biến. Trong bài viết này, ta sẽ tìm hiểu kĩ hơn về biến. Trong ngôn ngữ C/C++, biến có 2 loại: biến toàn cục và biến cục bộ. Vậy chúng khác nhau ở điểm nào, phạm vi hoạt động của chúng ra sao ? Cùng xem nhé ! 1. Biến cục bộ (local variables)Biến cục bộ là biến: – Được khai báo bên trong một khối lệnh nào đó. – Chỉ được truy cập trong khối lệnh mà nó được khai báo và những “khối lệnh con” của khối lệnh đó. – Bị huỷ khi khối lệnh kết thúc. – Khi khai báo mà không khởi gán, biến cục bộ mang giá trị rác (Giá trị rác là giá trị bất kì nào đó không biết trước được). 2. Biến toàn cục (global variables)Biến toàn cục là biến: – Được khai báo bên ngoài tất cả các hàm, khai báo chung với các dòng khai báo thư viện. – Có thể truy cập ở bất cứ đâu trong chương trình. – Chỉ bị huỷ khi chương trình kết thúc. – Khi khai báo mà không khởi gán, biến toàn cục mang giá trị 0. Xét đoạn chương trình sau: int n; //biến toàn cục int main() { int x, y; //biến cục bộ trong hàm main x = 5; y = 6; { int x = 4; printf("x (in sub block) = %d\n", x); y += 1; } printf("n = %d\n", n); printf("x (int main block) = %d\n", x); printf("y = %d\n", y); }Kết quả xuất ra màn hình: n = 0 x (in sub block) = 4 x (in main block) = 5 y = 7Giải thích thêm: – Biến n là một ví dụ cho biến toàn cục, khi chỉ khai báo mà không khởi gán, giá trị của biến toàn cục là 0, và nó có thể được sử dụng bất cứ đâu trong chương trình. – Biến x, y là 2 ví dụ về biến cục bộ, trong đó: + Biến y có thể được gọi trong khối lệnh mà nó được khai báo và trong các khối lệnh con. + Nhưng với x, ta thấy bên trong khối lệnh con, ta lại khai báo một biến x khác. Mình xin nhấn mạnh là một biến x khác. Trong trường hợp khai báo này, mọi thao tác đối với x chỉ ảnh hướng đến x bên trong khối lệnh con, hoàn toàn không ảnh hưởng đến x ở hàm main ví chúng là hai biến độc lập nhau. Một số lưu ý (theo kinh nghiệm bản thân thôi nha): – Không nên dùng biến toàn cục nếu không thật sự cần thiết, vì nó có thể được gọi ở bất cứ đâu. Giả sử bạn viết một chương trình lớn, khoảng 1000 dòng code chẳng hạn, mà dùng đến biến toàn cục, thì thật sự rất khó để kiểm soát được biến toàn cục trong 1000 dòng code đó, không biết nó đã được gọi ở chỗ nào. – Hạn chế vấn đề “biến trùng tên” như trên để tránh sự “nhập nhằng”, khó hiểu cho chương trình. Trên đây là một số vấn đề về biến toàn cục và biến cục bộ, Cảm ơn các bạn đã theo dõi ! Trong bài này chúng ta sẽ tìm hiểu khái niệm về biến toàn cục và biến cục bộ trong C++, qua bài này sẽ giúp bạn hiểu rõ phạm vi của hai loại biến này. Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức. Trong C++ cũng như các ngôn ngữ lập trình khác, biến có thể khai báo ở 3 nơi như sau:
Trong bài học hôm nay chúng ta sẽ tìm hiểu về biến cục bộ (local variable) và biến toàn cục (global variable). Còn phần tham số hình thức (formal parameter) chúng ta sẽ tìm hiểu trong một bài khác. 1. Biến cục bộ trong C++Biến cục bộ (Local variable) là biến được khai báo bên trong một hàm hoặc một block. (Tất cả những gì ở giữa dấu "{" và "}" chúng ta gọi là block). Bài viết này được đăng tại [free tuts .net]
Biến cục bộ chỉ có phạm vi sử dụng bên trong một hàm hoặc một block. Chúng ta không thể truy cập và sử dụng biến cục bộ ở bên ngoài hàm hoặc block. Ví dụ 1: Chúng ta khai báo biến cục bộ c bên trong 1 hàm, và biến cục bộ d bên trong 1 block.
Ví dụ #includeVà kết quả sau khi thực thi đoạn code trên: Ví dụ 2: Chúng ta thử truy cập biến cục bộ bên ngoài một hàm, block
Ví dụ #includeVà kết quả sau khi thực thi đoạn code trên: 2. Biến toàn cục trong C++Biến toàn cục (global variable) là biến được khai báo bên ngoài tất cả các hàm. Chúng ta có thể truy cập và sử dụng biến toàn cục ở bất kỳ đâu của chương trình. Thường thì chúng ta nên khai báo biến toàn cục trên đầu của chương trình. Ví dụ: Chúng ta cùng xem ví dụ đơn giản có sử dụng biến toàn cục như sau:
Ví dụ #includeVà kết quả sau khi thực thi đoạn code trên như sau: 3. Giá trị mặc định của biến toàn cục và biến cục bộ trong C++Khi biến cục bộ được khởi tạo thì nó không được khởi tạo giá trị bởi hệ thống, chúng ta phải tự khởi tạo giá trị cho biến cục bộ. Khi biến toàn cục được khởi tạo thì nó được hệ thống khởi tạo giá trị một cách tự động. Giá trị khởi tạo cho biến toàn cục bởi hệ thống như sau:
4. Biến toàn cục và biến cục bộ cùng tên.Giả sử chúng ta có trường hợp biến cục bộ và biến toàn cục cùng tên, bên trong một hàm chúng ta muốn sử dụng biến cùng tên đó, thì giá trị của biến cục bộ hay biến toàn cục được sử dụng, chúng ta cùng tìm hiểu qua ví dụ sau:
Ví dụ #includeVà kết quả sau thực thi của đoạn code trên: Như vậy nếu biến cục bộ và biến toàn cục cùng tên, thì hàm sẽ lấy giá trị của biến cục bộ. Vậy chúng ta muốn lấy giá trị của biến toàn cục mà trùng tên với biến cục bộ thì như thế nào? Trong C++ cho phép chúng ta lấy giá trị của biến toàn cục trùng tên với biến cục bộ đó là sử dụng toán tử :: (scope resolution operator). Chúng ta cùng xem ví dụ sau:
Ví dụ #includeVà kết quả thực thi đoạn code trên: 5. Kết luậnNhư vậy chúng ta đã cùng tìm hiểu xong phạm vi biến toàn cục và biến cục bộ trong C++. Trong bài này chúng ta cần nhớ phạm vi sử dụng của biến toàn cục và biến cục bộ đó là biến cục bộ chỉ có phạm vi sử dụng trong một hàm hoặc một block mà biến đó khai báo, biến toàn cục có phạm vi sử dụng trong một chương trình, bất cứ hàm hoặc block nào điều có thể truy cập biến toàn cục. Một điều cần lưu ý ở đây là dù là biến toàn cục hay cục bộ thì chúng ta cần phải khai báo nó trước khi sử dụng. Trong bài tiếp theo chúng ta sẽ tìm hiểu về lớp lưu trữ trong C++. Các bạn nhớ theo dõi nhé. |