Các lớp lưu trữ trong C: auto, extern, static, đăng ký lớp trong C

Mục lục:

Anonim

Lớp lưu trữ trong C là gì?

Một lớp lưu trữ đại diện cho khả năng hiển thị và vị trí của một biến. Nó cho biết chúng ta có thể truy cập một biến từ phần mã nào. Một lớp lưu trữ trong C được sử dụng để mô tả những điều sau:

  • Phạm vi biến.
  • Vị trí mà biến sẽ được lưu trữ.
  • Giá trị khởi tạo của một biến.
  • Thời gian tồn tại của một biến.
  • Ai có thể truy cập một biến?

Vì vậy, một lớp lưu trữ được sử dụng để biểu diễn thông tin về một biến.

LƯU Ý: Một biến không chỉ được liên kết với một kiểu dữ liệu, giá trị của nó mà còn với một lớp lưu trữ.

Có tổng cộng bốn loại lớp lưu trữ tiêu chuẩn. Bảng dưới đây đại diện cho các lớp lưu trữ trong C.

Lớp lưu trữ Mục đích
Tự động Nó là một lớp lưu trữ mặc định.
bên ngoài Nó là một biến toàn cục.
tĩnh Nó là một biến cục bộ có khả năng trả về một giá trị ngay cả khi điều khiển được chuyển sang lời gọi hàm.
Đăng ký Nó là một biến được lưu trữ bên trong một thanh ghi.

Trong hướng dẫn về C này, bạn sẽ tìm hiểu các loại lớp lưu trữ khác nhau trong C với các ví dụ-

  • Lớp lưu trữ tự động trong C
  • Lớp lưu trữ Extern trong C
    • Tệp đầu tiên: main.c
    • Tệp thứ hai: original.c
  • Lớp lưu trữ tĩnh trong C
  • Đăng ký Lớp lưu trữ trong C

Lớp lưu trữ tự động trong C

Các biến được xác định bằng cách sử dụng lớp lưu trữ tự động được gọi là biến cục bộ. Auto là viết tắt của lớp lưu trữ tự động. Một biến nằm trong lớp lưu trữ tự động theo mặc định nếu nó không được chỉ định rõ ràng.

Phạm vi của một biến tự động chỉ được giới hạn với khối cụ thể. Một khi quyền kiểm soát vượt ra khỏi khối, quyền truy cập sẽ bị phá hủy. Điều này có nghĩa là chỉ khối trong đó biến tự động được khai báo mới có thể truy cập nó.

Từ khóa auto được sử dụng để xác định một lớp lưu trữ tự động. Theo mặc định, một biến tự động chứa một giá trị rác.

Example, auto int age;

Chương trình bên dưới định nghĩa một hàm có hai biến cục bộ

int add(void) {int a=13;auto int b=48;return a+b;}

Chúng tôi sử dụng một chương trình khác hiển thị mức phạm vi "mức độ hiển thị" cho các biến tự động trong mỗi mã khối độc lập với nhau:

#include int main( ){auto int j = 1;{auto int j= 2;{auto int j = 3;printf ( " %d ", j);}printf ( "\t %d ",j);}printf( "%d\n", j);}

ĐẦU RA:

 3 2 1 

Lớp lưu trữ Extern trong C

Extern là viết tắt của lớp lưu trữ bên ngoài. Lớp lưu trữ Extern được sử dụng khi chúng ta có các hàm hoặc biến toàn cục được chia sẻ giữa hai hoặc nhiều tệp.

Từ khóa 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 để cung cấp tham chiếu của biến hoặc hàm đã được xác định trong tệp gốc.

Các biến được xác định bằng cách sử dụng từ khóa extern được gọi là biến toàn cục. Các biến này có thể truy cập được trong suốt chương trình. Lưu ý rằng biến extern không thể được khởi tạo, nó đã được định nghĩa trong tệp gốc.

Example, extern void display();

Tệp đầu tiên: main.c

#include extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Tệp thứ hai: original.c

#include i=48;

Kết quả:

 value of the external integer is = 48

Để biên dịch và chạy mã trên, hãy làm theo các bước dưới đây

Bước 1) Tạo dự án mới,

  1. Chọn ứng dụng bảng điều khiển
  2. Nhấp vào Go

Bước 2) Chọn C và nhấp vào Tiếp theo

Bước 3) Nhấp vào Tiếp theo

Bước 4) Nhập chi tiết và nhấp vào Tiếp theo

Bước 5) Nhấp vào Kết thúc

Bước 6) Đặt mã chính như được hiển thị trong chương trình trước đó vào tệp main.c và lưu nó

Bước 7) Tạo một tệp C mới [File -> new -> Empty File, lưu (như original.c) và thêm nó vào dự án hiện tại bằng cách nhấp vào "OK" trong hộp thoại.

Bước 8) Đặt và lưu mã C của tệp original.c được hiển thị trong ví dụ trước mà không có hàm main ().

