<php> the_title();</php>

Phạm Vi Sử Dụng Biến Cục Bộ

Biến cục bộ (global variable), biến toàn cục (local variable) hay biến tĩnh (biến static – static variable) là các loại biến có phạm vi sử dụng khác nhau trong ngôn ngữ lập trình C/C++. Bài viết này Lập Trình Không Khó sẽ cùng các bạn tìm hiểu về các khái niệm này. Tất nhiên chúng ta sẽ luôn có các ví dụ đi kèm giúp các bạn dễ hiểu nhất.

Biến Cục Bộ Và Biến Toàn Cục
Biến Cục Bộ Và Biến Toàn Cục

Video hướng dẫn phạm vi của biến

Trong ngôn ngữ lập trình C, mọi biến khi khai báo đều có 2 thuộc tính: kiểu dữ liệu (type) và lớp lưu trữ (storage class) của nó. Lớp lữu trữ ở đây chính là thuộc tính thể hiện phạm vi của biến: nơi nào có thể dùng biến đó và biến đó tồn tại trong bao lâu. Có 4 loại lớp lữu trữ:

  • automatic – tự động (cục bộ)
  • external – toàn cục
  • static – tĩnh
  • register

Video dưới đây sẽ trình bày cho bạn thấy rõ thế nào là biến toàn cục, biến cục bộ hay biến tĩnh. Bạn đọc nên xem video trước và thực hành theo hướng dẫn, sau đó tiếp tục đọc bài viết này nhé.

Dưới đây là source code trong video các bạn tham khảo nhé.

Code LocalVsGloal.cpp

/* 1. Biến toàn cục 2. Biến cục bộ 3. Biến static (biến tĩnh) */ // Biến toàn cục và biến cục bộ #include <stdio.h> int g_Number = 5; // biến toàn cục void Sum(int a, int b){ int sum = a + b; // biến cục bộ printf(“nSum = %d”, sum); } int main(){ int f = 5; // biến cục bộ int s = 10; // biến cục bộ Sum(f, s); }

Further Reference:  Chuyển Lời Dẫn Gián Tiếp

Code StaticVariable.cpp

#include <stdio.h> void display() { static int c = 0; printf(“%d “,c); c += 5; } int main() { display(); display(); }

Biến cục bộ là gì?

Các biến được khai báo trong 1 khối code thuộc lớp lưu trữ tự động (automatic or local variable) – hay chính là các biến cục bộ. Các biến cục bộ này chỉ tồn tại và chỉ có thể sử dụng bên trong khối code đó trong khi khối code đó đang thực thi.

Ở đây khối code được hiểu là thân của 1 hàm: hàm main() hoặc hàm con, thân của vòng lặp, cấu trúc if else, … Hãy xem ví dụ dưới đây:

#include <stdio.h> int main() { for (int i = 0; i < 5; ++i) { printf(“nLap trinh khong kho!”); } // Bạn sẽ gặp lỗi này khi chạy chương trình: // Error: i is not declared at this point printf(“%d”, i); return 0; }

Trong ví dụ trên, bởi vì biến i là một biến cục bộ của vòng lặp for. Do đó, bạn không thể sử dụng nó ở ngoài khối code của nó. Hơn nữa, khi kết thúc vòng lặp for thì biến i cũng đã không còn tồn tại.

Thử lấy một ví dụ khác nhé:

