Từ khóa register gợi ý trình biên dịch lưu biến trong thanh ghi CPU thay vì RAM. Biến truy cập nhanh hơn. Không thể lấy địa chỉ của biến register (không dùng &).
Đặc điểm
- Phạm vi: Cục bộ trong hàm.
- Giá trị mặc định: Rác (garbage).
- Vòng đời: Kết thúc khối lệnh chứa nó.
Ví dụ
#include <stdio.h>
int main() {
register char x = 'S';
register int a = 10;
auto int b = 8;
printf("Gia tri register char: %c\n", x);
printf("Tong auto + register: %d\n", (a + b));
return 0;
}
Gia tri register char: S Tong auto + register: 18
Register với con trỏ
Có thể dùng register cho con trỏ. Con trỏ có thể giữ địa chỉ ô nhớ, không gây lỗi.
#include <stdio.h>
int main() {
int i = 10;
register int *a = &i;
printf("Gia tri con tro: %d\n", *a);
return 0;
}
Gia tri con tro: 10
Lưu ý hiện đại: Trình biên dịch hiện đại (GCC, Clang, MSVC) tự tối ưu hóa việc đưa biến vào thanh ghi tốt hơn gợi ý thủ công. Từ khóa register hiện chủ yếu mang ý nghĩa ngữ nghĩa: cam kết không lấy địa chỉ biến.