标签:
1.从最简单的说起:
首先一个int型变量和一个char型变量之间的转换,分为隐式转换和显示转换。
例如:int i; char c; i = c;
即为隐式转换,编译器隐式的将char型变量转换成了int型。
例如:int i; char c; i = (int)c;
极为显示转换,显示的指明了将要转换成的类型。
不论显示转换还是隐式转换都存在风险,将大内存模型(如int)转换到小内存模型(如char)存在截断的风险。
然而由小内存模型转换到大内存模型则是在高位进行补位(正数补0,负数补1)。
2.指针的类型转换
例如:a = 1;int *p = &a;float *pf = (float*)p;
p和pf的值都是&a,但是*p是将&a地址中的值按照int型变量进行解释,而*p1则是将&a地址中的值按照float型变量进行解释。
例如:int a;float *p;p = &a;
编译器会报错,指针类型不匹配。说明指针之间可以进行一定类型的转换,但是指针有特定的类型,不能将一种类型的指针赋值给另一种类型的指针,除非加上强制转换。
例如:int a;float *p;p = (float*)&a;
这样是可以的。
标签:
原文地址:http://www.cnblogs.com/geowu/p/4705948.html