int main() { int n1; // n1 là biến cục bộ của hàm main() } void func() { int n2; // n2 là biến cục bộ của hàm func() }

Trong ví dụ này, biến n1 là biến cục bộ của hàm main() và n2 là biến cục bộ của hàm func(). Điều này có nghĩa là bạn không thể sử dụng biến n1 ở trong hàm func() và cũng không thể sử dụng biến n2 trong hàm main() được.

Further Reference:  Phat Giao Brvt

Biến toàn cục là gì?

Các biến được khai báo ở bên ngoài tất cả các hàm thì được gọi là biến toàn cục (external or global variable). Các biến toàn cục có thể truy xuất và sử dụng ở mọi hàm trong chương trình. Biến toàn cục cũng tồn tại cho tới khi chương trình kết thúc.

#include <stdio.h> void display(); int n = 5; // biến toàn cục int main() { ++n; display(); return 0; } void display() { ++n; printf(“n = %d”, n); }

Kết quả chạy:

n = 7

Quan sát ví dụ trên, bạn thấy biến n được khai báo bên ngoài tất cả các hàm. Khi đó biến n là một biến toàn cục nên nó có thể được sử dụng ở trong hàm main() và hàm display().

Chú ý: Nếu code của bạn có chia file, giả sử file thứ nhất có biến toàn cục được khai báo và bạn muốn sử dụng biến toàn cục đó trong file thứ 2 thì bạn cần dùng từ khóa extern trong file thứ 2 để trình biên dịch không báo lỗi. Ví dụ:

// file_1 int x = 50; // đây là biến toàn cục ha // file_2 muốn sử dụng biến x trong file_1 extern int x; printf(“%d”, x);

Biến register là gì?

Từ khóa register được dùng để khai báo các biến có tính chất như biến cục bộ nhưng mà nó được lưu trong thanh ghi của CPU. Do nó được lưu trong thanh ghi nên việc truy xuất sẽ nhanh hơn so với các biến được lưu trong bộ nhớ.

Further Reference:  Bài Hát Lễ Hội Búp Bê Nhật Bản

Tuy nhiên, nếu bạn lập trình phần mềm thông thường thì không cần dùng tới nó. Trừ khi bạn cần làm việc với các hệ thống nhúng hay các chương trình cần tối đa hóa hiệu năng thì mới cần dùng. Tối ưu bằng cách dùng biến register không thấm gì nếu thuật toán của bạn chưa được tối ưu.

Example: register int x=5;

Lưu ý là có một số trình biên dịch bỏ qua từ khóa này khi biên dịch code.

Biến tĩnh là gì?

Một biến tĩnh (biến static) được khai báo bằng cách sử dụng từ khóa static.

static int i;

Biến tĩnh sẽ tồn tại cho đến khi kết thúc chương trình dù nó là biến cục bộ hay toàn cục.

Ví dụ sử dụng biến tĩnh:

#include <stdio.h> void display(); int main() { display(); display(); } void display() { static int c = 1; c += 5; printf(“%d “,c); }

Kết quả chạy:

6 11

  • Ở lần gọi hàm đầu tiên, biến tĩnh c được khai báo và khởi tạo giá trị là 1. Sau đó nó tăng thêm 5 đơn vị => in ra 6.
  • Ở lần gọi hàm thứ 2, do biến tĩnh này đã được khai báo trước đó nên nó không được khai báo lại nữa. Nên là nó vẫn giữ giá trị là 6 và tăng thêm 5 đơn vị để in được ra 11.

Tài liệu tham khảo

  1. https://www.programiz.com/c-programming/c-storage-class
  2. http://ecomputernotes.com/what-is-c/types-and-variables/what-is-a-register-variable

Related Posts

Vở Bài Tập Toán Lớp 3 Tập 2 Trang 80

Video vở bài tập toán lớp 3 tập 2 trang 80 Với giải vở bài tập Toán lớp 3 trang 80 Bài 32: Mi-li-lít sách Kết nối…

Hưng Nhượng đại Vương Trần Quốc Tảng

Video hưng nhượng đại vương trần quốc tảng Sự nghiệp của Hưng Nhượng vương Trần Quốc Tảng nhìn từ một vài mâu thuẫn trong dòng họ nhà…

Chia đuôi Danh Từ Trong Tiếng đức

Chia đuôi Danh Từ Trong Tiếng đức

Chắc hẳn với những bạn đang theo học tiếng Đức thì hiện tượng chia đuôi tính từ theo giống/số/cách không còn xa lạ. Nhưng bạn đã biết…

Array_map Trong Php

Array_map Trong Php

Ba khái niệm map, filter và reduce rất phổ biến và hay dùng trong Functional Programming (lập trình hàm). Nhưng với lập trình viên PHP, một ngôn…

Etap 18.1 1

Etap 18.1 1

ETABS 18.1.1 là phần mềm mô hình, phân tích và thiết kế kết cấu của tòa nhà. ETABS đã tích hợp mọi giai đoạn trong quá trình…

Giải Vật Lí 8 Sbt

Giải Vở bài tập Vật lý lớp 8 trọn bộ có đáp án Giải Vở bài tập Vật lý lớp 8 trọn bộ được VnDoc đăng tải,…