构造类型
由若干各个相同或不同类型的数据构成的集合,这种集合类型被称为构造类型
例:int a[10];
数组、结构体、共用体、枚举
类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型转换的问题。
转换的方式有两种:
自动转换:遵循一定的规则由编译系统自动完成。
强制类型转换:把表达式的运算结果强制转换成所欲的数据类型。
自动转换的原则:
1.占用内存字节数少的类型,像占用内存字节数多的类型转换,以保证精度不降低。
2.转换方向:
自动类型转换
1.当表达式中出现了char , short int , int 类型中的一种或者多种,没有其它类型了
参加运算的成员全部变成 int 类型的参加运算,结果也是int类型
#include<stdio.h>
int main(int argc,char *argv[])
{
printf("%d\n", 5 / 2);
return 0;
}
2.当表达式中出现了带小数的实数,参加运算的成员全部变成double类型的参加运算,结果也是double型。
int main(int argc, char* argv[])
{
printf("%f\n", 5.0 / 2);
return 0;
}
3.当表达式中有有符号数,也有无符号数,参加运算的成员变成无符号数参加运算结果也是无符号数。(表达式中无实数)
#include<stdio.h>
int main(int argc, char* argv[])
{
int a = -8;
unsigned int b = 7;
if (a + b > 0)
{
printf("a+b>0\n");
}
else if (a + b < 0)
{
printf("a-b<0\n");
}
else
{
printf("a+b=0\n");
}
printf("%x\n", (a + b));
printf("%d\n", (a + b));
return 0;
}
4.在赋值语句中等号右边的类型自动转换为等号左边的类型。
#include<stdio.h>
int main()
{
int a;
float f = 5.8f;
a = f;
printf("a=%d\n", a);
printf("f=%f\n", f);
return 0;
}
5.注意自动类型转换都是在运算的过程中进行临时性的转换,并不会影响自动类型转换的变量的值和其类型
强制类型转换
强制转换:通过类型转换运算实现
(类型说明符)(表达式)
功能:把表达式的运算结果强制转换成类型说明符所表示的类型
例如:(float) a ; //把a的值转换为浮点型
(int) (x+y) ; //把x+y的结果值转换为整型
注意:类型说明符必须加括号
#include<stdio.h>
int main()
{
float x = 0;
int i = 0;
x = 3.6f;
i = (int)x;
printf("i=%d\n",i);
printf("x=%f\n",x);
return 0;
}
说明:
无论是强制转换或是自动转换,都是为了本次运算的需要,而对变量的数据长度进行的临时性转换,而不改变数据定义的类型以及它的值。