Lớp lưu trữ trong lập trình C

C

Lớp lưu trữ trong C là gì? Ý nghĩa của lớp lưu trữ trong C như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!

Lớp lưu trữ trong C được dùng để mô tả các đặc điểm của một biến/hàm. Những tính năng này về cơ bản bao gồm phạm vi, hiển thị và thời gian tồn tại, giúp người dùng theo dõi sự hiện diện của một biến cụ thể trong thời gian chạy một chương trình.

Ngôn ngữ C sử dụng 4 class lưu trữ:

  • Auto
  • Extern
  • Static
  • Register

Lớp lưu trữ auto trong C

Đây là lớp lưu trữ mặc định cho tất cả các biến được khai báo bên trong một hàm hay một khối. Vì thế, từ khóa auto hiếm khi được dùng lúc viết chương trình. Bạn chỉ có thể truy cập biến auto trong khối/hàm đã được khai báo và không nằm bên ngoài chúng (xác định phạm vi). Tất nhiên, bạn có thể truy cập chúng trong các khối lồng nhau ở khối/hàm cha nơi biến auto được khai báo.

Tuy nhiên, chúng có thể được truy cập bên ngoài phạm vi cũng như dùng khái niệm pointer được cung cấp bằng cách trỏ tới vị trí bộ nhớ chính xác tại nơi cư trú các biến. Mặc định, chúng được gắn giá trị rác ở bất kỳ nơi được khai báo.

Ví dụ:

{
   int diemthi;
   auto int diemthi;
}

Tuy nhiên, chúng có thể được truy cập bên ngoài phạm vi cũng như dùng khái niệm pointer được cung cấp bằng cách trỏ tới vị trí bộ nhớ chính xác tại nơi cư trú các biến. Mặc định, chúng được gắn giá trị rác ở bất kỳ nơi được khai báo.

Ví dụ trên để định nghĩa hai biến trong cùng một lớp lưu trữ, auto có thể được sử dụng bên trong hàm, ví dụ biến cục bộ.

Lớp lưu trữ register trong C

Lớp lưu trữ register có thể được sử dụng để định nghĩa biến cục bộ và có thể được lưu trữ trong một vùng đăng ký thay vì RAM. Điều này nghĩa là biến này có cỡ tối đa tương đương với cỡ đăng ký.

{
   register int  hocphi;
}

Lớp lưu trữ register chỉ được sử dụng cho biến mà yêu cầu truy cập nhanh như bộ đếm. Chú ý rằng định nghĩa ‘register’ không đồng nghĩa với biến đó có thể lưu trữ trong một thanh ghi. Nó nghĩa là có thể lưu trữ trong thanh ghi phụ thuộc vào phần cứng và với các hạn chế nhất định.

Lớp lưu trữ static trong C

Lớp lưu trữ static hướng dẫn trình biên dịch giữ các giá trị biến cục bộ tồn tại trong thời gian sống của chương trình thay vì việc tạo ra và hủy nó mỗi lần chạy qua phạm vi đó. Do đó, tạo một biến cục bộ static cho phép chúng lưu trữ các giá trị với các hàm gọi.

Lớp static này có thể được áp dụng cho biến toàn cục. Khi việc này diễn ra, nó gây ra phạm vi của biến được giới hạn trong file mà nó khai báo.

Trong lập trình C, khi static được sử dụng ứng với lớp, nó dẫn đến chỉ có một bản copy của lớp khai báo được chia sẻ bởi tất cả các đối tượng sử dụng lớp này.

#include <stdio.h> 
/* phan khai bao ham */
void ham(void); 
static int biendem = 4; /* day la bien toan cuc */ 
main()
{
   while(biendem--)
   {
      ham();
   }
   printf("===========================\n");
   printf("QTM chuc cac ban hoc tot! \n");
   return 0;
}
/* phan dinh nghia ham */
void ham( void )
{
   static int i = 6; /* bien cuc bo static */
   i++;
   printf("i co gia tri la %d va biendem co gia tri la %d\n", i, biendem);
}

Bạn có thể chưa hiểu ví dụ này này bởi vì bạn có sử dụng biến toàn cục, sẽ được giới thiệu ở bài tới. Biên dịch và chạy chương trình C trên để xem kết quả:

Lớp lưu trữ extern trong C

Lóp lưu trữ extern được sử dụng để đưa tham chiếu đến các biến toàn cục mà được nhìn thấy bởi tất cả các file chương trình.

Khi bạn có nhiều file và bạn định nghĩa các biến cục bộ hoặc hàm, nó sẽ được sử dụng ở các file khác. Để hiểu vấn đề này, extern được sử dụng để khai báo biến toàn cục hoặc hàm ở file khác.

Từ khóa extern được sử dụng khi hai hoặc nhiều file chia sẻ chung một biến hoặc hàm như ví dụ dưới đây:

File đầu tiên: file1.c

#include <stdio.h> 
int biendem ;
extern void ham_extern(); 
main()
{
   biendem = 5;
   ham_extern();
}

File thứ 2: file2.c

#include <stdio.h> 
extern int biendem; 
void ham_extern(void)
{
   printf("biendem co gia tri la %d\n", biendem);
}
Tại đây, extern là từ khóa được sử dụng để khai báo biendem ở dòng thứ hai nơi nó được định nghĩa ở file thứ nhất, main.c . Bây giờ, nếu bạn đang sử dụng command prompt, bạn biên dịch 2 file như sau:
 $gcc main.c support.c
Nó sẽ cung cấp chương trình thực thi a.out, khi chương trình này được chạy sẽ in ra kết quả sau đây:
5

Leave a Reply

Your email address will not be published. Required fields are marked *