Vấn đề
Các lớp lưu trữ khác nhau trong C là gì? Giải thích kèm chương trình.
Giải pháp
Lớp lưu trữ xác định phạm vi và vòng đời của biến/hàm trong chương trình C.
Các lớp lưu trữ
- auto
- extern
- static
- register
Biến tự động / Cục bộ (auto)
- Từ khóa – auto
- Còn gọi là biến cục bộ
- Phạm vi – Chỉ trong khối lệnh khai báo.
- Giá trị mặc định – Giá trị rác (garbage).
Ví dụ
#include<stdio.h> void main (){ auto int i=1;{ auto int i=2;{ auto int i=3; printf ("%d",i); } printf("%d", i); } printf("%d", i); }
Kết quả
3 2 1
Biến toàn cục / Bên ngoài (extern)
- Từ khóa – extern
- Khai báo ngoài khối lệnh, gọi là biến toàn cục.
- Phạm vi – Toàn chương trình.
- Giá trị mặc định – 0.
Ví dụ
#include<stdio.h> extern int i =1; /* 'i' này dùng được toàn chương trình */ main (){ int i = 3; /* 'i' này chỉ dùng trong main */ printf ("%d", i); fun (); } fun (){ printf ("%d", i); }
Kết quả
31
Biến tĩnh (static)
- Từ khóa – static
- Phạm vi – Giữ giá trị suốt chương trình và giữa các lần gọi hàm.
- Khởi tạo chỉ một lần.
- Giá trị mặc định – 0.
Ví dụ
#include<stdio.h> main (){ inc (); inc (); inc (); } inc (){ static int i =1; printf ("%d", i); i++; }
Kết quả
1 2 3
Biến thanh ghi (register)
- Từ khóa – register
- Giá trị lưu trong thanh ghi CPU thay vì bộ nhớ thường.
- Thanh ghi là đơn vị lưu trữ tạm trong CPU.
Ví dụ
#include<stdio.h> main (){ register int i; for (i=1; i< =5; i++) printf ("%d",i); }
Kết quả
1 2 3 4 5