Ép kiểu (typecasting) chuyển đổi một kiểu dữ liệu sang kiểu khác. Có 2 loại:
1. Ép kiểu ngầm (Implicit Type Casting)
Trình biên dịch tự thực hiện khi biểu thức chứa nhiều kiểu dữ liệu, để tránh mất dữ liệu. Quy tắc: kiểu "nhỏ" → kiểu "lớn" (integer promotion, usual arithmetic conversions).
Ví dụ
#include <stdio.h>
int main() {
int a = 10;
char b = 'S'; // ASCII 83
float c = 2.88;
a = a + b; // char -> int
printf("char -> int: %d\n", a); // 93
c = c + a; // int -> float
printf("int -> float: %f\n", c); // 95.88
return 0;
}
2. Ép kiểu tường minh (Explicit Type Casting)
Người lập trình chủ động chuyển đổi bằng toán tử ép kiểu.
Cú pháp
(kieu_moi) bieu_thuc
Ví dụ
#include <stdio.h>
int main() {
float c = 5.55;
int s = (int)c + 1; // Ép float -> int (cắt phần thập phân)
printf("Ep kieu tuc minh: %d\n", s); // 6
return 0;
}
Lưu ý quan trọng
- Ép từ kiểu lớn sang nhỏ có thể mất dữ liệu (truncation, overflow).
- Ép con trỏ kiểu này sang kiểu khác cần cẩn trọng (vi phạm strict aliasing rule).
- Ưu tiên ép kiểu kiểu C++ (
static_cast,reinterpret_cast) nếu viết C++.