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


Đăng ký nhận thông báo về những video mới nhất

Một lớp lưu trữ xác định phạm vi (khả năng hiển thị - visibility) và thời gian tồn tại của các biến và/hoặc hàm trong chương trình C++. Các chỉ định này đứng trước kiểu mà chúng sửa đổi. Dưới đây là các lớp lưu trữ có thể được sử dụng trong Chương trình C++:

Lớp lưu trữ auto

Đây là lớp lưu trữ mặc định cho tất cả các biến cục bộ.

{
  int mount;
  auto int month;
}

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

Lớp lưu trữ register

Lớp lưu trữ register được sử dụng để xác định các biến cục bộ cần được lưu trữ trong thanh ghi thay vì RAM. Điều này có nghĩa là biến có kích thước tối đa bằng kích thước thanh ghi (thường là một từ) và không thể áp dụng toán tử '&' cho nó (vì nó không có vị trí bộ nhớ).

{
  register int  miles;
}

Thanh ghi chỉ nên được sử dụng cho các biến yêu cầu truy cập nhanh như bộ đếm. Cũng cần lưu ý rằng việc xác định 'register' không có nghĩa là biến sẽ được lưu trữ trong một thanh ghi. Nó có nghĩa là nó CÓ THỂ được lưu trữ trong một thanh ghi tùy thuộc vào phần cứng và các hạn chế triển khai.

Lớp lưu trữ static

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

Bổ từ static cũng có thể được áp dụng cho các biến toàn cục. Khi điều này được thực hiện, nó khiến phạm vi của biến đó bị hạn chế đối với tệp mà nó được khai báo.

Trong C ++, khi static được sử dụng trên một thành viên dữ liệu của lớp, nó khiến chỉ một bản sao của thành viên đó được chia sẻ bởi tất cả các đối tượng của lớp nó.

#include <stdio.h>

// khai báo hàm
void func(void);

static int count = 10; /* biến toàn cc */

main() {
  while(count--) {
    func();
  }

  return 0;
}

// đnh nghĩa hàm
void func( void ) {
  static int i = 5; // biến static cc b  i++;
  printf("\ni = %d",i);
  printf(", count = %d",count);
}

Kết quả:

i = 6, count = 9
i = 7, count = 8
i = 8, count = 7
i = 9, count = 6
i = 10, count = 5
i = 11, count = 4
i = 12, count = 3
i = 13, count = 2
i = 14, count = 1
i = 15, count = 0

Lớp lưu trữ extern

Lớp lưu trữ extern được sử dụng để cung cấp một tham chiếu của một biến toàn cục hiển thị cho TẤT CẢ các tệp chương trình. Khi bạn sử dụng 'extern', biến không thể được khởi tạo vì tất cả những gì nó làm là trỏ tên biến vào vị trí lưu trữ đã được xác định trước đó.

Khi bạn có nhiều tệp và bạn xác định một biến hoặc hàm toàn cục, biến này cũng sẽ được sử dụng trong các tệp khác, thì extern sẽ được sử dụng trong tệp khác để cung cấp tham chiếu của biến hoặc hàm đã xác định. Chỉ để hiểu extern được sử dụng để khai báo một biến hoặc hàm toàn cục trong một tệp khác.

Bổ từ extern thường được sử dụng nhất khi có hai hoặc nhiều tệp chia sẻ cùng các biến hoặc hàm toàn cục như được giải thích ở ví dụ dưới.

File 1: main.c

#include<stdio.h>

int count ;
extern void write_extern();

main() {
  count = 5;
  write_extern();
}

File 2: support.c

#include<stdio.h>

extern int count;

void write_extern(void) {
  printf("\nCount is %d",count);
}

Ở đây, từ khóa extern đang được sử dụng để khai báo biến count trong tệp khác. Bây giờ biên dịch hai tệp này như sau:

$g++ main.c support.c -o write

Điều này sẽ tạo ra chương trình thực thi ghi (write), hãy thử thực hiện ghi và kiểm tra kết quả như sau:

$./write
5

Bài viết này được đóng góp bởi LongDT. Nếu bạn thích V1Study và muốn đóng góp, bạn gửi bài viết về địa chỉ [email protected] hoặc gửi vào Zalo 0986.589.410. Bài viết của bạn sẽ xuất hiện sau khi được duyệt và bạn có thể trợ giúp những người học khác.
« Prev
Next »
Copied !!!