Biến địa phương là gì

Lazi - Người trợ giúp bài tập về nhà 24/7 của bạn

  • Hỏi 15 triệu học sinh cả nước bất kỳ câu hỏi nào về bài tập
  • Nhận câu trả lời nhanh chóng, chính xác và miễn phí
  • Kết nối với các bạn học sinh giỏi và bạn bè cả nước

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 hướng dẫn.

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ánhBiến cục bộBiến toàn cầu
Tờ khaiCá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 viTrong 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ậpChỉ đượ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.

  1. 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".
  2. 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'.
  3. 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.
  4. 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.

Cho chương trình sau: PROGRAM VI_DU        VAR             x : Integer ;        Procedure A ;            Var                Y : Integer ;             Procedure AA ;                Var                    M, N : Integer ;                Begin                  …                End ;             Procedure AB ;                Var                     M, N : Integer ;                Begin                   …                End ;             Begin                 …             End ; {Procedure A}         Procedure B ;             Var                 X, Z : Integer ;             Procedure BA ;                 Begin                     …                 End ;             Begin                  …             End ; {Procedure B}         BEGIN             …         END. {Chương trình chính } Trong PROGRAM VI_DU, chương trinh con A và B có mức là 1, chương trình con AA, AB, BA có mức là 2.

Sau đây là một số qui tắc sử dụng:

• Tầm tác dụng của một tên [biến, hằng, kiểu...] được xác định bằng mức Bloc trong đó tên được khai báo và bằng các mức Bloc khác có mức cao hơn và nằm trong Bloc chứa khai báo. ■ Ví dụ : Trong PROGRAM VI_DU, biến Y được khai báo trong CTC A [có mức là 1]. Như vậy biến Y có thể được sử dụng ở trong CTC A [là nơi khai báo] và trong CTC AA và AB [là 2 CTC có mức cao hơn và nằm trong CTC A]. Ngoài ra Y không thể được sử dụng ở CTC B, BA, BB vì chúng không phải là CTC của A. • Tầm tác dụng của các biến khai báo ở mức 0 [chương trình chính] là toàn bộ chương trình. • Ở các mức khác nhau của các CTC, ta có thể khai báo một biến có cùng tên với biến ở mức khác. Tên biến này không phải là một biến duy nhất mà là hai biến khác nhau với tầm tác dụng khác nhau. Ví dụ trong PROGRAM VI_DU, CTC B có biến địa phương X và trong chương trình chính có biến toàn cục cũng có là X. Khi đó trong CTC thì biến X địa phương có tác dụng, còn khi CTC kết thúc thì biến toàn cục lại lấy lại tác dụng của nó. Hãy xét kỹ ví dụ cụ thể sau: PROGRAM TAM_TAC_DUNG] ;      Var I : integer ; {biến 1 địa phương}      Begin           I := 7 ; writein [1:6];      End ;      Begin           I := 5 ;           Writeln [1:6];           DIA_PHUONG ;          Writein [i : 6] ;       End. Kết quả cho ra : 5 {giá trị của I toàn cục} 7 {giá trị của I địa phương} 5 {giá trị của I toàn cục} Tên biến I được dùng cho cả biến toàn cục và biến địa phương. Đầu tiên biến I toàn cục nhận giá trị bằng 5. Sau đó thủ tục DIA_PHUONG được gọi. Vì thủ tục này cũng có biến tên là I [biến địa phương] nên biến I toàn cục được xem như tạm bị treo không dùng đến. Biến địa phương lấy giá trị bằng 7. Sau khi kết thúc CTC, biến I địa phương bị mất và biến I toàn cục lại được khôi phục lại tác dụng. Tất nhiên nó vẫn giữ giá trị bằng 5 là giá trị có được trước khi gọi thủ tục DIA_PHUONG.

Trường hợp trong thủ tục DIA_PHUONG, ta muốn chiếu đến biến I toàn cục, ta vẫn có thể dùng nó bằng cách chỉ rõ tên chương trình ngoài tên biến ; TAM_TAC_DUNG. i. Cách tham chiếu như trên cũng tương tự như khi ta chỉ ra đường dẫn trực tiếp trên DOS.

Video liên quan

Chủ Đề