Bước 9) Xây dựng và chạy dự án của bạn. Kết quả được hiển thị trong hình tiếp theo

Lớp lưu trữ tĩnh trong C

Các biến tĩnh được sử dụng trong hàm / tệp như các biến tĩnh cục bộ. Chúng cũng có thể được sử dụng như một biến toàn cục

  • Biến cục bộ tĩnh là một biến cục bộ giữ lại và lưu trữ giá trị của nó giữa các lệnh gọi hàm hoặc khối và chỉ hiển thị đối với hàm hoặc khối mà nó được định nghĩa.
  • Biến toàn cục tĩnh là các biến toàn cục chỉ hiển thị đối với tệp mà nó được khai báo.
Example: static int count = 10;

Hãy nhớ rằng biến static có giá trị ban đầu mặc định là 0 và chỉ được khởi tạo một lần trong thời gian tồn tại của nó.

#include  /* function declaration */void next(void);static int counter = 7; /* global variable */main() {while(counter<10) {next();counter++; }return 0;}void next( void ) { /* function definition */static int iteration = 13; /* local static variable */iteration ++;printf("iteration=%d and counter= %d\n", iteration, counter);}

Kết quả:

iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9

Các biến toàn cục có thể truy cập được trong toàn bộ tệp trong khi các biến tĩnh chỉ có thể truy cập được đối với phần cụ thể của mã.

Tuổi thọ của một biến tĩnh nằm trong toàn bộ mã chương trình. Một biến được khai báo hoặc khởi tạo bằng từ khóa static luôn chứa giá trị mặc định là 0.

Đăng ký Lớp lưu trữ trong C

Bạn có thể sử dụng lớp lưu trữ thanh ghi khi bạn muốn lưu trữ các biến cục bộ trong các hàm hoặc khối trong thanh ghi CPU thay vì RAM để truy cập nhanh vào các biến này. Ví dụ, "bộ đếm" là một ứng cử viên tốt để được lưu trữ trong sổ đăng ký.

Example: register int age;

Thanh ghi từ khóa được sử dụng để khai báo một lớp lưu trữ thanh ghi. Các biến được khai báo bằng cách sử dụng lớp lưu trữ thanh ghi có tuổi thọ trong suốt chương trình.

Nó tương tự như lớp lưu trữ tự động. Biến được giới hạn trong khối cụ thể. Sự khác biệt duy nhất là các biến được khai báo bằng cách sử dụng lớp lưu trữ thanh ghi được lưu trữ bên trong các thanh ghi CPU thay vì một bộ nhớ. Đăng ký có quyền truy cập nhanh hơn so với bộ nhớ chính.

Các biến được khai báo bằng cách sử dụng lớp lưu trữ thanh ghi không có giá trị mặc định. Các biến này thường được khai báo ở đầu chương trình.

#include  /* function declaration */main() {{register int weight;int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}}

ĐẦU RA:

error: address of register variable 'weight' requested

Bảng tiếp theo tóm tắt các tính năng chính của từng lớp lưu trữ thường được sử dụng trong lập trình C.

Lớp lưu trữ Tờ khai Lưu trữ Giá trị ban đầu mặc định Phạm vi Cả đời
Tự động Bên trong một hàm / khối Ký ức Không thể đoán trước Trong hàm / khối Trong hàm / khối
Đăng ký Bên trong một hàm / khối Thanh ghi CPU Rác thải Trong hàm / khối Trong hàm / khối
bên ngoài Ngoài tất cả các chức năng Ký ức Số không Toàn bộ tệp và các tệp khác nơi biến được khai báo là extern thời gian chạy chương trình
Tĩnh (cục bộ) Bên trong một hàm / khối Ký ức Số không Trong hàm / khối thời gian chạy chương trình
Tĩnh (toàn cầu) Ngoài tất cả các chức năng Ký ức Số không Toàn cầu thời gian chạy chương trình

Tóm lược

Trong hướng dẫn này, chúng ta đã thảo luận về các lớp lưu trữ trong C, tóm lại:

  • Một lớp lưu trữ trong C được sử dụng để biểu diễn thông tin bổ sung về một biến.
  • Lớp lưu trữ đại diện cho phạm vi và tuổi thọ của một biến.
  • Nó cũng cho biết ai có thể truy cập một biến và từ đâu?
  • Auto, extern, register, static là bốn lớp lưu trữ khác nhau trong một chương trình C.
  • Bộ định nghĩa lớp lưu trữ trong ngôn ngữ C được sử dụng để xác định các biến, hàm và tham số.
  • auto được sử dụng cho một biến cục bộ được xác định trong một khối hoặc hàm
  • thanh ghi được sử dụng để lưu trữ biến trong thanh ghi CPU thay vì vị trí bộ nhớ để truy cập nhanh.
  • Static được sử dụng cho cả biến toàn cục và biến cục bộ. Mỗi cái có trường hợp sử dụng của nó trong một chương trình C.
  • Extern được sử dụng để chia sẻ dữ liệu giữa các tệp dự án C.