Lớp lưu trữ C

Trong hướng dẫn này, bạn sẽ tìm hiểu về phạm vi và thời gian tồn tại của các biến cục bộ và toàn cục. Ngoài ra, bạn sẽ tìm hiểu về các biến tĩnh và đăng ký.

Mọi biến trong lập trình C đều có hai thuộc tính: kiểu và lớp lưu trữ.

Kiểu đề cập đến kiểu dữ liệu của một biến. Và, lớp lưu trữ xác định phạm vi, khả năng hiển thị và thời gian tồn tại của một biến.

Có 4 loại lớp lưu trữ:

  1. tự động
  2. bên ngoài
  3. tĩnh
  4. Đăng ký

Biến cục bộ

Các biến được khai báo bên trong một khối là biến tự động hoặc biến cục bộ. Các biến cục bộ chỉ tồn tại bên trong khối mà nó được khai báo.

Hãy lấy một ví dụ.

 #include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )

Khi bạn chạy chương trình trên, bạn sẽ gặp lỗi không khai báo số nhận dạng i. Đó là vì tôi được khai báo bên trong forkhối vòng lặp. Bên ngoài khối, nó không được khai báo.

Hãy lấy một ví dụ khác.

  int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() ) 

Trong ví dụ trên, n1 là cục bộ cho main()và n2 là cục bộ cho func().

Điều này có nghĩa là bạn không thể truy cập vào biến n1 bên trong func()vì nó chỉ tồn tại bên trong main(). Tương tự, bạn không thể truy cập biến n2 bên trong main()vì nó chỉ tồn tại bên trong func().

Biến toàn cầu

Các biến được khai báo bên ngoài tất cả các hàm được gọi là biến bên ngoài hoặc biến toàn cục. Chúng có thể truy cập từ bất kỳ chức năng nào bên trong chương trình.

Ví dụ 1: Biến toàn cục

 #include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); ) 

Đầu ra

 n = 7

Giả sử, một biến toàn cục được khai báo trong file1. Nếu bạn cố gắng sử dụng biến đó trong một tệp khác file2, trình biên dịch sẽ khiếu nại. Để giải quyết vấn đề này, từ khóa externđược sử dụng file2để chỉ ra rằng biến bên ngoài được khai báo trong một tệp khác.

Đăng ký biến

Các registertừ khóa được sử dụng để khai báo các biến đăng ký. Các biến thanh ghi được cho là nhanh hơn các biến cục bộ.

Tuy nhiên, các trình biên dịch hiện đại rất giỏi trong việc tối ưu hóa mã, và hiếm có cơ hội là việc sử dụng các biến đăng ký sẽ làm cho chương trình của bạn nhanh hơn.

Trừ khi bạn đang làm việc trên các hệ thống nhúng, nơi bạn biết cách tối ưu hóa mã cho ứng dụng nhất định, nếu không thì không cần sử dụng các biến đăng ký.

Biến tĩnh

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

 int tĩnh i;

Giá trị của một biến tĩnh vẫn tồn tại cho đến khi kết thúc chương trình.

Ví dụ 2: Biến tĩnh

 #include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); ) 

Đầu ra

 6 11

Trong lần gọi hàm đầu tiên, giá trị của c được khởi tạo bằng 1. Giá trị của nó được tăng lên 5. Bây giờ, giá trị của c là 6, được in trên màn hình.

Trong lần gọi hàm thứ hai, c không được khởi tạo lại thành 1. Đó là bởi vì c là một biến tĩnh. Giá trị c được tăng thêm 5. Bây giờ, giá trị của nó sẽ là 11, được in trên màn hình.

thú vị bài viết...