- Back to Home »
- C »
- C - Type Casting
Monday, April 27, 2015
1. Type Casting
Ép kiểu là hành động chuyển đổi kiểu dữ liệu của biến sang một kiểu dữ liệu khác cho phù hợp với một phép toán hay trường hợp nào đó.
Cast operator:
(type_name) expression
Ex:
type-casting.c
#include <stdio.h>
int main()
{
int sum;
int count;
float avg;
sum = 125;
count = 50;
avg = sum / count;
printf("<LINE%d> sum: %d, count: %d, avg: %f \n", __LINE__, sum, count, avg);
avg = (float)sum / count;
printf("<LINE%d> sum: %d, count: %d, avg: %f \n", __LINE__, sum, count, avg);
return 0;
}
Compile & Execute:
$ gcc type-casting.c
$ ./a.out
<LINE17> sum: 125, count: 50, avg: 2.000000
<LINE21> sum: 125, count: 50, avg: 2.500000
Rõ ràng trong những trường hợp như thế này thì cần phải có type casting thì mời nhận được kết quả đúng.
2. Phân cấp ép kiểu
3. Type Casting Pointer
Ép kiểu với pointer cũng tương tự như với các kiểu thông thường.
type-casting-pointer.c
#include <stdio.h>
enum {
TYPE_CHAR,
TYPE_INT,
TYPE_FLOAT
};
void print_info(int type, void *data){
switch (type) {
case TYPE_CHAR:
printf("data char: %s \n", (char*)data);
break;
case TYPE_INT:
printf("data int: %d \n", *((int*)data));
break;
case TYPE_FLOAT:
printf("data float: %f \n", *((float*)data));
break;
default:
break;
}
}
int main()
{
char name[32] = "chicken";
int age = 5;
float weight = 2.5f;
print_info(TYPE_CHAR, (void*)name);
print_info(TYPE_INT, (void*)&age);
print_info(TYPE_FLOAT, (void*)&weight);
return 0;
}
Compile & Execute:
$ gcc type-casting-pointer.c
$ ./a.out
data char: chicken
data int: 5
data float: 2.500000