Biến toàn cục lưu ở đâu

Sự khác biệt giữa biến cục bộ và biến toàn cục - Công Nghệ

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

CĂN CỨ ĐỂ SO SÁNH BIẾN SỐ ĐỊA PHƯƠNG BIẾN TẦ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 hàm, bên trong chúng được khai báo.Trong suốt chương trình.
Giá trị
Biến cục bộ chưa được khởi tạo dẫn đến việc lưu trữ giá trị rác.Theo mặc định, biến toàn cục chưa được khởi tạo lưu trữ bằng 0.
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. Được truy cập bởi bất kỳ câu lệnh nào trong toàn bộ chương trình.
Chia sẻ dữ liệuKhông cung cấpTạo điều kiện
Đời sốngĐược tạo khi khối chức năng được nhập và bị phá 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ữ
Các 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 do trình biên dịch quyết định.
Truyền tham sốNhất thiết phải cóKhông bắt buộc đối với các biến toàn cục.
Các thay đổi trong một giá trị biến đổiBất kỳ sửa đổi nào được ngụ ý trong một biến cục bộ không ảnh hưởng đến các chức năng khác của chương trình.Những thay đổi được áp dụng trong biến toàn cục của một hàm phản ánh những thay đổi trong toàn bộ chương trì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ú:
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 ‘static’.

Định nghĩa về biến toàn cục

A 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ểm

Biến cục bộ


  • Lợi ích chính của biến cục bộ là không có sự thay đổi ngẫu nhiên dữ liệu. Biến được khai báo bên trong một khối và khối mã này sử dụng biến và tránh các tác dụng phụ không mong muốn.
  • Biến cục bộ sử dụng bộ nhớ trong một khoảng thời gian giới hạn, chỉ khi khối chứa biến được thực thi.

Biến toàn cầu

  • Biến toàn cục rất hữu ích khi bạn xử lý một số hàm trong chương trình thao tác trên cùng một dữ liệu.
  • Những thay đổi cần được áp dụng trong toàn bộ chương trình sẽ dễ dàng hơn thông qua việc triển khai một biến toàn cục.
  • Chúng ta có thể truy cập từ bất kỳ đâu hoặc thông qua bất kỳ chức năng ngẫu nhiên nào của chương trình.

Nhược điểm

Biến cục bộ

  • Phạm vi của biến cục bộ bị hạn chế.
  • Cấm chia sẻ dữ liệu.
  • Chúng không thể giữ lại dữ liệu giữa các lần gọi vì các biến cục bộ được tạo và loại bỏ với mỗi lần nhập và thoát khỏi khối. Tuy nhiên, công cụ sửa đổi tĩnh có thể được sử dụng để giữ lại các giá trị.

Biến toàn cầu

  • Việc sử dụng một số lượng lớn các biến toàn cục có thể dẫn đến việc tạo ra các lỗi chương trình.
  • Vấn đề chính mà nó gây ra là sự xuất hiện ngẫu nhiên của các thay đổi do các biến toàn cục phổ biến trong suốt chương trình.
  • Nó cũng có thể làm tăng nhu cầu tiến hành tái cấu trúc mã, đây là một quá trình rất rộng trong đó toàn bộ mã chương trình được cấu trúc lại.

Phần kết luận

Cả 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 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 = 7

Giả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:

  • Biến được khai báo bên trong một hàm hoặc block, ta gọi nó là biến cục bộ [local variable]
  • Biến được sử dụng như là tham số của hàm, ta gọi nó là tham số hình thức [formal parameter]
  • Biến được khai báo ở bên ngoài tất cả các hàm, ta gọi nó là biến toàn cục [global variable]

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ụ

#include using namespace std; int Tong[int a, int b] { int c = 0; // c la bien cuc bo c = a + b; { cout

Chủ Đề